From 9fd36a1e4f1f2cbe5540616be99970a058dfdf23 Mon Sep 17 00:00:00 2001 From: Antonio Nuno Monteiro Date: Tue, 14 Mar 2023 20:16:35 -0700 Subject: [PATCH 1/2] test(melange): show dependency cycle depending on runtime_deps in target dir Signed-off-by: Antonio Nuno Monteiro --- .../melange/runtime-deps-in-target-dir.t | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t diff --git a/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t b/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t new file mode 100644 index 00000000000..901945cc47c --- /dev/null +++ b/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t @@ -0,0 +1,33 @@ + + $ cat > dune-project << EOF + > (lang dune 3.7) + > (using melange 0.1) + > EOF + $ mkdir output + + $ cat > output/foo.txt < hello foo + > EOF + $ cat > dune << EOF + > (melange.emit + > (target output) + > (alias melange) + > (runtime_deps output/foo.txt)) + > EOF + + $ dune build @melange 2>&1 | grep -A6 "internal dependency cycle" + ("internal dependency cycle", + { frames = + [ ("load-dir", In_build_dir "default/output") + ; ("build-file", In_build_dir "default/output/foo.txt") + ; ("", ()) + ] + }) + + + $ ls _build/default/output + ls: cannot access '_build/default/output': No such file or directory + [2] + $ ls _build/default/output/output + ls: cannot access '_build/default/output/output': No such file or directory + [2] From c3ef970d5a9da2c000f2838f64d63a50b3ce0fb8 Mon Sep 17 00:00:00 2001 From: Antonio Nuno Monteiro Date: Wed, 15 Mar 2023 18:07:33 -0700 Subject: [PATCH 2/2] fix(melange): allow runtime_deps in the melange target dir Signed-off-by: Antonio Nuno Monteiro --- src/dune_rules/melange/melange_rules.ml | 2 +- .../melange/emit-with-runtime-deps-dir-target.t | 2 ++ .../melange/emit-with-runtime-deps-edge-cases.t | 12 +++++++----- .../melange/runtime-deps-in-target-dir.t | 17 ++++------------- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/dune_rules/melange/melange_rules.ml b/src/dune_rules/melange/melange_rules.ml index 904295baba9..13f4c69f735 100644 --- a/src/dune_rules/melange/melange_rules.ml +++ b/src/dune_rules/melange/melange_rules.ml @@ -304,7 +304,7 @@ let eval_runtime_deps ~expander (deps : Dep_conf.t list) = (* TODO loc *) User_error.raise [ Pp.text "sandbox settings are not allowed" ]); let open Memo.O in - let+ paths, _ = Action_builder.run runtime_deps Eager in + let+ paths, _ = Action_builder.run runtime_deps Lazy in paths let setup_runtime_assets_rules sctx ~dir ~target_dir ~mode diff --git a/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-dir-target.t b/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-dir-target.t index 8235cd91e6b..0ec3db2fdd9 100644 --- a/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-dir-target.t +++ b/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-dir-target.t @@ -31,7 +31,9 @@ Rules created for the assets in the output directory [1] $ dune build @mel --display=short + bash some_dir melc .output.mobjs/melange/melange__Main.{cmi,cmj,cmt} + bash some_dir melc output/main.js Error: Is a directory -> required by _build/default/output/some_dir diff --git a/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-edge-cases.t b/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-edge-cases.t index 43ca4a69bd9..5f622158e9b 100644 --- a/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-edge-cases.t +++ b/test/blackbox-tests/test-cases/melange/emit-with-runtime-deps-edge-cases.t @@ -53,11 +53,9 @@ The runtime_dep index.txt was copied to the build folder hello from file - - Test depending on non-existing paths - $ mkdir another + $ mkdir -p another/another-output/another $ dune clean $ cat > another/dune < (melange.emit @@ -66,9 +64,13 @@ Test depending on non-existing paths > (runtime_deps doesnt-exist.txt)) > EOF - $ dune build @non-existing-mel --display=short + $ dune build @non-existing-mel + File "another/dune", line 1, characters 0-98: + 1 | (melange.emit + 2 | (alias non-existing-mel) + 3 | (target another-output) + 4 | (runtime_deps doesnt-exist.txt)) Error: No rule found for another/doesnt-exist.txt - -> required by alias another/non-existing-mel [1] Test depending on paths that "escape" the melange.emit directory diff --git a/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t b/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t index 901945cc47c..170c4165d31 100644 --- a/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t +++ b/test/blackbox-tests/test-cases/melange/runtime-deps-in-target-dir.t @@ -15,19 +15,10 @@ > (runtime_deps output/foo.txt)) > EOF - $ dune build @melange 2>&1 | grep -A6 "internal dependency cycle" - ("internal dependency cycle", - { frames = - [ ("load-dir", In_build_dir "default/output") - ; ("build-file", In_build_dir "default/output/foo.txt") - ; ("", ()) - ] - }) - + $ dune build @melange $ ls _build/default/output - ls: cannot access '_build/default/output': No such file or directory - [2] + foo.txt + output $ ls _build/default/output/output - ls: cannot access '_build/default/output/output': No such file or directory - [2] + foo.txt