Skip to content

Commit b0a4948

Browse files
committed
stream-line clean-world, make-world and also allow user package to override package-specs
1 parent a4a2128 commit b0a4948

File tree

5 files changed

+182
-63
lines changed

5 files changed

+182
-63
lines changed

jscomp/all.depend

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -661,11 +661,12 @@ bsb/bsb_gen.cmx : ext/string_map.cmx ext/literals.cmx ext/ext_filename.cmx \
661661
bsb/bsb_gen.cmi
662662
bsb/bsb_helper_main.cmx : depends/depends_post_process.cmx \
663663
bsb/bsb_helper_main.cmi
664-
bsb/bsb_main.cmx : ext/string_vec.cmx ext/literals.cmx ext/ext_string.cmx \
665-
ext/ext_json.cmx ext/ext_filename.cmx ext/ext_file_pp.cmx \
666-
ext/ext_array.cmx bsb/bsb_unix.cmx bsb/bsb_gen.cmx bsb/bsb_dep_infos.cmx \
667-
bsb/bsb_default.cmx bsb/bsb_config.cmx bsb/bsb_build_util.cmx \
668-
bsb/bsb_build_ui.cmx bsb/bsb_build_schemas.cmx bsb/bsb_main.cmi
664+
bsb/bsb_main.cmx : ext/string_vec.cmx ext/string_set.cmx ext/literals.cmx \
665+
ext/ext_string.cmx ext/ext_json.cmx ext/ext_filename.cmx \
666+
ext/ext_file_pp.cmx ext/ext_array.cmx bsb/bsb_unix.cmx bsb/bsb_gen.cmx \
667+
bsb/bsb_dep_infos.cmx bsb/bsb_default.cmx bsb/bsb_config.cmx \
668+
bsb/bsb_build_util.cmx bsb/bsb_build_ui.cmx bsb/bsb_build_schemas.cmx \
669+
bsb/bsb_main.cmi
669670
bsb/bsb_ninja.cmx : ext/string_set.cmx ext/string_map.cmx ext/literals.cmx \
670671
ext/ext_filename.cmx bsb/bsb_config.cmx bsb/bsb_build_util.cmx \
671672
bsb/bsb_build_ui.cmx bsb/bsb_build_schemas.cmx common/binary_cache.cmx \

jscomp/bin/bsb.ml

Lines changed: 88 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6758,6 +6758,8 @@ val set_ninja : cwd:string -> string -> unit
67586758
type package_specs = String_set.t
67596759
val get_package_specs : unit -> package_specs
67606760
val set_package_specs_from_array : Ext_json.t array -> unit
6761+
val internal_override_package_specs : string -> unit
6762+
67616763

67626764
val get_generate_merlin : unit -> bool
67636765
val set_generate_merlin : bool -> unit
@@ -6923,10 +6925,12 @@ let set_ninja ~cwd p =
69236925
type package_specs = String_set.t
69246926

69256927
let package_specs = ref (String_set.singleton Literals.commonjs)
6928+
let package_specs_overriden = ref false
69266929

69276930
let get_package_specs () = !package_specs
69286931

69296932
let set_package_specs_from_array arr =
6933+
if not !package_specs_overriden then
69306934
let new_package_specs =
69316935
arr
69326936
|> get_list_string
@@ -6939,6 +6943,22 @@ let set_package_specs_from_array arr =
69396943
) String_set.empty in
69406944
package_specs := new_package_specs
69416945

6946+
6947+
6948+
6949+
let internal_override_package_specs str =
6950+
package_specs_overriden := true ;
6951+
let lst = Ext_string.split ~keep_empty:false str ',' in
6952+
package_specs :=
6953+
List.fold_left (fun acc x ->
6954+
let v =
6955+
if x = Literals.amdjs || x = Literals.commonjs || x = Literals.goog then String_set.add x acc
6956+
else
6957+
failwith ("Unkonwn package spec" ^ x) in
6958+
v
6959+
) String_set.empty lst
6960+
6961+
69426962
let generate_merlin = ref false
69436963

69446964
let get_generate_merlin () = !generate_merlin
@@ -8281,8 +8301,7 @@ let targets = String_vec.make 5
82818301

82828302
let cwd = Sys.getcwd ()
82838303

8284-
let create_bs_config () =
8285-
()
8304+
82868305
let watch () =
82878306
let bsb_watcher =
82888307
Bsb_build_util.get_bsc_dir cwd // "bsb_watcher.js" in
@@ -8299,16 +8318,17 @@ let no_dev = "-no-dev"
82998318
let regen = "-regen"
83008319
let separator = "--"
83018320

