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
This commit is contained in:
Emery Hemingway
2015-01-31 10:51:20 -05:00
committed by Luca Bruno
parent 2d19af84de
commit faa5dccab8
8 changed files with 375 additions and 0 deletions

View File

@@ -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 ];
};
})