@@ -22,6 +22,7 @@ type t =
2222 ; depends : Package_dependency .t list
2323 ; conflicts : Package_dependency .t list
2424 ; depopts : Package_dependency .t list
25+ ; enabled_if : Blang .t option
2526 ; info : Package_info .t
2627 ; version : Package_version .t option
2728 ; has_opam_file : opam_file
@@ -55,6 +56,7 @@ let original_opam_file t = t.original_opam_file
5556let set_inside_opam_dir t ~dir = { t with opam_file = Name. file t.id.name ~dir }
5657let set_version_and_info t ~version ~info = { t with version; info }
5758let exclusive_dir t = t.exclusive_dir
59+ let enabled_if t = t.enabled_if
5860
5961let encode
6062 (name : Name.t )
@@ -75,6 +77,7 @@ let encode
7577 ; opam_file = _
7678 ; original_opam_file = _
7779 ; exclusive_dir
80+ ; enabled_if
7881 }
7982 =
8083 let open Encoder in
@@ -87,6 +90,7 @@ let encode
8790 ; field_l " depends" Package_dependency. encode depends
8891 ; field_l " conflicts" Package_dependency. encode conflicts
8992 ; field_l " depopts" Package_dependency. encode depopts
93+ ; field_o " enabled_if" Blang. encode enabled_if
9094 ; field_o " version" Package_version. encode version
9195 ; field " tags" (list string ) ~default: [] tags
9296 ; field_l
@@ -109,6 +113,11 @@ let decode_name ~version =
109113;;
110114
111115let decode =
116+ let enabled_if =
117+ String_with_vars. set_decoding_env
118+ Pform.Env. package_enabled_if
119+ (Blang.Ast. decode ~override_decode_bare_literal: None String_with_vars. decode)
120+ in
112121 let open Decoder in
113122 let name_map syntax of_list_map to_string name decode print_value error_msg =
114123 let + names = field ~default: [] name (syntax >>> repeat decode) in
@@ -133,6 +142,9 @@ let decode =
133142 and + depends = field ~default: [] " depends" (repeat Package_dependency. decode)
134143 and + conflicts = field ~default: [] " conflicts" (repeat Package_dependency. decode)
135144 and + depopts = field ~default: [] " depopts" (repeat Package_dependency. decode)
145+ and + enabled_if =
146+ (* CR rgrinberg: limit this to variables from [Sys_poll] *)
147+ field_o " enabled_if" (Syntax. since Stanza. syntax (3 , 21 ) >>> enabled_if)
136148 and + info = Package_info. decode ~since: (2 , 0 ) ()
137149 and + tags = field " tags" (enter (repeat string )) ~default: []
138150 and + exclusive_dir =
@@ -180,6 +192,7 @@ let decode =
180192 ; opam_file
181193 ; original_opam_file = None
182194 ; exclusive_dir
195+ ; enabled_if
183196 }
184197;;
185198
@@ -208,6 +221,7 @@ let to_dyn
208221 ; opam_file = _
209222 ; original_opam_file = _
210223 ; exclusive_dir = _
224+ ; enabled_if
211225 }
212226 =
213227 let open Dyn in
@@ -225,6 +239,7 @@ let to_dyn
225239 ; " deprecated_package_names" , Name.Map. to_dyn Loc. to_dyn_hum deprecated_package_names
226240 ; " sites" , Site.Map. to_dyn Section. to_dyn sites
227241 ; " allow_empty" , Bool allow_empty
242+ ; " enabled_if" , (option Blang. to_dyn) enabled_if
228243 ]
229244;;
230245
@@ -241,6 +256,7 @@ let create
241256 ~conflicts
242257 ~depends
243258 ~depopts
259+ ~enabled_if
244260 ~info
245261 ~has_opam_file
246262 ~dir
@@ -272,5 +288,6 @@ let create
272288 ; original_opam_file
273289 ; exclusive_dir =
274290 Option. map contents_basename ~f: (fun (loc , s ) -> loc, Path.Source. relative dir s)
291+ ; enabled_if
275292 }
276293;;
0 commit comments