dune/ROADMAP.org

158 lines
4.9 KiB
Org Mode
Raw Normal View History

2017-02-22 15:25:34 +00:00
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.
2017-02-22 15:40:22 +00:00
- *20/02/2017*: This is now implemented thanks to Rudi Grinberg ([[https://github.com/janestreet/jbuilder/pull/2][#5]])
2017-02-22 15:25:34 +00:00
*** 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
2017-02-24 10:05:52 +00:00
** +Stable jbuild types+
2017-02-22 15:25:34 +00:00
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.
2017-02-24 10:05:52 +00:00
- *24/02/2017*: implemented
2017-02-28 07:32:15 +00:00
** +Finding the project/workspace root+
2017-02-22 15:25:34 +00:00
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.
2017-02-28 07:32:15 +00:00
- *28/02/2017*: Implemented
2017-02-25 13:55:43 +00:00
** +Generate .merlin files [[https://github.com/janestreet/jbuilder/issues/1][#1]]+
2017-02-22 15:25:34 +00:00
2017-02-25 13:55:43 +00:00
- *25/02/2017*: Implemented by Richard Davison ([[https://github.com/janestreet/jbuilder/pull/2][#2]])
2017-02-22 15:25:34 +00:00
2017-02-23 13:19:38 +00:00
** +Running tests with jbuilder [[https://github.com/janestreet/jbuilder/issues/3][#3]]+
2017-02-22 15:25:34 +00:00
Allow to define tests with =(alias ...)= stanzas and add =jbuilder
runtest= to run them.
2017-02-23 13:19:38 +00:00
- *21/02/2017*: Rudi Grinberg added support for aliases ([[https://github.com/janestreet/jbuilder/pull/2][#7]])
- *23/02/2017*: Added a =runtest= subcommand
2017-02-22 15:25:34 +00:00
2017-02-24 18:21:22 +00:00
** +Implement package version support+
2017-02-24 16:09:10 +00:00
Implement finding the version of a package, as described in the
documentation.
2017-02-24 18:21:22 +00:00
- *24/02/2017*: Implemented
2017-02-22 15:25:34 +00:00
* 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]].
2017-02-23 09:20:50 +00:00
** Inline tests
Setup automatic support of [[https://github.com/janestreet/ppx_inline_test][inline tests]] and [[https://github.com/janestreet/ppx_bench][inline benchmarks]].
2017-02-24 16:05:00 +00:00
** 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:
2017-02-24 16:05:00 +00:00
- =(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.
2017-02-24 18:22:25 +00:00
** User configuration file
Load a configuration file from =~/.config/jbuilder/config.sexp= where
the user can define preferences such as colors.
2017-02-28 17:20:41 +00:00
** Code improvements
*** Delete the global variables in Clflags
2017-03-01 12:17:04 +00:00
*** 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.