158 lines
4.9 KiB
Org Mode
158 lines
4.9 KiB
Org Mode
This document describe the plan for the next releases of Jbuilder.
|
|
|
|
* V1
|
|
|
|
** +CLI+
|
|
|
|
Add a proper [[http://erratique.ch/software/cmdliner][cmdliner]] based CLI.
|
|
Jbuilder will include a copy of cmdliner to avoid the extra dependency.
|
|
|
|
- *20/02/2017*: This is now implemented thanks to Rudi Grinberg ([[https://github.com/janestreet/jbuilder/pull/2][#5]])
|
|
|
|
*** Improve the man pages
|
|
|
|
Add a bit more documentation in the Man pages generated by cmdliner.
|
|
|
|
** Documentation
|
|
|
|
Document the usage and design of Jbuilder.
|
|
|
|
- *21/02/2017*: There is now a manual, it still needs a bit more about
|
|
CLI usage
|
|
|
|
** +Stable jbuild types+
|
|
|
|
Add a stable version of the jbuild format so that one can write
|
|
=(jbuild_version 1)= inside jbuild files and be sure that they will
|
|
work with future versions of jbuild.
|
|
|
|
- *24/02/2017*: implemented
|
|
|
|
** +Finding the project/workspace root+
|
|
|
|
Currently =jbuilder= assumes that the root of the project/workspace is
|
|
where it is started. Eventually this will be changed as follows:
|
|
|
|
- if there is a =jbuild-workspace= in a parent directory, it marks the root;
|
|
- if not found, look for a =opam= or =package.opam= file in parent directories;
|
|
- if not found, look for a =.git=, =.hg=, ... file in parent directories;
|
|
- if not found, use the current directory as root.
|
|
|
|
- *28/02/2017*: Implemented
|
|
|
|
** +Generate .merlin files [[https://github.com/janestreet/jbuilder/issues/1][#1]]+
|
|
|
|
- *25/02/2017*: Implemented by Richard Davison ([[https://github.com/janestreet/jbuilder/pull/2][#2]])
|
|
|
|
** +Running tests with jbuilder [[https://github.com/janestreet/jbuilder/issues/3][#3]]+
|
|
|
|
Allow to define tests with =(alias ...)= stanzas and add =jbuilder
|
|
runtest= to run them.
|
|
|
|
- *21/02/2017*: Rudi Grinberg added support for aliases ([[https://github.com/janestreet/jbuilder/pull/2][#7]])
|
|
- *23/02/2017*: Added a =runtest= subcommand
|
|
|
|
** +Implement package version support+
|
|
|
|
Implement finding the version of a package, as described in the
|
|
documentation.
|
|
|
|
- *24/02/2017*: Implemented
|
|
|
|
* After V1
|
|
|
|
** Cross-compilation
|
|
|
|
Everything needed for cross-compilation is implemented. One
|
|
essentially need to add a function =host_exe : Path.t -> Path.t=
|
|
inside build contexts to make it all work, as well as a way to define
|
|
the build contexts. These could be defined inside =jbuild-workspace=
|
|
as follows:
|
|
|
|
#+begin_src scheme
|
|
(context
|
|
((name foo)
|
|
(switch 4.04.0)))
|
|
|
|
(context
|
|
((name foo+mingw)
|
|
(switch 4.04.0+mingw)
|
|
(host foo)))
|
|
#+end_src
|
|
|
|
** Jenga bridge
|
|
|
|
Implement a jenga plugin that can read the same jbuild files as
|
|
Jbuilder. To do that we'll use Jbuilder as a library.
|
|
|
|
** odoc support
|
|
|
|
Support generating documentation with [[https://github.com/ocaml-doc/odoc][odoc]].
|
|
|
|
** Inline tests
|
|
|
|
Setup automatic support of [[https://github.com/janestreet/ppx_inline_test][inline tests]] and [[https://github.com/janestreet/ppx_bench][inline benchmarks]].
|
|
|
|
** Extend the action language
|
|
|
|
Currently in =(action ...)= fields, when not using =bash= the language
|
|
is very limited. It would be nice to add more commands that would
|
|
guarantee portability and avoid the quoting nightmare of =bash=.
|
|
|
|
FS commands should be straight foward to implement:
|
|
- =(copy <src> <dst>)=
|
|
- =(mkdir <path>)=
|
|
- ...
|
|
|
|
Redirections to/from files are simple as well.
|
|
|
|
We could also implements pipes (=(pipe <command1> <command2> ...)=) by
|
|
using temporary files. Using proper pipes would complicate windows
|
|
support and would make proper handling of =-j= hard. Using temporary
|
|
files will be just fine.
|
|
** User configuration file
|
|
|
|
Load a configuration file from =~/.config/jbuilder/config.sexp= where
|
|
the user can define preferences such as colors.
|
|
** Code improvements
|
|
*** Delete the global variables in Clflags
|
|
*** Improve the Action.Unexpanded.t
|
|
|
|
=String_with_vars.t= should take a type parameter and we would have:
|
|
|
|
#+begin_src
|
|
type variable =
|
|
| Plain of string
|
|
| Bin of string
|
|
| Lib of string * string
|
|
| ...
|
|
type user_action = variable Action.Unexpanded.t
|
|
#+end_src
|
|
|
|
This would allow to report parsing errors immediately and at the right
|
|
location.
|
|
|
|
*** Consolidate the S-expression parser
|
|
|
|
It doesn't follow the specification given in the readme of
|
|
[[https://github.com/janestreet/parsexp][parsexp]]. This need to be fixed.
|
|
** Make =Jbuild_plugin= a library
|
|
|
|
Currently Jbuilder generates a wrapper script containing the source
|
|
code of the =Jbuild_plugin= followed by the user script. While this
|
|
method is trivial to implement, it is not great if users want to write
|
|
libraries for jbuild plugins.
|
|
|
|
What we should do instead is create a proper =jbuild_plugin= library
|
|
that is installed. This library should read a file containing the
|
|
build context details generated by Jbuilder and passed as
|
|
=Sys.argv.(1)=.
|
|
|
|
We need to refactor things a bit to make this happen, in particular
|
|
the library will propably need to know how to parse s-expression. We
|
|
can create a =jbuild_common= library to put the parts that are common
|
|
between =jbuild_plugin= and =jbuilder=.
|
|
|
|
Note that =doc/jbuild= is an OCaml script. To simplify the bootstrap,
|
|
we should just convert it back to a static =jbuild= file.
|