From 620b98bb01835ac846dbd352c4b62c7d1bfcb697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ojeda=20B=C3=A4r?= Date: Thu, 5 Jan 2023 06:57:02 +0100 Subject: [PATCH] Fix Jsoo rules bug: artifacts of libraries with public names are not found (#6828) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Nicolás Ojeda Bär Signed-off-by: Hugo Heuzard Co-authored-by: Hugo Heuzard --- CHANGES.md | 2 +- src/dune_rules/jsoo_rules.ml | 8 ++++---- .../test-cases/jsoo/public-libs.t/a/a.ml | 1 + .../test-cases/jsoo/public-libs.t/a/dune | 3 +++ .../test-cases/jsoo/public-libs.t/b/dune | 4 ++++ .../test-cases/jsoo/public-libs.t/b/main.ml | 1 + .../test-cases/jsoo/public-libs.t/dune-project | 3 +++ .../test-cases/jsoo/public-libs.t/run.t | 17 +++++++++++++++++ 8 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 test/blackbox-tests/test-cases/jsoo/public-libs.t/a/a.ml create mode 100644 test/blackbox-tests/test-cases/jsoo/public-libs.t/a/dune create mode 100644 test/blackbox-tests/test-cases/jsoo/public-libs.t/b/dune create mode 100644 test/blackbox-tests/test-cases/jsoo/public-libs.t/b/main.ml create mode 100644 test/blackbox-tests/test-cases/jsoo/public-libs.t/dune-project create mode 100644 test/blackbox-tests/test-cases/jsoo/public-libs.t/run.t diff --git a/CHANGES.md b/CHANGES.md index 70f2662958b..bda659368c9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -77,7 +77,7 @@ Unreleased enabled (#6645, @hhugo) - Fix *js_of_ocaml* separate compilation rules when `--enable=effects` - or `--enable=use-js-string` is used. (#6714, @hhugo) + or `--enable=use-js-string` is used. (#6714, #6828, @hhugo) - Remove spurious build dir created when running `dune init proj ...` (#6707, fixes #5429, @gridbugs) diff --git a/src/dune_rules/jsoo_rules.ml b/src/dune_rules/jsoo_rules.ml index 1d50927302a..0d1cad25586 100644 --- a/src/dune_rules/jsoo_rules.ml +++ b/src/dune_rules/jsoo_rules.ml @@ -187,14 +187,14 @@ let with_js_ext s = let jsoo_archives ~sctx config lib = let info = Lib.info lib in + let archives = Lib_info.archives info in match Lib.is_local lib with | true -> let obj_dir = Lib_info.obj_dir info in - [ in_obj_dir' ~obj_dir ~config:(Some config) - [ Lib_name.to_string (Lib.name lib) ^ Js_of_ocaml.Ext.cma ] - ] + List.map archives.byte ~f:(fun archive -> + in_obj_dir' ~obj_dir ~config:(Some config) + [ with_js_ext (Path.basename archive) ]) | false -> - let archives = Lib_info.archives info in List.map archives.byte ~f:(fun archive -> Path.build (in_build_dir ~sctx ~config diff --git a/test/blackbox-tests/test-cases/jsoo/public-libs.t/a/a.ml b/test/blackbox-tests/test-cases/jsoo/public-libs.t/a/a.ml new file mode 100644 index 00000000000..df5e542079b --- /dev/null +++ b/test/blackbox-tests/test-cases/jsoo/public-libs.t/a/a.ml @@ -0,0 +1 @@ +let x = 12 diff --git a/test/blackbox-tests/test-cases/jsoo/public-libs.t/a/dune b/test/blackbox-tests/test-cases/jsoo/public-libs.t/a/dune new file mode 100644 index 00000000000..9222db1e318 --- /dev/null +++ b/test/blackbox-tests/test-cases/jsoo/public-libs.t/a/dune @@ -0,0 +1,3 @@ +(library + (public_name foo.a) + (name a)) diff --git a/test/blackbox-tests/test-cases/jsoo/public-libs.t/b/dune b/test/blackbox-tests/test-cases/jsoo/public-libs.t/b/dune new file mode 100644 index 00000000000..aed5b0c21a4 --- /dev/null +++ b/test/blackbox-tests/test-cases/jsoo/public-libs.t/b/dune @@ -0,0 +1,4 @@ +(executable + (name main) + (libraries a) + (modes js)) diff --git a/test/blackbox-tests/test-cases/jsoo/public-libs.t/b/main.ml b/test/blackbox-tests/test-cases/jsoo/public-libs.t/b/main.ml new file mode 100644 index 00000000000..e9273e98aa0 --- /dev/null +++ b/test/blackbox-tests/test-cases/jsoo/public-libs.t/b/main.ml @@ -0,0 +1 @@ +let _ = A.x diff --git a/test/blackbox-tests/test-cases/jsoo/public-libs.t/dune-project b/test/blackbox-tests/test-cases/jsoo/public-libs.t/dune-project new file mode 100644 index 00000000000..dd32274baba --- /dev/null +++ b/test/blackbox-tests/test-cases/jsoo/public-libs.t/dune-project @@ -0,0 +1,3 @@ +(lang dune 3.7) + +(package (name foo)) diff --git a/test/blackbox-tests/test-cases/jsoo/public-libs.t/run.t b/test/blackbox-tests/test-cases/jsoo/public-libs.t/run.t new file mode 100644 index 00000000000..c1c4965d67c --- /dev/null +++ b/test/blackbox-tests/test-cases/jsoo/public-libs.t/run.t @@ -0,0 +1,17 @@ +Compilation of libraries with pulic-names + + $ dune build --display short + ocamlc a/.a.objs/byte/a.{cmi,cmo,cmt} + js_of_ocaml b/.main.eobjs/jsoo/main.bc.runtime.js + js_of_ocaml .js/default/stdlib/std_exit.cmo.js + js_of_ocaml .js/default/stdlib/stdlib.cma.js + ocamlopt a/.a.objs/native/a.{cmx,o} + ocamlc b/.main.eobjs/byte/dune__exe__Main.{cmi,cmti} + ocamlc a/a.cma + ocamlopt a/a.{a,cmxa} + ocamlc b/.main.eobjs/byte/dune__exe__Main.{cmo,cmt} + js_of_ocaml a/.a.objs/jsoo/default/a.cma.js + ocamlopt a/a.cmxs + ocamlc b/main.bc-for-jsoo + js_of_ocaml b/.main.eobjs/jsoo/dune__exe__Main.cmo.js + js_of_ocaml b/main.bc.js