@@ -119,7 +119,8 @@ type opam_branch = {
119119 branch : string ;
120120 hash : string ;
121121 enable_0install_solver : bool ;
122- public_names : string list ;
122+ public_name : string ;
123+ aliases : string list ;
123124}
124125
125126let create_opam_branches opam_hashes =
@@ -133,43 +134,53 @@ let create_opam_branches opam_hashes =
133134 branch = " 2.0" ;
134135 hash = opam_2_0_hash;
135136 enable_0install_solver = false ;
136- public_names = [" 2.0" ];
137+ public_name = " opam-2.0" ;
138+ aliases = [" opam" ]; (* Default *)
137139 };
138140 {
139141 branch = " 2.1" ;
140142 hash = opam_2_1_hash;
141143 enable_0install_solver = true ;
142- public_names = [" 2.1" ];
144+ public_name = " opam-2.1" ;
145+ aliases = [] ;
143146 };
144147 {
145148 branch = " master" ;
146149 hash = opam_master_hash;
147150 enable_0install_solver = true ;
148- public_names = [" 2.2" ; " dev" ]; (* TODO: Change when opam 2.2 is branched *)
151+ public_name = " opam-2.2" ; (* TODO: Change when opam 2.2 is branched *)
152+ aliases = [" opam-dev" ];
149153 };
150154 ]
151155
156+ let install_opams ?prefix f opam_branches =
157+ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
158+ let add_default_link = Some false in
159+ let enable_0install_solver = Some enable_0install_solver in
160+ acc @@ f ?add_default_link ?prefix ?enable_0install_solver ~branch ~hash ()
161+ ) empty opam_branches
162+
163+ let copy_opams ~src ~dst opam_branches =
164+ List. fold_left (fun acc {branch; public_name; aliases; _} ->
165+ acc @@
166+ copy ~from: " 0" ~src: [src^ branch] ~dst: (dst^ public_name) () @@@
167+ List. map (fun alias -> run " ln %s/%s %s/%s" dst public_name dst alias) aliases
168+ ) empty opam_branches
169+
152170(* Apk based Dockerfile *)
153171let apk_opam2 ?(labels =[] ) ?arch ~opam_hashes distro () =
154172 let opam_branches = create_opam_branches opam_hashes in
155173 let img, tag = D. base_distro_tag ?arch distro in
156174 header ?arch distro @@ label ((" distro_style" , " apk" ) :: labels)
157175 @@ Linux.Apk. install " build-base bzip2 git tar curl ca-certificates openssl"
158176 @@ Linux.Git. init ()
159- @@ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
160- acc @@ install_opam_from_source ~add_default_link: false ~enable_0install_solver ~branch ~hash ()
161- ) empty opam_branches
177+ @@ install_opams install_opam_from_source opam_branches
162178 @@ run " strip /usr/local/bin/opam*"
163179 @@ from ~tag img
164180 @@ Linux.Apk. add_repository ~tag: " edge" " https://dl-cdn.alpinelinux.org/alpine/edge/main"
165181 @@ Linux.Apk. add_repository ~tag: " edgecommunity" " https://dl-cdn.alpinelinux.org/alpine/edge/community"
166182 @@ Linux.Apk. add_repository ~tag: " testing" " https://dl-cdn.alpinelinux.org/alpine/edge/testing"
167- @@ List. fold_left (fun acc {branch; public_names; _} ->
168- List. fold_left (fun acc public_name ->
169- acc @@ copy ~from: " 0" ~src: [" /usr/local/bin/opam-" ^ branch] ~dst: (" /usr/bin/opam-" ^ public_name) ()
170- ) acc public_names
171- ) empty opam_branches
172- @@ run " ln /usr/bin/opam-2.0 /usr/bin/opam"
183+ @@ copy_opams ~src: " /usr/local/bin" ~dst: " /usr/bin" opam_branches
173184 @@ Linux.Apk. dev_packages ()
174185 @@ Linux.Apk. add_user ~uid: 1000 ~gid: 1000 ~sudo: true " opam"
175186 @@ install_bubblewrap_wrappers @@ Linux.Git. init ()
@@ -183,17 +194,10 @@ let apt_opam2 ?(labels=[]) ?arch distro ~opam_hashes () =
183194 @@ Linux.Apt. install " build-essential curl git libcap-dev sudo"
184195 @@ Linux.Git. init ()
185196 @@ install_bubblewrap_from_source ()
186- @@ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
187- acc @@ install_opam_from_source ~add_default_link: false ~enable_0install_solver ~branch ~hash ()
188- ) empty opam_branches
197+ @@ install_opams install_opam_from_source opam_branches
189198 @@ from ~tag img
190199 @@ copy ~from: " 0" ~src: [" /usr/local/bin/bwrap" ] ~dst: " /usr/bin/bwrap" ()
191- @@ List. fold_left (fun acc {branch; public_names; _} ->
192- List. fold_left (fun acc public_name ->
193- acc @@ copy ~from: " 0" ~src: [" /usr/local/bin/opam-" ^ branch] ~dst: (" /usr/bin/opam-" ^ public_name) ()
194- ) acc public_names
195- ) empty opam_branches
196- @@ run " ln /usr/bin/opam-2.0 /usr/bin/opam"
200+ @@ copy_opams ~src: " /usr/local/bin" ~dst: " /usr/bin" opam_branches
197201 @@ run " ln -fs /usr/share/zoneinfo/Europe/London /etc/localtime"
198202 @@ Linux.Apt. dev_packages ()
199203 @@ run " echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections"
@@ -224,22 +228,15 @@ let yum_opam2 ?(labels= []) ?arch ~yum_workaround ~enable_powertools ~opam_hashe
224228 @@ Linux.RPM. dev_packages ~extra: " which tar curl xz libcap-devel openssl" ()
225229 @@ Linux.Git. init ()
226230 @@ install_bubblewrap_from_source ()
227- @@ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
228- acc @@ install_opam_from_source ~prefix: " /usr" ~add_default_link: false ~enable_0install_solver ~branch ~hash ()
229- ) empty opam_branches
231+ @@ install_opams ~prefix: " /usr" install_opam_from_source opam_branches
230232 @@ from ~tag img
231233 @@ run " yum --version || dnf install -y yum"
232234 @@ workaround
233235 @@ Linux.RPM. update
234236 @@ Linux.RPM. dev_packages ()
235237 @@ (if enable_powertools then run " yum config-manager --set-enabled powertools" @@ Linux.RPM. update else empty)
236238 @@ copy ~from: " 0" ~src: [" /usr/local/bin/bwrap" ] ~dst: " /usr/bin/bwrap" ()
237- @@ List. fold_left (fun acc {branch; public_names; _} ->
238- List. fold_left (fun acc public_name ->
239- acc @@ copy ~from: " 0" ~src: [" /usr/bin/opam-" ^ branch] ~dst: (" /usr/bin/opam-" ^ public_name) ()
240- ) acc public_names
241- ) empty opam_branches
242- @@ run " ln /usr/bin/opam-2.0 /usr/bin/opam"
239+ @@ copy_opams ~src: " /usr/bin" ~dst: " /usr/bin" opam_branches
243240 @@ run
244241 " sed -i.bak '/LC_TIME LC_ALL LANGUAGE/aDefaults env_keep += \" OPAMYES OPAMJOBS OPAMVERBOSE\" ' /etc/sudoers"
245242 @@ Linux.RPM. add_user ~uid: 1000 ~sudo: true " opam"
@@ -254,18 +251,11 @@ let zypper_opam2 ?(labels=[]) ?arch ~opam_hashes distro () =
254251 @@ Linux.Zypper. dev_packages ()
255252 @@ Linux.Git. init ()
256253 @@ install_bubblewrap_from_source ()
257- @@ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
258- acc @@ install_opam_from_source ~prefix: " /usr" ~add_default_link: false ~enable_0install_solver ~branch ~hash ()
259- ) empty opam_branches
254+ @@ install_opams ~prefix: " /usr" install_opam_from_source opam_branches
260255 @@ from ~tag img
261256 @@ Linux.Zypper. dev_packages ()
262257 @@ copy ~from: " 0" ~src: [" /usr/local/bin/bwrap" ] ~dst: " /usr/bin/bwrap" ()
263- @@ List. fold_left (fun acc {branch; public_names; _} ->
264- List. fold_left (fun acc public_name ->
265- acc @@ copy ~from: " 0" ~src: [" /usr/bin/opam-" ^ branch] ~dst: (" /usr/bin/opam-" ^ public_name) ()
266- ) acc public_names
267- ) empty opam_branches
268- @@ run " ln /usr/bin/opam-2.0 /usr/bin/opam"
258+ @@ copy_opams ~src: " /usr/bin" ~dst: " /usr/bin" opam_branches
269259 @@ Linux.Zypper. add_user ~uid: 1000 ~sudo: true " opam"
270260 @@ install_bubblewrap_wrappers @@ Linux.Git. init ()
271261
@@ -276,17 +266,10 @@ let pacman_opam2 ?(labels=[]) ?arch ~opam_hashes distro () =
276266 header ?arch distro @@ label ((" distro_style" , " pacman" ) :: labels)
277267 @@ Linux.Pacman. dev_packages ()
278268 @@ Linux.Git. init ()
279- @@ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
280- acc @@ install_opam_from_source ~add_default_link: false ~enable_0install_solver ~branch ~hash ()
281- ) empty opam_branches
269+ @@ install_opams install_opam_from_source opam_branches
282270 @@ run " strip /usr/local/bin/opam*"
283271 @@ from ~tag img
284- @@ List. fold_left (fun acc {branch; public_names; _} ->
285- List. fold_left (fun acc public_name ->
286- acc @@ copy ~from: " 0" ~src: [" /usr/local/bin/opam-" ^ branch] ~dst: (" /usr/bin/opam-" ^ public_name) ()
287- ) acc public_names
288- ) empty opam_branches
289- @@ run " ln /usr/bin/opam-2.0 /usr/bin/opam"
272+ @@ copy_opams ~src: " /usr/local/bin" ~dst: " /usr/bin" opam_branches
290273 @@ Linux.Pacman. dev_packages ()
291274 @@ Linux.Pacman. add_user ~uid: 1000 ~sudo: true " opam"
292275 @@ install_bubblewrap_wrappers @@ Linux.Git. init ()
@@ -300,17 +283,10 @@ let cygwin_opam2 ?win10_revision ?(labels=[]) ?arch ~opam_hashes distro () =
300283 @@ user " ContainerAdministrator"
301284 @@ Windows.Cygwin. (setup ~cyg ~extra: (cygwin_packages () ) () )
302285 @@ Windows.Cygwin.Git. init ()
303- @@ List. fold_left (fun acc {branch; hash; enable_0install_solver; _} ->
304- acc @@ install_opam_from_source_cygwin ~add_default_link: false ~enable_0install_solver ~branch ~hash ()
305- ) empty opam_branches
286+ @@ install_opams install_opam_from_source_cygwin opam_branches
306287 @@ run " strip /usr/local/bin/opam*"
307288 @@ from ~tag img
308- @@ List. fold_left (fun acc {branch; public_names; _} ->
309- List. fold_left (fun acc public_name ->
310- acc @@ copy ~from: " 0" ~src: [" /usr/local/bin/opam-" ^ branch] ~dst: (" /usr/bin/opam-" ^ public_name) ()
311- ) acc public_names
312- ) empty opam_branches
313- @@ run " ln /usr/bin/opam-2.0 /usr/bin/opam"
289+ @@ copy_opams ~src: " /usr/local/bin" ~dst: " /usr/bin" opam_branches
314290 @@ Windows.Cygwin. (setup ~cyg ~extra: (cygwin_packages () ) () )
315291 @@ Windows.Cygwin.Git. init ()
316292
0 commit comments