guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch go-team updated: build/g: Use trimpath go flag.


From: guix-commits
Subject: branch go-team updated: build/g: Use trimpath go flag.
Date: Thu, 07 Mar 2024 06:36:38 -0500

This is an automated email from the git hooks/post-receive script.

sharlatan pushed a commit to branch go-team
in repository guix.

The following commit(s) were added to refs/heads/go-team by this push:
     new efc0ee1d7f build/g: Use trimpath go flag.
efc0ee1d7f is described below

commit efc0ee1d7f2b704d3fc0c8aea0ef0ad1ac2972e1
Author: Ekaitz Zarraga <ekaitz@elenq.tech>
AuthorDate: Sat Jan 13 12:46:15 2024 +0100

    build/g: Use trimpath go flag.
    
    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 <picnoir@alternativebit.fr>
    Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
---
 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 bba05fd8c9..d95262bd6c 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 <kuba@kadziolka.net>
 ;;; Copyright © 2020, 2021, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2024 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2024 Picnoir <picnoir@alternativebit.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -90,7 +92,6 @@
 ;; * 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?
@@ -266,6 +267,7 @@ unpacking."
               ;; 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"
@@ -305,58 +307,6 @@ the standard install-license-files phase to first enter 
the correct directory."
                                                     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:
-;; <https://lists.gnu.org/archive/html/guix-devel/2017-10/msg00207.html>
-  (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
@@ -368,8 +318,7 @@ files in OUTPUTS."
     (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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]