* gnu/packages/golang.scm (go-1.7): Update to 1.7.5. [arguments]: Re-enable test 'TestLoadFixed'.
		
			
				
	
	
		
			365 lines
		
	
	
	
		
			17 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			365 lines
		
	
	
	
		
			17 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
| ;;; GNU Guix --- Functional package management for GNU
 | |
| ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 | |
| ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 | |
| ;;; Copyright © 2016 Andy Wingo <wingo@igalia.com>
 | |
| ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 | |
| ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 | |
| ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 | |
| ;;;
 | |
| ;;; This file is part of GNU Guix.
 | |
| ;;;
 | |
| ;;; GNU Guix is free software; you can redistribute it and/or modify it
 | |
| ;;; under the terms of the GNU General Public License as published by
 | |
| ;;; the Free Software Foundation; either version 3 of the License, or (at
 | |
| ;;; your option) any later version.
 | |
| ;;;
 | |
| ;;; GNU Guix is distributed in the hope that it will be useful, but
 | |
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| ;;; GNU General Public License for more details.
 | |
| ;;;
 | |
| ;;; You should have received a copy of the GNU General Public License
 | |
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| (define-module (gnu packages golang)
 | |
|   #:use-module ((guix licenses) #:prefix license:)
 | |
|   #:use-module (guix utils)
 | |
|   #:use-module (guix download)
 | |
|   #:use-module (guix packages)
 | |
|   #:use-module (guix build-system gnu)
 | |
|   #:use-module (gnu packages admin)
 | |
|   #:use-module (gnu packages gcc)
 | |
|   #:use-module (gnu packages base)
 | |
|   #:use-module (gnu packages perl)
 | |
|   #:use-module (gnu packages pkg-config)
 | |
|   #:use-module (gnu packages pcre)
 | |
|   #:use-module (ice-9 match)
 | |
|   #:use-module (srfi srfi-1))
 | |
| 
 | |
| ;; According to https://golang.org/doc/install/gccgo, gccgo-4.8.2 includes a
 | |
| ;; complete go-1.1.2 implementation, gccgo-4.9 includes a complete go-1.2
 | |
| ;; implementation, and gccgo-5 a complete implementation of go-1.4.  Ultimately
 | |
| ;; we hope to build go-1.5+ with a bootstrap process using gccgo-5.  As of
 | |
| ;; go-1.5, go cannot be bootstrapped without go-1.4, so we need to use go-1.4 or
 | |
| ;; gccgo-5.  Mips is not officially supported, but it should work if it is
 | |
| ;; bootstrapped.
 | |
| 
 | |
| (define-public go-1.4
 | |
|   (package
 | |
|     (name "go")
 | |
|     (version "1.4.3")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (string-append "https://storage.googleapis.com/golang/"
 | |
|                                   name version ".src.tar.gz"))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "0na9yqilzpvq0bjndbibfp07wr796gf252y471cip10bbdqgqiwr"))))
 | |
|     (build-system gnu-build-system)
 | |
|     (outputs '("out"
 | |
|                "doc"
 | |
|                "tests"))
 | |
