diff options
Diffstat (limited to 'pkgs/build-support/go')
-rw-r--r-- | pkgs/build-support/go/module.nix | 85 | ||||
-rw-r--r-- | pkgs/build-support/go/package.nix | 4 |
2 files changed, 49 insertions, 40 deletions
diff --git a/pkgs/build-support/go/module.nix b/pkgs/build-support/go/module.nix index dce3ddb470909..e1e39918436b8 100644 --- a/pkgs/build-support/go/module.nix +++ b/pkgs/build-support/go/module.nix @@ -7,7 +7,7 @@ , patches ? [ ] # A function to override the goModules derivation -, overrideModAttrs ? (_oldAttrs: { }) +, overrideModAttrs ? (finalAttrs: previousAttrs: { }) # path to go.mod and go.sum directory , modRoot ? "./" @@ -58,18 +58,24 @@ assert goPackagePath != "" -> throw "`goPackagePath` is not needed with `buildGoModule`"; let - args = removeAttrs args' [ "overrideModAttrs" "vendorSha256" "vendorHash" ]; + args = removeAttrs args' [ "overrideModAttrs" "vendorSha256" ]; GO111MODULE = "on"; GOTOOLCHAIN = "local"; - goModules = if (vendorHash == null) then "" else +in +(stdenv.mkDerivation (finalAttrs: + args + // { + + inherit modRoot vendorHash deleteVendor proxyVendor; + goModules = if (finalAttrs.vendorHash == null) then "" else (stdenv.mkDerivation { - name = "${name}-go-modules"; + name = "${finalAttrs.name or "${finalAttrs.pname}-${finalAttrs.version}"}-go-modules"; - nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ go git cacert ]; + nativeBuildInputs = (finalAttrs.nativeBuildInputs or [ ]) ++ [ go git cacert ]; - inherit (args) src; + inherit (finalAttrs) src modRoot; inherit (go) GOOS GOARCH; inherit GO111MODULE GOTOOLCHAIN; @@ -77,14 +83,15 @@ let # argue it's not ideal. Changing it may break vendor hashes in Nixpkgs and # out in the wild. In anycase, it's documented in: # doc/languages-frameworks/go.section.md - prePatch = args.prePatch or ""; - patches = args.patches or [ ]; - patchFlags = args.patchFlags or [ ]; - postPatch = args.postPatch or ""; - preBuild = args.preBuild or ""; - postBuild = args.modPostBuild or ""; - sourceRoot = args.sourceRoot or ""; - env = args.env or { }; + prePatch = finalAttrs.prePatch or ""; + patches = finalAttrs.patches or [ ]; + patchFlags = finalAttrs.patchFlags or [ ]; + postPatch = finalAttrs.postPatch or ""; + preBuild = finalAttrs.preBuild or ""; + postBuild = finalAttrs.modPostBuild or ""; + sourceRoot = finalAttrs.sourceRoot or ""; + setSourceRoot = finalAttrs.setSourceRoot or ""; + env = finalAttrs.env or { }; impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ "GIT_PROXY_COMMAND" @@ -96,13 +103,13 @@ let runHook preConfigure export GOCACHE=$TMPDIR/go-cache export GOPATH="$TMPDIR/go" - cd "${modRoot}" + cd "$modRoot" runHook postConfigure ''; buildPhase = args.modBuildPhase or ('' runHook preBuild - '' + lib.optionalString deleteVendor '' + '' + lib.optionalString finalAttrs.deleteVendor '' if [ ! -d vendor ]; then echo "vendor folder does not exist, 'deleteVendor' is not needed" exit 10 @@ -115,7 +122,8 @@ let exit 10 fi - ${if proxyVendor then '' + export GIT_SSL_CAINFO=$NIX_SSL_CERT_FILE + ${if finalAttrs.proxyVendor then '' mkdir -p "''${GOPATH}/pkg/mod/cache/download" go mod download '' else '' @@ -133,7 +141,7 @@ let installPhase = args.modInstallPhase or '' runHook preInstall - ${if proxyVendor then '' + ${if finalAttrs.proxyVendor then '' rm -rf "''${GOPATH}/pkg/mod/cache/download/sumdb" cp -r --reflink=auto "''${GOPATH}/pkg/mod/cache/download" $out '' else '' @@ -151,20 +159,20 @@ let dontFixup = true; outputHashMode = "recursive"; - outputHash = vendorHash; + outputHash = finalAttrs.vendorHash; # Handle empty vendorHash; avoid # error: empty hash requires explicit hash algorithm - outputHashAlgo = if vendorHash == "" then "sha256" else null; - }).overrideAttrs overrideModAttrs; + outputHashAlgo = if finalAttrs.vendorHash == "" then "sha256" else null; + # in case an overlay clears passthru by accident, don't fail evaluation + }).overrideAttrs (finalAttrs.passthru.overrideModAttrs or overrideModAttrs); - package = stdenv.mkDerivation (args // { nativeBuildInputs = [ go ] ++ nativeBuildInputs; inherit (go) GOOS GOARCH; GOFLAGS = GOFLAGS ++ lib.warnIf (lib.any (lib.hasPrefix "-mod=") GOFLAGS) "use `proxyVendor` to control Go module/vendor behavior instead of setting `-mod=` in GOFLAGS" - (lib.optional (!proxyVendor) "-mod=vendor") + (lib.optional (!finalAttrs.proxyVendor) "-mod=vendor") ++ lib.warnIf (builtins.elem "-trimpath" GOFLAGS) "`-trimpath` is added by default to GOFLAGS by buildGoModule when allowGoReference isn't set to true" (lib.optional (!allowGoReference) "-trimpath"); inherit CGO_ENABLED enableParallelBuilding GO111MODULE GOTOOLCHAIN; @@ -180,12 +188,12 @@ let export GOPROXY=off export GOSUMDB=off cd "$modRoot" - '' + lib.optionalString (vendorHash != null) '' - ${if proxyVendor then '' - export GOPROXY=file://${goModules} + '' + lib.optionalString (finalAttrs.vendorHash != null) '' + ${if finalAttrs.proxyVendor then '' + export GOPROXY="file://$goModules" '' else '' rm -rf vendor - cp -r --reflink=auto ${goModules} vendor + cp -r --reflink=auto "$goModules" vendor ''} '' + '' @@ -200,7 +208,7 @@ let buildPhase = args.buildPhase or ( lib.warnIf (buildFlags != "" || buildFlagsArray != "") - "Use the `ldflags` and/or `tags` attributes instead of `buildFlags`/`buildFlagsArray`" + "`buildFlags`/`buildFlagsArray` are deprecated and will be removed in the 24.11 release. Use the `ldflags` and/or `tags` attributes instead of `buildFlags`/`buildFlagsArray`" lib.warnIf (builtins.elem "-buildid=" ldflags) "`-buildid=` is set by default as ldflag by buildGoModule" '' @@ -218,8 +226,7 @@ let buildGoDir() { local cmd="$1" dir="$2" - . $TMPDIR/buildFlagsArray - + declare -ga buildFlagsArray declare -a flags flags+=($buildFlags "''${buildFlagsArray[@]}") flags+=(''${tags:+-tags=''${tags// /,}}) @@ -258,11 +265,6 @@ let buildFlagsArray+=(-x) fi - if [ ''${#buildFlagsArray[@]} -ne 0 ]; then - declare -p buildFlagsArray > $TMPDIR/buildFlagsArray - else - touch $TMPDIR/buildFlagsArray - fi if [ -z "$enableParallelBuilding" ]; then export NIX_BUILD_CORES=1 fi @@ -312,12 +314,17 @@ let disallowedReferences = lib.optional (!allowGoReference) go; - passthru = passthru // { inherit go goModules vendorHash; }; + passthru = { + inherit go; + # Canonicallize `overrideModAttrs` as an attribute overlay. + # `passthru.overrideModAttrs` will be overridden + # when users want to override `goModules`. + overrideModAttrs = lib.toExtension overrideModAttrs; + } // passthru; meta = { # Add default meta information platforms = go.meta.platforms or lib.platforms.all; } // meta; - }); -in -package + } +)) diff --git a/pkgs/build-support/go/package.nix b/pkgs/build-support/go/package.nix index 94a459c267f36..754736dfbe6ef 100644 --- a/pkgs/build-support/go/package.nix +++ b/pkgs/build-support/go/package.nix @@ -286,7 +286,9 @@ let }); in lib.warnIf (buildFlags != "" || buildFlagsArray != "") - "Use the `ldflags` and/or `tags` attributes instead of `buildFlags`/`buildFlagsArray`" + "`buildFlags`/`buildFlagsArray` are deprecated and will be removed in the 24.11 release. Use the `ldflags` and/or `tags` attributes instead" lib.warnIf (builtins.elem "-buildid=" ldflags) "`-buildid=` is set by default as ldflag by buildGoModule" lib.warnIf (builtins.elem "-trimpath" GOFLAGS) "`-trimpath` is added by default to GOFLAGS by buildGoModule when allowGoReference isn't set to true" +lib.warn '''buildGoPackage' is deprecated and will be removed for the 25.05 release. +Please use 'buildGoModule' instead. Tips for migration can be found in the Go section of the nixpkgs manual.'' package |