Skip to content

Commit

Permalink
Merge pull request #216 from lefessan/z-2023-06-09-cross-windows
Browse files Browse the repository at this point in the history
add 'drom dep --cross TARGET' to generate opam files for cross compil…
  • Loading branch information
lefessan authored Jun 12, 2023
2 parents a8847d6 + 59fc5df commit 63a5770
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 23 deletions.
34 changes: 18 additions & 16 deletions src/drom_lib/commandDep.ml
Original file line number Diff line number Diff line change
Expand Up @@ -181,18 +181,19 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
()
)

let generate_opam_for_windows ~args () =
EzFile.make_dir ~p:true "opam/windows";
let generate_opam_for_cross ~cross ~args () =
let dir = "opam" // cross in
EzFile.make_dir ~p:true dir;
let p, _inferred_dir = Project.get () in
let _args, share_args = args in
let share = Share.load ~args:share_args ~p () in
List.iter (fun package ->
let full_filename = "opam/windows" //
package.name ^ "-windows.opam" in
let full_filename = dir //
Printf.sprintf "%s-%s.opam" package.name cross in
EzFile.write_file full_filename
(Opam.opam_of_package ~windows:true Single share package)
(Opam.opam_of_package ~cross Single share package)
) p.packages;
Printf.eprintf "Cross compilation opam files generated in opam/windows/\n%!"
Printf.eprintf "Cross compilation opam files generated in %s/\n%!" dir

let cmd =
let package = ref None in
Expand All @@ -209,24 +210,25 @@ let cmd =
let share_args, share_specs = Share.args ~set:true () in
let args = (update_args, share_args) in
let specs = update_specs @ share_specs in
let opam4windows = ref false in
let cross = ref None in
EZCMD.sub cmd_name
(fun () ->
if !opam4windows then
generate_opam_for_windows ~args ()
else
action ~dep:!dep ~package:!package ~tool:!tool ~add:!add ~remove:!remove
~version:!version ~depname:!depname ~deptest:!deptest ~depdoc:!depdoc
~depopt:!depopt ~args )
match !cross with
| Some cross ->
generate_opam_for_cross ~cross ~args ()
| None ->
action ~dep:!dep ~package:!package ~tool:!tool ~add:!add ~remove:!remove
~version:!version ~depname:!depname ~deptest:!deptest ~depdoc:!depdoc
~depopt:!depopt ~args )
~args:
( specs
@ [ ( [ "package" ],
Arg.String (fun s -> package := Some s),
EZCMD.info ~docv:"PACKAGE" "Attach dependency to this package name"
);
( [ "opam4windows" ],
Arg.Unit (fun () -> opam4windows := true),
EZCMD.info "Dependency is a tool, not a library" );
( [ "cross" ],
Arg.String (fun s -> cross := Some s),
EZCMD.info ~docv:"TARGET" "Build opam packages for cross-compilation (TARGET=windows|osx)" );
( [ "tool" ],
Arg.Unit (fun () -> tool := true),
EZCMD.info "Dependency is a tool, not a library" );
Expand Down
18 changes: 11 additions & 7 deletions src/drom_lib/opam.ml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ let dev_repo p =
| Some s -> Some (Printf.sprintf "git+%s.git" s)
| None -> None

let opam_of_package ?(windows=false) kind share package =
let opam_of_package ?cross kind share package =
let p = package.project in
let open OpamParserTypes.FullPos in
let filename = "opam" in
Expand Down Expand Up @@ -72,11 +72,11 @@ let opam_of_package ?(windows=false) kind share package =
["sh" "-c" "./scripts/before.sh build '%%{name}%%'" ]
["dune" "build" "-p" %s "-j" jobs "@install"
|}
(if windows then
Printf.sprintf "\"%s\" \"-x\" \"windows\"" package.name
else
"name"
))
(match cross with
| None -> "name"
| Some cross ->
Printf.sprintf "\"%s\" \"-x\" \"%s\"" package.name cross
))
( if
match StringMap.find "no-opam-test" package.p_fields with
| exception Not_found -> false
Expand Down Expand Up @@ -118,7 +118,11 @@ let opam_of_package ?(windows=false) kind share package =
let depend_of_dep (name, d, is_library) =
let b = Buffer.create 100 in
Printf.bprintf b {| "%s" { |}
(if is_library && windows then name ^ "-windows" else name);
(if is_library then
match cross with
| None -> name
| Some cross -> name ^ "-" ^ cross
else name);
List.iteri
(fun i version ->
if i > 0 then Printf.bprintf b "& ";
Expand Down

0 comments on commit 63a5770

Please sign in to comment.