Better error message when the ppx driver is missing
This commit is contained in:
parent
ba80202747
commit
d58528d14c
|
@ -569,7 +569,7 @@ module Gen(P : Params) = struct
|
|||
|
||||
let ppx_drivers = Hashtbl.create 32
|
||||
|
||||
let build_ppx_driver ~dir ~dep_kind ~target pp_names =
|
||||
let build_ppx_driver ~dir ~dep_kind ~target ~main pp_names =
|
||||
let mode = Mode.best in
|
||||
let compiler = Option.value_exn (Mode.compiler mode) in
|
||||
let libs =
|
||||
|
@ -581,9 +581,21 @@ module Gen(P : Params) = struct
|
|||
Build.dyn_paths (Build.arr (Lib.archive_files ~mode ~ext_lib:ctx.ext_lib))
|
||||
>>>
|
||||
Build.run (Dep compiler)
|
||||
[ A "-o"; Target target
|
||||
; Dyn (Lib.link_flags ~mode)
|
||||
]);
|
||||
(A "-o" :: Target target
|
||||
:: Dyn (Lib.link_flags ~mode)
|
||||
:: match main with
|
||||
| None -> []
|
||||
| Some x -> [Dep x]));
|
||||
Option.iter main ~f:(fun fn ->
|
||||
add_rule
|
||||
(Build.action ~targets:[fn] (Write_file (fn, {|(* File generated by jbuilder *)
|
||||
let () =
|
||||
Printf.eprintf "%s: driver missing!
|
||||
If you see this message, it means that you are missing a ppx driver at the
|
||||
end of your list of preprocessors. Consult the manual for more details."
|
||||
Sys.argv.(0);
|
||||
exit 1
|
||||
|}))));
|
||||
libs
|
||||
|
||||
let ppx_dir = Path.of_string (sprintf "_build/.ppx/%s" ctx.name)
|
||||
|
@ -594,9 +606,11 @@ module Gen(P : Params) = struct
|
|||
match Hashtbl.find ppx_drivers key with
|
||||
| Some x -> x
|
||||
| None ->
|
||||
let exe = Path.relative ppx_dir (sprintf "%s/ppx.exe" key) in
|
||||
let ppx_dir = Path.relative ppx_dir key in
|
||||
let exe = Path.relative ppx_dir "ppx.exe" in
|
||||
let main = Path.relative ppx_dir "jbuilder_ppx_main.ml" in
|
||||
let libs =
|
||||
build_ppx_driver names ~dir ~dep_kind ~target:exe
|
||||
build_ppx_driver names ~dir ~dep_kind ~target:exe ~main:(Some main)
|
||||
in
|
||||
Hashtbl.add ppx_drivers ~key ~data:(exe, libs);
|
||||
(exe, libs)
|
||||
|
@ -1192,6 +1206,7 @@ module Gen(P : Params) = struct
|
|||
~dir
|
||||
~dep_kind
|
||||
~target:(Path.relative dir "as-ppx.exe")
|
||||
~main:None
|
||||
: (unit, Lib.t list) Build.t)
|
||||
end;
|
||||
|
||||
|
|
Loading…
Reference in New Issue