build-system/gnu: Use invoke instead of system*.
* guix/build/gnu-build-system.scm (unpack, configure, build, check, install) (strip, compress-documentation): Use invoke and remove vestigial plumbing.
This commit is contained in:
		
							parent
							
								
									6d084076b4
								
							
						
					
					
						commit
						9a87649c86
					
				
					 1 changed files with 83 additions and 84 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -152,12 +153,13 @@ working directory." | |||
|         ;; Preserve timestamps (set to the Epoch) on the copied tree so that | ||||
|         ;; things work deterministically. | ||||
|         (copy-recursively source "." | ||||
|                           #:keep-mtime? #t) | ||||
|         #t) | ||||
|       (and (if (string-suffix? ".zip" source) | ||||
|                (zero? (system* "unzip" source)) | ||||
|                (zero? (system* "tar" "xvf" source))) | ||||
|            (chdir (first-subdirectory "."))))) | ||||
|                           #:keep-mtime? #t)) | ||||
|       (begin | ||||
|         (if (string-suffix? ".zip" source) | ||||
|             (invoke "unzip" source) | ||||
|             (invoke "tar" "xvf" source)) | ||||
|         (chdir (first-subdirectory ".")))) | ||||
|   #t) | ||||
| 
 | ||||
| (define %bootstrap-scripts | ||||
|   ;; Typical names of Autotools "bootstrap" scripts. | ||||
|  | @ -316,33 +318,32 @@ makefiles." | |||
|     ;; Call `configure' with a relative path.  Otherwise, GCC's build system | ||||
|     ;; (for instance) records absolute source file names, which typically | ||||
|     ;; contain the hash part of the `.drv' file, leading to a reference leak. | ||||
|     (zero? (apply system* bash | ||||
|                   (string-append srcdir "/configure") | ||||
|                   flags)))) | ||||
|     (apply invoke bash | ||||
|            (string-append srcdir "/configure") | ||||
|            flags))) | ||||
| 
 | ||||
| (define* (build #:key (make-flags '()) (parallel-build? #t) | ||||
|                 #:allow-other-keys) | ||||
|   (zero? (apply system* "make" | ||||
|                 `(,@(if parallel-build? | ||||
|                         `("-j" ,(number->string (parallel-job-count))) | ||||
|                         '()) | ||||
|                   ,@make-flags)))) | ||||
|   (apply invoke "make" | ||||
|          `(,@(if parallel-build? | ||||
|                  `("-j" ,(number->string (parallel-job-count))) | ||||
|                  '()) | ||||
|            ,@make-flags))) | ||||
| 
 | ||||
