diff options
-rw-r--r-- | gnu/packages/golang.scm | 224 |
1 files changed, 43 insertions, 181 deletions
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index cfdf6932bb..da8ad3d7fe 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -223,11 +223,11 @@ in the style of communicating sequential processes (@dfn{CSP}).") (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")) (license license:bsd-3))) -(define-public go-1.9 +(define-public go-1.11 (package (inherit go-1.4) (name "go") - (version "1.9.7") + (version "1.11.5") (source (origin (method url-fetch) @@ -235,13 +235,24 @@ in the style of communicating sequential processes (@dfn{CSP}).") name version ".src.tar.gz")) (sha256 (base32 - "08kpy874x0rx43zpyv5kwd8xj2ma91xm33i0ka2v1v788px18a2q")))) + "0gllmbjvp12iszwils8id78mvjxwviwf98lh2gdkb236n4mz07mw")))) (arguments (substitute-keyword-arguments (package-arguments go-1.4) ((#:phases phases) `(modify-phases ,phases + ;; XXX Work around the Go 1.11.5 tarbomb. + ;; <https://github.com/golang/go/issues/29906> + (add-after 'unpack 'tarbomb-workaround + (lambda _ + (chdir "..") + (delete-file-recursively "gocache") + (delete-file-recursively "tmp") + #t)) + (replace 'chdir + (lambda _ + (chdir "go/src") + #t)) (replace 'prebuild - ;; TODO: Most of this could be factorized with Go 1.4. (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib")) (ld (string-append (assoc-ref inputs "libc") "/lib")) @@ -251,43 +262,48 @@ in the style of communicating sequential processes (@dfn{CSP}).") (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")) (output (assoc-ref outputs "out"))) - ;; Removing net/ tests, which fail when attempting to access - ;; network resources not present in the build container. (for-each delete-file + ;; Removing net/ tests, which fail when attempting to access + ;; network resources not present in the build container. '("net/listen_test.go" "net/parse_test.go" - "net/cgo_unix_test.go")) + "net/cgo_unix_test.go" + ;; A side effect of these test scripts is testing + ;; cgo. Attempts at using cgo flags and + ;; directives with these scripts as specified + ;; here (https://golang.org/cmd/cgo/) have not + ;; worked. The tests continue to state that they + ;; can not find crt1.o despite being present. + "cmd/go/testdata/script/list_compiled_imports.txt" + "cmd/go/testdata/script/mod_case_cgo.txt" + ;; https://github.com/golang/go/issues/24884 + "os/user/user_test.go")) (substitute* "os/os_test.go" (("/usr/bin") (getcwd)) (("/bin/pwd") (which "pwd")) (("/bin/sh") (which "sh"))) + (substitute* "cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go" + (("/usr/bin") "/tmp")) + ;; Add libgcc to runpath (substitute* "cmd/link/internal/ld/lib.go" (("!rpath.set") "true")) - (substitute* "cmd/go/internal/work/build.go" + (substitute* "cmd/go/internal/work/gccgo.go" (("cgoldflags := \\[\\]string\\{\\}") (string-append "cgoldflags := []string{" "\"-rpath=" gcclib "\"" "}")) + (("\"-lgcc_s\", ") + (string-append + "\"-Wl,-rpath=" gcclib "\", \"-lgcc_s\", "))) + (substitute* "cmd/go/internal/work/gc.go" (("ldflags = setextld\\(ldflags, compiler\\)") (string-append "ldflags = setextld(ldflags, compiler)\n" "ldflags = append(ldflags, \"-r\")\n" - "ldflags = append(ldflags, \"" gcclib "\")\n")) - (("\"-lgcc_s\", ") - (string-append - "\"-Wl,-rpath=" gcclib "\", \"-lgcc_s\", "))) - - ;; XXX Commit 65fa2b615b72c1fa61a7 in the Go repo. We do this - ;; without a patch because ((guix packages) patch-and-repack) - ;; resets file mtimes, and parts of Go's test suite rely on - ;; those timestamps. - ;; <https://github.com/golang/go/issues/26369> - (substitute* "cmd/internal/objfile/elf.go" - (("PT_LOAD") - "PT_LOAD && p.Flags&elf.PF_X != 0")) + "ldflags = append(ldflags, \"" gcclib "\")\n"))) ;; Disable failing tests: these tests attempt to access ;; commands or network resources which are neither available @@ -322,9 +338,6 @@ in the style of communicating sequential processes (@dfn{CSP}).") ("syscall/exec_linux_test.go" "(.+)(TestCloneNEWUSERAndRemapNoRootDisableSetgroups.+)"))) - (substitute* "../misc/cgo/testsanitizers/test.bash" - (("(CC=)cc" all var) (string-append var "gcc"))) - ;; fix shebang for testar script ;; note the target script is generated at build time. (substitute* "../misc/cgo/testcarchive/carchive_test.go" @@ -342,19 +355,10 @@ in the style of communicating sequential processes (@dfn{CSP}).") (add-before 'build 'set-bootstrap-variables (lambda* (#:key outputs inputs #:allow-other-keys) ;; Tell the build system where to find the bootstrap Go. - (let ((go (assoc-ref inputs "go")) - (out (assoc-ref outputs "out"))) + (let ((go (assoc-ref inputs "go"))) (setenv "GOROOT_BOOTSTRAP" go) - (setenv "PATH" - (string-append out "/bin:" - (dirname (getcwd)) "/bin:" - (getenv "PATH"))) - - ;; XXX: The following variables seem unrelated. (setenv "GOGC" "400") - (setenv "GO_TEST_TIMEOUT_SCALE" "9999") #t))) - (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys) ;; FIXME: Some of the .a files are not bit-reproducible. @@ -375,6 +379,11 @@ in the style of communicating sequential processes (@dfn{CSP}).") (src (string-append (assoc-ref outputs "tests") "/share/" ,name "-" ,version))) (delete-file-recursively "../pkg/bootstrap") + ;; Prevent installation of the build cache, which contains + ;; store references to most of the tools used to build Go and + ;; would unnecessarily increase the size of Go's closure if it + ;; was installed. + (delete-file-recursively "../pkg/obj") (mkdir-p src) (copy-recursively "../test" (string-append src "/test")) @@ -406,153 +415,6 @@ in the style of communicating sequential processes (@dfn{CSP}).") ,@(package-native-inputs go-1.4))) (supported-systems %supported-systems))) -(define-public go-1.11 - (package - (inherit go-1.9) - (name "go") - (version "1.11.5") - (source - (origin - (method url-fetch) - (uri (string-append "https://storage.googleapis.com/golang/" - name version ".src.tar.gz")) - (sha256 - (base32 - "0gllmbjvp12iszwils8id78mvjxwviwf98lh2gdkb236n4mz07mw")))) - (arguments - (substitute-keyword-arguments (package-arguments go-1.9) - ((#:phases phases) - `(modify-phases ,phases - ;; XXX Work around the Go 1.11.5 tarbomb. - ;; <https://github.com/golang/go/issues/29906> - (add-after 'unpack 'tarbomb-workaround - (lambda _ - (chdir "..") - (delete-file-recursively "gocache") - (delete-file-recursively "tmp") - #t)) - (replace 'chdir - (lambda _ - (chdir "go/src") - #t)) - (replace 'prebuild - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib")) - (ld (string-append (assoc-ref inputs "libc") "/lib")) - (loader (car (find-files ld "^ld-linux.+"))) - (net-base (assoc-ref inputs "net-base")) - (tzdata-path - (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")) - (output (assoc-ref outputs "out"))) - - (for-each delete-file - ;; Removing net/ tests, which fail when attempting to access - ;; network resources not present in the build container. - '("net/listen_test.go" - "net/parse_test.go" - "net/cgo_unix_test.go" - ;; A side effect of these test scripts is testing - ;; cgo. Attempts at using cgo flags and - ;; directives with these scripts as specified - ;; here (https://golang.org/cmd/cgo/) have not - ;; worked. The tests continue to state that they - ;; can not find crt1.o despite being present. - "cmd/go/testdata/script/list_compiled_imports.txt" - "cmd/go/testdata/script/mod_case_cgo.txt" - ;; https://github.com/golang/go/issues/24884 - "os/user/user_test.go")) - - (substitute* "os/os_test.go" - (("/usr/bin") (getcwd)) - (("/bin/pwd") (which "pwd")) - (("/bin/sh") (which "sh"))) - - (substitute* "cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go" - (("/usr/bin") "/tmp")) - - ;; Add libgcc to runpath - (substitute* "cmd/link/internal/ld/lib.go" - (("!rpath.set") "true")) - (substitute* "cmd/go/internal/work/gccgo.go" - (("cgoldflags := \\[\\]string\\{\\}") - (string-append "cgoldflags := []string{" - "\"-rpath=" gcclib "\"" - "}")) - (("\"-lgcc_s\", ") - (string-append - "\"-Wl,-rpath=" gcclib "\", \"-lgcc_s\", "))) - (substitute* "cmd/go/internal/work/gc.go" - (("ldflags = setextld\\(ldflags, compiler\\)") - (string-append - "ldflags = setextld(ldflags, compiler)\n" - "ldflags = append(ldflags, \"-r\")\n" - "ldflags = append(ldflags, \"" gcclib "\")\n"))) - - ;; Disable failing tests: these tests attempt to access - ;; commands or network resources which are neither available - ;; nor necessary for the build to succeed. - (for-each - (match-lambda - ((file regex) - (substitute* file - ((regex all before test_name) - (string-append before "Disabled" test_name))))) - '(("net/net_test.go" "(.+)(TestShutdownUnix.+)") - ("net/dial_test.go" "(.+)(TestDialTimeout.+)") - ("os/os_test.go" "(.+)(TestHostname.+)") - ("time/format_test.go" "(.+)(TestParseInSydney.+)") - ("time/format_test.go" "(.+)(TestParseInLocation.+)") - ("os/exec/exec_test.go" "(.+)(TestEcho.+)") - ("os/exec/exec_test.go" "(.+)(TestCommandRelativeName.+)") - ("os/exec/exec_test.go" "(.+)(TestCatStdin.+)") - ("os/exec/exec_test.go" "(.+)(TestCatGoodAndBadFile.+)") - ("os/exec/exec_test.go" "(.+)(TestExitStatus.+)") - ("os/exec/exec_test.go" "(.+)(TestPipes.+)") - ("os/exec/exec_test.go" "(.+)(TestStdinClose.+)") - ("os/exec/exec_test.go" "(.+)(TestIgnorePipeErrorOnSuccess.+)") - ("syscall/syscall_unix_test.go" "(.+)(TestPassFD\\(.+)") - ("os/exec/exec_test.go" "(.+)(TestExtraFiles/areturn.+)") - ("cmd/go/go_test.go" "(.+)(TestCoverageWithCgo.+)") - ("cmd/go/go_test.go" "(.+)(TestTwoPkgConfigs.+)") - ("os/exec/exec_test.go" "(.+)(TestOutputStderrCapture.+)") - ("os/exec/exec_test.go" "(.+)(TestExtraFiles.+)") - ("os/exec/exec_test.go" "(.+)(TestExtraFilesRace.+)") - ("net/lookup_test.go" "(.+)(TestLookupPort.+)") - ("syscall/exec_linux_test.go" - "(.+)(TestCloneNEWUSERAndRemapNoRootDisableSetgroups.+)"))) - - ;; fix shebang for testar script - ;; note the target script is generated at build time. - (substitute* "../misc/cgo/testcarchive/carchive_test.go" - (("#!/usr/bin/env") (string-append "#!" (which "env")))) - - (substitute* "net/lookup_unix.go" - (("/etc/protocols") (string-append net-base "/etc/protocols"))) - (substitute* "net/port_unix.go" - (("/etc/services") (string-append net-base "/etc/services"))) - (substitute* "time/zoneinfo_unix.go" - (("/usr/share/zoneinfo/") tzdata-path)) - (substitute* (find-files "cmd" "\\.go") - (("/lib(64)?/ld-linux.*\\.so\\.[0-9]") loader)) - #t))) - ;; Prevent installation of the build cache, which contains store - ;; references to most of the tools used to build Go and would - ;; unnecessarily increase the size of Go's closure if it was - ;; installed. - ;; TODO This should be moved into the 'install' phase when Go 1.9 is - ;; removed. - (add-before 'install 'delete-extraneous-files - (lambda _ - (delete-file-recursively "../pkg/obj") - #t)) - (replace 'set-bootstrap-variables - (lambda* (#:key outputs inputs #:allow-other-keys) - ;; Tell the build system where to find the bootstrap Go. - (let ((go (assoc-ref inputs "go"))) - (setenv "GOROOT_BOOTSTRAP" go) - (setenv "GOGC" "400") - #t))))))))) - (define-public go go-1.11) (define-public go-github-com-alsm-ioprogress |