diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/go')
19 files changed, 1289 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/go/1.10.nix b/nixpkgs/pkgs/development/compilers/go/1.10.nix new file mode 100644 index 000000000000..5dce1529a8b8 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/1.10.nix @@ -0,0 +1,191 @@ +{ stdenv, fetchFromGitHub, tzdata, iana-etc, go_bootstrap, runCommand, writeScriptBin +, perl, which, pkgconfig, patch, procps, pcre, cacert, llvm, Security, Foundation +, fetchpatch +}: + +let + + inherit (stdenv.lib) optionals optionalString; + + clangHack = writeScriptBin "clang" '' + #!${stdenv.shell} + exec ${stdenv.cc}/bin/clang "$@" 2> >(sed '/ld: warning:.*ignoring unexpected dylib file/ d' 1>&2) + ''; + + goBootstrap = runCommand "go-bootstrap" {} '' + mkdir $out + cp -rf ${go_bootstrap}/* $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.10.8"; + + src = fetchFromGitHub { + owner = "golang"; + repo = "go"; + rev = "go${version}"; + sha256 = "1yynv105wh8pwiq61v4yg5i50k13g3x634x60mhxhv4gj9cq06cx"; + }; + + GOCACHE = "off"; + + # perl is used for testing go vet + nativeBuildInputs = [ perl which pkgconfig patch procps ]; + buildInputs = [ cacert pcre ] + ++ optionals stdenv.isLinux [ stdenv.cc.libc.out ] + ++ optionals (stdenv.hostPlatform.libc == "glibc") [ stdenv.cc.libc.static ]; + propagatedBuildInputs = optionals stdenv.isDarwin [ Security Foundation ]; + + hardeningDisable = [ "all" ]; + + prePatch = '' + patchShebangs ./ # replace /bin/bash + + # This source produces shell script at run time, + # and thus it is not corrected by patchShebangs. + substituteInPlace misc/cgo/testcarchive/carchive_test.go \ + --replace '#!/usr/bin/env bash' '#!${stdenv.shell}' + + # Disabling the 'os/http/net' tests (they want files not available in + # chroot builds) + rm src/net/{listen,parse}_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 + # ParseInLocation fails the test + sed -i '/TestParseInSydney/areturn' src/time/format_test.go + # Remove the api check as it never worked + sed -i '/src\/cmd\/api\/run.go/ireturn nil' src/cmd/dist/test.go + # Remove the coverage test as we have removed this utility + sed -i '/TestCoverageWithCgo/areturn' src/cmd/go/go_test.go + # Remove the timezone naming test + sed -i '/TestLoadFixed/areturn' src/time/time_test.go + # Remove disable setgid test + sed -i '/TestRespectSetgidDir/areturn' src/cmd/go/internal/work/build_test.go + # Remove cert tests that conflict with NixOS's cert resolution + sed -i '/TestEnvVars/areturn' src/crypto/x509/root_unix_test.go + # TestWritevError hangs sometimes + sed -i '/TestWritevError/areturn' src/net/writev_test.go + # TestVariousDeadlines fails sometimes + sed -i '/TestVariousDeadlines/areturn' src/net/timeout_test.go + + sed -i 's,/etc/protocols,${iana-etc}/etc/protocols,' src/net/lookup_unix.go + sed -i 's,/etc/services,${iana-etc}/etc/services,' src/net/port_unix.go + + # Disable cgo lookup tests not works, they depend on resolver + rm src/net/cgo_unix_test.go + + '' + optionalString stdenv.isLinux '' + sed -i 's,/usr/share/zoneinfo/,${tzdata}/share/zoneinfo/,' src/time/zoneinfo_unix.go + '' + optionalString stdenv.isAarch32 '' + sed -i '/TestCurrent/areturn' src/os/user/user_test.go + echo '#!${stdenv.shell}' > misc/cgo/testplugin/test.bash + '' + optionalString stdenv.isDarwin '' + substituteInPlace src/race.bash --replace \ + "sysctl machdep.cpu.extfeatures | grep -qv EM64T" true + sed -i 's,strings.Contains(.*sysctl.*,true {,' src/cmd/dist/util.go + 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 '/TestChdirAndGetwd/areturn' src/os/os_test.go + sed -i '/TestCredentialNoSetGroups/areturn' src/os/exec/exec_posix_test.go + sed -i '/TestCurrent/areturn' src/os/user/user_test.go + sed -i '/TestNohup/areturn' src/os/signal/signal_test.go + sed -i '/TestRead0/areturn' src/os/os_test.go + sed -i '/TestSystemRoots/areturn' src/crypto/x509/root_darwin_test.go + + sed -i '/TestGoInstallRebuildsStalePackagesInOtherGOPATH/areturn' src/cmd/go/go_test.go + sed -i '/TestBuildDashIInstallsDependencies/areturn' src/cmd/go/go_test.go + + sed -i '/TestDisasmExtld/areturn' src/cmd/objdump/objdump_test.go + + sed -i 's/unrecognized/unknown/' src/cmd/link/internal/ld/lib.go + + touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd + ''; + + patches = [ + ./remove-tools-1.9.patch + ./ssl-cert-file-1.9.patch + ./remove-test-pie.patch + ./creds-test.patch + ./go-1.9-skip-flaky-19608.patch + ./go-1.9-skip-flaky-20072.patch + (fetchpatch { + name = "missing_cpuHog_in_pprof_output.diff"; + url = "https://github.com/golang/go/commit/33110e2c.diff"; + sha256 = "04vh9lflbpz9xjvymyzhd91gkxiiwwz4lhglzl3r8z0lk45p96qn"; + }) + ]; + + postPatch = optionalString stdenv.isDarwin '' + echo "substitute hardcoded dsymutil with ${llvm}/bin/llvm-dsymutil" + substituteInPlace "src/cmd/link/internal/ld/lib.go" --replace dsymutil ${llvm}/bin/llvm-dsymutil + ''; + + GOOS = if stdenv.isDarwin then "darwin" else "linux"; + GOARCH = if stdenv.isDarwin then "amd64" + else if stdenv.hostPlatform.system == "i686-linux" then "386" + else if stdenv.hostPlatform.system == "x86_64-linux" then "amd64" + else if stdenv.isAarch32 then "arm" + else if stdenv.isAarch64 then "arm64" + else throw "Unsupported system"; + GOARM = optionalString (stdenv.hostPlatform.system == "armv5tel-linux") "5"; + GO386 = 387; # from Arch: don't assume sse2 on i686 + CGO_ENABLED = 1; + GOROOT_BOOTSTRAP = "${goBootstrap}/share/go"; + # Hopefully avoids test timeouts on Hydra + GO_TEST_TIMEOUT_SCALE = 3; + + # 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"; + + configurePhase = '' + mkdir -p $out/share/go/bin + export GOROOT=$out/share/go + export GOBIN=$GOROOT/bin + export PATH=$GOBIN:$PATH + ulimit -a + ''; + + postConfigure = optionalString stdenv.isDarwin '' + export PATH=${clangHack}/bin:$PATH + ''; + + installPhase = '' + cp -r . $GOROOT + ( cd $GOROOT/src && ./all.bash ) + ''; + + preFixup = '' + rm -r $out/share/go/pkg/bootstrap + ln -s $out/share/go/bin $out/bin + ''; + + setupHook = ./setup-hook.sh; + + disallowedReferences = [ go_bootstrap ]; + + meta = with stdenv.lib; { + branch = "1.10"; + homepage = http://golang.org/; + description = "The Go Programming language"; + license = licenses.bsd3; + maintainers = with maintainers; [ cstrahan orivej velovix mic92 ]; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/development/compilers/go/1.11.nix b/nixpkgs/pkgs/development/compilers/go/1.11.nix new file mode 100644 index 000000000000..1e3a63983f4a --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/1.11.nix @@ -0,0 +1,237 @@ +{ stdenv, fetchurl, tzdata, iana-etc, go_bootstrap, runCommand, writeScriptBin +, perl, which, pkgconfig, patch, procps, pcre, cacert, llvm, Security, Foundation +, mailcap, runtimeShell +, buildPackages, pkgsTargetTarget +}: + +let + + inherit (stdenv.lib) optionals optionalString; + + goBootstrap = runCommand "go-bootstrap" {} '' + mkdir $out + cp -rf ${buildPackages.go_bootstrap}/* $out/ + chmod -R u+w $out + find $out -name "*.c" -delete + cp -rf $out/bin/* $out/share/go/bin/ + ''; + + goarch = platform: { + "i686" = "386"; + "x86_64" = "amd64"; + "aarch64" = "arm64"; + "arm" = "arm"; + "armv5tel" = "arm"; + "armv6l" = "arm"; + "armv7l" = "arm"; + }.${platform.parsed.cpu.name} or (throw "Unsupported system"); + +in + +stdenv.mkDerivation rec { + name = "go-${version}"; + version = "1.11.6"; + + src = fetchurl { + url = "https://dl.google.com/go/go${version}.src.tar.gz"; + sha256 = "0cz1sdhxf9283p1p4jxb020pym0ncd0qlfh36r3hkv6bbm1a2vd9"; + }; + + # perl is used for testing go vet + nativeBuildInputs = [ perl which pkgconfig patch procps ]; + buildInputs = [ cacert pcre ] + ++ optionals stdenv.isLinux [ stdenv.cc.libc.out ] + ++ optionals (stdenv.hostPlatform.libc == "glibc") [ stdenv.cc.libc.static ]; + + + propagatedBuildInputs = optionals stdenv.isDarwin [ Security Foundation ]; + + hardeningDisable = [ "all" ]; + + prePatch = '' + patchShebangs ./ # replace /bin/bash + + # This source produces shell script at run time, + # and thus it is not corrected by patchShebangs. + substituteInPlace misc/cgo/testcarchive/carchive_test.go \ + --replace '#!/usr/bin/env bash' '#!${runtimeShell}' + + # Patch the mimetype database location which is missing on NixOS. + substituteInPlace src/mime/type_unix.go \ + --replace '/etc/mime.types' '${mailcap}/etc/mime.types' + + # Disabling the 'os/http/net' tests (they want files not available in + # chroot builds) + rm src/net/{listen,parse}_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 + # ParseInLocation fails the test + sed -i '/TestParseInSydney/areturn' src/time/format_test.go + # Remove the api check as it never worked + sed -i '/src\/cmd\/api\/run.go/ireturn nil' src/cmd/dist/test.go + # Remove the coverage test as we have removed this utility + sed -i '/TestCoverageWithCgo/areturn' src/cmd/go/go_test.go + # Remove the timezone naming test + sed -i '/TestLoadFixed/areturn' src/time/time_test.go + # Remove disable setgid test + sed -i '/TestRespectSetgidDir/areturn' src/cmd/go/internal/work/build_test.go + # Remove cert tests that conflict with NixOS's cert resolution + sed -i '/TestEnvVars/areturn' src/crypto/x509/root_unix_test.go + # TestWritevError hangs sometimes + sed -i '/TestWritevError/areturn' src/net/writev_test.go + # TestVariousDeadlines fails sometimes + sed -i '/TestVariousDeadlines/areturn' src/net/timeout_test.go + + sed -i 's,/etc/protocols,${iana-etc}/etc/protocols,' src/net/lookup_unix.go + sed -i 's,/etc/services,${iana-etc}/etc/services,' src/net/port_unix.go + + # Disable cgo lookup tests not works, they depend on resolver + rm src/net/cgo_unix_test.go + + '' + optionalString stdenv.isLinux '' + sed -i 's,/usr/share/zoneinfo/,${tzdata}/share/zoneinfo/,' src/time/zoneinfo_unix.go + '' + optionalString stdenv.isAarch32 '' + echo '#!${runtimeShell}' > misc/cgo/testplugin/test.bash + '' + optionalString stdenv.isDarwin '' + substituteInPlace src/race.bash --replace \ + "sysctl machdep.cpu.extfeatures | grep -qv EM64T" true + sed -i 's,strings.Contains(.*sysctl.*,true {,' src/cmd/dist/util.go + 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 '/TestChdirAndGetwd/areturn' src/os/os_test.go + sed -i '/TestCredentialNoSetGroups/areturn' src/os/exec/exec_posix_test.go + sed -i '/TestRead0/areturn' src/os/os_test.go + sed -i '/TestSystemRoots/areturn' src/crypto/x509/root_darwin_test.go + + sed -i '/TestGoInstallRebuildsStalePackagesInOtherGOPATH/areturn' src/cmd/go/go_test.go + sed -i '/TestBuildDashIInstallsDependencies/areturn' src/cmd/go/go_test.go + + sed -i '/TestDisasmExtld/areturn' src/cmd/objdump/objdump_test.go + + sed -i 's/unrecognized/unknown/' src/cmd/link/internal/ld/lib.go + + touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd + ''; + + patches = [ + ./remove-tools-1.11.patch + ./ssl-cert-file-1.12.1.patch + ./remove-test-pie.patch + ./creds-test.patch + ./go-1.9-skip-flaky-19608.patch + ./go-1.9-skip-flaky-20072.patch + ./remove-fhs-test-references.patch + ./skip-external-network-tests.patch + ./skip-nohup-tests.patch + # breaks under load: https://github.com/golang/go/issues/25628 + ./skip-test-extra-files-on-386.patch + ]; + + postPatch = optionalString stdenv.isDarwin '' + echo "substitute hardcoded dsymutil with ${llvm}/bin/llvm-dsymutil" + substituteInPlace "src/cmd/link/internal/ld/lib.go" --replace dsymutil ${llvm}/bin/llvm-dsymutil + ''; + + GOOS = stdenv.targetPlatform.parsed.kernel.name; + GOARCH = goarch stdenv.targetPlatform; + # GOHOSTOS/GOHOSTARCH must match the building system, not the host system. + # Go will nevertheless build a for host system that we will copy over in + # the install phase. + GOHOSTOS = stdenv.buildPlatform.parsed.kernel.name; + GOHOSTARCH = goarch stdenv.buildPlatform; + + # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those + # to be different from CC/CXX + CC_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then + "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc" + else + null; + CXX_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then + "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}c++" + else + null; + + GOARM = toString (stdenv.lib.intersectLists [(stdenv.hostPlatform.parsed.cpu.version or "")] ["5" "6" "7"]); + GO386 = 387; # from Arch: don't assume sse2 on i686 + CGO_ENABLED = 1; + # Hopefully avoids test timeouts on Hydra + GO_TEST_TIMEOUT_SCALE = 3; + + # Indicate that we are running on build infrastructure + # Some tests assume things like home directories and users exists + GO_BUILDER_NAME = "nix"; + + GOROOT_BOOTSTRAP="${goBootstrap}/share/go"; + + postConfigure = '' + export GOCACHE=$TMPDIR/go-cache + # this is compiled into the binary + export GOROOT_FINAL=$out/share/go + + export PATH=$(pwd)/bin:$PATH + + # Independent from host/target, CC should produce code for the building system. + export CC=${buildPackages.stdenv.cc}/bin/cc + ulimit -a + ''; + + postBuild = '' + (cd src && ./make.bash) + ''; + + doCheck = stdenv.hostPlatform == stdenv.targetPlatform; + + checkPhase = '' + runHook preCheck + (cd src && ./run.bash --no-rebuild) + runHook postCheck + ''; + + preInstall = '' + rm -r pkg/{bootstrap,obj} + # Contains the wrong perl shebang when cross compiling, + # since it is not used for anything we can deleted as well. + rm src/regexp/syntax/make_perl_groups.pl + '' + (if (stdenv.buildPlatform != stdenv.hostPlatform) then '' + mv bin/*_*/* bin + rmdir bin/*_* + ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) '' + rm -rf pkg/${GOHOSTOS}_${GOHOSTARCH} pkg/tool/${GOHOSTOS}_${GOHOSTARCH} + ''} + '' else if (stdenv.hostPlatform != stdenv.targetPlatform) then '' + rm -rf bin/*_* + ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) '' + rm -rf pkg/${GOOS}_${GOARCH} pkg/tool/${GOOS}_${GOARCH} + ''} + '' else ""); + + installPhase = '' + runHook preInstall + mkdir -p $GOROOT_FINAL + cp -a bin pkg src lib misc api doc $GOROOT_FINAL + ln -s $GOROOT_FINAL/bin $out/bin + runHook postInstall + ''; + + setupHook = ./setup-hook.sh; + + disallowedReferences = [ goBootstrap ]; + + meta = with stdenv.lib; { + branch = "1.11"; + homepage = http://golang.org/; + description = "The Go Programming language"; + license = licenses.bsd3; + maintainers = with maintainers; [ cstrahan orivej velovix mic92 ]; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/development/compilers/go/1.12.nix b/nixpkgs/pkgs/development/compilers/go/1.12.nix new file mode 100644 index 000000000000..44304006f6b4 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/1.12.nix @@ -0,0 +1,242 @@ +{ stdenv, fetchurl, tzdata, iana-etc, go_bootstrap, runCommand, writeScriptBin +, perl, which, pkgconfig, patch, procps, pcre, cacert, llvm, Security, Foundation +, mailcap, runtimeShell +, buildPackages, pkgsTargetTarget +}: + +let + + inherit (stdenv.lib) optionals optionalString; + + goBootstrap = runCommand "go-bootstrap" {} '' + mkdir $out + cp -rf ${buildPackages.go_bootstrap}/* $out/ + chmod -R u+w $out + find $out -name "*.c" -delete + cp -rf $out/bin/* $out/share/go/bin/ + ''; + + goarch = platform: { + "i686" = "386"; + "x86_64" = "amd64"; + "aarch64" = "arm64"; + "arm" = "arm"; + "armv5tel" = "arm"; + "armv6l" = "arm"; + "armv7l" = "arm"; + }.${platform.parsed.cpu.name} or (throw "Unsupported system"); + +in + +stdenv.mkDerivation rec { + name = "go-${version}"; + version = "1.12.1"; + + src = fetchurl { + url = "https://dl.google.com/go/go${version}.src.tar.gz"; + sha256 = "12l12mmgqvy3nbscy7sz83qj4m6iz5a322aq9sk45f7l9ml2gq8b"; + }; + + # perl is used for testing go vet + nativeBuildInputs = [ perl which pkgconfig patch procps ]; + buildInputs = [ cacert pcre ] + ++ optionals stdenv.isLinux [ stdenv.cc.libc.out ] + ++ optionals (stdenv.hostPlatform.libc == "glibc") [ stdenv.cc.libc.static ]; + + + propagatedBuildInputs = optionals stdenv.isDarwin [ Security Foundation ]; + + hardeningDisable = [ "all" ]; + + prePatch = '' + patchShebangs ./ # replace /bin/bash + + # This source produces shell script at run time, + # and thus it is not corrected by patchShebangs. + substituteInPlace misc/cgo/testcarchive/carchive_test.go \ + --replace '#!/usr/bin/env bash' '#!${runtimeShell}' + + # Patch the mimetype database location which is missing on NixOS. + substituteInPlace src/mime/type_unix.go \ + --replace '/etc/mime.types' '${mailcap}/etc/mime.types' + + # Disabling the 'os/http/net' tests (they want files not available in + # chroot builds) + rm src/net/{listen,parse}_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 + # ParseInLocation fails the test + sed -i '/TestParseInSydney/areturn' src/time/format_test.go + # Remove the api check as it never worked + sed -i '/src\/cmd\/api\/run.go/ireturn nil' src/cmd/dist/test.go + # Remove the coverage test as we have removed this utility + sed -i '/TestCoverageWithCgo/areturn' src/cmd/go/go_test.go + # Remove the timezone naming test + sed -i '/TestLoadFixed/areturn' src/time/time_test.go + # Remove disable setgid test + sed -i '/TestRespectSetgidDir/areturn' src/cmd/go/internal/work/build_test.go + # Remove cert tests that conflict with NixOS's cert resolution + sed -i '/TestEnvVars/areturn' src/crypto/x509/root_unix_test.go + # TestWritevError hangs sometimes + sed -i '/TestWritevError/areturn' src/net/writev_test.go + # TestVariousDeadlines fails sometimes + sed -i '/TestVariousDeadlines/areturn' src/net/timeout_test.go + + sed -i 's,/etc/protocols,${iana-etc}/etc/protocols,' src/net/lookup_unix.go + sed -i 's,/etc/services,${iana-etc}/etc/services,' src/net/port_unix.go + + # Disable cgo lookup tests not works, they depend on resolver + rm src/net/cgo_unix_test.go + + '' + optionalString stdenv.isLinux '' + sed -i 's,/usr/share/zoneinfo/,${tzdata}/share/zoneinfo/,' src/time/zoneinfo_unix.go + '' + optionalString stdenv.isAarch32 '' + echo '#!${runtimeShell}' > misc/cgo/testplugin/test.bash + '' + optionalString stdenv.isDarwin '' + substituteInPlace src/race.bash --replace \ + "sysctl machdep.cpu.extfeatures | grep -qv EM64T" true + sed -i 's,strings.Contains(.*sysctl.*,true {,' src/cmd/dist/util.go + 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 '/TestChdirAndGetwd/areturn' src/os/os_test.go + sed -i '/TestCredentialNoSetGroups/areturn' src/os/exec/exec_posix_test.go + sed -i '/TestRead0/areturn' src/os/os_test.go + sed -i '/TestSystemRoots/areturn' src/crypto/x509/root_darwin_test.go + + sed -i '/TestGoInstallRebuildsStalePackagesInOtherGOPATH/areturn' src/cmd/go/go_test.go + sed -i '/TestBuildDashIInstallsDependencies/areturn' src/cmd/go/go_test.go + + sed -i '/TestDisasmExtld/areturn' src/cmd/objdump/objdump_test.go + + sed -i 's/unrecognized/unknown/' src/cmd/link/internal/ld/lib.go + + # TestCurrent fails because Current is not implemented on Darwin + sed -i 's/TestCurrent/testCurrent/g' src/os/user/user_test.go + sed -i 's/TestLookup/testLookup/g' src/os/user/user_test.go + + touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd + ''; + + patches = [ + ./remove-tools-1.11.patch + ./ssl-cert-file-1.12.1.patch + ./remove-test-pie.patch + ./creds-test.patch + ./go-1.9-skip-flaky-19608.patch + ./go-1.9-skip-flaky-20072.patch + ./skip-external-network-tests.patch + ./skip-nohup-tests.patch + # breaks under load: https://github.com/golang/go/issues/25628 + ./skip-test-extra-files-on-386.patch + ]; + + postPatch = '' + find . -name '*.orig' -exec rm {} ';' + '' + optionalString stdenv.isDarwin '' + echo "substitute hardcoded dsymutil with ${llvm}/bin/llvm-dsymutil" + substituteInPlace "src/cmd/link/internal/ld/lib.go" --replace dsymutil ${llvm}/bin/llvm-dsymutil + ''; + + GOOS = stdenv.targetPlatform.parsed.kernel.name; + GOARCH = goarch stdenv.targetPlatform; + # GOHOSTOS/GOHOSTARCH must match the building system, not the host system. + # Go will nevertheless build a for host system that we will copy over in + # the install phase. + GOHOSTOS = stdenv.buildPlatform.parsed.kernel.name; + GOHOSTARCH = goarch stdenv.buildPlatform; + + # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those + # to be different from CC/CXX + CC_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then + "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc" + else + null; + CXX_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then + "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}c++" + else + null; + + GOARM = toString (stdenv.lib.intersectLists [(stdenv.hostPlatform.parsed.cpu.version or "")] ["5" "6" "7"]); + GO386 = 387; # from Arch: don't assume sse2 on i686 + CGO_ENABLED = 1; + # Hopefully avoids test timeouts on Hydra + GO_TEST_TIMEOUT_SCALE = 3; + + # Indicate that we are running on build infrastructure + # Some tests assume things like home directories and users exists + GO_BUILDER_NAME = "nix"; + + GOROOT_BOOTSTRAP="${goBootstrap}/share/go"; + + postConfigure = '' + export GOCACHE=$TMPDIR/go-cache + # this is compiled into the binary + export GOROOT_FINAL=$out/share/go + + export PATH=$(pwd)/bin:$PATH + + # Independent from host/target, CC should produce code for the building system. + export CC=${buildPackages.stdenv.cc}/bin/cc + ulimit -a + ''; + + postBuild = '' + (cd src && ./make.bash) + ''; + + doCheck = stdenv.hostPlatform == stdenv.targetPlatform; + + checkPhase = '' + runHook preCheck + (cd src && HOME=$TMPDIR GOCACHE=$TMPDIR/go-cache ./run.bash --no-rebuild) + runHook postCheck + ''; + + preInstall = '' + rm -r pkg/{bootstrap,obj} + # Contains the wrong perl shebang when cross compiling, + # since it is not used for anything we can deleted as well. + rm src/regexp/syntax/make_perl_groups.pl + '' + (if (stdenv.buildPlatform != stdenv.hostPlatform) then '' + mv bin/*_*/* bin + rmdir bin/*_* + ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) '' + rm -rf pkg/${GOHOSTOS}_${GOHOSTARCH} pkg/tool/${GOHOSTOS}_${GOHOSTARCH} + ''} + '' else if (stdenv.hostPlatform != stdenv.targetPlatform) then '' + rm -rf bin/*_* + ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) '' + rm -rf pkg/${GOOS}_${GOARCH} pkg/tool/${GOOS}_${GOARCH} + ''} + '' else ""); + + installPhase = '' + runHook preInstall + mkdir -p $GOROOT_FINAL + cp -a bin pkg src lib misc api doc $GOROOT_FINAL + ln -s $GOROOT_FINAL/bin $out/bin + runHook postInstall + ''; + + setupHook = ./setup-hook.sh; + + disallowedReferences = [ goBootstrap ]; + + meta = with stdenv.lib; { + branch = "1.12"; + homepage = http://golang.org/; + description = "The Go Programming language"; + license = licenses.bsd3; + maintainers = with maintainers; [ cstrahan orivej velovix mic92 ]; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/development/compilers/go/1.4.nix b/nixpkgs/pkgs/development/compilers/go/1.4.nix new file mode 100644 index 000000000000..95312f9e1ead --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/1.4.nix @@ -0,0 +1,162 @@ +{ stdenv, lib, fetchurl, fetchpatch, tzdata, iana-etc, libcCross +, pkgconfig +, pcre +, Security }: + +let + libc = if stdenv ? "cross" then libcCross else stdenv.cc.libc; +in + +stdenv.mkDerivation rec { + name = "go-${version}"; + version = "1.4-bootstrap-20161024"; + revision = "79d85a4965ea7c46db483314c3981751909d7883"; + + src = fetchurl { + url = "https://github.com/golang/go/archive/${revision}.tar.gz"; + sha256 = "1ljbllwjysya323xxm9s792z8y9jdw19n8sj3mlc8picjclrx5xf"; + }; + + nativeBuildInputs = [ pkgconfig ]; + buildInputs = [ pcre ]; + propagatedBuildInputs = lib.optional stdenv.isDarwin Security; + + hardeningDisable = [ "all" ]; + + # The tests try to do stuff with 127.0.0.1 and localhost + __darwinAllowLocalNetworking = true; + + # 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/{multicast_test.go,parse_test.go,port_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 network timeout test + sed -i '/TestDialTimeout/areturn' src/net/dial_test.go + # Disable the hostname test + sed -i '/TestHostname/areturn' src/os/os_test.go + # ParseInLocation fails the test + sed -i '/TestParseInSydney/areturn' src/time/format_test.go + + sed -i 's,/etc/protocols,${iana-etc}/etc/protocols,' src/net/lookup_unix.go + '' + lib.optionalString stdenv.isLinux '' + sed -i 's,/usr/share/zoneinfo/,${tzdata}/share/zoneinfo/,' src/time/zoneinfo_unix.go + + # Find the loader dynamically + LOADER="$(find ${lib.getLib libc}/lib -name ld-linux\* | head -n 1)" + + # Replace references to the loader + find src/cmd -name asm.c -exec sed -i "s,/lib/ld-linux.*\.so\.[0-9],$LOADER," {} \; + '' + 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 '/TestCgoLookupIP/areturn' src/net/cgo_unix_test.go + sed -i '/TestChdirAndGetwd/areturn' src/os/os_test.go + sed -i '/TestDialDualStackLocalhost/areturn' src/net/dial_test.go + sed -i '/TestRead0/areturn' src/os/os_test.go + sed -i '/TestSystemRoots/areturn' src/crypto/x509/root_darwin_test.go + + # fails when running inside tmux + sed -i '/TestNohup/areturn' src/os/signal/signal_test.go + + # unix socket tests fail on darwin + sed -i '/TestConnAndListener/areturn' src/net/conn_test.go + sed -i '/TestPacketConn/areturn' src/net/conn_test.go + sed -i '/TestPacketConn/areturn' src/net/packetconn_test.go + sed -i '/TestConnAndPacketConn/areturn' src/net/packetconn_test.go + sed -i '/TestUnixListenerSpecificMethods/areturn' src/net/packetconn_test.go + sed -i '/TestUnixConnSpecificMethods/areturn' src/net/packetconn_test.go + sed -i '/TestUnixListenerSpecificMethods/areturn' src/net/protoconn_test.go + sed -i '/TestUnixConnSpecificMethods/areturn' src/net/protoconn_test.go + sed -i '/TestStreamConnServer/areturn' src/net/server_test.go + sed -i '/TestReadUnixgramWithUnnamedSocket/areturn' src/net/unix_test.go + sed -i '/TestReadUnixgramWithZeroBytesBuffer/areturn' src/net/unix_test.go + sed -i '/TestUnixgramWrite/areturn' src/net/unix_test.go + sed -i '/TestUnixConnLocalAndRemoteNames/areturn' src/net/unix_test.go + sed -i '/TestUnixgramConnLocalAndRemoteNames/areturn' src/net/unix_test.go + sed -i '/TestWithSimulated/areturn' src/log/syslog/syslog_test.go + sed -i '/TestFlap/areturn' src/log/syslog/syslog_test.go + sed -i '/TestNew/areturn' src/log/syslog/syslog_test.go + sed -i '/TestNewLogger/areturn' src/log/syslog/syslog_test.go + sed -i '/TestDial/areturn' src/log/syslog/syslog_test.go + sed -i '/TestWrite/areturn' src/log/syslog/syslog_test.go + sed -i '/TestConcurrentWrite/areturn' src/log/syslog/syslog_test.go + sed -i '/TestConcurrentReconnect/areturn' src/log/syslog/syslog_test.go + + # remove IP resolving tests, on darwin they can find fe80::1%lo while expecting ::1 + sed -i '/TestResolveIPAddr/areturn' src/net/ipraw_test.go + sed -i '/TestResolveTCPAddr/areturn' src/net/tcp_test.go + sed -i '/TestResolveUDPAddr/areturn' src/net/udp_test.go + + sed -i '/TestCgoExternalThreadSIGPROF/areturn' src/runtime/crash_cgo_test.go + + touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd + ''; + + patches = [ + ./remove-tools-1.4.patch + ./creds-test-1.4.patch + + # This test checks for the wrong thing with recent tzdata. It's been fixed in master but the patch + # actually works on old versions too. + (fetchpatch { + url = "https://github.com/golang/go/commit/91563ced5897faf729a34be7081568efcfedda31.patch"; + sha256 = "1ny5l3f8a9dpjjrnjnsplb66308a0x13sa0wwr4j6yrkc8j4qxqi"; + }) + ]; + + GOOS = if stdenv.isDarwin then "darwin" else "linux"; + GOARCH = if stdenv.isDarwin then "amd64" + else if stdenv.hostPlatform.system == "i686-linux" then "386" + else if stdenv.hostPlatform.system == "x86_64-linux" then "amd64" + else if stdenv.isAarch32 then "arm" + else throw "Unsupported system"; + GOARM = stdenv.lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux") "5"; + GO386 = 387; # from Arch: don't assume sse2 on i686 + CGO_ENABLED = 0; + + # 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 + ./all.bash + ''; + + setupHook = ./setup-hook.sh; + + meta = with stdenv.lib; { + branch = "1.4"; + homepage = http://golang.org/; + description = "The Go Programming language"; + license = licenses.bsd3; + maintainers = with maintainers; [ cstrahan ]; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/development/compilers/go/creds-test-1.4.patch b/nixpkgs/pkgs/development/compilers/go/creds-test-1.4.patch new file mode 100644 index 000000000000..98cec532dcca --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/creds-test-1.4.patch @@ -0,0 +1,17 @@ +diff --git a/go-go1.4.3/src/syscall/creds_test.go b/go-go1.4.3/src/syscall/creds_test.go +index b1894c6..b2d6b4e 100644 +--- a/src/syscall/creds_test.go ++++ b/src/syscall/creds_test.go +@@ -56,9 +56,10 @@ func TestSCMCredentials(t *testing.T) { + ucred.Gid = 0 + oob := syscall.UnixCredentials(&ucred) + _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) +- if err.(*net.OpError).Err != syscall.EPERM { +- t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) ++ if err.(*net.OpError).Err != syscall.EPERM && err.(*net.OpError).Err != syscall.EINVAL { ++ t.Fatalf("WriteMsgUnix failed with %v, want EPERM or EINVAL", err) + } ++ + } + + ucred.Pid = int32(os.Getpid()) diff --git a/nixpkgs/pkgs/development/compilers/go/creds-test.patch b/nixpkgs/pkgs/development/compilers/go/creds-test.patch new file mode 100644 index 000000000000..6a18e6cc42e8 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/creds-test.patch @@ -0,0 +1,13 @@ +--- source.org/src/syscall/creds_test.go 1970-01-01 01:00:01.000000000 +0100 ++++ source/src/syscall/creds_test.go 2018-02-22 10:43:47.223615358 +0000 +@@ -76,8 +76,8 @@ + if sys, ok := err.(*os.SyscallError); ok { + err = sys.Err + } +- if err != syscall.EPERM { +- t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) ++ if err != syscall.EPERM && err != syscall.EINVAL { ++ t.Fatalf("WriteMsgUnix failed with %v, want EPERM or EINVAL", err) + } + } + diff --git a/nixpkgs/pkgs/development/compilers/go/go-1.9-skip-flaky-19608.patch b/nixpkgs/pkgs/development/compilers/go/go-1.9-skip-flaky-19608.patch new file mode 100644 index 000000000000..a4d9f0674791 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/go-1.9-skip-flaky-19608.patch @@ -0,0 +1,12 @@ +diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go +index 7137599..43cca2e 100644 +--- a/src/net/http/serve_test.go ++++ b/src/net/http/serve_test.go +@@ -5361,6 +5361,7 @@ func testServerKeepAlivesEnabled(t *testing.T, h2 bool) { + // the server's doing its 1-byte background read between requests, + // waiting for the connection to maybe close. + func TestServerCancelsReadTimeoutWhenIdle(t *testing.T) { ++ testenv.SkipFlaky(t, 19608) + setParallel(t) + defer afterTest(t) + const timeout = 250 * time.Millisecond diff --git a/nixpkgs/pkgs/development/compilers/go/go-1.9-skip-flaky-20072.patch b/nixpkgs/pkgs/development/compilers/go/go-1.9-skip-flaky-20072.patch new file mode 100644 index 000000000000..13db40ababc3 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/go-1.9-skip-flaky-20072.patch @@ -0,0 +1,20 @@ +diff --git a/src/sync/waitgroup_test.go b/src/sync/waitgroup_test.go +index e3e3096..f80d1e2 100644 +--- a/src/sync/waitgroup_test.go ++++ b/src/sync/waitgroup_test.go +@@ -6,6 +6,7 @@ package sync_test + + import ( + "internal/race" ++ "internal/testenv" + "runtime" + . "sync" + "sync/atomic" +@@ -73,6 +74,7 @@ func TestWaitGroupMisuse2(t *testing.T) { + if runtime.NumCPU() <= 4 { + t.Skip("NumCPU<=4, skipping: this test requires parallelism") + } ++ testenv.SkipFlaky(t, 20072) + defer func() { + err := recover() + if err != "sync: negative WaitGroup counter" && diff --git a/nixpkgs/pkgs/development/compilers/go/remove-fhs-test-references.patch b/nixpkgs/pkgs/development/compilers/go/remove-fhs-test-references.patch new file mode 100644 index 000000000000..1ea7f85d5290 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/remove-fhs-test-references.patch @@ -0,0 +1,13 @@ +diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go +index d694990..87fa259 100644 +--- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go ++++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go +@@ -452,7 +452,7 @@ func TestGetwd(t *testing.T) { + defer fd.Close() + // These are chosen carefully not to be symlinks on a Mac + // (unlike, say, /var, /etc) +- dirs := []string{"/", "/usr/bin"} ++ dirs := []string{"/"} + switch runtime.GOOS { + case "android": + dirs = []string{"/", "/system/bin"} diff --git a/nixpkgs/pkgs/development/compilers/go/remove-test-pie.patch b/nixpkgs/pkgs/development/compilers/go/remove-test-pie.patch new file mode 100644 index 000000000000..fb8e116af76f --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/remove-test-pie.patch @@ -0,0 +1,24 @@ +--- source.org/src/cmd/dist/test.go 2018-02-22 10:40:40.089632339 +0000 ++++ source/src/cmd/dist/test.go 2018-02-22 10:56:53.075193788 +0000 +@@ -526,21 +526,6 @@ + }) + } + +- // Test internal linking of PIE binaries where it is supported. +- if goos == "linux" && goarch == "amd64" && !isAlpineLinux() { +- // Issue 18243: We don't have a way to set the default +- // dynamic linker used in internal linking mode. So +- // this test is skipped on Alpine. +- t.tests = append(t.tests, distTest{ +- name: "pie_internal", +- heading: "internal linking of -buildmode=pie", +- fn: func(dt *distTest) error { +- t.addCmd(dt, "src", t.goTest(), "reflect", "-buildmode=pie", "-ldflags=-linkmode=internal", t.timeout(60)) +- return nil +- }, +- }) +- } +- + // sync tests + t.tests = append(t.tests, distTest{ + name: "sync_cpu", diff --git a/nixpkgs/pkgs/development/compilers/go/remove-tools-1.11.patch b/nixpkgs/pkgs/development/compilers/go/remove-tools-1.11.patch new file mode 100644 index 000000000000..cff35999a832 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/remove-tools-1.11.patch @@ -0,0 +1,35 @@ +diff --git a/src/go/build/build.go b/src/go/build/build.go +index b68a712..b60bf19 100644 +--- a/src/go/build/build.go ++++ b/src/go/build/build.go +@@ -1708,7 +1708,7 @@ func init() { + } + + // ToolDir is the directory containing build tools. +-var ToolDir = getToolDir() ++var ToolDir = runtime.GOTOOLDIR() + + // IsLocalImport reports whether the import path is + // a local import path, like ".", "..", "./foo", or "../foo". +diff --git a/src/runtime/extern.go b/src/runtime/extern.go +index 7171b13..18a942c 100644 +--- a/src/runtime/extern.go ++++ b/src/runtime/extern.go +@@ -229,6 +229,17 @@ func GOROOT() string { + return sys.DefaultGoroot + } + ++// GOTOOLDIR returns the root of the Go tree. ++// It uses the GOTOOLDIR environment variable, if set, ++// or else the root used during the Go build. ++func GOTOOLDIR() string { ++ s := gogetenv("GOTOOLDIR") ++ if s != "" { ++ return s ++ } ++ return GOROOT() + "/pkg/tool/" + GOOS + "_" + GOARCH ++} ++ + // Version returns the Go tree's version string. + // It is either the commit hash and date at the time of the build or, + // when possible, a release tag like "go1.3". diff --git a/nixpkgs/pkgs/development/compilers/go/remove-tools-1.4.patch b/nixpkgs/pkgs/development/compilers/go/remove-tools-1.4.patch new file mode 100644 index 000000000000..807ab8e089c1 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/remove-tools-1.4.patch @@ -0,0 +1,81 @@ +diff --git a/misc/makerelease/makerelease.go b/misc/makerelease/makerelease.go +index 3b511b1..a46ebd8 100644 +--- a/misc/makerelease/makerelease.go ++++ b/misc/makerelease/makerelease.go +@@ -65,9 +65,6 @@ const ( + // These must be the command that cmd/go knows to install to $GOROOT/bin + // or $GOROOT/pkg/tool. + var toolPaths = []string{ +- "golang.org/x/tools/cmd/cover", +- "golang.org/x/tools/cmd/godoc", +- "golang.org/x/tools/cmd/vet", + } + + var preBuildCleanFiles = []string{ +diff --git a/src/cmd/dist/build.c b/src/cmd/dist/build.c +index b6c61b4..2006bc2 100644 +--- a/src/cmd/dist/build.c ++++ b/src/cmd/dist/build.c +@@ -210,7 +210,9 @@ init(void) + workdir = xworkdir(); + xatexit(rmworkdir); + +- bpathf(&b, "%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch); ++ xgetenv(&b, "GOTOOLDIR"); ++ if (b.len == 0) ++ bpathf(&b, "%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch); + tooldir = btake(&b); + + bfree(&b); +diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go +index b71feb7..8468ea8 100644 +--- a/src/cmd/go/pkg.go ++++ b/src/cmd/go/pkg.go +@@ -401,9 +401,9 @@ var goTools = map[string]targetDir{ + "cmd/pack": toTool, + "cmd/pprof": toTool, + "cmd/yacc": toTool, +- "golang.org/x/tools/cmd/cover": toTool, +- "golang.org/x/tools/cmd/godoc": toBin, +- "golang.org/x/tools/cmd/vet": toTool, ++ "nixos.org/x/tools/cmd/cover": toTool, ++ "nixos.org/x/tools/cmd/godoc": toBin, ++ "nixos.org/x/tools/cmd/vet": toTool, + "code.google.com/p/go.tools/cmd/cover": stalePath, + "code.google.com/p/go.tools/cmd/godoc": stalePath, + "code.google.com/p/go.tools/cmd/vet": stalePath, +diff --git a/src/go/build/build.go b/src/go/build/build.go +index 311ecb0..f151d8f 100644 +--- a/src/go/build/build.go ++++ b/src/go/build/build.go +@@ -1367,7 +1367,7 @@ func init() { + } + + // ToolDir is the directory containing build tools. +-var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) ++var ToolDir = runtime.GOTOOLDIR() + + // IsLocalImport reports whether the import path is + // a local import path, like ".", "..", "./foo", or "../foo". +diff --git a/src/runtime/extern.go b/src/runtime/extern.go +index 6cc5df8..9a9a964 100644 +--- a/src/runtime/extern.go ++++ b/src/runtime/extern.go +@@ -152,6 +152,17 @@ func GOROOT() string { + return defaultGoroot + } + ++// GOTOOLDIR returns the root of the Go tree. ++// It uses the GOTOOLDIR environment variable, if set, ++// or else the root used during the Go build. ++func GOTOOLDIR() string { ++ s := gogetenv("GOTOOLDIR") ++ if s != "" { ++ return s ++ } ++ return GOROOT() + "/pkg/tool/" + GOOS + "_" + GOARCH ++} ++ + // Version returns the Go tree's version string. + // It is either the commit hash and date at the time of the build or, + // when possible, a release tag like "go1.3". diff --git a/nixpkgs/pkgs/development/compilers/go/remove-tools-1.9.patch b/nixpkgs/pkgs/development/compilers/go/remove-tools-1.9.patch new file mode 100644 index 000000000000..e76ed61693a8 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/remove-tools-1.9.patch @@ -0,0 +1,35 @@ +diff --git a/src/go/build/build.go b/src/go/build/build.go +index d8163d0172..dd80a70473 100644 +--- a/src/go/build/build.go ++++ b/src/go/build/build.go +@@ -1592,7 +1592,7 @@ func init() { + } + + // ToolDir is the directory containing build tools. +-var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) ++var ToolDir = runtime.GOTOOLDIR() + + // IsLocalImport reports whether the import path is + // a local import path, like ".", "..", "./foo", or "../foo". +diff --git a/src/runtime/extern.go b/src/runtime/extern.go +index 6e6c674d96..e9f62f96dc 100644 +--- a/src/runtime/extern.go ++++ b/src/runtime/extern.go +@@ -223,6 +223,17 @@ func GOROOT() string { + return sys.DefaultGoroot + } + ++// GOTOOLDIR returns the root of the Go tree. ++// It uses the GOTOOLDIR environment variable, if set, ++// or else the root used during the Go build. ++func GOTOOLDIR() string { ++ s := gogetenv("GOTOOLDIR") ++ if s != "" { ++ return s ++ } ++ return GOROOT() + "/pkg/tool/" + GOOS + "_" + GOARCH ++} ++ + // Version returns the Go tree's version string. + // It is either the commit hash and date at the time of the build or, + // when possible, a release tag like "go1.3". diff --git a/nixpkgs/pkgs/development/compilers/go/setup-hook.sh b/nixpkgs/pkgs/development/compilers/go/setup-hook.sh new file mode 100644 index 000000000000..7dce15eeb102 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/setup-hook.sh @@ -0,0 +1,5 @@ +addToGoPath() { + addToSearchPath GOPATH $1/share/go +} + +addEnvHooks "$targetOffset" addToGoPath diff --git a/nixpkgs/pkgs/development/compilers/go/skip-external-network-tests.patch b/nixpkgs/pkgs/development/compilers/go/skip-external-network-tests.patch new file mode 100644 index 000000000000..5791b213cb59 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/skip-external-network-tests.patch @@ -0,0 +1,26 @@ +diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go +index 85cae90..94b4edd 100644 +--- a/src/cmd/go/go_test.go ++++ b/src/cmd/go/go_test.go +@@ -4946,6 +4946,8 @@ func TestBuildmodePIE(t *testing.T) { + } + + func TestExecBuildX(t *testing.T) { ++ t.Skipf("skipping, test requires networking") ++ + tooSlow(t) + if !canCgo { + t.Skip("skipping because cgo not enabled") +diff --git a/src/net/dial_test.go b/src/net/dial_test.go +index 00a84d1..27f9ec9 100644 +--- a/src/net/dial_test.go ++++ b/src/net/dial_test.go +@@ -968,6 +968,8 @@ func TestDialerControl(t *testing.T) { + // mustHaveExternalNetwork is like testenv.MustHaveExternalNetwork + // except that it won't skip testing on non-iOS builders. + func mustHaveExternalNetwork(t *testing.T) { ++ t.Skipf("Nix sandbox does not have networking") ++ + t.Helper() + ios := runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") + if testenv.Builder() == "" || ios { diff --git a/nixpkgs/pkgs/development/compilers/go/skip-nohup-tests.patch b/nixpkgs/pkgs/development/compilers/go/skip-nohup-tests.patch new file mode 100644 index 000000000000..1da07407d049 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/skip-nohup-tests.patch @@ -0,0 +1,22 @@ +diff --git a/src/os/signal/signal_test.go b/src/os/signal/signal_test.go +index 3d79c7a..6e0f7b4 100644 +--- a/src/os/signal/signal_test.go ++++ b/src/os/signal/signal_test.go +@@ -217,6 +217,8 @@ var checkSighupIgnored = flag.Bool("check_sighup_ignored", false, "if true, Test + + // Test that Ignored(SIGHUP) correctly detects whether it is being run under nohup. + func TestDetectNohup(t *testing.T) { ++ t.Skip("Fails in nix build environment") ++ + if *checkSighupIgnored { + if !Ignored(syscall.SIGHUP) { + t.Fatal("SIGHUP is not ignored.") +@@ -306,6 +308,8 @@ func TestStop(t *testing.T) { + // Test that when run under nohup, an uncaught SIGHUP does not kill the program, + // but a + func TestNohup(t *testing.T) { ++ t.Skip("Fails in nix build environment") ++ + // Ugly: ask for SIGHUP so that child will not have no-hup set + // even if test is running under nohup environment. + // We have no intention of reading from c. diff --git a/nixpkgs/pkgs/development/compilers/go/skip-test-extra-files-on-386.patch b/nixpkgs/pkgs/development/compilers/go/skip-test-extra-files-on-386.patch new file mode 100644 index 000000000000..afe5aea3d916 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/skip-test-extra-files-on-386.patch @@ -0,0 +1,15 @@ +diff --git a/src/os/exec/exec_test.go b/src/os/exec/exec_test.go +index 558345ff63..22129bf022 100644 +--- a/src/os/exec/exec_test.go ++++ b/src/os/exec/exec_test.go +@@ -593,6 +593,10 @@ func TestExtraFiles(t *testing.T) { + t.Skipf("skipping test on %q", runtime.GOOS) + } + ++ if runtime.GOOS == "linux" && runtime.GOARCH == "386" { ++ t.Skipf("skipping test on %q %q", runtime.GOARCH, runtime.GOOS) ++ } ++ + // Ensure that file descriptors have not already been leaked into + // our environment. + if !testedAlreadyLeaked { diff --git a/nixpkgs/pkgs/development/compilers/go/ssl-cert-file-1.12.1.patch b/nixpkgs/pkgs/development/compilers/go/ssl-cert-file-1.12.1.patch new file mode 100644 index 000000000000..aa3116d76c12 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/ssl-cert-file-1.12.1.patch @@ -0,0 +1,59 @@ +diff -Naur a/src/crypto/x509/root_cgo_darwin.go b/src/crypto/x509/root_cgo_darwin.go +--- a/src/crypto/x509/root_cgo_darwin.go 2019-03-15 11:33:55.920232337 -0700 ++++ b/src/crypto/x509/root_cgo_darwin.go 2019-03-15 11:34:53.323180897 -0700 +@@ -270,11 +270,20 @@ + import "C" + import ( + "errors" ++ "io/ioutil" ++ "os" + "unsafe" + ) + + func loadSystemRoots() (*CertPool, error) { + roots := NewCertPool() ++ if file := os.Getenv("NIX_SSL_CERT_FILE"); file != "" { ++ data, err := ioutil.ReadFile(file) ++ if err == nil { ++ roots.AppendCertsFromPEM(data) ++ return roots, nil ++ } ++ } + + var data C.CFDataRef = 0 + var untrustedData C.CFDataRef = 0 +diff -Naur a/src/crypto/x509/root_darwin.go b/src/crypto/x509/root_darwin.go +--- a/src/crypto/x509/root_darwin.go 2019-03-15 11:33:55.920232337 -0700 ++++ b/src/crypto/x509/root_darwin.go 2019-03-15 11:36:21.205123541 -0700 +@@ -92,6 +92,14 @@ + verifyCh = make(chan rootCandidate) + ) + ++ if file := os.Getenv("NIX_SSL_CERT_FILE"); file != "" { ++ data, err := ioutil.ReadFile(file) ++ if err == nil { ++ roots.AppendCertsFromPEM(data) ++ return roots, nil ++ } ++ } ++ + // Using 4 goroutines to pipe into verify-cert seems to be + // about the best we can do. The verify-cert binary seems to + // just RPC to another server with coarse locking anyway, so +diff -Naur a/src/crypto/x509/root_unix.go b/src/crypto/x509/root_unix.go +--- a/src/crypto/x509/root_unix.go 2019-03-15 11:33:55.920232337 -0700 ++++ b/src/crypto/x509/root_unix.go 2019-03-15 11:37:15.737326340 -0700 +@@ -38,6 +38,13 @@ + + func loadSystemRoots() (*CertPool, error) { + roots := NewCertPool() ++ if file := os.Getenv("NIX_SSL_CERT_FILE"); file != "" { ++ data, err := ioutil.ReadFile(file) ++ if err == nil { ++ roots.AppendCertsFromPEM(data) ++ return roots, nil ++ } ++ } + + files := certFiles + if f := os.Getenv(certFileEnv); f != "" { diff --git a/nixpkgs/pkgs/development/compilers/go/ssl-cert-file-1.9.patch b/nixpkgs/pkgs/development/compilers/go/ssl-cert-file-1.9.patch new file mode 100644 index 000000000000..3f27bc138c10 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/go/ssl-cert-file-1.9.patch @@ -0,0 +1,80 @@ +diff --git a/src/crypto/x509/root_cgo_darwin.go b/src/crypto/x509/root_cgo_darwin.go +index 8e80533590..31c0c666ec 100644 +--- a/src/crypto/x509/root_cgo_darwin.go ++++ b/src/crypto/x509/root_cgo_darwin.go +@@ -201,11 +201,20 @@ int FetchPEMRoots(CFDataRef *pemRoots, CFDataRef *untrustedPemRoots) { + import "C" + import ( + "errors" ++ "io/ioutil" ++ "os" + "unsafe" + ) + + func loadSystemRoots() (*CertPool, error) { + roots := NewCertPool() ++ if file := os.Getenv("NIX_SSL_CERT_FILE"); file != "" { ++ data, err := ioutil.ReadFile(file) ++ if err == nil { ++ roots.AppendCertsFromPEM(data) ++ return roots, nil ++ } ++ } + + var data C.CFDataRef = nil + var untrustedData C.CFDataRef = nil +diff --git a/src/crypto/x509/root_darwin.go b/src/crypto/x509/root_darwin.go +index bc35a1cf21..21e52bec51 100644 +--- a/src/crypto/x509/root_darwin.go ++++ b/src/crypto/x509/root_darwin.go +@@ -81,18 +81,26 @@ func execSecurityRoots() (*CertPool, error) { + ) + } + +- cmd := exec.Command("/usr/bin/security", args...) +- data, err := cmd.Output() +- if err != nil { +- return nil, err +- } +- + var ( + mu sync.Mutex + roots = NewCertPool() + numVerified int // number of execs of 'security verify-cert', for debug stats + ) + ++ if file := os.Getenv("NIX_SSL_CERT_FILE"); file != "" { ++ data, err := ioutil.ReadFile(file) ++ if err == nil { ++ roots.AppendCertsFromPEM(data) ++ return roots, nil ++ } ++ } ++ ++ cmd := exec.Command("/usr/bin/security", args...) ++ data, err := cmd.Output() ++ if err != nil { ++ return nil, err ++ } ++ + blockCh := make(chan *pem.Block) + var wg sync.WaitGroup + +diff --git a/src/crypto/x509/root_unix.go b/src/crypto/x509/root_unix.go +index 65b5a5fdbc..c9c7ac6a74 100644 +--- a/src/crypto/x509/root_unix.go ++++ b/src/crypto/x509/root_unix.go +@@ -37,6 +37,13 @@ func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Certificate + + func loadSystemRoots() (*CertPool, error) { + roots := NewCertPool() ++ if file := os.Getenv("NIX_SSL_CERT_FILE"); file != "" { ++ data, err := ioutil.ReadFile(file) ++ if err == nil { ++ roots.AppendCertsFromPEM(data) ++ return roots, nil ++ } ++ } + + files := certFiles + if f := os.Getenv(certFileEnv); f != "" { |