~ruther/guix-local

437fd809922dc8b704fa653d4b5ca2b602cb0888 — Ludovic Courtès 13 years ago ebe2f31
build-system/gnu: Add a `patch-shebangs' phase.

* guix/build/gnu-build-system.scm (patch-shebangs): New procedure.
  (%standard-phases): Add it.

* guix/build-system/gnu.scm (gnu-build): New `patch-shebangs?' keyword
  parameter.  Pass it to the builder's `gnu-build'.
2 files changed, 28 insertions(+), 2 deletions(-)

M guix/build-system/gnu.scm
M guix/build/gnu-build-system.scm
M guix/build-system/gnu.scm => guix/build-system/gnu.scm +3 -1
@@ 48,6 48,7 @@
                    (patches ''()) (patch-flags ''("--batch" "-p1"))
                    (tests? #t)
                    (parallel-build? #t) (parallel-tests? #t)
                    (patch-shebangs? #t)
                    (phases '%standard-phases)
                    (system (%current-system))
                    (modules '((guix build gnu-build-system)


@@ 69,7 70,8 @@ input derivation INPUTS, using the usual procedure of the GNU Build System."
                  #:make-flags ,make-flags
                  #:tests? ,tests?
                  #:parallel-build? ,parallel-build?
                  #:parallel-tests? ,parallel-tests?)))
                  #:parallel-tests? ,parallel-tests?
                  #:patch-shebangs? ,patch-shebangs?)))

  (build-expression->derivation store name system
                                builder

M guix/build/gnu-build-system.scm => guix/build/gnu-build-system.scm +25 -1
@@ 21,6 21,7 @@
  #:use-module (ice-9 ftw)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-26)
  #:export (%standard-phases
            gnu-build))



@@ 117,11 118,34 @@
(define* (install #:key (make-flags '()) #:allow-other-keys)
  (zero? (apply system* "make" "install" make-flags)))

(define* (patch-shebangs #:key outputs (patch-shebangs? #t)
                         #:allow-other-keys)
  (define (list-of-files dir)
    (map (cut string-append dir "/" <>)
         (or (scandir dir (lambda (f)
                            (let ((s (stat (string-append dir "/" f))))
                              (eq? 'regular (stat:type s)))))
             '())))

  (define bindirs
    (append-map (match-lambda
                 ((_ . dir)
                  (list (string-append dir "/bin")
                        (string-append dir "/sbin"))))
                outputs))

  (for-each (lambda (dir)
              (let ((files (list-of-files dir)))
                (for-each patch-shebang files)))
            bindirs)
  #t)

(define %standard-phases
  ;; Standard build phases, as a list of symbol/procedure pairs.
  (let-syntax ((phases (syntax-rules ()
                         ((_ p ...) `((p . ,p) ...)))))
    (phases set-paths unpack patch configure build check install)))
    (phases set-paths unpack patch configure build check install
            patch-shebangs)))


(define* (gnu-build #:key (source #f) (outputs #f) (inputs #f)