Subject: Re: bug#47615: [PATCH 3/9] gnu: binutils: Adjust test suite on powerpc-linux.

From: Chris Marusich <[email-masked]>
Date: Sat, 17 Apr 2021 13:02:34 -0700

Chris Marusich <[email-masked]> writes:

> (define binutils-boot0
>   (package
>     (inherit binutils)
>     (source (bootstrap-origin (package-source binutils)))
>     (name "binutils-cross-boot0")
>     (arguments
>      `(#:guile ,%bootstrap-guile
>        #:implicit-inputs? #f
>
>        #:modules ((guix build gnu-build-system)
>                   (guix build utils)
>                   (ice-9 ftw))                    ; for 'scandir'
>
>        ,@(substitute-keyword-arguments (package-arguments binutils)
>            ((#:configure-flags cf)
>             `(cons ,(string-append "--target=" (boot-triplet))
>                    ,cf))
>            ;; The presence of '%standard-phases as the default value here is
>            ;; important.  It ensures that even when (package-argument
>            ;; binutils) does not already contain the #:phases keyword
>            ;; argument, the substitution will occur.  If you omit a default
>            ;; value and (package-arguments binutils) does not contain the
>            ;; #:phases keyword argument (e.g., on an x86_64-linux system),
>            ;; then the substitution will not occur, and no phases at all will
>            ;; be added.
>            ((#:phases phases '%standard-phases)
>             `(modify-phases ,phases
>                ,@(if (string=? (%current-system) "powerpc-linux")
>                      '((add-after 'unpack 'disable-rust-libiberty-test
>                          (lambda _
>                            (substitute* "libiberty/testsuite/Makefile.in"
>                              ((" check-rust-demangle ") ""))
>                            #t)))
>                      '())
>                (add-after 'install 'add-symlinks
>                  (lambda* (#:key outputs #:allow-other-keys)
>                    ;; The cross-gcc invokes 'as', 'ld', etc, without the
>                    ;; triplet prefix, so add symlinks.
>                    (let ((out (assoc-ref outputs "out"))
>                          (triplet-prefix (string-append ,(boot-triplet) "-")))
>                      (define (has-triplet-prefix? name)
>                        (string-prefix? triplet-prefix name))
>                      (define (remove-triplet-prefix name)
>                        (substring name (string-length triplet-prefix)))
>                      (with-directory-excursion (string-append out "/bin")
>                        (for-each
>                         (lambda (name)
>                           (symlink name (remove-triplet-prefix name)))
>                         (scandir "." has-triplet-prefix?)))))))))))
>
>     (inputs (%boot0-inputs))))

Sorry, I meant to write this instead:

(define binutils-boot0
  (package
    (inherit binutils)
    (source (bootstrap-origin (package-source binutils)))
    (name "binutils-cross-boot0")
    (arguments
     `(#:guile ,%bootstrap-guile
       #:implicit-inputs? #f

       #:modules ((guix build gnu-build-system)
                  (guix build utils)
                  (ice-9 ftw))                    ; for 'scandir'

       ,@(substitute-keyword-arguments (package-arguments binutils)
           ((#:configure-flags cf)
            `(cons ,(string-append "--target=" (boot-triplet))
                   ,cf))
           ;; The presence of '%standard-phases as the default value here is
           ;; important.  It ensures that even when (package-argument
           ;; binutils) does not already contain the #:phases keyword
           ;; argument, the substitution will occur.  If you omit a default
           ;; value and (package-arguments binutils) does not contain the
           ;; #:phases keyword argument (e.g., on an x86_64-linux system),
           ;; then the substitution will not occur, and no phases at all will
           ;; be added.
           ((#:phases phases '%standard-phases)
            `(modify-phases ,phases
               (add-after 'install 'add-symlinks
                 (lambda* (#:key outputs #:allow-other-keys)
                   ;; The cross-gcc invokes 'as', 'ld', etc, without the
                   ;; triplet prefix, so add symlinks.
                   (let ((out (assoc-ref outputs "out"))
                         (triplet-prefix (string-append ,(boot-triplet) "-")))
                     (define (has-triplet-prefix? name)
                       (string-prefix? triplet-prefix name))
                     (define (remove-triplet-prefix name)
                       (substring name (string-length triplet-prefix)))
                     (with-directory-excursion (string-append out "/bin")
                       (for-each
                        (lambda (name)
                          (symlink name (remove-triplet-prefix name)))
                        (scandir "." has-triplet-prefix?)))))))))))

    (inputs (%boot0-inputs))))

The point is that we can probably "inherit" the phases, so we wouldn't
have to repeat ourselves.

-- 
Chris