summary refs log tree commit diff
path: root/pkgs/development/go-modules
diff options
context:
space:
mode:
authorEmery Hemingway <emery@vfemail.net>2015-01-31 10:51:20 -0500
committerLuca Bruno <lethalman88@gmail.com>2015-02-03 14:21:48 +0100
commitfaa5dccab86f599c4d4c0c74aa43ddc352fe9fd9 (patch)
treed866cc4e4f1db9b42fef11681219448c2418935e /pkgs/development/go-modules
parent2d19af84de6eb711bb421ac9224b0aa737a45ef0 (diff)
downloadnixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.tar
nixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.tar.gz
nixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.tar.bz2
nixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.tar.lz
nixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.tar.xz
nixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.tar.zst
nixlib-faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9.zip
new Go support function 'buildGoPackage'
add a setupHook to the Go compiler that builds a GOPATH
new buildGoPackage function that overides the phases of stdenv
Diffstat (limited to 'pkgs/development/go-modules')
-rw-r--r--pkgs/development/go-modules/generic/default.nix84
1 files changed, 84 insertions, 0 deletions
diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix
new file mode 100644
index 000000000000..6822af54dcd7
--- /dev/null
+++ b/pkgs/development/go-modules/generic/default.nix
@@ -0,0 +1,84 @@
+{ go }:
+
+{ name, buildInputs ? []
+
+# Go import path of the package
+, goPackagePath
+
+, meta ? {}, ... } @ args:
+
+go.stdenv.mkDerivation ( args // {
+  name = "${go.name}-${name}";
+  buildInputs = [ go ] ++ buildInputs;
+
+  configurePhase = args.configurePhase or ''
+    runHook preConfigure
+
+    cd "$NIX_BUILD_TOP"
+    mkdir -p "go/src/$(dirname "$goPackagePath")"
+    mv "$sourceRoot" "go/src/$goPackagePath"
+
+    GOPATH=$NIX_BUILD_TOP/go:$GOPATH
+
+    runHook postConfigure
+  '';
+
+  buildPhase = args.buildPhase or ''
+    runHook preBuild
+
+    if [ -n "$subPackages" ] ; then
+	for p in $subPackages ; do
+            go install -p $NIX_BUILD_CORES -v $goPackagePath/$p
+	done
+    else
+	find . -type d | while read d; do
+            for i in $d/*.go; do
+                go install -p $NIX_BUILD_CORES -v $d
+                break
+	    done
+	done
+    fi
+
+    runHook postBuild
+  '';
+
+  checkPhase = args.checkPhase or ''
+    runHook preCheck
+
+    if [ -n "$subPackages" ] ; then
+	for p in $subPackages ; do
+            go test -p $NIX_BUILD_CORES -v $goPackagePath/$p
+	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
+    fi
+
+    runHook postCheck
+  '';
+
+  installPhase = args.installPhase or ''
+    runHook preInstall
+
+    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
+
+    dir="$NIX_BUILD_TOP/go/bin"
+    [ -e "$dir" ] && cp -r $dir $out
+
+    runHook postInstall
+  '';
+
+  meta = meta // {
+    # add an extra maintainer to every package
+    maintainers = (meta.maintainers or []) ++ [ go.stdenv.lib.maintainers.emery ];
+  };
+})