@@ -375,13 +375,15 @@ module Build_command = struct
375
375
]
376
376
;;
377
377
378
- let decode_fields_backwards_compatible =
378
+ let decode_fields ~ portable_lock_dir =
379
379
let open Decoder in
380
380
let parse_action =
381
- (let + action = Action. decode_pkg in
382
- Conditional_choice_or_all_platforms. Choice
383
- (Conditional_choice. singleton_all_platforms (Action action)))
384
- < |> Conditional_choice_or_all_platforms. decode decode_portable
381
+ if portable_lock_dir
382
+ then Conditional_choice_or_all_platforms. decode decode_portable
383
+ else
384
+ let + action = Action. decode_pkg in
385
+ Conditional_choice_or_all_platforms. Choice
386
+ (Conditional_choice. singleton_all_platforms (Action action))
385
387
in
386
388
fields_mutually_exclusive
387
389
~default: None
@@ -617,38 +619,40 @@ module Pkg = struct
617
619
let enabled_on_platforms = " enabled_on_platforms"
618
620
end
619
621
620
- let decode =
622
+ let decode ~ portable_lock_dir =
621
623
let open Decoder in
622
- let parse_install_command_backwards_compatible =
623
- (let + action = Action. decode_pkg in
624
- Conditional_choice_or_all_platforms. Choice
625
- (Conditional_choice. singleton_all_platforms action))
626
- < |> Conditional_choice_or_all_platforms. decode Action. decode_pkg
624
+ let parse_install_command =
625
+ if portable_lock_dir
626
+ then Conditional_choice_or_all_platforms. decode Action. decode_pkg
627
+ else
628
+ let + action = Action. decode_pkg in
629
+ Conditional_choice_or_all_platforms. Choice
630
+ (Conditional_choice. singleton_all_platforms action)
627
631
in
628
- let parse_depends_backwards_compatible =
629
- (let + depends = repeat Dependency. decode in
630
- Conditional_choice_or_all_platforms. Choice
631
- (Conditional_choice. singleton_all_platforms depends))
632
- < |> Conditional_choice_or_all_platforms. decode (enter @@ repeat Dependency. decode)
632
+ let parse_depends =
633
+ if portable_lock_dir
634
+ then Conditional_choice_or_all_platforms. decode (enter @@ repeat Dependency. decode)
635
+ else
636
+ let + depends = repeat Dependency. decode in
637
+ Conditional_choice_or_all_platforms. Choice
638
+ (Conditional_choice. singleton_all_platforms depends)
633
639
in
634
- let parse_depexts_backwards_compatible =
635
- (let + external_package_names = repeat string in
636
- [ { Depexts. external_package_names; enabled_if = `Always } ])
637
- < |> repeat Depexts. decode
640
+ let parse_depexts =
641
+ if portable_lock_dir
642
+ then repeat Depexts. decode
643
+ else
644
+ let + external_package_names = repeat string in
645
+ [ { Depexts. external_package_names; enabled_if = `Always } ]
638
646
in
639
647
let empty_choice = Conditional_choice_or_all_platforms. Choice [] in
640
648
enter
641
649
@@ fields
642
650
@@ let + version = field Fields. version Package_version. decode
643
651
and + install_command =
644
- field
645
- ~default: empty_choice
646
- Fields. install
647
- parse_install_command_backwards_compatible
648
- and + build_command = Build_command. decode_fields_backwards_compatible
649
- and + depends =
650
- field ~default: empty_choice Fields. depends parse_depends_backwards_compatible
651
- and + depexts = field ~default: [] Fields. depexts parse_depexts_backwards_compatible
652
+ field ~default: empty_choice Fields. install parse_install_command
653
+ and + build_command = Build_command. decode_fields ~portable_lock_dir
654
+ and + depends = field ~default: empty_choice Fields. depends parse_depends
655
+ and + depexts = field ~default: [] Fields. depexts parse_depexts
652
656
and + source = field_o Fields. source Source. decode
653
657
and + dev = field_b Fields. dev
654
658
and + avoid = field_b Fields. avoid
@@ -1198,10 +1202,7 @@ let decode_metadata =
1198
1202
~default: Solver_stats.Expanded_variable_bindings. empty
1199
1203
Solver_stats.Expanded_variable_bindings. decode
1200
1204
and + solved_for_platforms =
1201
- field
1202
- " solved_for_platforms"
1203
- ~default: (Loc. none, [] )
1204
- (located (repeat (enter Solver_env. decode)))
1205
+ field_o " solved_for_platforms" (located (repeat (enter Solver_env. decode)))
1205
1206
in
1206
1207
( ocaml
1207
1208
, dependency_hash
@@ -1464,6 +1465,7 @@ struct
1464
1465
;;
1465
1466
1466
1467
let load_pkg
1468
+ ~portable_lock_dir
1467
1469
~version
1468
1470
~lock_dir_path
1469
1471
~solved_for_platforms
@@ -1482,7 +1484,7 @@ struct
1482
1484
let parser =
1483
1485
let env = Pform.Env. pkg Dune_lang.Pkg. syntax version in
1484
1486
let decode =
1485
- Syntax. set Dune_lang.Pkg. syntax (Active version) Pkg. decode
1487
+ Syntax. set Dune_lang.Pkg. syntax (Active version) ( Pkg. decode ~portable_lock_dir )
1486
1488
|> Syntax. set Dune_lang.Stanza. syntax (Active Dune_lang.Stanza. latest_version)
1487
1489
in
1488
1490
String_with_vars. set_decoding_env env decode
@@ -1572,6 +1574,11 @@ struct
1572
1574
=
1573
1575
load_metadata (Path. relative lock_dir_path metadata_filename)
1574
1576
in
1577
+ let portable_lock_dir, solved_for_platforms =
1578
+ match solved_for_platforms with
1579
+ | Some x -> true , x
1580
+ | None -> false , (Loc. none, [] )
1581
+ in
1575
1582
let + packages =
1576
1583
Io. readdir_with_kinds lock_dir_path
1577
1584
>> | List. filter_map ~f: (fun (name , (kind : Unix.file_kind )) ->
@@ -1584,6 +1591,7 @@ struct
1584
1591
let _loc, solved_for_platforms = solved_for_platforms in
1585
1592
let + pkg =
1586
1593
load_pkg
1594
+ ~portable_lock_dir
1587
1595
~version
1588
1596
~lock_dir_path
1589
1597
~solved_for_platforms
0 commit comments