Hi Ekaitz, Thanks for the patch. I think this is more suitable for core updates brunch as triggers rebuild the world for all golang packages as far as I see. Regards, Oleg On Sat, 13 Jan 2024, 11:48 Ekaitz Zarraga, wrote: > Go 1.13 introduced[1] a new "trimpath" flag in charge of removing the > references to the go toolchain in the produced ELFs. We used to remove > these references using the "remove-go-reference" function. This function > was executed after go install. By using this new trimpath flag, we don't > have to remove any store path from the ELFs produced by go install. > > We're not using any go older than 1.13 anymore, it's safe to remove > these functions. > > [1] https://go.dev/doc/go1.13 > > -trimpath > remove all file system paths from the resulting executable. > Instead of absolute file system paths, the recorded file names > will begin either a module path@version (when using modules), > or a plain import path (when using the standard library, or > GOPATH). > > * guix/build/go-build-system.scm (build): Add -trimpath > (%standard-phases): Remove remove-go-references. > (remove-go-references): Remove. > > Change-Id: Idcae366d226da5ce095693f81fd33133fd1d70d6 > Co-authored-by: Picnoir > --- > guix/build/go-build-system.scm | 59 +++------------------------------- > 1 file changed, 4 insertions(+), 55 deletions(-) > > diff --git a/guix/build/go-build-system.scm > b/guix/build/go-build-system.scm > index 7f25e05d0d..70ddcd07cd 100644 > --- a/guix/build/go-build-system.scm > +++ b/guix/build/go-build-system.scm > @@ -6,6 +6,8 @@ > ;;; Copyright © 2020 Jakub Kądziołka > ;;; Copyright © 2020, 2021 Efraim Flashner > ;;; Copyright © 2021 Sarah Morgensen > +;;; Copyright © 2024 Ekaitz Zarraga > +;;; Copyright © 2024 Picnoir > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -90,7 +92,6 @@ (define-module (guix build go-build-system) > ;; * Use Go modules [4] > ;; * Re-use compiled packages [5] > ;; * Avoid the go-inputs hack > -;; * Stop needing remove-go-references (-trimpath ? ) > ;; * Remove module packages, only offering the full Git repos? This is > ;; more idiomatic, I think, because Go downloads Git repos, not modules. > ;; What are the trade-offs? > @@ -265,6 +266,7 @@ (define* (build #:key import-path build-flags > #:allow-other-keys) > ;; Respectively, strip the symbol table and debug > ;; information, and the DWARF symbol table. > "-ldflags=-s -w" > + "-trimpath" > `(,@build-flags ,import-path))) > (lambda (key . args) > (display (string-append "Building '" import-path "' failed.\n" > @@ -304,58 +306,6 @@ (define* (install-license-files #:key unpack-path > unpack-path)) > (apply (assoc-ref gnu:%standard-phases 'install-license-files) args))) > > -(define* (remove-store-reference file file-name > - #:optional (store (%store-directory))) > - "Remove from FILE occurrences of FILE-NAME in STORE; return #t when > FILE-NAME > -is encountered in FILE, #f otherwise. This implementation reads FILE one > byte at > -a time, which is slow. Instead, we should use the Boyer-Moore string > search > -algorithm; there is an example in (guix build grafts)." > - (define pattern > - (string-take file-name > - (+ 34 (string-length (%store-directory))))) > - > - (with-fluids ((%default-port-encoding #f)) > - (with-atomic-file-replacement file > - (lambda (in out) > - ;; We cannot use `regexp-exec' here because it cannot deal with > - ;; strings containing NUL characters. > - (format #t "removing references to `~a' from `~a'...~%" file-name > file) > - (setvbuf in 'block 65536) > - (setvbuf out 'block 65536) > - (fold-port-matches (lambda (match result) > - (put-bytevector out (string->utf8 store)) > - (put-u8 out (char->integer #\/)) > - (put-bytevector out > - (string->utf8 > - > "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-")) > - #t) > - #f > - pattern > - in > - (lambda (char result) > - (put-u8 out (char->integer char)) > - result)))))) > - > -(define* (remove-go-references #:key allow-go-reference? > - inputs outputs #:allow-other-keys) > - "Remove any references to the Go compiler from the compiled Go > executable > -files in OUTPUTS." > -;; We remove this spurious reference to save bandwidth when installing Go > -;; executables. It would be better to not embed the reference in the first > -;; place, but I'm not sure how to do that. The subject was discussed at: > -;; > - (if allow-go-reference? > - #t > - (let ((go (assoc-ref inputs "go")) > - (bin "/bin")) > - (for-each (lambda (output) > - (when (file-exists? (string-append (cdr output) > - bin)) > - (for-each (lambda (file) > - (remove-store-reference file go)) > - (find-files (string-append (cdr output) > bin))))) > - outputs) > - #t))) > > (define %standard-phases > (modify-phases gnu:%standard-phases > @@ -367,8 +317,7 @@ (define %standard-phases > (replace 'build build) > (replace 'check check) > (replace 'install install) > - (replace 'install-license-files install-license-files) > - (add-after 'install 'remove-go-references remove-go-references))) > + (replace 'install-license-files install-license-files))) > > (define* (go-build #:key inputs (phases %standard-phases) > #:allow-other-keys #:rest args) > > base-commit: c0b303aaa3d6154acbe054120d11467eb98e6d33 > -- > 2.41.0 > > > >