@@ -54,26 +54,23 @@ let install_opam_from_source_windows ?cyg ?prefix
5454 ?(enable_0install_solver = false ) ?(with_vendored_deps = false )
5555 ?(msvs = false ) ~branch ~hash () =
5656 Windows.Cygwin. run_sh ?cyg
57- " cd /tmp/opam-sources && cp -P -R -p . ../opam-build-%s && cd \
58- ../opam-build-%s && git checkout %s && git config --global --add \
59- safe.directory /tmp/opam-build-%s"
60- branch branch hash branch
61- @@ Windows.Cygwin. run_sh ?cyg " cd /tmp/opam-build-%s && make compiler %s"
62- branch
63- (if msvs then " OCAML_PORT=msvc64" else " " )
57+ " git clone /tmp/opam /tmp/opam-build-%s && cd /tmp/opam-build-%s && git \
58+ config --global --add safe.directory /tmp/opam-build-%s && git checkout \
59+ %s"
60+ branch branch branch hash
6461 @@ Windows.Cygwin. run_sh ?cyg
65- " cd /tmp/opam-build-%s && ./configure --enable-cold-check %s%s%s%s && \
66- make && make install"
62+ " cd /tmp/opam-build-%s && env \
63+ PATH=\" /tmp/opam/bootstrap/ocaml/bin:$PATH\" ./configure \
64+ --enable-cold-check %s%s%s%s && env \
65+ PATH=\" /tmp/opam/bootstrap/ocaml/bin:$PATH\" make && make install && \
66+ mv /usr/local/bin/opam.exe /usr/local/bin/opam-%s.exe"
6767 branch
6868 (if msvs then " " else " --with-private-runtime" )
69- (if with_vendored_deps then " --with-vendored_deps " else " " )
69+ (if with_vendored_deps then " --with-vendored-deps " else " " )
7070 (Option. fold prefix ~none: " " ~some: (fun prefix ->
7171 Printf. sprintf {| -- prefix= " %s" | } prefix))
7272 (if enable_0install_solver then " --with-0install-solver" else " " )
73- (* Docker doesn't allow copying executables from /usr/local/bin
74- (why??), so tar the opam installation. *)
75- @@ Windows.Cygwin. run_sh ?cyg
76- {| cd / usr/ local/ bin && tar - cf / cygdrive/ c/ opam.tar .| }
73+ branch
7774
7875let bubblewrap_minimum = (0 , 4 , 1 )
7976let bubblewrap_latest = (0 , 8 , 0 )
@@ -193,6 +190,7 @@ let header ?arch ?maintainer ?img ?tag d =
193190type opam_hashes = {
194191 opam_2_0_hash : string ;
195192 opam_2_1_hash : string ;
193+ opam_2_2_hash : string ;
196194 opam_master_hash : string ;
197195}
198196
@@ -212,12 +210,13 @@ let opam_master_branch opam_master_hash =
212210 enable_0install_solver = true ;
213211 with_vendored_deps = true ;
214212 public_name = " opam-dev" ;
215- aliases = [ " opam-2.2" ];
216- (* TODO: Remove/update when opam 2.2 is branched *)
213+ aliases = [] ;
217214 }
218215
219216let create_opam_branches opam_hashes =
220- let { opam_2_0_hash; opam_2_1_hash; opam_master_hash } = opam_hashes in
217+ let { opam_2_0_hash; opam_2_1_hash; opam_2_2_hash; opam_master_hash } =
218+ opam_hashes
219+ in
221220 ( opam_master_hash,
222221 [
223222 {
@@ -237,12 +236,26 @@ let create_opam_branches opam_hashes =
237236 public_name = " opam-2.1" ;
238237 aliases = [] ;
239238 };
239+ {
240+ branch = " 2.2" ;
241+ hash = opam_2_2_hash;
242+ enable_0install_solver = true ;
243+ with_vendored_deps = true ;
244+ public_name = " opam-2.2" ;
245+ aliases = [] ;
246+ };
240247 opam_master_branch opam_master_hash;
241248 ] )
242249
243250let create_opam_branches_windows opam_hashes =
244- let { opam_master_hash; _ } = opam_hashes in
245- (opam_master_hash, [ opam_master_branch opam_master_hash ])
251+ let opam_master_hash, branches = create_opam_branches opam_hashes in
252+ ( opam_master_hash,
253+ List. filter
254+ (* Note this is a lexicographic comparison
255+ * branches are "2.0", "2.1", "2.2" and "master"
256+ * Select "master" and 2.2 and later *)
257+ (fun { branch; _ } -> branch > = " 2.2" )
258+ branches )
246259
247260let install_opams ?prefix opam_master_hash opam_branches =
248261 run
@@ -261,8 +274,9 @@ let install_opams_windows ?cyg ?prefix ?msvs opam_master_hash opam_branches =
261274 Windows.Cygwin.Git. init ?cyg ~repos: [ " /tmp/opam-sources" ] ()
262275 @@ Windows.Cygwin. run_sh ?cyg
263276 " git clone https://github.com/ocaml/opam /tmp/opam && cd /tmp/opam && \
264- cp -P -R -p . ../opam-sources && git checkout %s"
277+ git checkout %s && make compiler %s"
265278 opam_master_hash
279+ (if Option. value ~default: false msvs then " OCAML_PORT=msvc64" else " " )
266280 @@ List. fold_left
267281 (fun acc { branch; hash; enable_0install_solver; with_vendored_deps; _ } ->
268282 acc
@@ -283,22 +297,23 @@ let copy_opams ~src ~dst opam_branches =
283297 aliases)
284298 empty opam_branches
285299
286- (* FIXME: only support building opam master for now *)
287- let copy_opams_windows = function
288- | [ { public_name; aliases; _ } ] ->
289- copy ~from: " opam-builder" ~src: [ {| C :\opam.tar| } ] ~dst: {| C :\TEMP \| } ()
290- @@ run
291- {| C :\cygwin64\bin\tar.exe - xf / cygdrive/ c/ TEMP / opam.tar - C / usr/ local/ bin && del C :\TEMP \opam.tar| }
292- @@ run
293- {| mklink C :\cygwin64\bin\% s.exe C :\cygwin64\usr\local\bin\opam.exe| }
294- public_name
300+ let copy_opams_windows opam_branches =
301+ List. fold_left
302+ (fun acc { branch; public_name; aliases; _ } ->
303+ acc
304+ (* Docker doesn't allow copying executables to /usr/local/bin *)
305+ @@ copy ~from: " opam-builder"
306+ ~src: [ {| C :\cygwin64\usr\local\bin\opam-| } ^ branch ^ " .exe" ]
307+ ~dst: ({| C :\| } ^ public_name ^ " .exe" )
308+ ()
309+ @@ run {| move C :\% s.exe C :\cygwin64\usr\local\bin| } public_name
295310 @@@ List. map
296311 (fun alias ->
297- run { | mklink C :\cygwin64\bin\ % s.exe C :\cygwin64\bin\ % s.exe | } alias
298- public_name)
299- aliases
300- |> crunch
301- | _ -> invalid_arg " Only a single opam branch can be build on Windows. "
312+ run
313+ { | mklink C :\cygwin64\bin\ % s.exe C :\cygwin64\usr\local\bin\ % s.exe | }
314+ alias public_name)
315+ aliases)
316+ empty opam_branches
302317
303318(* Apk based Dockerfile *)
304319let apk_opam2 ?(labels = [] ) ?arch ~opam_hashes distro () =
0 commit comments