Commit Graph

558 Commits

Author SHA1 Message Date
Jeremie Dimino 3e525d8eec Vendored usexp and switch to it 2017-12-21 13:13:47 +00:00
Rudi Grinberg bbb6108924 Fix Path.descendent
It was broken for local paths with equal length
2017-12-20 09:06:12 +00:00
Rudi Grinberg 2f8d95cdeb
Merge pull request #373 from rgrinberg/reason-preprocess-fix
Reason preprocess fix
2017-12-18 23:25:10 +08:00
Jeremie Dimino 18d8cb847d Fix the test added in the previous commit 2017-12-18 13:30:49 +00:00
Rudi Grinberg 4570020ce7 Fix reason preprocessing
and previously failed test
2017-12-18 20:52:52 +08:00
Anton Bachin eb05f4f643 Place module list on its own line
The markup emitted by Jbuilder treated module lists as inline elements
that can appear inside a line. However, neither ocamldoc nor odoc render
module lists as inline elements. They are instead block elements, that
are laid out vertically, like lists or paragraphs. Correspondingly, odoc
now rejects inline module list markup.

A side effect of the (rejected) misconception is that there was a stray
period appearing on its own line in every module list generated by
Jbuilder. This is now fixed.
2017-12-16 14:27:36 -06:00
Anton Bachin 0aa6faa145 odoc: don't generate raw HTML and level 1 headings
This page generation code really should be moved to odoc, however.
2017-12-16 14:07:51 -06:00
Xavier Clerc 2be876cb49 Availability of "num" depends on the OCaml version (#358) 2017-12-11 13:05:20 +00:00
Rudi Grinberg a0c2ed942b
Merge pull request #343 from rgrinberg/fix-ppx-recompile
Fix incremental compilation with ppx's
2017-12-02 21:27:04 +08:00
François Bobot 13fed1f1ce
Merge pull request #339 from rgrinberg/fix-jbuilder-exec-utop
Fix jbuilder exec from sub dirs & utop
2017-12-01 13:41:21 +01:00
Rudi Grinberg 785beeafac
Add option to force running tests (#320)
Option to force running tests

The mechanism allows for forcing any alias, but only forcing tests is exposed to the user. Aliases are forced by deleting all the alias files that belong to a particular alias. The option for forcing tests is called --force.
2017-11-28 19:03:22 +08:00
Rudi Grinberg 6f498db212 Fix incremental compilation with ppx's
Same fix as 6a3c51c358 but also for ppx's
2017-11-27 21:14:24 +08:00
Rudi Grinberg 7a30bbf8ea Use absolute paths for lib paths in utop
This makes $ jbuilder utop usable from sub directories
2017-11-25 23:25:26 +08:00
Christophe Troestler d8a39b66de Move escape_double_quote to Import.String & refactor 2017-11-24 16:08:34 +01:00
Christophe Troestler 1e280e56d1 Escape double quotes for META field values
Fixes https://github.com/janestreet/jbuilder/issues/331
2017-11-23 19:25:45 +01:00
Rudi Grinberg 5103035bef
Pass context when executing actions (#329) 2017-11-14 23:36:12 +08:00
Rudi Grinberg 0c2228e7bc
Refactor jbuilder exec path handling (#327)
There's no need for runcwd as initial_cwd is already defined somewhere. Add
Filename.analyze_program_name function to make the clearer.
2017-11-14 15:19:58 +08:00
Spiros Eliopoulos 7383b0b006 docs: add some docstrings in various places (#252)
* docs: update some documentation in the Build module

* docs: document what [Scope.resolve] does

* docs: add a toplevel docstring to the Alias module

* docs: document (or not) the bootstrap function

* docs: lightly document the bootstrap module

* fix ignore comment
2017-11-09 20:41:52 +08:00
Rudi Grinberg ea7fa8541b
Fix off by 1 error in String.drop_prefix (#319) 2017-11-09 12:45:53 +08:00
Rudi Grinberg 5fa8f6eb26
Add "S ." to .merlin (#284) 2017-11-07 22:16:36 +08:00
Rudi Grinberg a57c488dd7
Fix jbuilder rule in case of missing binaries (#292)
Make jbuilder rules work even when binaries are missing

* Proper error messages for missing binaries

* Unify Prog_spec and Maybe_prog

both can simply be unified into a path type that has a hint for the error

* Remove scarcely useful in_the_tree parameter

It's always true except for the C compiler. In which case, there's no harm in
making it true.

* Make Artifacts return Action.Prog

The old return value was simply converted to this anyway. It's simpler to just
return the proper error straight up.

* Remove remains of in_the_tree
2017-11-07 21:42:55 +08:00
Rudi Grinberg 9c8ecc9fbc
Improve jbuilder exec (#286)
* Improve jbuilder exec

When the path passed contianed to exec contains a '/', it will be interpreted
relative to the path of a build context (default context when absent)

* Update man page of jbuilder exec

* Add String.drop_prefix

* Make jbuilder exec understand relative/absolute paths

jbuilder exec will now interpret absolute paths as relative to the specified
build context. While relative paths will now be intepreted relative to the cwd
appended to the specified build context.

* Fix jbuilder exec /absolute/path

When the path provided to jbuilder exec is absolute, we should ignore the build
context for looking up the binary.

* Fix exec when ran outside of root

Previously, a call like $ jbuilder exec ./xxx --root=p would raise
an exception. Now ./xxx will be intepreterd relative to --root.

* Fix relative paths when jbuilder is ran outside of --root

* Simplify documentation for jbuilder exec
2017-11-07 21:41:09 +08:00
Rudi Grinberg 8718fdac88
Merge pull request #306 from MiloDavis/doc-non-public
Build documentation for non-public libraries
2017-11-07 20:54:00 +08:00
xclerc e28cc8d070 Fix regression introduced by PR303. 2017-11-06 09:30:50 +01:00
Milo Davis f645f0c030 Build documentation for non-public libraries 2017-11-03 16:12:06 +01:00
Xavier Clerc 70946320fd Use `=` rather than `String.equal` for better compatibility. 2017-11-03 13:49:47 +00:00
Xavier Clerc 9b04e7e931 Look for architecture size in the output of `ocamlc -config` first. 2017-11-03 13:44:41 +00:00
Xavier Clerc 72a3cb008f Look for `ARCH_SIXTYFOUR` in both `config.h` and `m.h`. 2017-11-02 12:31:14 +00:00
François Bobot 2bd8fe49b4 Revert "RFC update odoc rules" 2017-10-24 13:58:34 +02:00
François Bobot e88b94b4f5 Merge pull request #290 from janestreet/new-odoc
Compelte and update odoc comments
2017-10-24 13:58:10 +02:00
Thomas Refis 765302461d odoc: handle .mld files 2017-10-24 11:51:28 +01:00
Rudi Grinberg aaafdf02fe Merge pull request #287 from rgrinberg/duplicate-public-names
Report duplicate names with a good error message
2017-10-22 19:17:11 +08:00
Zach Ploskey 3c9de3a9d1 Fix depending spelling and add comma in error message 2017-10-19 23:28:14 -07:00
Rudi Grinberg bfc83d71d7 Report duplicate names with a good error message
Indicate which name is duplicated in which jbuild files
2017-10-20 11:08:42 +08:00
Rudi Grinberg bfb241cce0 add pretty printers to Alias
Useful for debugging
2017-10-19 08:31:52 +08:00
Rudi Grinberg 02a4c59654 Remove mention of recursive aliases from error message
all aliases are non recursive
2017-10-19 08:17:34 +08:00
Jeremie Dimino ed55ca9efe Fix interpretation of (alias ...) and (alias_rec ...) 2017-10-14 10:37:36 +08:00
Jeremie Dimino b69a6432dd Add (alias_rec ...) in dependency specification
(alias_rec XXX) means the same as @XXX on the command line.
2017-10-14 10:37:36 +08:00
Jeremie Dimino b281554009 Get rid of recursive aliases 2017-10-14 10:37:36 +08:00
Jeremie Dimino 30a914278e All aliases on the command line are recursive
Calling 'jbuilder build @path/x' always request the alias `x` in
`path` and all its descendant.

To implement that, change the build system interface to take an
arbitrary request as argument.
2017-10-14 10:37:36 +08:00
Jeremie Dimino 3e13492b7a Get rid of Alias.tree 2017-10-14 10:37:36 +08:00
Jeremie Dimino 7a5698c7b1 Interpret jbuild-ignore files sooner
Interpret then while loading the file tree.
2017-10-14 10:37:36 +08:00
Rudi Grinberg c28ee8fa10 Merge pull request #280 from aantron/odoc-index-libraries-not-packages
Docs: list all libraries in top-level index
2017-10-11 21:31:15 -04:00
Rudi Grinberg 00b62c4d5a Merge pull request #282 from aantron/odoc-highest-up-links
Fix "Up" links to top-level index
2017-10-11 21:22:17 -04:00
Rudi Grinberg 9326c412d9 Merge pull request #281 from aantron/nits
Fix typo
2017-10-11 15:41:34 -04:00
Anton Bachin 9e3b64af86 Fix "Up" links to top-level index
When the docs are viewed locally, the URL ".." causes the browser to
display a listing of the parent directory, instead of "../index.html".
The "../index.html" interpretation is only provided by web servers.
2017-10-11 10:24:02 -05:00
Anton Bachin 48d9be2d00 Docs: list all libraries in top-level index
This commit changes the top-level index of the docs generated by
Jbuilder so that the index lists all installed libraries (Findlib
library packages generated by Jbuilder), rather than only opam packages.
For example, current Markup.ml installs libraries

  markup
  markup.lwt
  markup.lwt.unix

With this change, all these libraries are listed in the index. Before
this change, only markup was listed, because it happened to coincide
with the name of the opam package that contains all three libraries.

Not listing the extra libraries makes them undiscoverable, as they can
only be reached by direct URL.
2017-10-11 09:39:46 -05:00
Anton Bachin 21a5296994 Fix typo 2017-10-11 07:32:41 -05:00
Rudi Grinberg 7c6f3e6dd6 support ${..} in :include 2017-10-10 15:53:39 -04:00
Rudi Grinberg 001daa62d0 Merge pull request #232 from rgrinberg/string-with-vars-bounds
Fix out of bounds access when tokenising String_with_vars
2017-10-10 15:42:05 -04:00
Jeremie Dimino 5de73ca740 Add support for locks in rules
This is to allow users define more complicated tests without having
to resort to -j1.
2017-09-29 12:20:08 +01:00
Jeremie Dimino 30076e7d79 Fix #264 2017-09-29 12:01:47 +01:00
Jeremie Dimino 50cbbe2ac5 Add ${path-no-dep:...}
To be able to resolve path names that are not dependencies.
2017-09-29 11:55:23 +01:00
Jeremie Dimino 3fb1915033 Fix #262
Use the absolute path when evaluating a jbuild file in OCaml syntax.
2017-09-22 11:20:13 +01:00
Jeremie Dimino e37e630da5 Allow to use utop when the library has C stubs 2017-09-22 02:22:46 +01:00
Jeremie Dimino b965c66af5 Avoid generating useless .utop/.merlin files 2017-09-22 02:16:26 +01:00
Jeremie Dimino dd3eaf2695 Fix quoting of generated strings in utop.ml
It was broken in Windows
2017-09-22 02:04:57 +01:00
Jeremie Dimino 157e4d6548 Print "Entering directory '...'" when necessary
When the root of the workspace is not the current directory, print:

  Entering directory '<absolute path to root>'

This way editors such as emacs or vim knows how to interpret filenames
reported by the compiler.

Fixes #138
2017-09-22 01:59:45 +01:00
Jeremie Dimino b2e7720b41 Interpret empty jbuild-workspace files as default configuration
If a workspace file is empty, interpret it the same as if it contained:

  (context default)

As discussed in #234
2017-09-22 01:59:45 +01:00
Jeremie Dimino af5208416f Simplify overrides in the bootstrap path
- vendored libraries are replaced by files in `vendor/boot`
- files named `XXX.boot.EXT` replace their `XXX.EXT` equivalent

For instance, to build boot.exe, we use `src/glob_lexer.boot.ml`
rather than `src/glob_lexer.ml` (which would be generated from
`src/glob_lexer.mll`).
2017-09-22 01:52:04 +01:00
François Bobot cecf0a2aaf Add (copy_files <glob>) stanza (#35)
Add (copy_files <glob>) and (copy_files# <glob>) stanzas. These
stanzas setup rules for copying files from a sub-directory to the
current directory.

This provides a reasonable way to support multi-directory
library/executables in jbuilder.
2017-09-10 02:31:07 +01:00
Jeremie Dimino d55c807d51 Allow to localize the error reported by Path.relative/of_string
Since these are often used to parse user input.
2017-09-10 01:26:06 +01:00
Rudi Grinberg 1da474bc4a Merge branch 'pr/238' 2017-09-05 20:41:19 -04:00
David Allsopp 6a3c51c358 Ensure executables also depend on archive files
Signed-off-by: David Allsopp <david.allsopp@metastack.com>
2017-09-05 19:53:08 -04:00
Rudi Grinberg a7067f5aa8 Merge pull request #224 from samoht/doc-index
Add a toplevel html index to the docs
2017-08-27 15:55:50 -04:00
David Allsopp da240468d0 Ensure .cmxs depends on archive file
Signed-off-by: David Allsopp <david.allsopp@metastack.com>
2017-08-26 15:06:32 +01:00
David Allsopp 1053d4e65a Ensure .cmxa files depend on object files
Signed-off-by: David Allsopp <david.allsopp@metastack.com>
2017-08-26 15:05:54 +01:00
David Allsopp 77c79ebff8 Ensure executables depend on object files
Previously, in Mode.Native, executables depended on .cmx files only.
This was fine when changes were detected by timestamp, but it is
possible to semantically alter an .ml such that only the .o/.obj file
alters. In this situation, Jbuilder would rebuild the .cmx file, but not
relink the executable.

Fixes #237.

Signed-off-by: David Allsopp <david.allsopp@metastack.com>
2017-08-26 14:01:20 +01:00
David Allsopp 9180f88dc3 Add Path.change_extension
Signed-off-by: David Allsopp <david.allsopp@metastack.com>
2017-08-26 14:01:12 +01:00
David Allsopp 2d100b1150 Improve error handling for (:include )
The form (:include $(SCOPE_ROOT)\foo) requires quoting, but the error
message was cryptic ("Error: undefined symbol include").

Signed-off-by: David Allsopp <david.allsopp@metastack.com>
2017-08-25 11:12:15 +01:00
Rudi Grinberg 95844035aa Fix out of bounds access when tokenising String_with_vars
When the current character is '$' we peek at the next character. But we first
need to make sure that there is a next character.
2017-08-25 01:08:05 -04:00
Thomas Gazagnaire 71952a0983 Add a toplevel html index to the docs 2017-08-22 11:12:33 +02:00
Jeremie Dimino 297e82061e Update_file --> Write_file
The difference is not meaningful anymore. Also expose Write_file as
write-file.
2017-08-17 15:13:11 +01:00
Jeremie Dimino 7a8fa99f5a Remove Create_file action
Makes no sense now that we use digests rather than timestamps
2017-08-17 15:13:11 +01:00
Jeremie Dimino 508c90201f Replace timestamp checks by file contents checks 2017-08-17 15:13:11 +01:00
Jérémie Dimino ca81d1704e Get rid of the deprecated-ppx-method sub-package (#222)
Instead, inline the fields it contains into the parent package
2017-08-17 12:41:49 +01:00
Jérémie Dimino 6bed864057 Better behavior when the targets of a rule already exist in the source tree (#218)
Warn when a file is both present in the source tree and generated by
a rule. Before, jbuilder would silently ignore the rule. One now has
to add a field `(fallback)` to custom rules to keep the current
behavior.
2017-08-15 11:16:11 +01:00
Rudi Grinberg 188134775f Make warning 31 non fatal for utop (#211)
This allows jbuilder to create toplevels with conflicting module names. Such as
ExtLib's and Camomiles' UChar for example.
2017-08-09 10:04:01 +01:00
Jeremie Dimino 06b47a73f6 Do not accept per_file anymore
It was renamed per_module and it is planned to reuse per_file for
another purpose.
2017-08-04 09:24:02 +01:00
Rudi Grinberg b668d9189f Add a utop subcommand (#183)
Add a utop subcommand that build and execute a utop where all the libraries defined in the current directory are immediately available for interactive use.
2017-08-04 08:59:35 +01:00
David Allsopp be4b5fa454 Extend (:include ) form to library_flags
library_flags already included variable expansion.
2017-08-03 17:28:32 +01:00
David Allsopp 3a64432d04 Expand variables in flags
Extend Ordered_set_lang.Unexpanded.expand to include a mapping function
for the S-expression for each atom. The previous behaviour can be
achieved with ~f:Sexp.Of_sexp.string, but this allows the S-expression
to be parsed using String_with_vars.t, thus allowing variable expansion.
2017-08-03 17:28:32 +01:00
David Allsopp 83bba5af61 Use an AST for Ordered_set_lang 2017-08-03 17:28:32 +01:00
David Allsopp 13b0eb9f2b Convert link_flags to the ordered set DSL 2017-08-03 17:28:32 +01:00
David Allsopp ec29651cff Extend (:include ) form to js_of_ocaml flags 2017-08-03 17:28:32 +01:00
David Allsopp cebbb219e7 Extend (:include ) form to OCaml flags
flags, ocaml_flags and ocamlopt_flags now support the (:include ) form
of the ordered set language.
2017-08-03 17:28:32 +01:00
David Allsopp 712981d847 Make Ocaml_flags.t abstract 2017-08-03 17:28:32 +01:00
Jérémie Dimino ea377efbbb Use absolute paths for ppx drivers in .merlin files (#201)
Fixes #196 and #199
2017-07-28 16:49:45 +01:00
aalekseyev b5f0b85e56 Allow digits and apostrophes in library/module names (#206)
* Allow digits in library/module names

Also include the malformed module name in the error message so it's more clear what it's complaining about.

* Update jbuild.ml
2017-07-28 08:40:09 +01:00
Jeremie Dimino cfd43d5282 Simplify a bit the rules for installation of library files 2017-07-25 17:07:24 +01:00
François Bobot b6498d11c2 Consider that a failing opam is an absent opam 2017-07-25 16:44:14 +01:00
François Bobot 747cf220c6 Install by specifying libdir for opam-installer
- change default findlib directory (ocamlc -where)
2017-07-25 16:44:14 +01:00
Jérémie Dimino c7e67d49b8 Use the full path of archives when linking (#197)
Instead of passing `-I <path> file.cma` to the compiler, pass `-I
<path> <path>/file.cma`.

Fixes #118 and #177. Using the fill path should also be slightly
faster as the compiler won't have to do the lookup through all include
paths. The only drawback is that it makes linking command line
slightly longer.
2017-07-25 14:08:39 +01:00
Marcello Seri 8bace6bc3b Preserve quotes on certain flags that contain spaces (#200)
This is useful, for example, if one needs to pass specific  flags
by hand (due to the need to use old libraries for example).  Fixes
#198

Signed-off-by: Marcello Seri <marcello.seri@citrix.com>
2017-07-25 11:38:47 +01:00
Jeremie Dimino 6e48e70a74 Fix the quoting of FLG lines in .merlin files 2017-07-24 15:32:18 +01:00
Jeremie Dimino 4b40cad247 Revert public_interfaces for now
The code to support it is starting to become increasingly complicated
and the number of problem found is a bit alarming.

We'll reinclude it later after a bit more testing and hopefully some
simplifications.
2017-07-21 17:32:39 +01:00
Jeremie Dimino 9893c14500 Fix some problems related to public_interfaces
The dependencies on library artifacts are now properly setup to point
to the files in _build/install/...

Moreorver, private interfaces are now only visible inside the library
itself and are only allowed for private libraries. When a project
defines multiple packages, this ensures that the visibility when all
packages are built simultaneously and when they are installed one by
one.

We can relax these restrictions later with a bit more work and a clear
definition of where private modules should be visible.
2017-07-21 16:52:28 +01:00
Jeremie Dimino cec825bf18 memoize one more computation in odoc 2017-07-21 15:43:44 +01:00
Jeremie Dimino 45e04010c5 style 2017-07-19 15:35:05 +01:00
François Bobot a3933a2c18 Add public_interfaces selection for libraries (#106)
Add a field "public_interfaces" to library stanza listing which modules are public.

Private modules won't be accessible outside the scope where the library is defined.
2017-07-19 15:26:48 +01:00