about summary refs log tree commit diff
path: root/pkgs/development/go-modules
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-05-22 15:57:36 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-05-22 15:57:36 +0200
commit09d06f5ffd867afc72d5ca6786f73aed2b80e207 (patch)
tree0b39699b6fae1ea7f5e6b40b2214c901eb9a578b /pkgs/development/go-modules
parentf106125f77ba2b3588f95ef58667763042f808c9 (diff)
parenta49afdf1743436ac07c9be9da1d27ea5461af571 (diff)
downloadnixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.tar
nixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.tar.gz
nixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.tar.bz2
nixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.tar.lz
nixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.tar.xz
nixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.tar.zst
nixlib-09d06f5ffd867afc72d5ca6786f73aed2b80e207.zip
Merge remote-tracking branch 'origin/master' into systemd-219
Conflicts:
	pkgs/development/libraries/libseccomp/default.nix
Diffstat (limited to 'pkgs/development/go-modules')
-rw-r--r--pkgs/development/go-modules/generic/default.nix103
1 files changed, 72 insertions, 31 deletions
diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix
index 76828784a9d5..f747ade72f27 100644
--- a/pkgs/development/go-modules/generic/default.nix
+++ b/pkgs/development/go-modules/generic/default.nix
@@ -1,32 +1,64 @@
 { go, govers, lib }:
 
-{ name, buildInputs ? []
+{ name, buildInputs ? [], passthru ? {}
+
+# Disabled flag
+, disabled ? false
 
 # Go import path of the package
 , goPackagePath
 
-, meta ? {}, ... } @ args:
+# Go package aliases
+, goPackageAliases ? [ ]
+
+# Extra sources to include in the gopath
+, extraSrcs ? [ ]
+
+, dontRenameImports ? false
+
+, meta ? {}, ... } @ args':
+
+if disabled then throw "${name} not supported for go ${go.meta.branch}" else
+
+let
+  args = lib.filterAttrs (name: _: name != "extraSrcs") args';
+in
+
+go.stdenv.mkDerivation (
+  (builtins.removeAttrs args [ "goPackageAliases" "disabled" ]) // {
 
-go.stdenv.mkDerivation ( args // {
   name = "go${go.meta.branch}-${name}";
-  buildInputs = [ go ] ++ buildInputs ++ (lib.optional (args ? renameImports) govers) ;
+  buildInputs = [ go ] ++ buildInputs ++ (lib.optional (!dontRenameImports) govers) ;
 
   configurePhase = args.configurePhase or ''
     runHook preConfigure
 
+    # Extract the source
     cd "$NIX_BUILD_TOP"
     mkdir -p "go/src/$(dirname "$goPackagePath")"
     mv "$sourceRoot" "go/src/$goPackagePath"
 
+  '' + lib.flip lib.concatMapStrings extraSrcs ({ src, goPackagePath }: ''
+    mkdir extraSrc
+    (cd extraSrc; unpackFile "${src}")
+    mkdir -p "go/src/$(dirname "${goPackagePath}")"
+    chmod -R u+w extraSrc/*
+    mv extraSrc/* "go/src/${goPackagePath}"
+    rmdir extraSrc
+
+  '') + ''
     GOPATH=$NIX_BUILD_TOP/go:$GOPATH
 
     runHook postConfigure
   '';
 
-  renameImports = lib.optionalString (args ? renameImports)
-                    (lib.concatMapStringsSep "\n"
-                      (cmdargs: "govers -m ${cmdargs}")
-                      args.renameImports);
+  renameImports = args.renameImports or (
+    let
+      inputsWithAliases = lib.filter (x: x ? goPackageAliases)
+        (buildInputs ++ (args.propagatedBuildInputs or [ ]));
+      rename = to: from: "echo Renaming '${from}' to '${to}'; govers -d -m ${from} ${to}";
+      renames = p: lib.concatMapStringsSep "\n" (rename p.goPackagePath) p.goPackageAliases;
+    in lib.concatMapStringsSep "\n" renames inputsWithAliases);
 
   buildPhase = args.buildPhase or ''
     runHook preBuild
@@ -34,16 +66,25 @@ go.stdenv.mkDerivation ( args // {
     runHook renameImports
 
     if [ -n "$subPackages" ] ; then
-	for p in $subPackages ; do
+        for p in $subPackages ; do
             go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $goPackagePath/$p
-	done
+        done
     else
-	find . -type d | while read d; do
-            for i in $d/*.go; do
-                go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $d
-                break
-	    done
-	done
+        (cd go/src
+        find $goPackagePath -type f -name \*.go -exec dirname {} \; | sort | uniq | while read d; do
+            echo "$d" | grep -q "/_" && continue
+            [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && continue
+            local OUT
+            if ! OUT="$(go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $d 2>&1)"; then
+                if ! echo "$OUT" | grep -q 'no buildable Go source files'; then
+                    echo "$OUT" >&2
+                    exit 1
+                fi
+            fi
+            if [ -n "$OUT" ]; then
+              echo "$OUT" >&2
+            fi
+        done)
     fi
 
     runHook postBuild
@@ -53,16 +94,14 @@ go.stdenv.mkDerivation ( args // {
     runHook preCheck
 
     if [ -n "$subPackages" ] ; then
-	for p in $subPackages ; do
+        for p in $subPackages ; do
             go test -p $NIX_BUILD_CORES -v $goPackagePath/$p
-	done
+        done
     else
-	find . -type d | while read d; do
-            for i in $d/*_test.go; do
-                go test -p $NIX_BUILD_CORES -v $d
-                break
-	    done
-	done
+        (cd go/src
+        find $goPackagePath -type f -name \*_test.go -exec dirname {} \; | sort | uniq | while read d; do
+            go test -p $NIX_BUILD_CORES -v $d
+        done)
     fi
 
     runHook postCheck
@@ -71,15 +110,15 @@ go.stdenv.mkDerivation ( args // {
   installPhase = args.installPhase or ''
     runHook preInstall
 
-    mkdir $out
+    mkdir -p $out
 
     if [ -z "$dontInstallSrc" ]; then
-        local dir
-        for d in pkg src; do
-            mkdir -p $out/share/go
-            dir="$NIX_BUILD_TOP/go/$d"
-            [ -e "$dir" ] && cp -r $dir $out/share/go
-        done
+        (cd "$NIX_BUILD_TOP/go"
+        find . -type f | while read f; do
+          echo "$f" | grep -q '^./\(src\|pkg/[^/]*\)/${goPackagePath}' || continue
+          mkdir -p "$(dirname "$out/share/go/$f")"
+          cp $NIX_BUILD_TOP/go/$f $out/share/go/$f
+        done)
     fi
 
     dir="$NIX_BUILD_TOP/go/bin"
@@ -88,6 +127,8 @@ go.stdenv.mkDerivation ( args // {
     runHook postInstall
   '';
 
+  passthru = passthru // lib.optionalAttrs (goPackageAliases != []) { inherit goPackageAliases; };
+
   meta = meta // {
     # add an extra maintainer to every package
     maintainers = (meta.maintainers or []) ++