2023-12-03 23:40:00 -07:00
|
|
|
(define-module (metznet golang)
|
|
|
|
#:use-module (guix packages)
|
|
|
|
#:use-module (gnu packages golang)
|
2023-12-04 01:24:58 -07:00
|
|
|
#:use-module (gnu packages golang-check)
|
2023-12-07 00:03:43 -07:00
|
|
|
#:use-module (gnu packages syncthing)
|
2023-12-03 23:40:00 -07:00
|
|
|
#:use-module (guix build download)
|
|
|
|
#:use-module (guix git-download)
|
2023-12-06 21:06:26 -07:00
|
|
|
#:use-module (guix memoization)
|
2023-12-03 23:40:00 -07:00
|
|
|
#:use-module ((guix licenses)
|
|
|
|
#:prefix license:)
|
|
|
|
#:use-module (guix build-system go)
|
2023-12-06 21:06:26 -07:00
|
|
|
#:use-module (guix utils)
|
|
|
|
#:use-module (guix gexp)
|
2023-12-03 23:40:00 -07:00
|
|
|
|
|
|
|
#:export (go-gopkg-in-asn1-ber-v1 metznet-pubkey))
|
|
|
|
|
2023-12-06 21:06:26 -07:00
|
|
|
(define-public go-1.21
|
|
|
|
(package
|
|
|
|
(inherit go-1.20)
|
|
|
|
(name "go")
|
|
|
|
(version "1.21.4")
|
|
|
|
(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 "0xp1mqjbbs53bjg00d4a37af5p1by28xnflj2xi5kchcpmlqn5nz"))))
|
|
|
|
(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
|
|
|
|
(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))))))
|
|
|
|
(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\")"))))))))))
|
|
|
|
|
2023-12-03 23:40:00 -07:00
|
|
|
(define-public metznet-pubkey
|
|
|
|
(package
|
|
|
|
(name "metznet-pubkey")
|
|
|
|
(version "1.0.0")
|
2023-12-06 21:06:26 -07:00
|
|
|
(source
|
|
|
|
(origin
|
|
|
|
(method git-fetch)
|
|
|
|
(uri (git-reference
|
|
|
|
(url "https://git.metznet.ca/metznet/pubkey.git")
|
|
|
|
(commit (string-append "v" version))))
|
|
|
|
(file-name (string-append name "-" version "-checkout"))
|
|
|
|
(sha256
|
|
|
|
(base32 "1074knwjakwzdlg10xbm0m6qzi4i3bbp452q9b7jm52gbalk3hzb"))))
|
2023-12-03 23:40:00 -07:00
|
|
|
(build-system go-build-system)
|
|
|
|
(arguments
|
|
|
|
`(#:import-path "git.metznet.ca/Metznet/pubkey"))
|
|
|
|
(native-inputs `(("go-github-com-go-ldap-ldap" ,go-github-com-go-ldap-ldap)
|
2023-12-07 00:03:43 -07:00
|
|
|
("go-github-com-go-asn1-ber-asn1-ber" ,go-github-com-go-asn1-ber-asn1-ber)))
|
2023-12-03 23:40:00 -07:00
|
|
|
(synopsis "Get public key from ldap")
|
|
|
|
(description
|
|
|
|
"This package provides a command-line tool to get public keys from an ldap server")
|
|
|
|
(home-page "https://git.metznet.ca/metznet/pubkey.git")
|
|
|
|
(license license:bsd-3)))
|
|
|
|
|