aboutsummaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorKatherine Cox-Buday <cox.katherine.e@gmail.com>2023-08-17 13:43:18 -0600
committerJohn Kehayias <john.kehayias@protonmail.com>2023-12-31 15:24:18 -0500
commit37c33eb0d4f0baecd5f7c7b251b32f78fcfa6641 (patch)
tree652c168ab177d739170f6bb7920144dd4897a6ac /gnu
parent1709f1bc924d1ebbd21797fc41c061a5eee5c352 (diff)
downloadguix-37c33eb0d4f0baecd5f7c7b251b32f78fcfa6641.tar
guix-37c33eb0d4f0baecd5f7c7b251b32f78fcfa6641.tar.gz
gnu: Add go-1.21.
* gnu/packages/golang.scm (go-1.21): New variable. Signed-off-by: John Kehayias <john.kehayias@protonmail.com> Change-Id: Ifa9fa61ed1ae49831621bdbabd530d29f6fa164a
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/golang.scm134
1 files changed, 134 insertions, 0 deletions
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index ea809f9be0..fc298cd6c5 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -971,6 +971,140 @@ in the style of communicating sequential processes (@dfn{CSP}).")
;; https://go.dev/issue/44505
(alist-replace "go" (list go-1.17) (package-native-inputs go-1.17)))))
+(define-public go-1.21
+ (package
+ (inherit go-1.20)
+ (name "go")
+ (version "1.21.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/golang/go")
+ (commit (string-append "go" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "04cpahl10i1sncymdfm0vzcj3czv6lv0axwa1sisl9cz3rdrp7hj"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments go-1.20)
+ ;; Source patching phases are broken up into discrete steps to allow
+ ;; future versions to discard individual phases without having to
+ ;; discard all source patching.
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (delete 'skip-TestGoPathShlibGccgo-tests)
+ (delete 'patch-source)
+ (add-after 'unpack 'patch-os-tests
+ (lambda _
+ (substitute* "src/os/os_test.go"
+ (("/usr/bin") (getcwd))
+ (("/bin/sh") (which "sh")))))
+
+ (add-after 'unpack 'apply-patches
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Having the patch in the 'patches' field of <origin> breaks
+ ;; the 'TestServeContent' test due to the fact that timestamps
+ ;; are reset. Thus, apply it from here.
+ (invoke "patch" "-p1" "--force" "-i"
+ (assoc-ref inputs "go-fix-script-tests.patch"))))
+
+ (add-after 'unpack 'patch-src/net
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((net-base (assoc-ref inputs "net-base")))
+ (substitute* "src/net/lookup_unix.go"
+ (("/etc/protocols")
+ (string-append net-base "/etc/protocols")))
+ (substitute* "src/net/port_unix.go"
+ (("/etc/services")
+ (string-append net-base "/etc/services"))))))
+
+ (add-after 'unpack 'patch-zoneinfo
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Add the path to this specific version of tzdata's zoneinfo
+ ;; file to the top of the list to search. We don't want to
+ ;; replace any sources because it will affect how binaries
+ ;; compiled with this Go toolchain behave on non-guix
+ ;; platforms.
+ (substitute* "src/time/zoneinfo_unix.go"
+ (("var platformZoneSources.+" all)
+ (format #f "~a~%\"~a/share/zoneinfo\",~%"
+ all
+ (assoc-ref inputs "tzdata"))))))
+
+ (add-after 'unpack 'patch-cmd/go/testdata/script
+ (lambda _
+ (substitute* "src/cmd/go/testdata/script/cgo_path_space.txt"
+ (("/bin/sh") (which "sh")))))
+
+ (add-after 'enable-external-linking 'enable-external-linking-1.21
+ (lambda _
+ ;; Invoke GCC to link any archives created with GCC (that is,
+ ;; any packages built using 'cgo'), because Go doesn't know
+ ;; how to handle the runpaths but GCC does. Use substitute*
+ ;; rather than a patch since these files are liable to change
+ ;; often.
+ ;;
+ ;; XXX: Replace with GO_EXTLINK_ENABLED=1 or similar when
+ ;; <https://github.com/golang/go/issues/31544> and/or
+ ;; <https://github.com/golang/go/issues/43525> are resolved.
+ (substitute* "src/cmd/link/internal/ld/config.go"
+ (("\\(iscgo && \\(.+\\)") "iscgo"))
+ (substitute* "src/internal/testenv/testenv.go"
+ (("!CanInternalLink.+") "true {\n"))
+ (substitute* "src/syscall/exec_linux_test.go"
+ (("testenv.MustHaveExecPath\\(t, \"whoami\"\\)")
+ "t.Skipf(\"no passwd file present\")"))))
+
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; Notably, we do not install archives (180M), which Go will
+ ;; happily recompile quickly (and cache) if needed, almost
+ ;; surely faster than they could be substituted.
+ ;;
+ ;; The main motivation for pre-compiled archives is to use
+ ;; libc-linked `net' or `os' packages without a C compiler,
+ ;; but on Guix a C compiler is necessary to properly link the
+ ;; final binaries anyway. Many build flags also invalidate
+ ;; these pre-compiled archives, so in practice Go often
+ ;; recompiles them anyway.
+ ;;
+ ;; Upstream is also planning to no longer install these
+ ;; archives: <https://github.com/golang/go/issues/47257>.
+ ;;
+ ;; When necessary, a custom pre-compiled library package can
+ ;; be created with `#:import-path "std"' and used with
+ ;; `-pkgdir'.
+ ;;
+ ;; When moving files into place, any files that come from
+ ;; GOROOT should remain in GOROOT to continue functioning. If
+ ;; they need to be referenced from some other directory, they
+ ;; need to be symlinked from GOROOT. For more information,
+ ;; please see <https://github.com/golang/go/issues/61921>.
+ (let* ((out (assoc-ref outputs "out"))
+ (tests (assoc-ref outputs "tests")))
+ (for-each
+ (lambda (file)
+ (copy-recursively file (string-append out "/lib/go/" file)))
+ '("bin" "go.env" "lib" "VERSION" "pkg/include" "pkg/tool"))
+
+ (symlink "lib/go/bin" (string-append out "/bin"))
+
+ (for-each
+ (match-lambda
+ ((file dest output)
+ ;; Copy to output/dest and symlink from
+ ;; output/lib/go/file.
+ (let ((file* (string-append output "/lib/go/" file))
+ (dest* (string-append output "/" dest)))
+ (copy-recursively file dest*)
+ (mkdir-p (dirname file*))
+ (symlink (string-append "../../" dest) file*))))
+ `(("src" "share/go/src" ,out)
+ ("misc" "share/go/misc" ,out)
+ ("doc" "share/doc/go/doc" ,out)
+ ("api" "share/go/api" ,tests)
+ ("test" "share/go/test" ,tests))))))))))))
+
(define-public go go-1.17)
(define make-go-std