mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
utils: Remove special `substitute*' syntax for lists of files.
* guix/build/utils.scm (substitute*): Remove special syntax for list-of-files; instead, check whether FILE is `list?' at run time. * distro/packages/base.scm (gcc-4.7, %binutils-static): Adjust accordingly.
This commit is contained in:
parent
450ccdc3aa
commit
20d83444dd
2 changed files with 44 additions and 36 deletions
|
@ -759,9 +759,9 @@ (define-public gcc-4.7
|
|||
|
||||
;; Tell where to find libstdc++, libc, and `?crt*.o', except
|
||||
;; `crt{begin,end}.o', which come with GCC.
|
||||
(substitute* ("gcc/config/gnu-user.h"
|
||||
"gcc/config/i386/gnu-user.h"
|
||||
"gcc/config/i386/gnu-user64.h")
|
||||
(substitute* '("gcc/config/gnu-user.h"
|
||||
"gcc/config/i386/gnu-user.h"
|
||||
"gcc/config/i386/gnu-user64.h")
|
||||
(("#define LIB_SPEC (.*)$" _ suffix)
|
||||
(format #f "#define LIB_SPEC \"-L~a/lib -rpath=~a/lib \
|
||||
-rpath=~a/lib64 -rpath=~a/lib \" ~a~%"
|
||||
|
@ -2310,9 +2310,9 @@ (define %binutils-static
|
|||
;; The `-all-static' libtool flag can only be passed
|
||||
;; after `configure', since configure tests don't use
|
||||
;; libtool, and only for executables built with libtool.
|
||||
(substitute* ("binutils/Makefile.in"
|
||||
"gas/Makefile.in"
|
||||
"ld/Makefile.in")
|
||||
(substitute* '("binutils/Makefile.in"
|
||||
"gas/Makefile.in"
|
||||
"ld/Makefile.in")
|
||||
(("^LDFLAGS =(.*)$" line)
|
||||
(string-append line
|
||||
"\nAM_LDFLAGS = -static -all-static\n"))))
|
||||
|
|
|
@ -312,10 +312,10 @@ (define-syntax substitute*
|
|||
sub-expression. For example:
|
||||
|
||||
(substitute* file
|
||||
((\"hello\")
|
||||
\"good morning\\n\")
|
||||
((\"foo([a-z]+)bar(.*)$\" all letters end)
|
||||
(string-append \"baz\" letter end)))
|
||||
((\"hello\")
|
||||
\"good morning\\n\")
|
||||
((\"foo([a-z]+)bar(.*)$\" all letters end)
|
||||
(string-append \"baz\" letter end)))
|
||||
|
||||
Here, anytime a line of FILE contains \"hello\", it is replaced by \"good
|
||||
morning\". Anytime a line of FILE matches the second regexp, ALL is bound to
|
||||
|
@ -323,33 +323,41 @@ (define-syntax substitute*
|
|||
bound to the last one.
|
||||
|
||||
When one of the MATCH-VAR is `_', no variable is bound to the corresponding
|
||||
match substring."
|
||||
((substitute* (file ...) clause ...)
|
||||
(begin
|
||||
(substitute* file clause ...)
|
||||
...))
|
||||
match substring.
|
||||
|
||||
Alternatively, FILE may be a list of file names, in which case they are
|
||||
all subject to the substitutions."
|
||||
((substitute* file ((regexp match-var ...) body ...) ...)
|
||||
(substitute file
|
||||
(list (cons regexp
|
||||
(lambda (l m+)
|
||||
;; Iterate over matches M+ and return the
|
||||
;; modified line based on L.
|
||||
(let loop ((m* m+) ; matches
|
||||
(o 0) ; offset in L
|
||||
(r '())) ; result
|
||||
(match m*
|
||||
(()
|
||||
(let ((r (cons (substring l o) r)))
|
||||
(string-concatenate-reverse r)))
|
||||
((m . rest)
|
||||
(let-matches 0 m (match-var ...)
|
||||
(loop rest
|
||||
(match:end m)
|
||||
(cons*
|
||||
(begin body ...)
|
||||
(substring l o (match:start m))
|
||||
r))))))))
|
||||
...)))))
|
||||
(let ()
|
||||
(define (substitute-one-file file-name)
|
||||
(substitute
|
||||
file-name
|
||||
(list (cons regexp
|
||||
(lambda (l m+)
|
||||
;; Iterate over matches M+ and return the
|
||||
;; modified line based on L.
|
||||
(let loop ((m* m+) ; matches
|
||||
(o 0) ; offset in L
|
||||
(r '())) ; result
|
||||
(match m*
|
||||
(()
|
||||
(let ((r (cons (substring l o) r)))
|
||||
(string-concatenate-reverse r)))
|
||||
((m . rest)
|
||||
(let-matches 0 m (match-var ...)
|
||||
(loop rest
|
||||
(match:end m)
|
||||
(cons*
|
||||
(begin body ...)
|
||||
(substring l o (match:start m))
|
||||
r))))))))
|
||||
...)))
|
||||
|
||||
(match file
|
||||
((files (... ...))
|
||||
(for-each substitute-one-file files))
|
||||
((? string? f)
|
||||
(substitute-one-file f)))))))
|
||||
|
||||
|
||||
;;;
|
||||
|
|
Loading…
Reference in a new issue