diff --git a/otherlibs/stdune/path.ml b/otherlibs/stdune/path.ml index 34d3468ce314..aa476503417f 100644 --- a/otherlibs/stdune/path.ml +++ b/otherlibs/stdune/path.ml @@ -697,6 +697,10 @@ module Build = struct let lstat t = Unix.lstat (to_string t) let unlink_no_err t = Fpath.unlink_no_err (to_string t) + + let to_absolute_filename (t : t) = + Outside_build_dir.to_absolute_filename + (Outside_build_dir.append_local (Fdecl.get build_dir) t) end module T : sig diff --git a/otherlibs/stdune/path.mli b/otherlibs/stdune/path.mli index 9fdfa22ef93b..45c4b04f4ef4 100644 --- a/otherlibs/stdune/path.mli +++ b/otherlibs/stdune/path.mli @@ -219,6 +219,8 @@ module Build : sig val lstat : t -> Unix.stats val unlink_no_err : t -> unit + + val to_absolute_filename : t -> string end type t = private diff --git a/src/dune_rules/context.ml b/src/dune_rules/context.ml index 65a40d7a9d29..f0a45c64fcb3 100644 --- a/src/dune_rules/context.ml +++ b/src/dune_rules/context.ml @@ -514,9 +514,8 @@ let create ~(kind : Kind.t) ~path ~env ~env_nodes ~name ~merlin ~targets else env in let env = - let cwd = Sys.getcwd () in let extend_var var ?(path_sep = Bin.path_sep) v = - let v = Filename.concat cwd (Path.Build.to_string v) in + let v = Path.Build.to_absolute_filename v in match Env.get env var with | None -> (var, v) | Some prev -> (var, sprintf "%s%c%s" v path_sep prev) diff --git a/test/blackbox-tests/test-cases/cram/public-name.t b/test/blackbox-tests/test-cases/cram/public-name.t new file mode 100644 index 000000000000..bf661eec385e --- /dev/null +++ b/test/blackbox-tests/test-cases/cram/public-name.t @@ -0,0 +1,32 @@ +Cram and public binaries with an absolute build directory + + $ mkdir fresh && cd fresh + + $ cat >dune-project < (lang dune 2.8) + > (cram enable) + > (name public-name-exe-test) + > EOF + $ touch public-name-exe-test.opam + + $ mkdir helper + $ cat >helper/dune < (executable (public_name helper)) + > EOF + $ cat >helper/helper.ml < print_endline "Helper launched successfully";; + > EOF + + $ mkdir tests + $ cat >tests/run.t < $ helper + > Helper launched successfully + > EOF + $ echo "(cram (deps %{bin:helper}))" > tests/dune + +Running `dune runtest` with a relative build directory works + + $ DUNE_BUILD_DIR=./_other_build dune runtest + + $ export NEW_BUILD_DIR="$PWD/_other_build" + $ DUNE_BUILD_DIR="$NEW_BUILD_DIR" dune runtest --auto-promote