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 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 mode = Mode.best in
|
||||||
let compiler = Option.value_exn (Mode.compiler mode) in
|
let compiler = Option.value_exn (Mode.compiler mode) in
|
||||||
let libs =
|
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.dyn_paths (Build.arr (Lib.archive_files ~mode ~ext_lib:ctx.ext_lib))
|
||||||
>>>
|
>>>
|
||||||
Build.run (Dep compiler)
|
Build.run (Dep compiler)
|
||||||
[ A "-o"; Target target
|
(A "-o" :: Target target
|
||||||
; Dyn (Lib.link_flags ~mode)
|
:: 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
|
libs
|
||||||
|
|
||||||
let ppx_dir = Path.of_string (sprintf "_build/.ppx/%s" ctx.name)
|
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
|
match Hashtbl.find ppx_drivers key with
|
||||||
| Some x -> x
|
| Some x -> x
|
||||||
| None ->
|
| 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 =
|
let libs =
|
||||||
build_ppx_driver names ~dir ~dep_kind ~target:exe
|
build_ppx_driver names ~dir ~dep_kind ~target:exe ~main:(Some main)
|
||||||
in
|
in
|
||||||
Hashtbl.add ppx_drivers ~key ~data:(exe, libs);
|
Hashtbl.add ppx_drivers ~key ~data:(exe, libs);
|
||||||
(exe, libs)
|
(exe, libs)
|
||||||
|
@ -1192,6 +1206,7 @@ module Gen(P : Params) = struct
|
||||||
~dir
|
~dir
|
||||||
~dep_kind
|
~dep_kind
|
||||||
~target:(Path.relative dir "as-ppx.exe")
|
~target:(Path.relative dir "as-ppx.exe")
|
||||||
|
~main:None
|
||||||
: (unit, Lib.t list) Build.t)
|
: (unit, Lib.t list) Build.t)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue