Skip to content

Commit 5ad0568

Browse files
authored
Merge pull request #1118 from chenglou/lol-dangling
Fix bsb -w silently failing
2 parents 63d9abf + 9af275a commit 5ad0568

File tree

2 files changed

+193
-188
lines changed

2 files changed

+193
-188
lines changed

jscomp/bin/bsb.ml

Lines changed: 97 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -8156,7 +8156,7 @@ let revise_merlin new_content =
81568156
output_string ochan merlin_trailer ;
81578157
output_string ochan "\n";
81588158
close_out ochan
8159-
else if header >=0 && tail >= 0 then
8159+
else if header >=0 && tail >= 0 then
81608160
(* there is one, hit it everytime,
81618161
should be fixed point
81628162
*)
@@ -8207,12 +8207,12 @@ let write_ninja_file bsc_dir cwd =
82078207
FLG -ppx %s\n\
82088208
" lib_ocaml_dir lib_ocaml_dir bsppx
82098209
) in
8210-
let () =
8211-
match Bsb_default.get_bsc_flags () with
8210+
let () =
8211+
match Bsb_default.get_bsc_flags () with
82128212
| [] -> ()
8213-
| xs ->
8214-
Buffer.add_string buffer
8215-
(Printf.sprintf "\nFLG %s" (String.concat " " xs) ) in
8213+
| xs ->
8214+
Buffer.add_string buffer
8215+
(Printf.sprintf "\nFLG %s" (String.concat " " xs) ) in
82168216
let () =
82178217
Bsb_default.get_bs_dependencies ()
82188218
|> List.iter (fun package ->
@@ -8270,7 +8270,7 @@ let write_ninja_file bsc_dir cwd =
82708270
|? (Bsb_build_schemas.refmt, `Str (Bsb_default.set_refmt ~cwd))
82718271

82728272
|? (Bsb_build_schemas.sources, `Obj (fun x ->
8273-
let res : Bsb_build_ui.t =
8273+
let res : Bsb_build_ui.t =
82748274
Bsb_build_ui.parsing_source
82758275
Bsb_build_ui.lib_dir_index
82768276
Filename.current_dir_name x in
@@ -8279,7 +8279,7 @@ let write_ninja_file bsc_dir cwd =
82798279
|? (Bsb_build_schemas.sources, `Arr (fun xs ->
82808280

82818281
let res : Bsb_build_ui.t =
8282-
Bsb_build_ui.parsing_sources
8282+
Bsb_build_ui.parsing_sources
82838283
Bsb_build_ui.lib_dir_index
82848284
Filename.current_dir_name xs
82858285
in
@@ -8353,50 +8353,50 @@ let separator = "--"
83538353

83548354

83558355
let internal_package_specs = "-internal-package-specs"
8356-
let internal_install = "-internal-install"
8357-
let build_bs_deps package_specs =
8358-
let bsc_dir = Bsb_build_util.get_bsc_dir cwd in
8359-
let bsb_exe = bsc_dir // "bsb.exe" in
8360-
Bsb_default.walk_all_deps true cwd
8361-
(fun top cwd ->
8362-
if not top then
8356+
let internal_install = "-internal-install"
8357+
let build_bs_deps package_specs =
8358+
let bsc_dir = Bsb_build_util.get_bsc_dir cwd in
8359+
let bsb_exe = bsc_dir // "bsb.exe" in
8360+
Bsb_default.walk_all_deps true cwd
8361+
(fun top cwd ->
8362+
if not top then
83638363
Bsb_unix.run_command_execv true
8364-
{cmd = bsb_exe;
8365-
cwd = cwd;
8366-
args =
8364+
{cmd = bsb_exe;
8365+
cwd = cwd;
8366+
args =
83678367
[| bsb_exe ; internal_install ; no_dev; internal_package_specs; package_specs; regen; separator |]})
83688368

83698369
let annoymous filename =
83708370
String_vec.push filename targets
83718371

8372-
let watch_mode = ref false
8373-
let make_world = ref false
8372+
let watch_mode = ref false
8373+
let make_world = ref false
83748374

83758375
let lib_bs = "lib" // "bs"
83768376
let lib_amdjs = "lib" // "amdjs"
83778377
let lib_goog = "lib" // "goog"
83788378
let lib_js = "lib" // "js"
83798379
let lib_ocaml = "lib" // "ocaml" (* installed binary artifacts *)
8380-
let clean_bs_garbage cwd =
8380+
let clean_bs_garbage cwd =
83818381
print_string "Doing cleaning in ";
8382-
print_endline cwd;
8383-
let aux x =
8384-
let x = (cwd // x) in
8385-
if Sys.file_exists x then
8386-
Bsb_unix.remove_dir_recursive x in
8387-
try
8388-
aux lib_bs ;
8389-
aux lib_amdjs ;
8382+
print_endline cwd;
8383+
let aux x =
8384+
let x = (cwd // x) in
8385+
if Sys.file_exists x then
8386+
Bsb_unix.remove_dir_recursive x in
8387+
try
8388+
aux lib_bs ;
8389+
aux lib_amdjs ;
83908390
aux lib_goog;
83918391
aux lib_js ;
8392-
aux lib_ocaml
8393-
with
8394-
e ->
8392+
aux lib_ocaml
8393+
with
8394+
e ->
83958395
prerr_endline ("Failed to clean due to " ^ Printexc.to_string e)
83968396

8397-
let clean_bs_deps () =
8398-
Bsb_default.walk_all_deps true cwd (fun top cwd ->
8399-
clean_bs_garbage cwd
8397+
let clean_bs_deps () =
8398+
Bsb_default.walk_all_deps true cwd (fun top cwd ->
8399+
clean_bs_garbage cwd
84008400
)
84018401

84028402

@@ -8407,22 +8407,22 @@ let bsb_main_flags =
84078407
"-w", Arg.Set watch_mode,
84088408
" Watch mode" ;
84098409
internal_install, Arg.Set Bsb_config.install,
8410-
" (internal)Install public interface or not, when make-world it will install(in combination with -regen to make sure it has effect)";
8411-
no_dev, Arg.Set Bsb_config.no_dev,
8410+
" (internal)Install public interface or not, when make-world it will install(in combination with -regen to make sure it has effect)";
8411+
no_dev, Arg.Set Bsb_config.no_dev,
84128412
" (internal)Build dev dependencies in make-world and dev group(in combination with -regen)";
84138413
regen, Arg.Set force_regenerate,
84148414
" Always regenerate build.ninja no matter bsconfig.json is changed or not (for debugging purpose)"
84158415
;
8416-
internal_package_specs, Arg.String Bsb_default.internal_override_package_specs,
8417-
" (internal)Overide package specs (in combination with -regen)";
8416+
internal_package_specs, Arg.String Bsb_default.internal_override_package_specs,
8417+
" (internal)Overide package specs (in combination with -regen)";
84188418
"-clean-world", Arg.Unit clean_bs_deps,
84198419
" Clean all bs dependencies";
84208420
"-make-world", Arg.Set make_world,
84218421
" Build all dependencies and itself "
84228422
]
84238423

8424-
(** Regenerate ninja file and return None if we dont need regenerate
8425-
otherwise return some info
8424+
(** Regenerate ninja file and return None if we dont need regenerate
8425+
otherwise return some info
84268426
*)
84278427
let regenerate_ninja cwd bsc_dir forced : Bsb_default.package_specs option =
84288428
let output_deps = Bsb_config.lib_bs // bsdeps in
@@ -8446,43 +8446,43 @@ let regenerate_ninja cwd bsc_dir forced : Bsb_default.package_specs option =
84468446
Some (Bsb_default.get_package_specs ())
84478447
(* This makes sense since we did parse the json file *)
84488448
end
8449-
else None
8449+
else None
84508450

84518451
let ninja_error_message = "ninja (required for bsb build system) is not installed, \n\
84528452
please visit https://github.com/ninja-build/ninja to have it installed\n"
8453-
let () =
8454-
Printexc.register_printer (function
8455-
| Unix.Unix_error(Unix.ENOENT, "execvp", "ninja") ->
8453+
let () =
8454+
Printexc.register_printer (function
8455+
| Unix.Unix_error(Unix.ENOENT, "execvp", "ninja") ->
84568456
Some ninja_error_message
84578457
| _ -> None
84588458
)
84598459

8460-
let print_string_args (args : string array) =
8461-
for i = 0 to Array.length args - 1 do
8462-
print_string (Array.unsafe_get args i) ;
8460+
let print_string_args (args : string array) =
8461+
for i = 0 to Array.length args - 1 do
8462+
print_string (Array.unsafe_get args i) ;
84638463
print_string " ";
8464-
done ;
8465-
print_newline ()
8464+
done ;
8465+
print_newline ()
84668466

84678467
(* Note that [keepdepfile] only makes sense when combined with [deps] for optimizatoin *)
8468-
let ninja_command ninja ninja_args =
8468+
let ninja_command ninja ninja_args =
84698469
let ninja_args_len = Array.length ninja_args in
8470-
if ninja_args_len = 0 then
8471-
begin
8472-
let args = [|"ninja"; "-C"; Bsb_config.lib_bs |] in
8473-
print_string_args args ;
8474-
Unix.execvp ninja args
8475-
end
8476-
else
8477-
let fixed_args_length = 3 in
8470+
if ninja_args_len = 0 then
8471+
begin
8472+
let args = [|"ninja"; "-C"; Bsb_config.lib_bs |] in
8473+
print_string_args args ;
8474+
Unix.execvp ninja args
8475+
end
8476+
else
8477+
let fixed_args_length = 3 in
84788478
let args = (Array.init (fixed_args_length + ninja_args_len)
8479-
(fun i -> match i with
8479+
(fun i -> match i with
84808480
| 0 -> "ninja"
84818481
| 1 -> "-C"
84828482
| 2 -> Bsb_config.lib_bs
8483-
| _ -> Array.unsafe_get ninja_args (i - fixed_args_length) )) in
8483+
| _ -> Array.unsafe_get ninja_args (i - fixed_args_length) )) in
84848484
print_string_args args ;
8485-
Unix.execvp ninja args
8485+
Unix.execvp ninja args
84868486

84878487

84888488

@@ -8502,37 +8502,37 @@ let usage = "Usage : bsb.exe <bsb-options> <files> -- <ninja_options>\n\
85028502

85038503

85048504
(*
8505-
let bsb_exe = bsc_dir // "bsb.exe" in
8506-
Bsb_default.walk_all_deps true cwd
8505+
let bsb_exe = bsc_dir // "bsb.exe" in
8506+
Bsb_default.walk_all_deps true cwd
85078507
(fun top cwd -> Bsb_unix.run_command_execv (not top)
85088508
{cmd = bsb_exe; cwd = cwd; args = [| bsb_exe ; separator; "-t" ; "clean"|]})
85098509
*)
8510-
let make_world_deps deps =
8510+
let make_world_deps deps =
85118511
print_endline "\nMaking the dependency world!";
8512-
let deps =
8513-
match deps with
8514-
| None ->
8515-
let json = Ext_json.parse_json_from_file Literals.bsconfig_json in
8516-
begin match json with
8517-
| `Obj map ->
8518-
map
8519-
|? (Bsb_build_schemas.package_specs,
8512+
let deps =
8513+
match deps with
8514+
| None ->
8515+
let json = Ext_json.parse_json_from_file Literals.bsconfig_json in
8516+
begin match json with
8517+
| `Obj map ->
8518+
map
8519+
|? (Bsb_build_schemas.package_specs,
85208520
`Arr Bsb_default.set_package_specs_from_array)
85218521
|> ignore ;
85228522
Bsb_default.get_package_specs ()
85238523
| _ -> assert false
8524-
end
8525-
| Some spec -> spec in
8526-
build_bs_deps ( String_set.fold
8527-
(fun k acc -> k ^ "," ^ acc ) deps Ext_string.empty )
8524+
end
8525+
| Some spec -> spec in
8526+
build_bs_deps ( String_set.fold
8527+
(fun k acc -> k ^ "," ^ acc ) deps Ext_string.empty )
85288528
let () =
85298529
let bsc_dir = Bsb_build_util.get_bsc_dir cwd in
8530-
let ninja =
8531-
if Sys.win32 then
8530+
let ninja =
8531+
if Sys.win32 then
85328532
bsc_dir // "ninja.exe"
8533-
else
8534-
"ninja"
8535-
in
8533+
else
8534+
"ninja"
8535+
in
85368536
(* try *)
85378537
(* see discussion #929 *)
85388538
if Array.length Sys.argv <= 1 then
@@ -8546,30 +8546,33 @@ let () =
85468546
| `No_split
85478547
->
85488548
begin
8549-
Arg.parse bsb_main_flags annoymous usage;
8549+
Arg.parse bsb_main_flags annoymous usage;
85508550
(* [-make-world] should never be combined with [-package-specs] *)
8551-
if !make_world then
8551+
if !make_world then begin
85528552
(* don't regenerate files when we only run [bsb -clean-world] *)
8553-
let deps = regenerate_ninja cwd bsc_dir !force_regenerate in
8554-
make_world_deps deps ;
8555-
if !watch_mode then
8556-
watch ()
8557-
(* ninja is not triggered in this case *)
8553+
let deps = regenerate_ninja cwd bsc_dir !force_regenerate in
8554+
make_world_deps deps
8555+
end;
8556+
if !watch_mode then begin
8557+
watch ()
8558+
(* ninja is not triggered in this case *)
8559+
end
85588560
end
85598561
| `Split (bsb_args,ninja_args)
85608562
->
85618563
begin
85628564
Arg.parse_argv bsb_args bsb_main_flags annoymous usage ;
8563-
let deps = (regenerate_ninja cwd bsc_dir !force_regenerate) in
8565+
let deps = (regenerate_ninja cwd bsc_dir !force_regenerate) in
85648566
(* [-make-world] should never be combined with [-package-specs] *)
8565-
if !make_world then
8566-
make_world_deps deps ;
8567-
if !watch_mode then watch ()
8567+
if !make_world then
8568+
make_world_deps deps ;
8569+
if !watch_mode then watch ()
85688570
else ninja_command ninja ninja_args
85698571
end
85708572
end
85718573
(*with x ->
85728574
prerr_endline @@ Printexc.to_string x ;
85738575
exit 2*)
8574-
(* with [try, with], there is no stacktrace anymore .. *)
8576+
(* with [try, with], there is no stacktrace anymore .. *)
8577+
85758578
end

0 commit comments

Comments
 (0)