summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
Diffstat (limited to 'guix')
-rw-r--r--guix/build-system/cmake.scm2
-rw-r--r--guix/build-system/glib-or-gtk.scm2
-rw-r--r--guix/build/gnu-build-system.scm12
-rw-r--r--guix/build/gremlin.scm36
-rw-r--r--guix/packages.scm6
5 files changed, 49 insertions, 9 deletions
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm
index 2e6784251e..1bc1879be5 100644
--- a/guix/build-system/cmake.scm
+++ b/guix/build-system/cmake.scm
@@ -84,6 +84,7 @@
(tests? #t)
(test-target "test")
(parallel-build? #t) (parallel-tests? #f)
+ (validate-runpath? #t)
(patch-shebangs? #t)
(strip-binaries? #t)
(strip-flags ''("--strip-debug"))
@@ -121,6 +122,7 @@ provides a 'CMakeLists.txt' file as its build system."
#:test-target ,test-target
#:parallel-build? ,parallel-build?
#:parallel-tests? ,parallel-tests?
+ #:validate-runpath? ,validate-runpath?
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
#:strip-flags ,strip-flags
diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm
index 85d01961a5..954c716893 100644
--- a/guix/build-system/glib-or-gtk.scm
+++ b/guix/build-system/glib-or-gtk.scm
@@ -127,6 +127,7 @@
(test-target "check")
(parallel-build? #t)
(parallel-tests? #t)
+ (validate-runpath? #t)
(patch-shebangs? #t)
(strip-binaries? #t)
(strip-flags ''("--strip-debug"))
@@ -175,6 +176,7 @@
#:test-target ,test-target
#:parallel-build? ,parallel-build?
#:parallel-tests? ,parallel-tests?
+ #:validate-runpath? ,validate-runpath?
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
#:strip-flags ,strip-flags
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index c60f8ba162..5062479360 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -164,7 +164,10 @@ files such as `.in' templates. Most scripts honor $SHELL and
$CONFIG_SHELL, but some don't, such as `mkinstalldirs' or Automake's
`missing' script."
(for-each patch-shebang
- (remove file-is-directory? (find-files "." ".*"))))
+ (remove (lambda (file)
+ (or (not (file-exists? file)) ;dangling symlink
+ (file-is-directory? file)))
+ (find-files "."))))
(define (patch-generated-file-shebangs . rest)
"Patch shebangs in generated files, including `SHELL' variables in
@@ -173,9 +176,10 @@ makefiles."
;; `configure'.
(for-each patch-shebang
(filter (lambda (file)
- (and (executable-file? file)
+ (and (file-exists? file)
+ (executable-file? file)
(not (file-is-directory? file))))
- (find-files "." ".*")))
+ (find-files ".")))
;; Patch `SHELL' in generated makefiles.
(for-each patch-makefile-SHELL (find-files "." "^(GNU)?[mM]akefile$")))
@@ -414,7 +418,7 @@ effects, such as displaying warnings or error messages."
(loop tail (and (pred head) result))))))
(define* (validate-runpath #:key
- validate-runpath?
+ (validate-runpath? #t)
(elf-directories '("lib" "lib64" "libexec"
"bin" "sbin"))
outputs #:allow-other-keys)
diff --git a/guix/build/gremlin.scm b/guix/build/gremlin.scm
index 30b06034dd..fed529b193 100644
--- a/guix/build/gremlin.scm
+++ b/guix/build/gremlin.scm
@@ -39,6 +39,7 @@
elf-dynamic-info-needed
elf-dynamic-info-rpath
elf-dynamic-info-runpath
+ expand-origin
validate-needed-in-runpath))
@@ -236,6 +237,30 @@ value of DT_NEEDED entries is a string.)"
(string-prefix? libc-lib lib))
%libc-libraries))
+(define (expand-variable str variable value)
+ "Replace occurrences of '$VARIABLE' or '${VARIABLE}' in STR with VALUE."
+ (define variables
+ (list (string-append "$" variable)
+ (string-append "${" variable "}")))
+
+ (let loop ((thing variables)
+ (str str))
+ (match thing
+ (()
+ str)
+ ((head tail ...)
+ (let ((index (string-contains str head))
+ (len (string-length head)))
+ (loop (if index variables tail)
+ (if index
+ (string-replace str value
+ index (+ index len))
+ str)))))))
+
+(define (expand-origin str directory)
+ "Replace occurrences of '$ORIGIN' in STR with DIRECTORY."
+ (expand-variable str "ORIGIN" directory))
+
(define* (validate-needed-in-runpath file
#:key (always-found? libc-library?))
"Return #t if all the libraries listed as FILE's 'DT_NEEDED' entries are
@@ -254,17 +279,18 @@ exceeds total size~%"
(let* ((elf (call-with-input-file file
(compose parse-elf get-bytevector-all)))
+ (expand (cute expand-origin <> (dirname file)))
(dyninfo (elf-dynamic-info elf)))
(when dyninfo
- (let* ((runpath (filter store-file-name?
- (elf-dynamic-info-runpath dyninfo)))
- (bogus (remove store-file-name?
- (elf-dynamic-info-runpath dyninfo)))
+ ;; XXX: In theory we should also expand $PLATFORM and $LIB, but these
+ ;; appear to be really unused.
+ (let* ((expanded (map expand (elf-dynamic-info-runpath dyninfo)))
+ (runpath (filter store-file-name? expanded))
+ (bogus (remove store-file-name? expanded))
(needed (remove always-found?
(elf-dynamic-info-needed dyninfo)))
(not-found (remove (cut search-path runpath <>)
needed)))
- ;; XXX: $ORIGIN is not supported.
(unless (null? bogus)
(format (current-error-port)
"~a: warning: RUNPATH contains bogus entries: ~s~%"
diff --git a/guix/packages.scm b/guix/packages.scm
index 0e4cce17e1..a979f31a32 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -95,6 +95,7 @@
package-grafts
%supported-systems
+ %hydra-supported-systems
supported-package?
&package-error
@@ -210,6 +211,11 @@ corresponds to the arguments expected by `set-path-environment-variable'."
;; expect all packages to build successfully here.
'("x86_64-linux" "i686-linux" "armhf-linux" "mips64el-linux"))
+(define %hydra-supported-systems
+ ;; This is the list of system types for which build slaves are available.
+ (delete "armhf-linux" %supported-systems))
+
+
;; A package.
(define-record-type* <package>
package make-package