diff options
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/go/module.nix | 26 | ||||
-rw-r--r-- | pkgs/build-support/go/package.nix | 7 |
2 files changed, 23 insertions, 10 deletions
diff --git a/pkgs/build-support/go/module.nix b/pkgs/build-support/go/module.nix index 153b675d48aef..ab8491da34cd4 100644 --- a/pkgs/build-support/go/module.nix +++ b/pkgs/build-support/go/module.nix @@ -16,7 +16,12 @@ # # if vendorHash is null, then we won't fetch any dependencies and # rely on the vendor folder within the source. -, vendorHash ? args'.vendorSha256 or (throw "buildGoModule: vendorHash is missing") +, vendorHash ? throw ( + if args'?vendorSha256 then + "buildGoModule: Expect vendorHash instead of vendorSha256" + else + "buildGoModule: vendorHash is missing" + ) # Whether to delete the vendor folder supplied with the source. , deleteVendor ? false # Whether to fetch (go mod download) and proxy the vendor directory. @@ -41,6 +46,8 @@ , ldflags ? [ ] +, GOFLAGS ? [ ] + # needed for buildFlags{,Array} warning , buildFlags ? "" , buildFlagsArray ? "" @@ -49,7 +56,6 @@ }@args': assert goPackagePath != "" -> throw "`goPackagePath` is not needed with `buildGoModule`"; -assert (args' ? vendorHash && args' ? vendorSha256) -> throw "both `vendorHash` and `vendorSha256` set. only one can be set."; let args = removeAttrs args' [ "overrideModAttrs" "vendorSha256" "vendorHash" ]; @@ -145,7 +151,9 @@ let outputHashMode = "recursive"; outputHash = vendorHash; - outputHashAlgo = if args' ? vendorSha256 || vendorHash == "" then "sha256" else null; + # Handle empty vendorHash; avoid + # error: empty hash requires explicit hash algorithm + outputHashAlgo = if vendorHash == "" then "sha256" else null; }).overrideAttrs overrideModAttrs; package = stdenv.mkDerivation (args // { @@ -153,11 +161,13 @@ let inherit (go) GOOS GOARCH; - GOFLAGS = lib.optionals (!proxyVendor) [ "-mod=vendor" ] ++ lib.optionals (!allowGoReference) [ "-trimpath" ]; + GOFLAGS = GOFLAGS + ++ lib.optional (!proxyVendor) "-mod=vendor" + ++ lib.optional (!allowGoReference) "-trimpath"; inherit CGO_ENABLED enableParallelBuilding GO111MODULE GOTOOLCHAIN; # If not set to an explicit value, set the buildid empty for reproducibility. - ldflags = ldflags ++ lib.optionals (!lib.any (lib.hasPrefix "-buildid=") ldflags) [ "-buildid=" ]; + ldflags = ldflags ++ lib.optional (!lib.any (lib.hasPrefix "-buildid=") ldflags) "-buildid="; configurePhase = args.configurePhase or ('' runHook preConfigure @@ -294,8 +304,7 @@ let disallowedReferences = lib.optional (!allowGoReference) go; - passthru = passthru // { inherit go goModules vendorHash; } - // lib.optionalAttrs (args' ? vendorSha256 ) { inherit (args') vendorSha256; }; + passthru = passthru // { inherit go goModules vendorHash; }; meta = { # Add default meta information @@ -303,8 +312,9 @@ let } // meta; }); in -lib.warnIf (args' ? vendorSha256) "`vendorSha256` is deprecated. Use `vendorHash` instead" lib.warnIf (buildFlags != "" || buildFlagsArray != "") "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" +lib.warnIf (builtins.elem "-trimpath" GOFLAGS) "`-trimpath` is added by default to GOFLAGS by buildGoModule when allowGoReference isn't set to true" +lib.warnIf (lib.any (lib.hasPrefix "-mod=") GOFLAGS) "use `proxyVendor` to control Go module/vendor behavior instead of setting `-mod=` in GOFLAGS" package diff --git a/pkgs/build-support/go/package.nix b/pkgs/build-support/go/package.nix index 8ca5ca0dca011..94a459c267f36 100644 --- a/pkgs/build-support/go/package.nix +++ b/pkgs/build-support/go/package.nix @@ -39,6 +39,8 @@ , ldflags ? [ ] +, GOFLAGS ? [ ] + # needed for buildFlags{,Array} warning , buildFlags ? "" , buildFlagsArray ? "" @@ -89,12 +91,12 @@ let GO111MODULE = "off"; GOTOOLCHAIN = "local"; - GOFLAGS = lib.optionals (!allowGoReference) [ "-trimpath" ]; + GOFLAGS = GOFLAGS ++ lib.optional (!allowGoReference) "-trimpath" ; GOARM = toString (lib.intersectLists [(stdenv.hostPlatform.parsed.cpu.version or "")] ["5" "6" "7"]); # If not set to an explicit value, set the buildid empty for reproducibility. - ldflags = ldflags ++ lib.optionals (!lib.any (lib.hasPrefix "-buildid=") ldflags) [ "-buildid=" ]; + ldflags = ldflags ++ lib.optional (!lib.any (lib.hasPrefix "-buildid=") ldflags) "-buildid="; configurePhase = args.configurePhase or ('' runHook preConfigure @@ -286,4 +288,5 @@ in lib.warnIf (buildFlags != "" || buildFlagsArray != "") "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" +lib.warnIf (builtins.elem "-trimpath" GOFLAGS) "`-trimpath` is added by default to GOFLAGS by buildGoModule when allowGoReference isn't set to true" package |