aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-12-28 23:46:59 +0100
committerLudovic Courtès <ludo@gnu.org>2014-12-28 23:46:59 +0100
commitf05bdc9412135f34a1c417edc203c35cd005d0d5 (patch)
treed31aa1eb3c7e20a631c037f84416036c1e86c9f0
parent2a8d44015ff2672b7a9a2ea5054b51a83b0e934b (diff)
downloadguix-f05bdc9412135f34a1c417edc203c35cd005d0d5.tar
guix-f05bdc9412135f34a1c417edc203c35cd005d0d5.tar.gz
gnu: Don't use --strip-all in cases where this is problematic.
This is a followup to 856ae5e. See <http://hydra.gnu.org/build/180506> for an example of build failure. * guix/build/gnu-build-system.scm (strip): Add #:archive-strip-flags parameter. Use it when (ar-file? path). * guix/build-system/gnu.scm (gnu-build): Add #:archive-strip-flags parameter and pass it down. * gnu/packages/commencement.scm (gcc-boot0)[arguments]: Add #:strip-flags. * gnu/packages/base.scm (glibc)[arguments]: Likewise.
-rw-r--r--gnu/packages/base.scm3
-rw-r--r--gnu/packages/commencement.scm4
-rw-r--r--guix/build-system/gnu.scm2
-rw-r--r--guix/build/gnu-build-system.scm11
4 files changed, 19 insertions, 1 deletions
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 5bf27c9ef1..b4f4d8ee06 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -421,6 +421,9 @@ included.")
;; XXX: Work around "undefined reference to `__stack_chk_guard'".
"libc_cv_ssp=no")
+ ;; Using '--strip-all' on crt*.o breaks them.
+ #:strip-flags '("--strip-debug")
+
#:tests? #f ; XXX
#:phases (alist-cons-before
'configure 'pre-configure
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 20831de997..309e195bc2 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -170,6 +170,10 @@ identifier SYSTEM."
(ice-9 regex)
(srfi srfi-1)
(srfi srfi-26))
+
+ ;; Using '--strip-all' leads to a link failure while building libc.
+ #:strip-flags '("--strip-debug")
+
,@(substitute-keyword-arguments (package-arguments gcc-4.8)
((#:configure-flags flags)
`(append (list ,(string-append "--target=" (boot-triplet))
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index f765a144c4..e2b41b1898 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -275,6 +275,7 @@ standard packages used as implicit inputs of the GNU build system."
(patch-shebangs? #t)
(strip-binaries? #t)
(strip-flags ''("--strip-all"))
+ (archive-strip-flags ''("--strip-debug"))
(strip-directories ''("lib" "lib64" "libexec"
"bin" "sbin"))
(phases '%standard-phases)
@@ -338,6 +339,7 @@ are allowed to refer to."
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
#:strip-flags ,strip-flags
+ #:archive-strip-flags ,archive-strip-flags
#:strip-directories ,strip-directories)))
(define guile-for-build
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 11b43c521f..a985b1c715 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -298,6 +298,12 @@ makefiles."
(string-append target "-objcopy")
"objcopy"))
(strip-flags '("--strip-all"))
+
+ ;; Using '--strip-all' on .a file would remove the archive
+ ;; index, leading to "Archive has no index" errors when
+ ;; linking against them.
+ (archive-strip-flags '("--strip-debug"))
+
(strip-directories '("lib" "lib64" "libexec"
"bin" "sbin"))
#:allow-other-keys)
@@ -353,7 +359,10 @@ makefiles."
(or (not debug-output)
(make-debug-file path))
(zero? (apply system* strip-command
- (append strip-flags (list path))))
+ (append (if (ar-file? path)
+ archive-strip-flags
+ strip-flags)
+ (list path))))
(or (not debug-output)
(add-debug-link path))))
(const #t) ; down