Skip to content

Commit 6df7653

Browse files
authored
Merge pull request #215 from mtelvers/opam-2.2
Add opam 2.2
2 parents 2a85231 + 29cc6d8 commit 6df7653

File tree

2 files changed

+50
-34
lines changed

2 files changed

+50
-34
lines changed

src-opam/opam.ml

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

7875
let bubblewrap_minimum = (0, 4, 1)
7976
let bubblewrap_latest = (0, 8, 0)
@@ -193,6 +190,7 @@ let header ?arch ?maintainer ?img ?tag d =
193190
type 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

219216
let 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

243250
let 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

247260
let 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 *)
304319
let apk_opam2 ?(labels = []) ?arch ~opam_hashes distro () =

src-opam/opam.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ val install_opam_from_source :
4545
type opam_hashes = {
4646
opam_2_0_hash : string;
4747
opam_2_1_hash : string;
48+
opam_2_2_hash : string;
4849
opam_master_hash : string;
4950
}
5051

0 commit comments

Comments
 (0)