| (define* (check #:key target (make-flags '()) (tests? (not target)) | ||||
|                 (test-target "check") (parallel-tests? #t) | ||||
|                 #:allow-other-keys) | ||||
|   (if tests? | ||||
|       (zero? (apply system* "make" test-target | ||||
|                     `(,@(if parallel-tests? | ||||
|                             `("-j" ,(number->string (parallel-job-count))) | ||||
|                             '()) | ||||
|                       ,@make-flags))) | ||||
|       (begin | ||||
|         (format #t "test suite not run~%") | ||||
|         #t))) | ||||
|       (apply invoke "make" test-target | ||||
|              `(,@(if parallel-tests? | ||||
|                      `("-j" ,(number->string (parallel-job-count))) | ||||
|                      '()) | ||||
|                ,@make-flags)) | ||||
|       (format #t "test suite not run~%")) | ||||
|   #t) | ||||
| 
 | ||||
| (define* (install #:key (make-flags '()) #:allow-other-keys) | ||||
|   (zero? (apply system* "make" "install" make-flags))) | ||||
|   (apply invoke "make" "install" make-flags)) | ||||
| 
 | ||||
| (define* (patch-shebangs #:key inputs outputs (patch-shebangs? #t) | ||||
|                          #:allow-other-keys) | ||||
|  | @ -408,10 +409,8 @@ makefiles." | |||
|     (let ((debug (debug-file file))) | ||||
|       (mkdir-p (dirname debug)) | ||||
|       (copy-file file debug) | ||||
|       (and (zero? (system* strip-command "--only-keep-debug" debug)) | ||||
|            (begin | ||||
|              (chmod debug #o400) | ||||
|              #t)))) | ||||
|       (invoke strip-command "--only-keep-debug" debug) | ||||
|       (chmod debug #o400))) | ||||
| 
 | ||||
|   (define (add-debug-link file) | ||||
|     ;; Add a debug link in FILE (info "(binutils) strip"). | ||||
|  | @ -421,10 +420,10 @@ makefiles." | |||
|     ;; `bfd_fill_in_gnu_debuglink_section' function.)  No reference to | ||||
|     ;; DEBUG-OUTPUT is kept because bfd keeps only the basename of the debug | ||||
|     ;; file. | ||||
|     (zero? (system* objcopy-command "--enable-deterministic-archives" | ||||
|                     (string-append "--add-gnu-debuglink=" | ||||
|                                    (debug-file file)) | ||||
|                     file))) | ||||
|     (invoke objcopy-command "--enable-deterministic-archives" | ||||
|             (string-append "--add-gnu-debuglink=" | ||||
|                            (debug-file file)) | ||||
|             file)) | ||||
| 
 | ||||
|   (define (strip-dir dir) | ||||
|     (format #t "stripping binaries in ~s with ~s and flags ~s~%" | ||||
|  | @ -434,17 +433,18 @@ makefiles." | |||
|               debug-output objcopy-command)) | ||||
| 
 | ||||
|     (for-each (lambda (file) | ||||
|                 (and (or (elf-file? file) (ar-file? file)) | ||||
|                      (or (not debug-output) | ||||
|                          (make-debug-file file)) | ||||
|                 (when (or (elf-file? file) (ar-file? file)) | ||||
|                   (when debug-output | ||||
|                     (make-debug-file file)) | ||||
| 
 | ||||
|                      ;; Ensure the file is writable. | ||||
|                      (begin (make-file-writable file) #t) | ||||
|                   ;; Ensure the file is writable. | ||||
|                   (make-file-writable file) | ||||
| 
 | ||||
|                      (zero? (apply system* strip-command | ||||
|                                    (append strip-flags (list file)))) | ||||
|                      (or (not debug-output) | ||||
|                          (add-debug-link file)))) | ||||
|                   (apply invoke strip-command | ||||
|                          (append strip-flags (list file))) | ||||
| 
 | ||||
|                   (when debug-output | ||||
|                     (add-debug-link file)))) | ||||
|               (find-files dir | ||||
|                           (lambda (file stat) | ||||
|                             ;; Ignore symlinks such as: | ||||
|  | @ -452,15 +452,16 @@ makefiles." | |||
|                             (eq? 'regular (stat:type stat))) | ||||
|                           #:stat lstat))) | ||||
| 
 | ||||
|   (or (not strip-binaries?) | ||||
|       (every strip-dir | ||||
|              (append-map (match-lambda | ||||
|                           ((_ . dir) | ||||
|                            (filter-map (lambda (d) | ||||
|                                          (let ((sub (string-append dir "/" d))) | ||||
|                                            (and (directory-exists? sub) sub))) | ||||
|                                        strip-directories))) | ||||
|                          outputs)))) | ||||
|   (when strip-binaries? | ||||
|     (for-each | ||||
|      strip-dir | ||||
|      (append-map (match-lambda | ||||
|                    ((_ . dir) | ||||
|                     (filter-map (lambda (d) | ||||
|                                   (let ((sub (string-append dir "/" d))) | ||||
|                                     (and (directory-exists? sub) sub))) | ||||
|                                 strip-directories))) | ||||
|                  outputs)))) | ||||
| 
 | ||||
| (define* (validate-runpath #:key | ||||
|                            (validate-runpath? #t) | ||||
|  | @ -586,47 +587,45 @@ DOCUMENTATION-COMPRESSOR-FLAGS." | |||
|               (apply throw args)))))) | ||||
| 
 | ||||
|   (define (maybe-compress-directory directory regexp) | ||||
|     (or (not (directory-exists? directory)) | ||||
|         (match (find-files directory regexp) | ||||
|           (()                                     ;nothing to compress | ||||
|            #t) | ||||
|           ((files ...)                            ;one or more files | ||||
|            (format #t | ||||
|                    "compressing documentation in '~a' with ~s and flags ~s~%" | ||||
|                    directory documentation-compressor | ||||
|                    documentation-compressor-flags) | ||||
|            (call-with-values | ||||
|                (lambda () | ||||
|                  (partition symbolic-link? files)) | ||||
|              (lambda (symlinks regular-files) | ||||
|                ;; Compress the non-symlink files, and adjust symlinks to refer | ||||
|                ;; to the compressed files.  Leave files that have hard links | ||||
|                ;; unchanged ('gzip' would refuse to compress them anyway.) | ||||
|                ;; Also, do not retarget symbolic links pointing to other | ||||
|                ;; symbolic links, since these are not compressed. | ||||
|                (and (every retarget-symlink | ||||
|                            (filter (lambda (symlink) | ||||
|                                      (and (not (points-to-symlink? symlink)) | ||||
|                                           (string-match regexp symlink))) | ||||
|                                    symlinks)) | ||||
|                     (zero? | ||||
|                      (apply system* documentation-compressor | ||||
|                             (append documentation-compressor-flags | ||||
|                                     (remove has-links? regular-files))))))))))) | ||||
|     (when (directory-exists? directory) | ||||
|       (match (find-files directory regexp) | ||||
|         (()                                     ;nothing to compress | ||||
|          #t) | ||||
|         ((files ...)                            ;one or more files | ||||
|          (format #t | ||||
|                  "compressing documentation in '~a' with ~s and flags ~s~%" | ||||
|                  directory documentation-compressor | ||||
|                  documentation-compressor-flags) | ||||
|          (call-with-values | ||||
|              (lambda () | ||||
|                (partition symbolic-link? files)) | ||||
|            (lambda (symlinks regular-files) | ||||
|              ;; Compress the non-symlink files, and adjust symlinks to refer | ||||
|              ;; to the compressed files.  Leave files that have hard links | ||||
|              ;; unchanged ('gzip' would refuse to compress them anyway.) | ||||
|              ;; Also, do not retarget symbolic links pointing to other | ||||
|              ;; symbolic links, since these are not compressed. | ||||
|              (for-each retarget-symlink | ||||
|                        (filter (lambda (symlink) | ||||
|                                  (and (not (points-to-symlink? symlink)) | ||||
|                                       (string-match regexp symlink))) | ||||
|                                symlinks)) | ||||
|              (apply invoke documentation-compressor | ||||
|                     (append documentation-compressor-flags | ||||
|                             (remove has-links? regular-files))))))))) | ||||
| 
 | ||||
|   (define (maybe-compress output) | ||||
|     (and (maybe-compress-directory (string-append output "/share/man") | ||||
|                                    "\\.[0-9]+$") | ||||
|          (maybe-compress-directory (string-append output "/share/info") | ||||
|                                    "\\.info(-[0-9]+)?$"))) | ||||
|     (maybe-compress-directory (string-append output "/share/man") | ||||
|                               "\\.[0-9]+$") | ||||
|     (maybe-compress-directory (string-append output "/share/info") | ||||
|                               "\\.info(-[0-9]+)?$")) | ||||
| 
 | ||||
|   (if compress-documentation? | ||||
|       (match outputs | ||||
|         (((names . directories) ...) | ||||
|          (every maybe-compress directories))) | ||||
|       (begin | ||||
|         (format #t "not compressing documentation~%") | ||||
|         #t))) | ||||
|          (for-each maybe-compress directories))) | ||||
|       (format #t "not compressing documentation~%")) | ||||
|   #t) | ||||
| 
 | ||||
| (define* (delete-info-dir-file #:key outputs #:allow-other-keys) | ||||
|   "Delete any 'share/info/dir' file from OUTPUTS." | ||||
|  |  | |||
		Reference in a new issue