8302-
let build_bs_deps () =
8321+
8322+
let internal_package_specs = "-internal-package-specs"
8323+
let build_bs_deps package_specs =
83038324
let bsc_dir = Bsb_build_util.get_bsc_dir cwd in
83048325
let bsb_exe = bsc_dir // "bsb.exe" in
83058326
Bsb_default.walk_all_deps true cwd
83068327
(fun top cwd ->
8307-
if top then
8308-
Bsb_unix.run_command_execv false { cmd = bsb_exe ; cwd ; args = [|bsb_exe ; regen ; separator|]}
8309-
else
8328+
if not top then
83108329
Bsb_unix.run_command_execv true
8311-
{cmd = bsb_exe; cwd = cwd; args = [| bsb_exe ; no_dev; regen; separator |]})
8330+
{cmd = bsb_exe; cwd = cwd; args =
8331+
[| bsb_exe ; no_dev; internal_package_specs; package_specs; regen; separator |]})
83128332

83138333
let clean_bs_deps () =
83148334
let bsc_dir = Bsb_build_util.get_bsc_dir cwd in
@@ -8319,31 +8339,31 @@ let clean_bs_deps () =
83198339
let annoymous filename =
83208340
String_vec.push filename targets
83218341

8342+
let watch_mode = ref false
8343+
let make_world = ref false
83228344

8323-
8324-
8345+
83258346
let bsb_main_flags =
83268347
[
8327-
"-w", Arg.Unit watch,
8348+
"-w", Arg.Set watch_mode,
83288349
" Watch mode" ;
8329-
no_dev, Arg.Unit (fun _ -> Bsb_config.no_dev := true),
8330-
" (experimental)Build dev dependencies in make-world and dev group";
8331-
" -no-dev", Arg.Set Bsb_config.no_dev,
8332-
" (experimental)Don't build dev directories(internal for -make-world)" ;
8333-
(* "-init", Arg.Unit create_bs_config ,
8334-
" Create an simple bsconfig.json"
8335-
;
8336-
*)
8337-
regen, Arg.Set force_regenerate,
8350+
no_dev, Arg.Set Bsb_config.no_dev,
8351+
" (internal)Build dev dependencies in make-world and dev group(in combination with -regen)";
8352+
regen, Arg.Set force_regenerate,
83388353
" Always regenerate build.ninja no matter bsconfig.json is changed or not (for debugging purpose)"
83398354
;
8355+
internal_package_specs, Arg.String Bsb_default.internal_override_package_specs,
8356+
" (internal)Overide package specs (in combination with -regen)";
83408357
"-clean-world", Arg.Unit clean_bs_deps,
83418358
" Clean all bs dependencies";
8342-
"-make-world", Arg.Unit build_bs_deps,
8359+
"-make-world", Arg.Set make_world,
83438360
" Build all dependencies and itself "
83448361
]
83458362

8346-
let regenerate_ninja cwd bsc_dir forced =
8363+
(** Regenerate ninja file and return None if we dont need regenerate
8364+
otherwise return some info
8365+
*)
8366+
let regenerate_ninja cwd bsc_dir forced : Bsb_default.package_specs option =
83478367
let output_deps = Bsb_config.lib_bs // bsdeps in
83488368
let reason =
83498369
if forced then "Regenerating ninja (triggered by command line -regen)"
@@ -8361,9 +8381,11 @@ let regenerate_ninja cwd bsc_dir forced =
83618381
stamp = (Unix.stat x).st_mtime
83628382
}
83638383
)
8364-
|> (fun x -> Bsb_dep_infos.store ~cwd output_deps (Array.of_list x))
8365-
8384+
|> (fun x -> Bsb_dep_infos.store ~cwd output_deps (Array.of_list x));
8385+
Some (Bsb_default.get_package_specs ())
8386+
(* This makes sense since we did parse the json file *)
83668387
end
8388+
else None
83678389

