diff options
author | Emery Hemingway <emery@vfemail.net> | 2015-01-31 10:51:20 -0500 |
---|---|---|
committer | Luca Bruno <lethalman88@gmail.com> | 2015-02-03 14:21:48 +0100 |
commit | faa5dccab86f599c4d4c0c74aa43ddc352fe9fd9 (patch) | |
tree | d866cc4e4f1db9b42fef11681219448c2418935e /pkgs/development/go-modules | |
parent | 2d19af84de6eb711bb421ac9224b0aa737a45ef0 (diff) | |
download | nixlib-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.nix | 84 |
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 ]; + }; +}) |