mirror of
https://github.com/CatalaLang/catala.git
synced 2024-11-08 07:51:43 +03:00
Some fixes to relative file lookups in modules and tests
This makes sure `catala module` finds the local runtime when run from the catala source tree; and fixes lookup of the catala exec on custom uses of `clerk runtest`.
This commit is contained in:
parent
17172cf47d
commit
a71b4e7f73
@ -197,7 +197,13 @@ let run_inline_tests
|
|||||||
let cmd_out_rd, cmd_out_wr = Unix.pipe () in
|
let cmd_out_rd, cmd_out_wr = Unix.pipe () in
|
||||||
let ic = Unix.in_channel_of_descr cmd_out_rd in
|
let ic = Unix.in_channel_of_descr cmd_out_rd in
|
||||||
let file_dir, file = Filename.dirname file, Filename.basename file in
|
let file_dir, file = Filename.dirname file, Filename.basename file in
|
||||||
let catala_exe = Unix.realpath catala_exe in
|
let catala_exe =
|
||||||
|
(* If the exe name contains directories, make it absolute. Otherwise
|
||||||
|
don't modify it so that it can be looked up in PATH. *)
|
||||||
|
if String.contains catala_exe Filename.dir_sep.[0] then
|
||||||
|
Unix.realpath catala_exe
|
||||||
|
else catala_exe
|
||||||
|
in
|
||||||
let cmd =
|
let cmd =
|
||||||
Array.of_list ((catala_exe :: catala_opts) @ test.params @ [file])
|
Array.of_list ((catala_exe :: catala_opts) @ test.params @ [file])
|
||||||
in
|
in
|
||||||
|
@ -84,24 +84,37 @@ let ocaml_libdir =
|
|||||||
"Could not locate the OCaml library directory, make sure OCaml or \
|
"Could not locate the OCaml library directory, make sure OCaml or \
|
||||||
opam is installed")))
|
opam is installed")))
|
||||||
|
|
||||||
|
let rec find_catala_project_root dir =
|
||||||
|
if Sys.file_exists File.(dir / "catala.opam") then Some dir
|
||||||
|
else
|
||||||
|
let dir' = Unix.realpath File.(dir / Filename.parent_dir_name) in
|
||||||
|
if dir' = dir then None else find_catala_project_root dir'
|
||||||
|
|
||||||
let runtime_dir =
|
let runtime_dir =
|
||||||
lazy
|
lazy
|
||||||
(match
|
(let d =
|
||||||
List.find_map File.check_directory
|
match find_catala_project_root (Sys.getcwd ()) with
|
||||||
[
|
| Some root ->
|
||||||
"_build/install/default/lib/catala/runtime_ocaml";
|
(* Relative dir when running from catala source *)
|
||||||
(* Relative dir when running from catala source *)
|
File.(
|
||||||
File.(Lazy.force ocaml_libdir / "catala" / "runtime");
|
root
|
||||||
]
|
/ "_build"
|
||||||
with
|
/ "install"
|
||||||
| Some dir ->
|
/ "default"
|
||||||
Message.emit_debug "Catala runtime libraries found at @{<bold>%s@}." dir;
|
/ "lib"
|
||||||
dir
|
/ "catala"
|
||||||
| None ->
|
/ "runtime_ocaml")
|
||||||
Message.raise_error
|
| None -> File.(Lazy.force ocaml_libdir / "catala" / "runtime")
|
||||||
"Could not locate the Catala runtime library.@ Make sure that either \
|
in
|
||||||
catala is correctly installed,@ or you are running from the root of a \
|
match File.check_directory d with
|
||||||
compiled source tree.")
|
| Some dir ->
|
||||||
|
Message.emit_debug "Catala runtime libraries found at @{<bold>%s@}." dir;
|
||||||
|
dir
|
||||||
|
| None ->
|
||||||
|
Message.raise_error
|
||||||
|
"@[<hov>Could not locate the Catala runtime library.@ Make sure that \
|
||||||
|
either catala is correctly installed,@ or you are running from the \
|
||||||
|
root of a compiled source tree.@]")
|
||||||
|
|
||||||
let compile options link_modules optimize check_invariants =
|
let compile options link_modules optimize check_invariants =
|
||||||
let modname =
|
let modname =
|
||||||
|
@ -910,5 +910,10 @@ let load_runtime_modules = function
|
|||||||
List.iter
|
List.iter
|
||||||
Dynlink.(
|
Dynlink.(
|
||||||
fun m ->
|
fun m ->
|
||||||
loadfile (adapt_filename (Filename.remove_extension m ^ ".cmo")))
|
try loadfile (adapt_filename (Filename.remove_extension m ^ ".cmo"))
|
||||||
|
with Dynlink.Error dl_err ->
|
||||||
|
Message.raise_error
|
||||||
|
"Could not load module %s, has it been suitably compiled?@;\
|
||||||
|
<1 2>@[<hov>%a@]" m Format.pp_print_text
|
||||||
|
(Dynlink.error_message dl_err))
|
||||||
modules
|
modules
|
||||||
|
@ -101,15 +101,6 @@ let external_ref fmt er =
|
|||||||
| External_value v -> TopdefName.format fmt v
|
| External_value v -> TopdefName.format fmt v
|
||||||
| External_scope s -> ScopeName.format fmt s
|
| External_scope s -> ScopeName.format fmt s
|
||||||
|
|
||||||
let rec module_ctx ctx = function
|
|
||||||
| [] -> ctx
|
|
||||||
| (modname, mpos) :: path -> (
|
|
||||||
match ModuleName.Map.find_opt modname ctx.ctx_modules with
|
|
||||||
| None ->
|
|
||||||
Message.raise_spanned_error mpos "Module %a not found" ModuleName.format
|
|
||||||
modname
|
|
||||||
| Some ctx -> module_ctx ctx path)
|
|
||||||
|
|
||||||
let rec typ_gen
|
let rec typ_gen
|
||||||
(ctx : decl_ctx option)
|
(ctx : decl_ctx option)
|
||||||
~(colors : Ocolor_types.color4 list)
|
~(colors : Ocolor_types.color4 list)
|
||||||
|
Loading…
Reference in New Issue
Block a user