Setting the compiler in the lock directory We need some data for ocamlc -config $ mkdir stdlib && touch stdlib/Makefile.config $ . ./helpers.sh $ cat >ocaml.config < version: 4.14.1 > standard_library_default: $PWD/stdlib > standard_library: $PWD/stdlib > ccomp_type: cc > c_compiler: clang > ocamlc_cflags: -O2 -fno-strict-aliasing -fwrapv -pthread > ocamlc_cppflags: -D_FILE_OFFSET_BITS=64 > ocamlopt_cflags: -O2 -fno-strict-aliasing -fwrapv -pthread > ocamlopt_cppflags: -D_FILE_OFFSET_BITS=64 > bytecomp_c_compiler: clang -O2 -fno-strict-aliasing -fwrapv -pthread -D_FILE_OFFSET_BITS=64 > native_c_compiler: clang -O2 -fno-strict-aliasing -fwrapv -pthread -D_FILE_OFFSET_BITS=64 > bytecomp_c_libraries: -lm -lpthread > native_c_libraries: -lm > native_pack_linker: ld -r -o > architecture: amd64 > model: default > int_size: 63 > word_size: 64 > system: macosx > asm: fake > asm_cfi_supported: true > with_frame_pointers: false > ext_exe: > ext_obj: .o > ext_asm: .s > ext_lib: .a > ext_dll: .so > os_type: Unix > default_executable_name: a.out > systhread_supported: true > host: x86_64-apple-darwin > target: x86_64-apple-darwin > flambda: false > safe_string: true > default_safe_string: true > flat_float_array: true > function_sections: false > afl_instrument: false > windows_unicode: false > supports_shared_libraries: true > naked_pointers: true > exec_magic_number: Caml1999X031 > cmi_magic_number: Caml1999I031 > cmo_magic_number: Caml1999O031 > cma_magic_number: Caml1999A031 > cmx_magic_number: Caml1999Y031 > cmxa_magic_number: Caml1999Z031 > ast_impl_magic_number: Caml1999M031 > ast_intf_magic_number: Caml1999N031 > cmxs_magic_number: Caml1999D031 > cmt_magic_number: Caml1999T031 > linear_magic_number: Caml1999L031 > EOF This is the directory for our fake OCaml the test shouldn't observe. We can't use the system OCaml for this. $ mkdir shadowsystemocaml $ cat >shadowsystemocaml/ocamlc < #!/usr/bin/env sh > cat ocaml.config > EOF $ chmod +x shadowsystemocaml/ocamlc $ export PATH="$PWD/shadowsystemocaml:$PATH" Now we finally make the OCaml package for testing through the lock file: $ mkdir dune.lock $ cat >dune.lock/lock.dune < (lang package 0.1) > (ocaml mycaml) > EOF $ cat >dune.lock/mycaml.pkg < (version 0.0.1) > (source (copy $PWD/mycamlsources)) > (build > (system "\| cat >mycaml.install < "\| bin: [ "ocamlc" ] > "\| EOF > )) > EOF $ cat >dune-project < (lang dune 3.11) > EOF $ mkdir mycamlsources $ cat >mycamlsources/ocamlc < #!/usr/bin/env sh > cat $PWD/ocaml.config > EOF $ chmod +x mycamlsources/ocamlc $ cat >dune < (dirs :standard \ mycamlsources shadowsystemocaml stdlib) > (rule > (alias foo) > (action (system "command -v ocamlc foo"))) > EOF This should display the ocaml from the lock file rather than shadowsystemocaml $ DUNE_CONFIG__SYS_OCAML_VERSION=4.14.1 dune build @foo $TESTCASE_ROOT/_build/_private/default/.pkg/mycaml/target/bin/ocamlc