From 336e65d4a8dca16968ab24c1b89e08a5484d1561 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 1 Jul 2024 19:51:39 +0200 Subject: [PATCH 01/13] vcpkg{,-tool}: move large part of the wrapper to vcpkg-tool --- pkgs/by-name/vc/vcpkg-tool/package.nix | 23 +++++++++++++++++++---- pkgs/by-name/vc/vcpkg/package.nix | 22 +++++++--------------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 6882589f2c13..026273f781a1 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -7,7 +7,6 @@ , fmt , git , gzip -, makeWrapper , meson , ninja , openssh @@ -30,7 +29,6 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ cmake ninja - makeWrapper ]; buildInputs = [ @@ -47,7 +45,11 @@ stdenv.mkDerivation (finalAttrs: { "-DVCPKG_DEPENDENCY_CMAKERC=ON" ]; - postFixup = let + + # vcpkg needs two directories to write to that is independent of installation directory. + # Since vcpkg already creates $HOME/.vcpkg/ we use that to create a root where vcpkg can write into. + passAsFile = [ "vcpkgWrapper" ]; + vcpkgWrapper = let # These are the most common binaries used by vcpkg # Extra binaries can be added via overlay when needed runtimeDeps = [ @@ -63,7 +65,20 @@ stdenv.mkDerivation (finalAttrs: { zstd ] ++ extraRuntimeDeps; in '' - wrapProgram $out/bin/vcpkg --prefix PATH ${lib.makeBinPath runtimeDeps} + vcpkg_writable_path="$HOME/.vcpkg/root/" + + export PATH="${lib.makeBinPath runtimeDeps}''${PATH:+":$PATH"}" + + "${placeholder "out"}/bin/vcpkg" \ + --x-downloads-root="$vcpkg_writable_path"/downloads \ + --x-buildtrees-root="$vcpkg_writable_path"/buildtrees \ + --x-packages-root="$vcpkg_writable_path"/packages \ + "$@" + ''; + + postFixup = '' + mv "$out/bin/vcpkg" "$out/bin/.vcpkg-wrapped" + install -Dm555 "$vcpkgWrapperPath" "$out/bin/vcpkg" ''; meta = { diff --git a/pkgs/by-name/vc/vcpkg/package.nix b/pkgs/by-name/vc/vcpkg/package.nix index ed2df2e36f76..78b453b74b93 100644 --- a/pkgs/by-name/vc/vcpkg/package.nix +++ b/pkgs/by-name/vc/vcpkg/package.nix @@ -2,7 +2,7 @@ , stdenvNoCC , lib , vcpkg-tool -, writeShellScript +, makeWrapper }: stdenvNoCC.mkDerivation (finalAttrs: { @@ -16,25 +16,17 @@ stdenvNoCC.mkDerivation (finalAttrs: { hash = "sha256-eDpMGDtC44eh0elLWV0r1H/WbpVdZ5qMedKh7Ct50Cs="; }; - installPhase = let - # vcpkg needs two directories to write to that is independent of installation directory. - # Since vcpkg already creates $HOME/.vcpkg/ we use that to create a root where vcpkg can write into. - vcpkgScript = writeShellScript "vcpkg" '' - vcpkg_writable_path="$HOME/.vcpkg/root/" + nativeBuildInputs = [ makeWrapper ]; - VCPKG_ROOT="@out@/share/vcpkg" ${vcpkg-tool}/bin/vcpkg \ - --x-downloads-root="$vcpkg_writable_path"/downloads \ - --x-buildtrees-root="$vcpkg_writable_path"/buildtrees \ - --x-packages-root="$vcpkg_writable_path"/packages \ - "$@" - ''; - in '' + installPhase = '' runHook preInstall mkdir -p $out/bin $out/share/vcpkg/scripts/buildsystems cp --preserve=mode -r ./{docs,ports,triplets,scripts,.vcpkg-root,versions,LICENSE.txt} $out/share/vcpkg/ - substitute ${vcpkgScript} $out/bin/vcpkg --subst-var-by out $out - chmod +x $out/bin/vcpkg + + makeWrapper "${vcpkg-tool}/bin/vcpkg" "$out/bin/vcpkg" \ + --set-default VCPKG_ROOT "$out/share/vcpkg" + ln -s $out/bin/vcpkg $out/share/vcpkg/vcpkg touch $out/share/vcpkg/vcpkg.disable-metrics From 2d9298988328901192880da5d4999610f3d42143 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 1 Jul 2024 20:03:13 +0200 Subject: [PATCH 02/13] vcpkg-tool: ensure opinionated config is overridable - use overridable environment variables for input - prefix those variables with "NIX_", to communicate that this is something specific to nixpkgs - detect equal cli flags, and override envvars based on them - add preferred path "$XDG_CACHE_HOME/vcpkg" before "$HOME/.vcpkg/root" - set "--x-install-root" Co-authored-by: Edgar B <39066502+Guekka@users.noreply.github.com> --- pkgs/by-name/vc/vcpkg-tool/package.nix | 80 ++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 10 deletions(-) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 026273f781a1..312efb3806da 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -1,6 +1,7 @@ { lib , stdenv , fetchFromGitHub +, runtimeShell , cacert , cmake , cmakerc @@ -14,6 +15,7 @@ , zip , zstd , extraRuntimeDeps ? [] +, doWrap ? true }: stdenv.mkDerivation (finalAttrs: { pname = "vcpkg-tool"; @@ -46,12 +48,10 @@ stdenv.mkDerivation (finalAttrs: { ]; - # vcpkg needs two directories to write to that is independent of installation directory. - # Since vcpkg already creates $HOME/.vcpkg/ we use that to create a root where vcpkg can write into. passAsFile = [ "vcpkgWrapper" ]; vcpkgWrapper = let # These are the most common binaries used by vcpkg - # Extra binaries can be added via overlay when needed + # Extra binaries can be added through override when needed runtimeDeps = [ cacert cmake @@ -64,19 +64,79 @@ stdenv.mkDerivation (finalAttrs: { zip zstd ] ++ extraRuntimeDeps; + + # Apart from adding the runtime dependencies to $PATH, + # the wrapper will also override these arguments by default. + # This is to ensure that the executable does not try to + # write to the nix store. If the user tries to set any of the + # arguments themself, the wrapper will detect that the + # arguments are present, and prefer the user-provided value. + # + # It is also possible to override the cli arguments by + # settings either of the nix-specific environment variables. + argsWithDefault = [ + { + arg = "--downloads-root"; + env = "NIX_VCPKG_DOWNLOADS_ROOT"; + default = "$NIX_VCPKG_WRITABLE_PATH/downloads"; + } + { + arg = "--x-buildtrees-root"; + env = "NIX_VCPKG_BUILDTREES_ROOT"; + default = "$NIX_VCPKG_WRITABLE_PATH/buildtrees"; + } + { + arg = "--x-packages-root"; + env = "NIX_VCPKG_PACKAGES_ROOT"; + default = "$NIX_VCPKG_WRITABLE_PATH/packages"; + } + { + arg = "--x-install-root"; + env = "NIX_VCPKG_INSTALL_ROOT"; + default = "$NIX_VCPKG_WRITABLE_PATH/installed"; + } + ]; in '' - vcpkg_writable_path="$HOME/.vcpkg/root/" + #!${runtimeShell} + + NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-''${XDG_CACHE_HOME+"$XDG_CACHE_HOME/vcpkg"}} + NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-''${HOME+"$HOME/.vcpkg/root"}} + NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-''${TMP}} + NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-'/tmp'} + + ${lib.concatMapStringsSep "\n" ({ env, default, ... }: ''${env}=''${${env}-"${default}"}'') argsWithDefault} export PATH="${lib.makeBinPath runtimeDeps}''${PATH:+":$PATH"}" - "${placeholder "out"}/bin/vcpkg" \ - --x-downloads-root="$vcpkg_writable_path"/downloads \ - --x-buildtrees-root="$vcpkg_writable_path"/buildtrees \ - --x-packages-root="$vcpkg_writable_path"/packages \ - "$@" + ARGS=( "$@" ) + FINAL_NONMODIFIED_ARGS=() + + for (( i=0; i<''${#ARGS[@]}; i++ )); + do + case "''${ARGS[i]%%=*}" in + ${let + f = { arg, env, ... }: '' + '${arg}') + ${env}="''${ARGS[i]#*=}" + if [ "''$${env}" = '${arg}' ]; then + ${env}="''${ARGS[i+1]}" + ((i++)) + fi + ;; + ''; + in lib.concatMapStringsSep "\n" f argsWithDefault} + *) + FINAL_NONMODIFIED_ARGS+=(''${ARGS[i]}) + ;; + esac + done + + exec -a "$0" "${placeholder "out"}/bin/.vcpkg-wrapped" \ + ${lib.concatMapStringsSep "\n" ({ arg, env, ... }: " " + ''${arg}="''$${env}" \'') argsWithDefault} + "''${FINAL_NONMODIFIED_ARGS[@]}" ''; - postFixup = '' + postFixup = lib.optionalString doWrap '' mv "$out/bin/vcpkg" "$out/bin/.vcpkg-wrapped" install -Dm555 "$vcpkgWrapperPath" "$out/bin/vcpkg" ''; From aac9605ed39afecfc491661383bf4b722bd218c2 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 1 Jul 2024 20:06:14 +0200 Subject: [PATCH 03/13] vcpkg: add quotations --- pkgs/by-name/vc/vcpkg/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/vc/vcpkg/package.nix b/pkgs/by-name/vc/vcpkg/package.nix index 78b453b74b93..38946d4fbf7e 100644 --- a/pkgs/by-name/vc/vcpkg/package.nix +++ b/pkgs/by-name/vc/vcpkg/package.nix @@ -21,14 +21,14 @@ stdenvNoCC.mkDerivation (finalAttrs: { installPhase = '' runHook preInstall - mkdir -p $out/bin $out/share/vcpkg/scripts/buildsystems - cp --preserve=mode -r ./{docs,ports,triplets,scripts,.vcpkg-root,versions,LICENSE.txt} $out/share/vcpkg/ + mkdir -p "$out/bin" "$out/share/vcpkg/scripts/buildsystems" + cp --preserve=mode -r ./{docs,ports,triplets,scripts,.vcpkg-root,versions,LICENSE.txt} "$out/share/vcpkg/" makeWrapper "${vcpkg-tool}/bin/vcpkg" "$out/bin/vcpkg" \ --set-default VCPKG_ROOT "$out/share/vcpkg" - ln -s $out/bin/vcpkg $out/share/vcpkg/vcpkg - touch $out/share/vcpkg/vcpkg.disable-metrics + ln -s "$out/bin/vcpkg" "$out/share/vcpkg/vcpkg" + touch "$out/share/vcpkg/vcpkg.disable-metrics" runHook postInstall ''; From c91ba428dac0a91dd307e7fc6351c97470fe8dbd Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 1 Jul 2024 20:09:25 +0200 Subject: [PATCH 04/13] vcpkg: patch scripts to find arm cross-compilers automatically --- pkgs/by-name/vc/vcpkg/package.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkgs/by-name/vc/vcpkg/package.nix b/pkgs/by-name/vc/vcpkg/package.nix index 38946d4fbf7e..4618d7c7b7b4 100644 --- a/pkgs/by-name/vc/vcpkg/package.nix +++ b/pkgs/by-name/vc/vcpkg/package.nix @@ -18,6 +18,16 @@ stdenvNoCC.mkDerivation (finalAttrs: { nativeBuildInputs = [ makeWrapper ]; + postPatch = '' + substituteInPlace scripts/toolchains/linux.cmake \ + --replace-fail "aarch64-linux-gnu-as" "aarch64-unknown-linux-gnu-as" \ + --replace-fail "aarch64-linux-gnu-gcc" "aarch64-unknown-linux-gnu-gcc" \ + --replace-fail "aarch64-linux-gnu-g++" "aarch64-unknown-linux-gnu-g++" \ + --replace-fail "arm-linux-gnueabihf-as" "armv7l-unknown-linux-gnueabihf-as" \ + --replace-fail "arm-linux-gnueabihf-gcc" "armv7l-unknown-linux-gnueabihf-gcc" \ + --replace-fail "arm-linux-gnueabihf-g++" "armv7l-unknown-linux-gnueabihf-g++" + ''; + installPhase = '' runHook preInstall From d801c41d12dc8bc6b5c94f82edbe6f6f6d1d508e Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 1 Jul 2024 20:11:46 +0200 Subject: [PATCH 05/13] vcpkg-tool: add missing runtime deps --- pkgs/by-name/vc/vcpkg-tool/package.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 312efb3806da..0fcb045186e2 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -5,6 +5,7 @@ , cacert , cmake , cmakerc +, curl , fmt , git , gzip @@ -12,6 +13,7 @@ , ninja , openssh , python3 +, unzip , zip , zstd , extraRuntimeDeps ? [] @@ -55,12 +57,14 @@ stdenv.mkDerivation (finalAttrs: { runtimeDeps = [ cacert cmake + curl git gzip meson ninja openssh python3 + unzip zip zstd ] ++ extraRuntimeDeps; From 02fa2febc31d90adcfd6594e95775bafde448327 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 12 Jul 2024 11:19:45 +0200 Subject: [PATCH 06/13] vcpkg: add 'doWrap' flag --- pkgs/by-name/vc/vcpkg/package.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/vc/vcpkg/package.nix b/pkgs/by-name/vc/vcpkg/package.nix index 4618d7c7b7b4..1f36ab264bf1 100644 --- a/pkgs/by-name/vc/vcpkg/package.nix +++ b/pkgs/by-name/vc/vcpkg/package.nix @@ -3,6 +3,7 @@ , lib , vcpkg-tool , makeWrapper +, doWrap ? true }: stdenvNoCC.mkDerivation (finalAttrs: { @@ -34,8 +35,10 @@ stdenvNoCC.mkDerivation (finalAttrs: { mkdir -p "$out/bin" "$out/share/vcpkg/scripts/buildsystems" cp --preserve=mode -r ./{docs,ports,triplets,scripts,.vcpkg-root,versions,LICENSE.txt} "$out/share/vcpkg/" - makeWrapper "${vcpkg-tool}/bin/vcpkg" "$out/bin/vcpkg" \ - --set-default VCPKG_ROOT "$out/share/vcpkg" + ${lib.optionalString doWrap '' + makeWrapper "${vcpkg-tool}/bin/vcpkg" "$out/bin/vcpkg" \ + --set-default VCPKG_ROOT "$out/share/vcpkg" + ''} ln -s "$out/bin/vcpkg" "$out/share/vcpkg/vcpkg" touch "$out/share/vcpkg/vcpkg.disable-metrics" From f24b1fb11cc6460f21435b110a6311cc721a2dae Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 12 Jul 2024 13:36:57 +0200 Subject: [PATCH 07/13] vcpkg-tool: add debug-print functionality to wrapper --- pkgs/by-name/vc/vcpkg-tool/package.nix | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 0fcb045186e2..3110436da7a7 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -103,10 +103,21 @@ stdenv.mkDerivation (finalAttrs: { in '' #!${runtimeShell} - NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-''${XDG_CACHE_HOME+"$XDG_CACHE_HOME/vcpkg"}} - NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-''${HOME+"$HOME/.vcpkg/root"}} - NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-''${TMP}} - NIX_VCPKG_WRITABLE_PATH=''${NIX_VCPKG_WRITABLE_PATH:-'/tmp'} + get_vcpkg_path() { + if [[ -n $NIX_VCPKG_WRITABLE_PATH ]]; then + echo "$NIX_VCPKG_WRITABLE_PATH" + elif [[ -n $XDG_CACHE_HOME ]]; then + echo "$XDG_CACHE_HOME/vcpkg" + elif [[ -n $HOME ]]; then + echo "$HOME/.vcpkg/root" + elif [[ -n $TMP ]]; then + echo "$TMP" + else + echo "/tmp" + fi + } + + NIX_VCPKG_WRITABLE_PATH=$(get_vcpkg_path) ${lib.concatMapStringsSep "\n" ({ env, default, ... }: ''${env}=''${${env}-"${default}"}'') argsWithDefault} @@ -135,6 +146,11 @@ stdenv.mkDerivation (finalAttrs: { esac done + if [ "''${NIX_VCPKG_DEBUG_PRINT_ENVVARS-'false'}" = 'true' ]; then + ${lib.concatMapStringsSep "\n" ({ env, ... }: " " + ''echo "${env} = ''$${env}"'') argsWithDefault} + echo "" + fi + exec -a "$0" "${placeholder "out"}/bin/.vcpkg-wrapped" \ ${lib.concatMapStringsSep "\n" ({ arg, env, ... }: " " + ''${arg}="''$${env}" \'') argsWithDefault} "''${FINAL_NONMODIFIED_ARGS[@]}" From 2a2a64abc81017d07ba545b925a76d2155bad970 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 12 Jul 2024 15:35:37 +0200 Subject: [PATCH 08/13] vcpkg-tool: add basic test for wrapper --- pkgs/by-name/vc/vcpkg-tool/package.nix | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 3110436da7a7..5616846923aa 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -16,6 +16,8 @@ , unzip , zip , zstd +, runCommand +, writeText , extraRuntimeDeps ? [] , doWrap ? true }: @@ -161,6 +163,20 @@ stdenv.mkDerivation (finalAttrs: { install -Dm555 "$vcpkgWrapperPath" "$out/bin/vcpkg" ''; + passthru.tests = { + testWrapper = runCommand "vcpkg-tool-test-wrapper" { buildInputs = [ finalAttrs.finalPackage ]; } '' + export NIX_VCPKG_DEBUG_PRINT_ENVVARS=true + vcpkg --x-packages-root="test" --x-install-root="test2" contact > "$out" + + cat "$out" | head -n 4 | diff - ${writeText "vcpkg-tool-test-wrapper-expected" '' + NIX_VCPKG_DOWNLOADS_ROOT = /homeless-shelter/.vcpkg/root/downloads + NIX_VCPKG_BUILDTREES_ROOT = /homeless-shelter/.vcpkg/root/buildtrees + NIX_VCPKG_PACKAGES_ROOT = test + NIX_VCPKG_INSTALL_ROOT = test2 + ''} + ''; + }; + meta = { description = "Components of microsoft/vcpkg's binary"; mainProgram = "vcpkg"; From 7ca7de55631c488e654891f17b62ecc90333bede Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 12 Jul 2024 15:36:46 +0200 Subject: [PATCH 09/13] vcpkg-tool: add meta.changelog --- pkgs/by-name/vc/vcpkg-tool/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 5616846923aa..6f2476947e11 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -181,6 +181,7 @@ stdenv.mkDerivation (finalAttrs: { description = "Components of microsoft/vcpkg's binary"; mainProgram = "vcpkg"; homepage = "https://github.com/microsoft/vcpkg-tool"; + changelog = "https://github.com/microsoft/vcpkg-tool/releases/tag/${finalAttrs.src.rev}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ guekka gracicot ]; platforms = lib.platforms.all; From 746e20e83a101c84c879c1a94b1a83ff4224c5aa Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 12 Jul 2024 15:37:00 +0200 Subject: [PATCH 10/13] vcpkg-tool: add h7x4 as maintainer --- pkgs/by-name/vc/vcpkg-tool/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix index 6f2476947e11..5d6608e96cbc 100644 --- a/pkgs/by-name/vc/vcpkg-tool/package.nix +++ b/pkgs/by-name/vc/vcpkg-tool/package.nix @@ -183,7 +183,7 @@ stdenv.mkDerivation (finalAttrs: { homepage = "https://github.com/microsoft/vcpkg-tool"; changelog = "https://github.com/microsoft/vcpkg-tool/releases/tag/${finalAttrs.src.rev}"; license = lib.licenses.mit; - maintainers = with lib.maintainers; [ guekka gracicot ]; + maintainers = with lib.maintainers; [ guekka gracicot h7x4 ]; platforms = lib.platforms.all; }; }) From 6c5d58f82f2088ffb77df29f07d3efa6e9a1774c Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 12 Jul 2024 15:37:18 +0200 Subject: [PATCH 11/13] vcpkg: add h7x4 as maintainer --- pkgs/by-name/vc/vcpkg/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/vc/vcpkg/package.nix b/pkgs/by-name/vc/vcpkg/package.nix index 1f36ab264bf1..74e16ebf8465 100644 --- a/pkgs/by-name/vc/vcpkg/package.nix +++ b/pkgs/by-name/vc/vcpkg/package.nix @@ -51,7 +51,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { mainProgram = "vcpkg"; homepage = "https://vcpkg.io/"; license = lib.licenses.mit; - maintainers = with lib.maintainers; [ guekka gracicot ]; + maintainers = with lib.maintainers; [ guekka gracicot h7x4 ]; platforms = lib.platforms.all; }; }) From 84547e5f82feaa38248e40026b849a41cc472fb3 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 15 Jul 2024 10:06:00 +0200 Subject: [PATCH 12/13] vcpkg-tool-unwrapped: init --- pkgs/top-level/all-packages.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9450e906fa82..242e85e7074b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19595,6 +19595,8 @@ with pkgs; qcachegrind = libsForQt5.callPackage ../development/tools/analysis/qcachegrind { }; + vcpkg-tool-unwrapped = callPackage ../by-name/vc/vcpkg-tool/package.nix { doWrap = false; }; + visualvm = callPackage ../development/tools/java/visualvm { }; volta = callPackage ../development/tools/volta { }; From cce9bb28dc6aafd7d2e643877911905fd20047f3 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 15 Jul 2024 10:50:58 +0200 Subject: [PATCH 13/13] doc/packages/vcpkg: init --- doc/packages/index.md | 1 + doc/packages/vcpkg.section.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 doc/packages/vcpkg.section.md diff --git a/doc/packages/index.md b/doc/packages/index.md index 38dba5b3498f..69dd8c3b3bff 100644 --- a/doc/packages/index.md +++ b/doc/packages/index.md @@ -24,6 +24,7 @@ shell-helpers.section.md steam.section.md cataclysm-dda.section.md urxvt.section.md +vcpkg.section.md weechat.section.md xorg.section.md ``` diff --git a/doc/packages/vcpkg.section.md b/doc/packages/vcpkg.section.md new file mode 100644 index 000000000000..b0fa5fd22fd4 --- /dev/null +++ b/doc/packages/vcpkg.section.md @@ -0,0 +1,24 @@ +# VCPKG {#sec-vcpkg} + +The `vcpkg-tool` package has a wrapper around the `vcpkg` executable to avoid writing to the nix store. +The wrapper will also be present in `vcpkg`, unless you specify `vcpkg.override { vcpkg-tool = vcpkg-tool-unwrapped; }` + +The wrapper has been made in a way so that it will provide default cli arguments, but tries not to interfere if the user provides the same arguments. +The arguments also have corresponding environment variables that can be used as an alternative way of overriding these paths. + +Run the wrapper with the environment variable `NIX_VCPKG_DEBUG_PRINT_ENVVARS=true` to get a full list of corresponding environment variables. + +## Nix specific environment variables {#sec-vcpkg-nix-envvars} + +The wrapper also provides some new nix-specific environment variables that lets you control some of the wrapper functionality. + +- `NIX_VCPKG_WRITABLE_PATH = ` + + Set this environment variable to specify the path where `vcpkg` will store buildtime artifacts. + This will become the base path for all of the other paths. + +- `NIX_VCPKG_DEBUG_PRINT_ENVVARS = true | false` + + Set this to `true` for the wrapper to print the corresponding environment variables for the arguments that will be provided to the unwrapped executable. + The list of variables will be printed right before invoking `vcpkg`. + This can be useful if you suspect that the wrapper for some reason was unable to prioritize user-provided cli args over its default ones, or for fixing other issues like typos or unexpanded environment variables.