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.nix263
1 files changed, 137 insertions, 126 deletions
diff --git a/nixpkgs/pkgs/development/go-modules/generic/default.nix b/nixpkgs/pkgs/development/go-modules/generic/default.nix
index e19f6a153ca0..de7bd429dab8 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 }:
+{ go, cacert, git, lib, removeReferencesTo, stdenv, vend }:
 
 let
   buildGoPackage =
@@ -22,8 +22,9 @@ let
     , vendorSha256
     # Whether to delete the vendor folder supplied with the source.
     , deleteVendor ? false
-
-    , modSha256 ? null
+    # Whether to run the vend tool to regenerate the vendor directory.
+    # This is useful if any dependency contain C files.
+    , runVend ? false
 
     # We want parallel builds by default
     , enableParallelBuilding ? true
@@ -50,6 +51,8 @@ let
 
       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 = {
 
         name = "${name}-go-modules";
@@ -70,47 +73,58 @@ let
         ];
 
         configurePhase = args.modConfigurePhase or ''
-      runHook preConfigure
+          runHook preConfigure
 
-      export GOCACHE=$TMPDIR/go-cache
-      export GOPATH="$TMPDIR/go"
-      cd "${modRoot}"
-      runHook postConfigure
-    '';
+          export GOCACHE=$TMPDIR/go-cache
+          export GOPATH="$TMPDIR/go"
+          cd "${modRoot}"
+          runHook postConfigure
+        '';
 
         buildPhase = args.modBuildPhase or ''
-      runHook preBuild
+          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
+          fi
 
-      if [ ${deleteFlag} == "true" ]; then
-        rm -rf vendor
-      fi
+          if [ -d vendor ]; then
+            echo "vendor folder exists, please set 'vendorSha256 = null;' in your expression"
+            exit 10
+          fi
 
-      if [ -e vendor ]; then
-        echo "vendor folder exists, please set 'vendorSha256=null;' or 'deleteVendor=true;' in your expression"
-        exit 10
-      fi
-      go mod vendor
-      mkdir -p vendor
+          if [ ${vendCommand} != "false" ]; then
+            echo running vend to rewrite vendor folder
+            ${vendCommand}
+          else
+            go mod vendor
+          fi
+          mkdir -p vendor
 
-      runHook postBuild
-    '';
+          runHook postBuild
+        '';
 
         installPhase = args.modInstallPhase or ''
-      runHook preInstall
+          runHook preInstall
 
-      # remove cached lookup results and tiles
-      cp -r --reflink=auto vendor $out
+          # remove cached lookup results and tiles
+          cp -r --reflink=auto vendor $out
 
-      runHook postInstall
-    '';
+          runHook postInstall
+        '';
 
         dontFixup = true;
       }; in modArgs // (
