about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/go-modules/generic/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/go-modules/generic/default.nix')
-rw-r--r--nixpkgs/pkgs/development/go-modules/generic/default.nix64
1 files changed, 28 insertions, 36 deletions
diff --git a/nixpkgs/pkgs/development/go-modules/generic/default.nix b/nixpkgs/pkgs/development/go-modules/generic/default.nix
index de7bd429dab8..26d9e1e830a8 100644
--- a/nixpkgs/pkgs/development/go-modules/generic/default.nix
+++ b/nixpkgs/pkgs/development/go-modules/generic/default.nix
@@ -1,4 +1,4 @@
-{ go, cacert, git, lib, removeReferencesTo, stdenv, vend }:
+{ go, cacert, git, lib, stdenv, vend }:
 
 let
   buildGoPackage =
@@ -38,6 +38,9 @@ let
 
     , meta ? {}
 
+    # Not needed with buildGoModule
+    , goPackagePath ? null
+
     , ... }@args':
 
     with builtins;
@@ -45,15 +48,7 @@ let
     let
       args = removeAttrs args' [ "overrideModAttrs" "vendorSha256" "disabled" ];
 
-      removeReferences = [ ] ++ lib.optional (!allowGoReference) go;
-
-      removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
-
-      deleteFlag = if deleteVendor then "true" else "false";
-
-      vendCommand = if runVend then "${vend}/bin/vend" else "false";
-
-      go-modules = if vendorSha256 != null then go.stdenv.mkDerivation (let modArgs = {
+      go-modules = if vendorSha256 != null then stdenv.mkDerivation (let modArgs = {
 
         name = "${name}-go-modules";
 
@@ -83,27 +78,26 @@ let
 
         buildPhase = args.modBuildPhase or ''
           runHook preBuild
-
-          if [ ${deleteFlag} == "true" ]; then
-            if [ ! -d vendor ]; then
-              echo "vendor folder does not exist, 'deleteVendor' is not needed"
-              exit 10
-            else
-              rm -rf vendor
-            fi
+        '' + lib.optionalString (deleteVendor == true) ''
+          if [ ! -d vendor ]; then
+            echo "vendor folder does not exist, 'deleteVendor' is not needed"
+            exit 10
+          else
+            rm -rf vendor
           fi
-
+        '' + ''
           if [ -d vendor ]; then
             echo "vendor folder exists, please set 'vendorSha256 = null;' in your expression"
             exit 10
           fi
 
-          if [ ${vendCommand} != "false" ]; then
-            echo running vend to rewrite vendor folder
-            ${vendCommand}
-          else
-            go mod vendor
-          fi
+        ${if runVend then ''
+          echo "running 'vend' to rewrite vendor folder"
+          ${vend}/bin/vend
+        '' else ''
+          go mod vendor
+        ''}
+
           mkdir -p vendor
 
           runHook postBuild
@@ -127,13 +121,13 @@ let
           }
       ) // overrideModAttrs modArgs) else "";
 
-      package = go.stdenv.mkDerivation (args // {
-        nativeBuildInputs = [ removeReferencesTo go ] ++ nativeBuildInputs;
+      package = stdenv.mkDerivation (args // {
+        nativeBuildInputs = [ go ] ++ nativeBuildInputs;
 
         inherit (go) GOOS GOARCH;
 
         GO111MODULE = "on";
-        GOFLAGS = "-mod=vendor";
+        GOFLAGS = [ "-mod=vendor" ] ++ lib.optionals (!allowGoReference) [ "-trimpath" ];
 
         configurePhase = args.configurePhase or ''
           runHook preConfigure
@@ -143,10 +137,10 @@ let
           export GOSUMDB=off
           export GOPROXY=off
           cd "$modRoot"
-          if [ -n "${go-modules}" ]; then
-              rm -rf vendor
-              ln -s ${go-modules} vendor
-          fi
+        '' + lib.optionalString (go-modules != "") ''
+          rm -rf vendor
+          cp -r --reflink=auto ${go-modules} vendor
+        '' + ''
 
           runHook postConfigure
         '';
@@ -236,10 +230,6 @@ let
           runHook postInstall
         '';
 
-        preFixup = (args.preFixup or "") + ''
-          find $out/{bin,libexec,lib} -type f 2>/dev/null | xargs -r ${removeExpr removeReferences} || true
-        '';
-
         strictDeps = true;
 
         disallowedReferences = lib.optional (!allowGoReference) go;
@@ -259,6 +249,8 @@ let
       };
     in if disabled then
       throw "${package.name} not supported for go ${go.meta.branch}"
+    else if (goPackagePath != null) then
+      throw "`goPackagePath` not needed with `buildGoModule`"
     else
       package;
 in