83688390
let ninja_error_message = "ninja (required for bsb build system) is not installed, \n\
83698391
please visit https://github.com/ninja-build/ninja to have it installed\n"
@@ -8417,7 +8439,7 @@ let () =
84178439
(* see discussion #929 *)
84188440
if Array.length Sys.argv <= 1 then
84198441
begin
8420-
regenerate_ninja cwd bsc_dir false;
8442+
ignore (regenerate_ninja cwd bsc_dir false);
84218443
ninja_command ninja [||]
84228444
end
84238445
else
@@ -8427,17 +8449,54 @@ let () =
84278449
->
84288450
begin
84298451
Arg.parse bsb_main_flags annoymous usage;
8430-
regenerate_ninja cwd bsc_dir !force_regenerate;
8431-
(* String_vec.iter (fun s -> print_endline s) targets; *)
8452+
let deps = regenerate_ninja cwd bsc_dir !force_regenerate in
8453+
(* [-make-world] should never be combined with [-package-specs] *)
8454+
if !make_world then
8455+
let deps =
8456+
match deps with
8457+
| None ->
8458+
let json = Ext_json.parse_json_from_file Literals.bsconfig_json in
8459+
begin match json with
8460+
| `Obj map ->
8461+
map
8462+
|? (Bsb_build_schemas.package_specs,
8463+
`Arr Bsb_default.set_package_specs_from_array)
8464+
|> ignore ;
8465+
Bsb_default.get_package_specs ()
8466+
| _ -> assert false
8467+
end
8468+
| Some spec -> spec in
8469+
build_bs_deps ( String_set.fold
8470+
(fun k acc -> k ^ "," ^ acc ) deps Ext_string.empty ) ;
8471+
if !watch_mode then
8472+
watch ()
84328473
(* ninja is not triggered in this case *)
84338474
end
84348475
| `Split (bsb_args,ninja_args)
84358476
->
84368477
begin
84378478
Arg.parse_argv bsb_args bsb_main_flags annoymous usage ;
8438-
(* String_vec.iter (fun s -> print_endline s) targets; *)
8439-
regenerate_ninja cwd bsc_dir !force_regenerate;
8440-
ninja_command ninja ninja_args
8479+
let deps = (regenerate_ninja cwd bsc_dir !force_regenerate) in
8480+
(* [-make-world] should never be combined with [-package-specs] *)
8481+
if !make_world then
8482+
let deps =
8483+
match deps with
8484+
| None ->
8485+
let json = Ext_json.parse_json_from_file Literals.bsconfig_json in
8486+
begin match json with
8487+
| `Obj map ->
8488+
map
8489+
|? (Bsb_build_schemas.package_specs,
8490+
`Arr Bsb_default.set_package_specs_from_array)
8491+
|> ignore ;
8492+
Bsb_default.get_package_specs ()
8493+
| _ -> assert false
8494+
end
8495+
| Some spec -> spec in
8496+
build_bs_deps ( String_set.fold
8497+
(fun k acc -> k ^ "," ^ acc ) deps Ext_string.empty ) ;
8498+
if !watch_mode then watch ()
8499+
else ninja_command ninja ninja_args
84418500
end
84428501
end
84438502
(*with x ->

jscomp/bsb/bsb_default.ml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,12 @@ let set_ninja ~cwd p =
156156
type package_specs = String_set.t
157157

158158
let package_specs = ref (String_set.singleton Literals.commonjs)
159+
let package_specs_overriden = ref false
159160

160161
let get_package_specs () = !package_specs
161162

162163
let set_package_specs_from_array arr =
164+
if not !package_specs_overriden then
163165
let new_package_specs =
164166
arr
165167
|> get_list_string
@@ -172,6 +174,22 @@ let set_package_specs_from_array arr =
172174
) String_set.empty in
173175
package_specs := new_package_specs
174176

177+
178+
179+
180+
let internal_override_package_specs str =
181+
package_specs_overriden := true ;
182+
let lst = Ext_string.split ~keep_empty:false str ',' in
183+
package_specs :=
184+
List.fold_left (fun acc x ->
185+
let v =
186+
if x = Literals.amdjs || x = Literals.commonjs || x = Literals.goog then String_set.add x acc
187+
else
188+
failwith ("Unkonwn package spec" ^ x) in
189+
v
190+
) String_set.empty lst
191+
192+
175193
let generate_merlin = ref false
176194

177195
let get_generate_merlin () = !generate_merlin

jscomp/bsb/bsb_default.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ val set_ninja : cwd:string -> string -> unit
6161
type package_specs = String_set.t
6262
val get_package_specs : unit -> package_specs
6363
val set_package_specs_from_array : Ext_json.t array -> unit
64+
val internal_override_package_specs : string -> unit
65+
6466

6567
val get_generate_merlin : unit -> bool
6668
val set_generate_merlin : bool -> unit

0 commit comments

Comments
 (0)