Better error message when the ppx driver is missing

This commit is contained in:
Jérémie Dimino 2017-03-05 10:17:35 +00:00
parent ba80202747
commit d58528d14c
1 changed files with 21 additions and 6 deletions

View File

@ -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;