From f21d65a86c73df6e71540b338a9583d7f602d448 Mon Sep 17 00:00:00 2001 From: Alpha DIALLO Date: Tue, 23 Apr 2024 19:19:57 +0200 Subject: [PATCH] Add CLI option to specify additional packages for internal Cygwin. --- src/client/opamClient.ml | 3 ++- src/client/opamClient.mli | 4 ++-- src/client/opamCommands.ml | 27 ++++++++++++++++++++++----- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/client/opamClient.ml b/src/client/opamClient.ml index 0b6919dbb85..f9e69554386 100644 --- a/src/client/opamClient.ml +++ b/src/client/opamClient.ml @@ -975,7 +975,7 @@ let windows_checks ?cygwin_setup ?git_location config = let config = match cygwin_setup with | Some `no -> config - | (Some (`internal | `default_location | `location _) | None) + | (Some (`internal | `internal_with_pkgs _ | `default_location | `location _) | None) as cygwin_setup -> if OpamSysPoll.os env = Some "win32" then match OpamSysPoll.os_distribution env with @@ -996,6 +996,7 @@ let windows_checks ?cygwin_setup ?git_location config = let cygcheck = match setup with | `internal -> install_cygwin_tools () + | `internal_with_pkgs _ -> install_cygwin_tools () | (`default_location | `location _ as setup) -> let cygroot = match setup with diff --git a/src/client/opamClient.mli b/src/client/opamClient.mli index b5c21793d27..57f622a9058 100644 --- a/src/client/opamClient.mli +++ b/src/client/opamClient.mli @@ -28,7 +28,7 @@ val init: ?env_hook:bool -> ?completion:bool -> ?check_sandbox:bool -> - ?cygwin_setup: [ `internal | `default_location | `location of dirname | `no ] -> + ?cygwin_setup: [ `internal | `internal_with_pkgs of OpamSysPkg.t list | `default_location | `location of dirname | `no ] -> ?git_location:(dirname, unit) either -> shell -> rw global_state * unlocked repos_state * atom list @@ -46,7 +46,7 @@ val reinit: ?init_config:OpamFile.InitConfig.t -> interactive:bool -> ?dot_profile:filename -> ?update_config:bool -> ?env_hook:bool -> ?completion:bool -> ?inplace:bool -> ?check_sandbox:bool -> ?bypass_checks:bool -> - ?cygwin_setup: [ `internal | `default_location | `location of dirname | `no ] -> + ?cygwin_setup: [ `internal | `internal_with_pkgs of OpamSysPkg.t list | `default_location | `location of dirname | `no ] -> ?git_location:(dirname, unit) either -> OpamFile.Config.t -> shell -> unit diff --git a/src/client/opamCommands.ml b/src/client/opamCommands.ml index 618b5a78a0f..5a3fac7f0e2 100644 --- a/src/client/opamCommands.ml +++ b/src/client/opamCommands.ml @@ -308,7 +308,7 @@ let init cli = mk_vflag ~cli `none [ cli_from ~experimental:true cli2_2, `internal, ["cygwin-internal-install"], - "Let opam setup and manage an internal Cygwin install (recommended)"; + "Let opam setup and manage an internal Cygwin install"; cli_from ~experimental:true cli2_2, `default_location, ["cygwin-local-install"], "Use preexistent Cygwin install"; @@ -319,6 +319,14 @@ let init cli = else Term.const `none in + let cygwin_packages = + if Sys.win32 then + mk_opt ~cli (cli_from ~experimental:true cli2_2) + ["cygwin-packages"] "CYGWIN_PACKAGES" "Specify Cygwin's packages to install" + Arg.(some (list string)) None + else + Term.const None + in let cygwin_location = if Sys.win32 then mk_opt ~cli (cli_from ~experimental:true cli2_2) @@ -351,7 +359,7 @@ let init cli = interactive update_config completion env_hook no_sandboxing shell dot_profile_o compiler no_compiler config_file no_config_file reinit show_opamrc bypass_checks - cygwin_internal cygwin_location git_location no_git_location + cygwin_internal cygwin_location git_location no_git_location cygwin_packages () = apply_global_options cli global_options; apply_build_options cli build_options; @@ -408,8 +416,16 @@ let init cli = OpamStd.Sys.guess_dot_profile shell >>| OpamFilename.of_string) in let cygwin_setup = + let cygwin_internal = + match cygwin_internal, cygwin_packages with + | `internal, Some pkgs -> `internal_with_pkgs (List.map OpamSysPkg.of_string pkgs) + | _, Some _ -> + OpamConsole.error_and_exit `Bad_arguments + "Option --cygwin-packages is only compatible with --cygwin-internal-install"; + | _ as setup, None -> setup + in match cygwin_internal, cygwin_location with - | `internal, Some _ -> + | (`internal | `internal_with_pkgs _) , Some _ -> OpamConsole.error_and_exit `Bad_arguments "Options --cygwin-internal-install and \ --cygwin-location are incompatible"; @@ -418,7 +434,7 @@ let init cli = Some `no | `none, None -> None | (`default_location | `none), Some dir -> Some (`location dir) - | (`internal | `default_location | `no) as setup, None -> Some setup + | (`internal | `internal_with_pkgs _ | `default_location | `no) as setup, None -> Some setup in let git_location = match git_location, no_git_location with @@ -527,7 +543,8 @@ let init cli = $setup_completion $env_hook $no_sandboxing $shell_opt cli cli_original $dot_profile_flag cli cli_original $compiler $no_compiler $config_file $no_config_file $reinit $show_default_opamrc - $bypass_checks $cygwin_internal $cygwin_location $git_location $no_git_location) + $bypass_checks $cygwin_internal $cygwin_location $git_location $no_git_location + $cygwin_packages) (* LIST *) let list_doc = "Display the list of available packages."