diff --git a/pkgs/development/compilers/go/1.5.nix b/pkgs/development/compilers/go/1.5.nix new file mode 100644 index 00000000000..a6084ae1289 --- /dev/null +++ b/pkgs/development/compilers/go/1.5.nix @@ -0,0 +1,116 @@ +{ stdenv, lib, fetchurl, bison, glibc, bash, coreutils, makeWrapper, tzdata, iana_etc, perl +, go_1_4, runCommand, which, patch +, Security }: + +let + loader386 = "${glibc}/lib/ld-linux.so.2"; + loaderAmd64 = "${glibc}/lib/ld-linux-x86-64.so.2"; + loaderArm = "${glibc}/lib/ld-linux.so.3"; + goBootstrap = runCommand "go-bootstrap" {} '' + mkdir $out + cp -rf ${go_1_4}/* $out/ + chmod -R u+w $out + find $out -name "*.c" -delete + cp -rf $out/bin/* $out/share/go/bin/ + ''; +in + +stdenv.mkDerivation rec { + name = "go-${version}"; + version = "1.5"; + + src = fetchurl { + url = "https://github.com/golang/go/archive/go${version}.tar.gz"; + sha256 = "03g3w6af74xggqlgwf5xriqzl9a0q17sp0qbyq8qs55qls07r81p"; + }; + + # perl is used for testing go vet + buildInputs = [ bison bash makeWrapper perl which patch ] + ++ lib.optionals stdenv.isLinux [ glibc ]; + + propagatedBuildInputs = lib.optional stdenv.isDarwin Security; + + # I'm not sure what go wants from its 'src', but the go installation manual + # describes an installation keeping the src. + preUnpack = '' + mkdir -p $out/share + cd $out/share + ''; + + prePatch = '' + # Ensure that the source directory is named go + cd .. + if [ ! -d go ]; then + mv * go + fi + + cd go + patchShebangs ./ # replace /bin/bash + + # Disabling the 'os/http/net' tests (they want files not available in + # chroot builds) + rm src/net/{listen_test.go,parse_test.go,port_test.go} + rm src/syscall/exec_linux_test.go + # !!! substituteInPlace does not seems to be effective. + # The os test wants to read files in an existing path. Just don't let it be /usr/bin. + sed -i 's,/usr/bin,'"`pwd`", src/os/os_test.go + sed -i 's,/bin/pwd,'"`type -P pwd`", src/os/os_test.go + # Disable the unix socket test + sed -i '/TestShutdownUnix/areturn' src/net/net_test.go + # Disable the hostname test + sed -i '/TestHostname/areturn' src/os/os_test.go + sed -i 's,/etc/protocols,${iana_etc}/etc/protocols,' src/net/lookup_unix.go + # ParseInLocation fails the test + sed -i '/TestParseInSydney/areturn' src/time/format_test.go + '' + lib.optionalString stdenv.isLinux '' + sed -i 's,/usr/share/zoneinfo/,${tzdata}/share/zoneinfo/,' src/time/zoneinfo_unix.go + '' + lib.optionalString stdenv.isDarwin '' + sed -i 's,"/etc","'"$TMPDIR"'",' src/os/os_test.go + sed -i 's,/_go_os_test,'"$TMPDIR"'/_go_os_test,' src/os/path_test.go + sed -i '/TestRead0/areturn' src/os/os_test.go + sed -i '/TestSystemRoots/areturn' src/crypto/x509/root_darwin_test.go + + touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd + ''; + + # TODO: port tools patch + patches = [ + ./cacert-1.5.patch + ]; + + GOOS = if stdenv.isDarwin then "darwin" else "linux"; + GOARCH = if stdenv.isDarwin then "amd64" + else if stdenv.system == "i686-linux" then "386" + else if stdenv.system == "x86_64-linux" then "amd64" + else if stdenv.isArm then "arm" + else throw "Unsupported system"; + GOARM = stdenv.lib.optionalString (stdenv.system == "armv5tel-linux") "5"; + GO386 = 387; # from Arch: don't assume sse2 on i686 + CGO_ENABLED = 1; + GOROOT_BOOTSTRAP = "${goBootstrap}/share/go"; + + # The go build actually checks for CC=*/clang and does something different, so we don't + # just want the generic `cc` here. + CC = if stdenv.isDarwin then "clang" else "cc"; + + installPhase = '' + mkdir -p "$out/bin" + export GOROOT="$(pwd)/" + export GOBIN="$out/bin" + export PATH="$GOBIN:$PATH" + cd ./src + echo Building + ./all.bash + ''; + + setupHook = ./setup-hook.sh; + + meta = with stdenv.lib; { + branch = "1.5"; + homepage = http://golang.org/; + description = "The Go Programming language"; + license = licenses.bsd3; + maintainers = with maintainers; [ cstrahan wkennington ]; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/pkgs/development/compilers/go/cacert-1.5.patch b/pkgs/development/compilers/go/cacert-1.5.patch new file mode 100644 index 00000000000..32c322a104e --- /dev/null +++ b/pkgs/development/compilers/go/cacert-1.5.patch @@ -0,0 +1,8 @@ +--- a/src/crypto/x509/root_linux.go 2015-08-19 23:06:11.115133174 +0200 ++++ b/src/crypto/x509/root_linux.go 2015-08-19 23:07:04.238507161 +0200 +@@ -10,4 +10,5 @@ + "/etc/pki/tls/certs/ca-bundle.crt", // Fedora/RHEL + "/etc/ssl/ca-bundle.pem", // OpenSUSE + "/etc/pki/tls/cacert.pem", // OpenELEC ++ "/etc/ssl/certs/ca-bundle.crt", // NixOS + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 83e1f48bb0c..0bdbb2bfa21 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4045,6 +4045,10 @@ let inherit (darwin.apple_sdk.frameworks) Security; }; + go_1_5 = callPackage ../development/compilers/go/1.5.nix { + inherit (darwin.apple_sdk.frameworks) Security; + }; + go = go_1_4; go-repo-root = callPackage ../development/tools/misc/go-repo-root { }; @@ -8631,6 +8635,16 @@ let overrides = (config.goPackageOverrides or (p: {})) pkgs; }); + go15Packages = recurseIntoAttrs (callPackage ./go-packages.nix { + go = go_1_5; + buildGoPackage = import ../development/go-modules/generic { + go = go_1_5; + govers = go15Packages.govers; + inherit lib; + }; + overrides = (config.goPackageOverrides or (p: {})) pkgs; + }); + goPackages = go14Packages; ### DEVELOPMENT / LISP MODULES