|     (arguments
 | |
|      `(#:modules ((ice-9 match)
 | |
|                   (guix build gnu-build-system)
 | |
|                   (guix build utils))
 | |
|        #:tests? #f ; Tests are run by the all.bash script.
 | |
|        #:phases
 | |
|        (modify-phases %standard-phases
 | |
|          (delete 'configure)
 | |
|          (add-after 'patch-generated-file-shebangs 'chdir
 | |
|            (lambda _
 | |
|              (chdir "src")))
 | |
|          (add-before 'build '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")))
 | |
| 
 | |
|                ;; Removing net/ tests, which fail when attempting to access
 | |
|                ;; network resources not present in the build container.
 | |
|                (for-each delete-file
 | |
|                          '("net/multicast_test.go" "net/parse_test.go"
 | |
|                            "net/port_test.go"))
 | |
| 
 | |
|                ;; Add libgcc to the RUNPATH.
 | |
|                (substitute* "cmd/go/build.go"
 | |
|                  (("cgoldflags := \\[\\]string\\{\\}")
 | |
|                   (string-append "cgoldflags := []string{"
 | |
|                                  "\"-rpath=" gcclib "\"}"))
 | |
|                  (("ldflags := buildLdflags")
 | |
|                   (string-append
 | |
|                    "ldflags := buildLdflags\n"
 | |
|                    "ldflags = append(ldflags, \"-r\")\n"
 | |
|                    "ldflags = append(ldflags, \"" gcclib "\")\n")))
 | |
| 
 | |
|                (substitute* "os/os_test.go"
 | |
|                  (("/usr/bin") (getcwd))
 | |
|                  (("/bin/pwd") (which "pwd")))
 | |
| 
 | |
|                ;; Disable failing tests: these tests attempt to access
 | |
|                ;; commands or network resources which are neither available or
 | |
|                ;; 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.+)")
 | |
| 
 | |
|                   ;; Tzdata 2016g changed the name of the time zone used in this
 | |
|                   ;; test, and the patch for Go 1.7 does not work for 1.4.3:
 | |
|                   ;; https://github.com/golang/go/issues/17545
 | |
|                   ;; https://github.com/golang/go/issues/17276
 | |
|                   ("time/time_test.go" "(.+)(TestLoadFixed.+)")
 | |
| 
 | |
|                   ("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.+)")
 | |
|                   ("syscall/syscall_unix_test.go" "(.+)(TestPassFD\\(.+)")
 | |
|                   ("os/exec/exec_test.go" "(.+)(TestExtraFiles.+)")))
 | |
| 
 | |
|                (substitute* "net/lookup_unix.go"
 | |
|                  (("/etc/protocols") (string-append net-base "/etc/protocols")))
 | |
|                (substitute* "time/zoneinfo_unix.go"
 | |
|                  (("/usr/share/zoneinfo/") tzdata-path))
 | |
|                (substitute* (find-files "cmd" "asm.c")
 | |
|                  (("/lib/ld-linux.*\\.so\\.[0-9]") loader))
 | |
|                #t)))
 | |
| 
 | |
|          (replace 'build
 | |
|            (lambda* (#:key inputs outputs #:allow-other-keys)
 | |
|              ;; FIXME: Some of the .a files are not bit-reproducible.
 | |
|              (let* ((output (assoc-ref outputs "out")))
 | |
|                (setenv "CC" (which "gcc"))
 | |
|                (setenv "GOOS" "linux")
 | |
|                (setenv "GOROOT" (dirname (getcwd)))
 | |
|                (setenv "GOROOT_FINAL" output)
 | |
|                ;; Go 1.4's cgo will not work with binutils >= 2.27:
 | |
|                ;; https://github.com/golang/go/issues/16906
 | |
|                (setenv "CGO_ENABLED" "0")
 | |
|                (zero? (system* "sh" "all.bash")))))
 | |
| 
 | |
|          (replace 'install
 | |
|            (lambda* (#:key outputs inputs #:allow-other-keys)
 | |
|              (let* ((output (assoc-ref outputs "out"))
 | |
|                     (doc_out (assoc-ref outputs "doc"))
 | |
|                     (bash (string-append (assoc-ref inputs "bash") "bin/bash"))
 | |
|                     (docs (string-append doc_out "/share/doc/" ,name "-" ,version))
 | |
|                     (tests (string-append
 | |
|                             (assoc-ref outputs "tests") "/share/" ,name "-" ,version)))
 | |
|                (mkdir-p tests)
 | |
|                (copy-recursively "../test" (string-append tests "/test"))
 | |
|                (delete-file-recursively "../test")
 | |
|                (mkdir-p docs)
 | |
|                (copy-recursively "../api" (string-append docs "/api"))
 | |
|                (delete-file-recursively "../api")
 | |
|                (copy-recursively "../doc" (string-append docs "/doc"))
 | |
|                (delete-file-recursively "../doc")
 | |
| 
 | |
|                (for-each (lambda (file)
 | |
|                            (let ((file (string-append "../" file)))
 | |
|                              (install-file file docs)
 | |
|                              (delete-file file)))
 | |
|                          '("README" "CONTRIBUTORS" "AUTHORS" "PATENTS"
 | |
|                            "LICENSE" "VERSION" "robots.txt"))
 | |
|                (copy-recursively "../" output)
 | |
|                #t))))))
 | |
|     (inputs
 | |
|      `(("tzdata" ,tzdata)
 | |
|        ("pcre" ,pcre)
 | |
|        ("gcc:lib" ,gcc "lib")))
 | |
