@@ -6758,6 +6758,8 @@ val set_ninja : cwd:string -> string -> unit
6758
6758
type package_specs = String_set .t
6759
6759
val get_package_specs : unit -> package_specs
6760
6760
val set_package_specs_from_array : Ext_json .t array -> unit
6761
+ val internal_override_package_specs : string -> unit
6762
+
6761
6763
6762
6764
val get_generate_merlin : unit -> bool
6763
6765
val set_generate_merlin : bool -> unit
@@ -6923,10 +6925,12 @@ let set_ninja ~cwd p =
6923
6925
type package_specs = String_set .t
6924
6926
6925
6927
let package_specs = ref (String_set. singleton Literals. commonjs)
6928
+ let package_specs_overriden = ref false
6926
6929
6927
6930
let get_package_specs () = ! package_specs
6928
6931
6929
6932
let set_package_specs_from_array arr =
6933
+ if not ! package_specs_overriden then
6930
6934
let new_package_specs =
6931
6935
arr
6932
6936
|> get_list_string
@@ -6939,6 +6943,22 @@ let set_package_specs_from_array arr =
6939
6943
) String_set. empty in
6940
6944
package_specs := new_package_specs
6941
6945
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
+
6942
6962
let generate_merlin = ref false
6943
6963
6944
6964
let get_generate_merlin () = ! generate_merlin
@@ -8281,8 +8301,7 @@ let targets = String_vec.make 5
8281
8301
8282
8302
let cwd = Sys. getcwd ()
8283
8303
8284
- let create_bs_config () =
8285
- ()
8304
+
8286
8305
let watch () =
8287
8306
let bsb_watcher =
8288
8307
Bsb_build_util. get_bsc_dir cwd // " bsb_watcher.js" in
@@ -8299,16 +8318,17 @@ let no_dev = "-no-dev"
8299
8318
let regen = " -regen"
8300
8319
let separator = " --"
8301
8320
8302
- let build_bs_deps () =
8321
+
8322
+ let internal_package_specs = " -internal-package-specs"
8323
+ let build_bs_deps package_specs =
8303
8324
let bsc_dir = Bsb_build_util. get_bsc_dir cwd in
8304
8325
let bsb_exe = bsc_dir // " bsb.exe" in
8305
8326
Bsb_default. walk_all_deps true cwd
8306
8327
(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
8310
8329
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 |]})
8312
8332
8313
8333
let clean_bs_deps () =
8314
8334
let bsc_dir = Bsb_build_util. get_bsc_dir cwd in
@@ -8319,31 +8339,31 @@ let clean_bs_deps () =
8319
8339
let annoymous filename =
8320
8340
String_vec. push filename targets
8321
8341
8342
+ let watch_mode = ref false
8343
+ let make_world = ref false
8322
8344
8323
-
8324
-
8345
+
8325
8346
let bsb_main_flags =
8326
8347
[
8327
- " -w" , Arg. Unit watch ,
8348
+ " -w" , Arg. Set watch_mode ,
8328
8349
" 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,
8338
8353
" Always regenerate build.ninja no matter bsconfig.json is changed or not (for debugging purpose)"
8339
8354
;
8355
+ internal_package_specs, Arg. String Bsb_default. internal_override_package_specs,
8356
+ " (internal)Overide package specs (in combination with -regen)" ;
8340
8357
" -clean-world" , Arg. Unit clean_bs_deps,
8341
8358
" Clean all bs dependencies" ;
8342
- " -make-world" , Arg. Unit build_bs_deps ,
8359
+ " -make-world" , Arg. Set make_world ,
8343
8360
" Build all dependencies and itself "
8344
8361
]
8345
8362
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 =
8347
8367
let output_deps = Bsb_config. lib_bs // bsdeps in
8348
8368
let reason =
8349
8369
if forced then " Regenerating ninja (triggered by command line -regen)"
@@ -8361,9 +8381,11 @@ let regenerate_ninja cwd bsc_dir forced =
8361
8381
stamp = (Unix. stat x).st_mtime
8362
8382
}
8363
8383
)
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 *)
8366
8387
end
8388
+ else None
8367
8389
8368
8390
let ninja_error_message = " ninja (required for bsb build system) is not installed, \n \
8369
8391
please visit https://github.com/ninja-build/ninja to have it installed\n "
@@ -8417,7 +8439,7 @@ let () =
8417
8439
(* see discussion #929 *)
8418
8440
if Array. length Sys. argv < = 1 then
8419
8441
begin
8420
- regenerate_ninja cwd bsc_dir false ;
8442
+ ignore ( regenerate_ninja cwd bsc_dir false ) ;
8421
8443
ninja_command ninja [||]
8422
8444
end
8423
8445
else
@@ -8427,17 +8449,54 @@ let () =
8427
8449
->
8428
8450
begin
8429
8451
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 ()
8432
8473
(* ninja is not triggered in this case *)
8433
8474
end
8434
8475
| `Split (bsb_args,ninja_args)
8435
8476
->
8436
8477
begin
8437
8478
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
8441
8500
end
8442
8501
end
8443
8502
(* with x ->
0 commit comments