goPackages: Split into multiple derivations

This should reduce the closure size for end users who only need go
binaries as well as reduce the size of closures hydra builders consume.

+44 -39
+1 -1
nixos/modules/services/misc/confd.nix
··· 63 64 package = mkOption { 65 description = "Confd package to use."; 66 - default = pkgs.goPackages.confd; 67 type = types.package; 68 }; 69 };
··· 63 64 package = mkOption { 65 description = "Confd package to use."; 66 + default = pkgs.confd; 67 type = types.package; 68 }; 69 };
+3 -3
nixos/modules/services/monitoring/grafana.nix
··· 200 201 staticRootPath = mkOption { 202 description = "Root path for static assets."; 203 - default = "${cfg.package}/share/go/src/github.com/grafana/grafana/public"; 204 type = types.str; 205 }; 206 207 package = mkOption { 208 description = "Package to use."; 209 - default = pkgs.goPackages.grafana; 210 type = types.package; 211 }; 212 ··· 319 wantedBy = ["multi-user.target"]; 320 after = ["networking.target"]; 321 serviceConfig = { 322 - ExecStart = "${cfg.package}/bin/grafana --config ${cfgFile} web"; 323 WorkingDirectory = cfg.dataDir; 324 User = "grafana"; 325 };
··· 200 201 staticRootPath = mkOption { 202 description = "Root path for static assets."; 203 + default = "${cfg.package.out}/share/go/src/github.com/grafana/grafana/public"; 204 type = types.str; 205 }; 206 207 package = mkOption { 208 description = "Package to use."; 209 + default = pkgs.grafana-backend; 210 type = types.package; 211 }; 212 ··· 319 wantedBy = ["multi-user.target"]; 320 after = ["networking.target"]; 321 serviceConfig = { 322 + ExecStart = "${cfg.package-backend}/bin/grafana --config ${cfgFile} web"; 323 WorkingDirectory = cfg.dataDir; 324 User = "grafana"; 325 };
+1 -1
nixos/modules/services/security/hologram.nix
··· 95 wantedBy = [ "multi-user.target" ]; 96 97 serviceConfig = { 98 - ExecStart = "${pkgs.goPackages.hologram}/bin/hologram-server --debug --conf ${cfgFile}"; 99 }; 100 }; 101 };
··· 95 wantedBy = [ "multi-user.target" ]; 96 97 serviceConfig = { 98 + ExecStart = "${pkgs.hologram}/bin/hologram-server --debug --conf ${cfgFile}"; 99 }; 100 }; 101 };
+13 -12
pkgs/development/go-modules/generic/default.nix
··· 129 runHook preInstall 130 131 mkdir -p $out 132 133 - if [ -z "$dontInstallSrc" ]; then 134 - pushd "$NIX_BUILD_TOP/go" 135 - while read f; do 136 - echo "$f" | grep -q '^./\(src\|pkg/[^/]*\)/${goPackagePath}' || continue 137 - mkdir -p "$(dirname "$out/share/go/$f")" 138 - cp "$NIX_BUILD_TOP/go/$f" "$out/share/go/$f" 139 - done < <(find . -type f) 140 - popd 141 - fi 142 - 143 dir="$NIX_BUILD_TOP/go/bin" 144 - [ -e "$dir" ] && cp -r $dir $out 145 146 runHook postInstall 147 ''; ··· 151 cat $file ${removeExpr removeReferences} > $file.tmp 152 mv $file.tmp $file 153 chmod +x $file 154 - done < <(find $out/bin -type f 2>/dev/null) 155 ''; 156 157 disallowedReferences = lib.optional (!allowGoReference) go ··· 160 passthru = passthru // lib.optionalAttrs (goPackageAliases != []) { inherit goPackageAliases; }; 161 162 enableParallelBuilding = enableParallelBuilding; 163 164 meta = { 165 # Add default meta information
··· 129 runHook preInstall 130 131 mkdir -p $out 132 + pushd "$NIX_BUILD_TOP/go" 133 + while read f; do 134 + echo "$f" | grep -q '^./\(src\|pkg/[^/]*\)/${goPackagePath}' || continue 135 + mkdir -p "$(dirname "$out/share/go/$f")" 136 + cp "$NIX_BUILD_TOP/go/$f" "$out/share/go/$f" 137 + done < <(find . -type f) 138 + popd 139 140 + mkdir $bin 141 dir="$NIX_BUILD_TOP/go/bin" 142 + [ -e "$dir" ] && cp -r $dir $bin 143 144 runHook postInstall 145 ''; ··· 149 cat $file ${removeExpr removeReferences} > $file.tmp 150 mv $file.tmp $file 151 chmod +x $file 152 + done < <(find $bin/bin -type f 2>/dev/null) 153 ''; 154 155 disallowedReferences = lib.optional (!allowGoReference) go ··· 158 passthru = passthru // lib.optionalAttrs (goPackageAliases != []) { inherit goPackageAliases; }; 159 160 enableParallelBuilding = enableParallelBuilding; 161 + 162 + # I prefer to call this dev but propagatedBuildInputs expects $out to exist 163 + outputs = [ "out" "bin" ]; 164 165 meta = { 166 # Add default meta information
+18 -13
pkgs/top-level/all-packages.nix
··· 818 819 clib = callPackage ../tools/package-management/clib { }; 820 821 - consul = goPackages.consul; 822 823 consul-ui = callPackage ../servers/consul/ui.nix { }; 824 825 - consul-alerts = goPackages.consul-alerts; 826 827 - consul-template = goPackages.consul-template; 828 829 corosync = callPackage ../servers/corosync { }; 830 ··· 948 949 mcrypt = callPackage ../tools/misc/mcrypt { }; 950 951 - mongodb-tools = goPackages.mongo-tools; 952 953 mstflint = callPackage ../tools/misc/mstflint { }; 954 ··· 1701 1702 gptfdisk = callPackage ../tools/system/gptfdisk { }; 1703 1704 - grafana = callPackage ../development/tools/misc/grafana { }; 1705 1706 grafx2 = callPackage ../applications/graphics/grafx2 {}; 1707 ··· 2153 lshw = callPackage ../tools/system/lshw { }; 2154 2155 lxc = callPackage ../os-specific/linux/lxc { }; 2156 - lxd = goPackages.lxd; 2157 2158 lzip = callPackage ../tools/compression/lzip { }; 2159 ··· 4074 4075 go-repo-root = callPackage ../development/tools/misc/go-repo-root { }; 4076 4077 - gox = goPackages.gox; 4078 4079 gprolog = callPackage ../development/compilers/gprolog { }; 4080 ··· 8664 go = go_1_4; 8665 buildGoPackage = import ../development/go-modules/generic { 8666 go = go_1_4; 8667 - govers = go14Packages.govers; 8668 inherit parallel lib; 8669 }; 8670 overrides = (config.goPackageOverrides or (p: {})) pkgs; ··· 8674 go = go_1_5; 8675 buildGoPackage = import ../development/go-modules/generic { 8676 go = go_1_5; 8677 - govers = go15Packages.govers; 8678 inherit parallel lib; 8679 }; 8680 overrides = (config.goPackageOverrides or (p: {})) pkgs; ··· 8958 8959 dovecot_pigeonhole = callPackage ../servers/mail/dovecot-pigeonhole { }; 8960 8961 - etcd = goPackages.etcd; 8962 8963 ejabberd = callPackage ../servers/xmpp/ejabberd { 8964 erlang = erlangR16; ··· 8975 v8 = v8_3_24_10; 8976 }; 8977 8978 - etcdctl = goPackages.etcd; 8979 8980 exim = callPackage ../servers/mail/exim { }; 8981 ··· 10084 10085 gotags = callPackage ../development/tools/gotags { }; 10086 10087 - golint = goPackages.lint; 10088 10089 godep = callPackage ../development/tools/godep { }; 10090 ··· 13668 13669 chessdb = callPackage ../games/chessdb { }; 13670 13671 construoBase = lowPrio (callPackage ../games/construo { 13672 mesa = null; 13673 freeglut = null; ··· 14529 camlp5 = ocamlPackages.camlp5_strict; 14530 }; 14531 14532 isabelle = import ../applications/science/logic/isabelle { 14533 inherit (pkgs) stdenv fetchurl nettools perl polyml; 14534 inherit (pkgs.emacs24Packages) proofgeneral; ··· 15130 15131 utf8proc = callPackage ../development/libraries/utf8proc { }; 15132 15133 - vault = goPackages.vault; 15134 15135 vbam = callPackage ../misc/emulators/vbam { 15136 inherit (xlibs) libpthreadstubs;
··· 818 819 clib = callPackage ../tools/package-management/clib { }; 820 821 + consul = goPackages.consul.bin // { outputs = [ "bin" ]; }; 822 823 consul-ui = callPackage ../servers/consul/ui.nix { }; 824 825 + consul-alerts = goPackages.consul-alerts.bin // { outputs = [ "bin" ]; }; 826 827 + consul-template = goPackages.consul-template.bin // { outputs = [ "bin" ]; }; 828 829 corosync = callPackage ../servers/corosync { }; 830 ··· 948 949 mcrypt = callPackage ../tools/misc/mcrypt { }; 950 951 + mongodb-tools = goPackages.mongo-tools.bin // { outputs = [ "bin" ]; }; 952 953 mstflint = callPackage ../tools/misc/mstflint { }; 954 ··· 1701 1702 gptfdisk = callPackage ../tools/system/gptfdisk { }; 1703 1704 + grafana-frontend = callPackage ../development/tools/misc/grafana { }; 1705 + grafana-backend = pkgs.goPackages.grafana.bin // { outputs = [ "bin" ]; }; 1706 1707 grafx2 = callPackage ../applications/graphics/grafx2 {}; 1708 ··· 2154 lshw = callPackage ../tools/system/lshw { }; 2155 2156 lxc = callPackage ../os-specific/linux/lxc { }; 2157 + lxd = goPackages.lxd.bin // { outputs = [ "bin" ]; }; 2158 2159 lzip = callPackage ../tools/compression/lzip { }; 2160 ··· 4075 4076 go-repo-root = callPackage ../development/tools/misc/go-repo-root { }; 4077 4078 + gox = goPackages.gox.bin // { outputs = [ "bin" ]; }; 4079 4080 gprolog = callPackage ../development/compilers/gprolog { }; 4081 ··· 8665 go = go_1_4; 8666 buildGoPackage = import ../development/go-modules/generic { 8667 go = go_1_4; 8668 + govers = go14Packages.govers.bin; 8669 inherit parallel lib; 8670 }; 8671 overrides = (config.goPackageOverrides or (p: {})) pkgs; ··· 8675 go = go_1_5; 8676 buildGoPackage = import ../development/go-modules/generic { 8677 go = go_1_5; 8678 + govers = go15Packages.govers.bin; 8679 inherit parallel lib; 8680 }; 8681 overrides = (config.goPackageOverrides or (p: {})) pkgs; ··· 8959 8960 dovecot_pigeonhole = callPackage ../servers/mail/dovecot-pigeonhole { }; 8961 8962 + etcd = goPackages.etcd.bin // { outputs = [ "bin" ]; }; 8963 8964 ejabberd = callPackage ../servers/xmpp/ejabberd { 8965 erlang = erlangR16; ··· 8976 v8 = v8_3_24_10; 8977 }; 8978 8979 + etcdctl = etcd; 8980 8981 exim = callPackage ../servers/mail/exim { }; 8982 ··· 10085 10086 gotags = callPackage ../development/tools/gotags { }; 10087 10088 + golint = goPackages.lint.bin // { outputs = [ "bin" ]; }; 10089 10090 godep = callPackage ../development/tools/godep { }; 10091 ··· 13669 13670 chessdb = callPackage ../games/chessdb { }; 13671 13672 + confd = pkgs.goPackages.conf.bin // { outputs = [ "bin" ]; }; 13673 + 13674 construoBase = lowPrio (callPackage ../games/construo { 13675 mesa = null; 13676 freeglut = null; ··· 14532 camlp5 = ocamlPackages.camlp5_strict; 14533 }; 14534 14535 + hologram = pkgs.goPackages.bin // { outputs = [ "bin" ]; }; 14536 + 14537 isabelle = import ../applications/science/logic/isabelle { 14538 inherit (pkgs) stdenv fetchurl nettools perl polyml; 14539 inherit (pkgs.emacs24Packages) proofgeneral; ··· 15135 15136 utf8proc = callPackage ../development/libraries/utf8proc { }; 15137 15138 + vault = goPackages.vault.bin // { outputs = [ "bin" ]; }; 15139 15140 vbam = callPackage ../misc/emulators/vbam { 15141 inherit (xlibs) libpthreadstubs;
+8 -9
pkgs/top-level/go-packages.nix
··· 130 131 preConfigure = '' 132 # Make the builtin tools available here 133 - mkdir -p $out/bin 134 eval $(go env | grep GOTOOLDIR) 135 find $GOTOOLDIR -type f | while read x; do 136 - ln -sv "$x" "$out/bin" 137 done 138 - export GOTOOLDIR=$out/bin 139 ''; 140 141 excludedPackages = "\\(" ··· 381 }; 382 383 consul = buildFromGitHub { 384 - rev = "a6317f2fb2ba9d5ae695f7fa703cfb30a1c59af1"; 385 - date = "2015-07-24"; 386 owner = "hashicorp"; 387 repo = "consul"; 388 - sha256 = "0jixpl9yksasqx9rkidx8qmqc59m34kiibsqfsv56g87wzyp89rs"; 389 390 buildInputs = [ 391 circbuf armon.go-metrics go-radix gomdb bolt consul-migrate go-checkpoint ··· 1326 repo = "lint"; 1327 sha256 = "1bj7zv534hyh87bp2vsbhp94qijc5nixb06li1dzfz9n0wcmlqw9"; 1328 excludedPackages = "testdata"; 1329 - dontInstallSrc = true; 1330 buildInputs = [ tools ]; 1331 }; 1332 ··· 1719 # Mongodb incorrectly names all of their binaries main 1720 # Let's work around this with our own installer 1721 installPhase = '' 1722 - mkdir -p $out/bin 1723 while read b; do 1724 rm -f go/bin/main 1725 go install $goPackagePath/$b/main 1726 - cp go/bin/main $out/bin/$b 1727 done < <(find go/src/$goPackagePath -name main | xargs dirname | xargs basename -a) 1728 ''; 1729 };
··· 130 131 preConfigure = '' 132 # Make the builtin tools available here 133 + mkdir -p $bin/bin 134 eval $(go env | grep GOTOOLDIR) 135 find $GOTOOLDIR -type f | while read x; do 136 + ln -sv "$x" "$binbin" 137 done 138 + export GOTOOLDIR=$bin/bin 139 ''; 140 141 excludedPackages = "\\(" ··· 381 }; 382 383 consul = buildFromGitHub { 384 + rev = "4adc0b5c660919e3f21c9a60f567fd872b9e3d1e"; 385 + date = "2015-08-27"; 386 owner = "hashicorp"; 387 repo = "consul"; 388 + sha256 = "1h4hbyr2c8yfmn5ijga5zx470mdplg231kbxbqfpvswrk69q89j3"; 389 390 buildInputs = [ 391 circbuf armon.go-metrics go-radix gomdb bolt consul-migrate go-checkpoint ··· 1326 repo = "lint"; 1327 sha256 = "1bj7zv534hyh87bp2vsbhp94qijc5nixb06li1dzfz9n0wcmlqw9"; 1328 excludedPackages = "testdata"; 1329 buildInputs = [ tools ]; 1330 }; 1331 ··· 1718 # Mongodb incorrectly names all of their binaries main 1719 # Let's work around this with our own installer 1720 installPhase = '' 1721 + mkdir -p $bin/bin 1722 while read b; do 1723 rm -f go/bin/main 1724 go install $goPackagePath/$b/main 1725 + cp go/bin/main $bin/bin/$b 1726 done < <(find go/src/$goPackagePath -name main | xargs dirname | xargs basename -a) 1727 ''; 1728 };