From d6601bf2bb311f8a3076210bf5621119b079b7fc Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Wed, 24 Jan 2018 15:55:50 +0800 Subject: [PATCH 1/2] META generation bug in different scopes --- test/blackbox-tests/jbuild | 10 ++++++++++ test/blackbox-tests/test-cases/scope-bug/alib/alib.ml | 0 .../blackbox-tests/test-cases/scope-bug/alib/alib.opam | 0 test/blackbox-tests/test-cases/scope-bug/alib/jbuild | 6 ++++++ test/blackbox-tests/test-cases/scope-bug/alib/main.ml | 0 test/blackbox-tests/test-cases/scope-bug/blib/blib.ml | 0 .../blackbox-tests/test-cases/scope-bug/blib/blib.opam | 0 test/blackbox-tests/test-cases/scope-bug/blib/jbuild | 6 ++++++ .../test-cases/scope-bug/blib/sub/jbuild | 5 +++++ .../test-cases/scope-bug/blib/sub/sub.ml | 0 test/blackbox-tests/test-cases/scope-bug/run.t | 5 +++++ 11 files changed, 32 insertions(+) create mode 100644 test/blackbox-tests/test-cases/scope-bug/alib/alib.ml create mode 100644 test/blackbox-tests/test-cases/scope-bug/alib/alib.opam create mode 100644 test/blackbox-tests/test-cases/scope-bug/alib/jbuild create mode 100644 test/blackbox-tests/test-cases/scope-bug/alib/main.ml create mode 100644 test/blackbox-tests/test-cases/scope-bug/blib/blib.ml create mode 100644 test/blackbox-tests/test-cases/scope-bug/blib/blib.opam create mode 100644 test/blackbox-tests/test-cases/scope-bug/blib/jbuild create mode 100644 test/blackbox-tests/test-cases/scope-bug/blib/sub/jbuild create mode 100644 test/blackbox-tests/test-cases/scope-bug/blib/sub/sub.ml create mode 100644 test/blackbox-tests/test-cases/scope-bug/run.t diff --git a/test/blackbox-tests/jbuild b/test/blackbox-tests/jbuild index 869b4391..836da50c 100644 --- a/test/blackbox-tests/jbuild +++ b/test/blackbox-tests/jbuild @@ -257,3 +257,13 @@ (progn (run ${exe:cram.exe} run.t) (diff? run.t run.t.corrected))))))) + +(alias + ((name runtest) + (deps ((files_recursively_in test-cases/scope-bug))) + (action + (chdir test-cases/scope-bug + (setenv JBUILDER ${bin:jbuilder} + (progn + (run ${exe:cram.exe} run.t) + (diff? run.t run.t.corrected))))))) diff --git a/test/blackbox-tests/test-cases/scope-bug/alib/alib.ml b/test/blackbox-tests/test-cases/scope-bug/alib/alib.ml new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/scope-bug/alib/alib.opam b/test/blackbox-tests/test-cases/scope-bug/alib/alib.opam new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/scope-bug/alib/jbuild b/test/blackbox-tests/test-cases/scope-bug/alib/jbuild new file mode 100644 index 00000000..26d5ea18 --- /dev/null +++ b/test/blackbox-tests/test-cases/scope-bug/alib/jbuild @@ -0,0 +1,6 @@ +(jbuild_version 1) + +(library + ((name alib) + (public_name alib) + (libraries (blib)))) diff --git a/test/blackbox-tests/test-cases/scope-bug/alib/main.ml b/test/blackbox-tests/test-cases/scope-bug/alib/main.ml new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/scope-bug/blib/blib.ml b/test/blackbox-tests/test-cases/scope-bug/blib/blib.ml new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/scope-bug/blib/blib.opam b/test/blackbox-tests/test-cases/scope-bug/blib/blib.opam new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/scope-bug/blib/jbuild b/test/blackbox-tests/test-cases/scope-bug/blib/jbuild new file mode 100644 index 00000000..6d3639dc --- /dev/null +++ b/test/blackbox-tests/test-cases/scope-bug/blib/jbuild @@ -0,0 +1,6 @@ +(jbuild_version 1) + +(library + ((name blib) + (public_name blib) + (libraries (sub)))) diff --git a/test/blackbox-tests/test-cases/scope-bug/blib/sub/jbuild b/test/blackbox-tests/test-cases/scope-bug/blib/sub/jbuild new file mode 100644 index 00000000..5ab19ae4 --- /dev/null +++ b/test/blackbox-tests/test-cases/scope-bug/blib/sub/jbuild @@ -0,0 +1,5 @@ +(jbuild_version 1) + +(library + ((name sub) + (public_name blib.sub))) diff --git a/test/blackbox-tests/test-cases/scope-bug/blib/sub/sub.ml b/test/blackbox-tests/test-cases/scope-bug/blib/sub/sub.ml new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/scope-bug/run.t b/test/blackbox-tests/test-cases/scope-bug/run.t new file mode 100644 index 00000000..1c3f3e34 --- /dev/null +++ b/test/blackbox-tests/test-cases/scope-bug/run.t @@ -0,0 +1,5 @@ + $ $JBUILDER build -j1 --root . @install + Error: External library "sub" not found. + -> required by "alib/jbuild (context default)" + Hint: try: jbuilder external-lib-deps --missing --root . @install + [1] From ab18b13a0406b92351cb8b5bba6ef2c1fa93d343 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Wed, 24 Jan 2018 16:32:10 +0800 Subject: [PATCH 2/2] Fix META generation wrt scope We should respect the scope of the current internal library to generate the META --- src/lib_db.ml | 8 +++--- .../blackbox-tests/test-cases/scope-bug/run.t | 26 ++++++++++++++++--- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/lib_db.ml b/src/lib_db.ml index a192ebd4..be534bd0 100644 --- a/src/lib_db.ml +++ b/src/lib_db.ml @@ -199,7 +199,7 @@ let ppx_runtime_deps_for_deprecated_method_exn t ~dir lib_deps = let lib_is_available name = String_set.mem name !seen || lib_is_available t ~from:dir name in - let rec loop lib_dep = + let rec loop dir lib_dep = match lib_dep with | Lib_dep.Direct name -> if not (String_set.mem name !seen) then begin @@ -227,7 +227,7 @@ let ppx_runtime_deps_for_deprecated_method_exn t ~dir lib_deps = | None -> Loc.fail loc "No solution found for this select form" and process (lib : Lib.t) = match lib with - | Internal (_, lib) -> + | Internal (dir, lib) -> seen := (let set = String_set.add lib.name !seen in match lib.public with @@ -235,14 +235,14 @@ let ppx_runtime_deps_for_deprecated_method_exn t ~dir lib_deps = | Some p -> String_set.add p.name set); result := String_set.union !result (String_set.of_list lib.ppx_runtime_libraries); - List.iter lib.buildable.libraries ~f:loop + List.iter lib.buildable.libraries ~f:(loop dir) | External pkg -> seen := String_set.add pkg.name !seen; result := String_set.union !result (String_set.of_list (List.map pkg.ppx_runtime_deps ~f:(fun p -> p.Findlib.name))) in - List.iter lib_deps ~f:loop; + List.iter lib_deps ~f:(loop dir); !result type resolved_select = diff --git a/test/blackbox-tests/test-cases/scope-bug/run.t b/test/blackbox-tests/test-cases/scope-bug/run.t index 1c3f3e34..3c71f44e 100644 --- a/test/blackbox-tests/test-cases/scope-bug/run.t +++ b/test/blackbox-tests/test-cases/scope-bug/run.t @@ -1,5 +1,23 @@ $ $JBUILDER build -j1 --root . @install - Error: External library "sub" not found. - -> required by "alib/jbuild (context default)" - Hint: try: jbuilder external-lib-deps --missing --root . @install - [1] + ocamldep alib/alib.depends.ocamldep-output + ocamlc alib/alib__.{cmi,cmo,cmt} + ocamldep blib/blib.depends.ocamldep-output + ocamldep blib/sub/sub.depends.ocamldep-output + ocamlopt alib/alib__.{cmx,o} + ocamlc blib/sub/sub.{cmi,cmo,cmt} + ocamlopt blib/sub/sub.{cmx,o} + ocamlc blib/blib.{cmi,cmo,cmt} + ocamlc blib/sub/sub.cma + ocamlopt blib/sub/sub.{a,cmxa} + ocamlopt blib/blib.{cmx,o} + ocamlc alib/alib.{cmi,cmo,cmt} + ocamlc alib/alib__Main.{cmi,cmo,cmt} + ocamlc blib/blib.cma + ocamlopt blib/sub/sub.cmxs + ocamlopt blib/blib.{a,cmxa} + ocamlopt alib/alib.{cmx,o} + ocamlopt alib/alib__Main.{cmx,o} + ocamlc alib/alib.cma + ocamlopt blib/blib.cmxs + ocamlopt alib/alib.{a,cmxa} + ocamlopt alib/alib.cmxs