-        {
-          outputHashMode = "recursive";
-          outputHashAlgo = "sha256";
-          outputHash = vendorSha256;
-        }
+          {
+            outputHashMode = "recursive";
+            outputHashAlgo = "sha256";
+            outputHash = vendorSha256;
+          }
       ) // overrideModAttrs modArgs) else "";
 
       package = go.stdenv.mkDerivation (args // {
@@ -122,109 +136,109 @@ let
         GOFLAGS = "-mod=vendor";
 
         configurePhase = args.configurePhase or ''
-      runHook preConfigure
-
-      export GOCACHE=$TMPDIR/go-cache
-      export GOPATH="$TMPDIR/go"
-      export GOSUMDB=off
-      export GOPROXY=off
-      cd "$modRoot"
-      if [ -n "${go-modules}" ]; then
-          rm -rf vendor
-          ln -s ${go-modules} vendor
-      fi
+          runHook preConfigure
+
+          export GOCACHE=$TMPDIR/go-cache
+          export GOPATH="$TMPDIR/go"
+          export GOSUMDB=off
+          export GOPROXY=off
+          cd "$modRoot"
+          if [ -n "${go-modules}" ]; then
+              rm -rf vendor
+              ln -s ${go-modules} vendor
+          fi
 
-      runHook postConfigure
-    '';
+          runHook postConfigure
+        '';
 
         buildPhase = args.buildPhase or ''
-      runHook preBuild
-
-      buildGoDir() {
-        local d; local cmd;
-        cmd="$1"
-        d="$2"
-        . $TMPDIR/buildFlagsArray
-        echo "$d" | grep -q "\(/_\|examples\|Godeps\|testdata\)" && return 0
-        [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && return 0
-        local OUT
-        if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" -v -p $NIX_BUILD_CORES $d 2>&1)"; then
-          if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then
-            echo "$OUT" >&2
-            return 1
+          runHook preBuild
+
+          buildGoDir() {
+            local d; local cmd;
+            cmd="$1"
+            d="$2"
+            . $TMPDIR/buildFlagsArray
+            echo "$d" | grep -q "\(/_\|examples\|Godeps\|testdata\)" && return 0
+            [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && return 0
+            local OUT
+            if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" -v -p $NIX_BUILD_CORES $d 2>&1)"; then
+              if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then
+                echo "$OUT" >&2
+                return 1
+              fi
+            fi
+            if [ -n "$OUT" ]; then
+              echo "$OUT" >&2
+            fi
+            return 0
+          }
+
+          getGoDirs() {
+            local type;
+            type="$1"
+            if [ -n "$subPackages" ]; then
+              echo "$subPackages" | sed "s,\(^\| \),\1./,g"
+            else
+              find . -type f -name \*$type.go -exec dirname {} \; | grep -v "/vendor/" | sort --unique
+            fi
+          }
+
+          if (( "''${NIX_DEBUG:-0}" >= 1 )); then
+            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
-        fi
-        if [ -n "$OUT" ]; then
-          echo "$OUT" >&2
-        fi
-        return 0
-      }
-
-      getGoDirs() {
-        local type;
-        type="$1"
-        if [ -n "$subPackages" ]; then
-          echo "$subPackages" | sed "s,\(^\| \),\1./,g"
-        else
-          find . -type f -name \*$type.go -exec dirname {} \; | grep -v "/vendor/" | sort --unique
-        fi
-      }
-
-      if (( "''${NIX_DEBUG:-0}" >= 1 )); then
-        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
-      for pkg in $(getGoDirs ""); do
-        echo "Building subPackage $pkg"
-        buildGoDir install "$pkg"
-      done
-    '' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
-      # normalize cross-compiled builds w.r.t. native builds
-      (
-        dir=$GOPATH/bin/${go.GOOS}_${go.GOARCH}
-        if [[ -n "$(shopt -s nullglob; echo $dir/*)" ]]; then
-          mv $dir/* $dir/..
-        fi
-        if [[ -d $dir ]]; then
-          rmdir $dir
-        fi
-      )
-    '' + ''
-      runHook postBuild
-    '';
-
-        doCheck = args.doCheck or false;
+          for pkg in $(getGoDirs ""); do
+            echo "Building subPackage $pkg"
+            buildGoDir install "$pkg"
+          done
+        '' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+          # normalize cross-compiled builds w.r.t. native builds
+          (
+            dir=$GOPATH/bin/${go.GOOS}_${go.GOARCH}
+            if [[ -n "$(shopt -s nullglob; echo $dir/*)" ]]; then
+              mv $dir/* $dir/..
+            fi
+            if [[ -d $dir ]]; then
+              rmdir $dir
+            fi
+          )
+        '' + ''
+          runHook postBuild
+        '';
+
+        doCheck = args.doCheck or true;
         checkPhase = args.checkPhase or ''
-      runHook preCheck
+          runHook preCheck
 
-      for pkg in $(getGoDirs test); do
-        buildGoDir test "$pkg"
-      done
+          for pkg in $(getGoDirs test); do
+            buildGoDir test "$pkg"
+          done
 
-      runHook postCheck
-    '';
+          runHook postCheck
+        '';
 
         installPhase = args.installPhase or ''
-      runHook preInstall
+          runHook preInstall
 
-      mkdir -p $out
-      dir="$GOPATH/bin"
-      [ -e "$dir" ] && cp -r $dir $out
+          mkdir -p $out
+          dir="$GOPATH/bin"
+          [ -e "$dir" ] && cp -r $dir $out
 
-      runHook postInstall
-    '';
+          runHook postInstall
+        '';
 
         preFixup = (args.preFixup or "") + ''
-      find $out/bin -type f -exec ${removeExpr removeReferences} '{}' + || true
-    '';
+          find $out/{bin,libexec,lib} -type f 2>/dev/null | xargs -r ${removeExpr removeReferences} || true
+        '';
 
         strictDeps = true;
 
@@ -245,10 +259,7 @@ let
       };
     in if disabled then
       throw "${package.name} not supported for go ${go.meta.branch}"
-       else if modSha256 != null then
-         lib.warn "modSha256 is deprecated and will be removed in the next release (20.09), use vendorSha256 instead" (
-           import ./old.nix { inherit go cacert git lib removeReferencesTo stdenv; } args')
-       else
-         package;
+    else
+      package;
 in
   buildGoPackage