|     (native-inputs
 | |
|      `(("pkg-config" ,%pkg-config)
 | |
|        ("which" ,which)
 | |
|        ("net-base" ,net-base)
 | |
|        ("perl" ,perl)))
 | |
| 
 | |
|     (home-page "https://golang.org/")
 | |
|     (synopsis "Compiler and libraries for Go, a statically-typed language")
 | |
|     (description "Go, also commonly referred to as golang, is an imperative
 | |
| programming language.  Designed primarily for systems programming, it is a
 | |
| compiled, statically typed language in the tradition of C and C++, with
 | |
| garbage collection, various safety features and in the style of communicating
 | |
| sequential processes (CSP) concurrent programming features added.")
 | |
|     (license license:bsd-3)))
 | |
| 
 | |
| (define-public go-1.7
 | |
|   (package
 | |
|     (inherit go-1.4)
 | |
|     (name "go")
 | |
|     (version "1.7.5")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (string-append "https://storage.googleapis.com/golang/"
 | |
|                            name version ".src.tar.gz"))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "058q57zmi23rflingzhy1b87yl69mb62ql2psfxqr7q7l89lb0sf"))))
 | |
|     (arguments
 | |
|      (substitute-keyword-arguments (package-arguments go-1.4)
 | |
|        ((#:phases phases)
 | |
|         `(modify-phases ,phases
 | |
|            (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"))
 | |
|                       (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")))
 | |
| 
 | |
|                  ;; Removing net/ tests, which fail when attempting to access
 | |
|                  ;; network resources not present in the build container.
 | |
|                  (for-each delete-file
 | |
|                            '("net/listen_test.go"
 | |
|                              "net/parse_test.go"
 | |
|                              "net/cgo_unix_test.go"))
 | |
| 
 | |
|                  (substitute* "os/os_test.go"
 | |
|                    (("/usr/bin") (getcwd))
 | |
|                    (("/bin/pwd") (which "pwd"))
 | |
|                    (("/bin/sh") (which "sh")))
 | |
| 
 | |
|                  ;; Add libgcc to runpath
 | |
|                  (substitute* "cmd/link/internal/ld/lib.go"
 | |
|                    (("!rpath.set") "true"))
 | |
|                  (substitute* "cmd/go/build.go"
 | |
|                    (("cgoldflags := \\[\\]string\\{\\}")
 | |
|                     (string-append "cgoldflags := []string{"
 | |
|                                    "\"-rpath=" gcclib "\""
 | |
|                                    "}"))
 | |
|                    (("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\", ")))
 | |
| 
 | |
|                  ;; Disable failing tests: these tests attempt to access
 | |
|                  ;; commands or network resources which are neither available or
 | |
|                  ;; 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.+)")
 | |
|                     ("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.+)")
 | |
|                     ("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.+)")))
 | |
| 
 | |
|                  (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"
 | |
|                    (("#!/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" "asm.c")
 | |
|                    (("/lib/ld-linux.*\\.so\\.[0-9]") loader))
 | |
|                  #t)))
 | |
|            (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")))
 | |
|                  (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.
 | |
|                (let* ((output (assoc-ref outputs "out")))
 | |
|                  (setenv "CC" (which "gcc"))
 | |
|                  (setenv "GOOS" "linux")
 | |
|                  (setenv "GOROOT" (dirname (getcwd)))
 | |
|                  (setenv "GOROOT_FINAL" output)
 | |
|                  (setenv "CGO_ENABLED" "1")
 | |
|                  (zero? (system* "sh" "all.bash")))))
 | |
| 
 | |
|            (replace 'install
 | |
|              ;; TODO: Most of this could be factorized with Go 1.4.
 | |
|              (lambda* (#:key outputs #:allow-other-keys)
 | |
|                (let* ((output (assoc-ref outputs "out"))
 | |
|                       (doc_out (assoc-ref outputs "doc"))
 | |
|                       (docs (string-append doc_out "/share/doc/" ,name "-" ,version))
 | |
|                       (src (string-append
 | |
|                             (assoc-ref outputs "tests") "/share/" ,name "-" ,version)))
 | |
|                  (delete-file-recursively "../pkg/bootstrap")
 | |
| 
 | |
|                  (mkdir-p src)
 | |
|                  (copy-recursively "../test" (string-append src "/test"))
 | |
|                  (delete-file-recursively "../test")
 | |
|                  (mkdir-p docs)
 | |
|                  (copy-recursively "../api" (string-append docs "/api"))
 | |
|                  (delete-file-recursively "../api")
 | |
|                  (copy-recursively "../doc" (string-append docs "/doc"))
 | |
|                  (delete-file-recursively "../doc")
 | |
| 
 | |
|                  (for-each
 | |
|                   (lambda (file)
 | |
|                     (let* ((filein (string-append "../" file))
 | |
|                            (fileout (string-append docs "/" file)))
 | |
|                       (copy-file filein fileout)
 | |
|                       (delete-file filein)))
 | |
|                   ;; Note the slightly different file names compared to 1.4.
 | |
|                   '("README.md" "CONTRIBUTORS" "AUTHORS" "PATENTS"
 | |
|                     "LICENSE" "VERSION" "CONTRIBUTING.md" "robots.txt"))
 | |
| 
 | |
|                  (copy-recursively "../" output))))))))
 | |
|     (native-inputs
 | |
|      `(("go" ,go-1.4)
 | |
|        ,@(package-native-inputs go-1.4)))))
 | |
| 
 | |
| (define-public go go-1.7)
 |