summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/base.scm31
-rw-r--r--gnu/packages/bison.scm4
-rw-r--r--gnu/packages/commencement.scm51
-rw-r--r--gnu/packages/cross-base.scm204
-rw-r--r--gnu/packages/flex.scm2
-rw-r--r--gnu/packages/gawk.scm4
-rw-r--r--gnu/packages/gcc.scm44
-rw-r--r--gnu/packages/ld-wrapper.in12
-rw-r--r--gnu/packages/linux.scm22
-rw-r--r--gnu/packages/make-bootstrap.scm4
-rw-r--r--gnu/packages/nettle.scm6
-rw-r--r--gnu/packages/patches/findutils-localstatedir.patch14
-rw-r--r--gnu/packages/patches/gawk-shell.patch18
-rw-r--r--gnu/packages/patches/gcc-arm-link-spec-fix.patch4
-rw-r--r--gnu/packages/patches/guile-linux-syscalls.patch6
-rw-r--r--gnu/packages/patches/patch-hurd-path-max.patch48
-rw-r--r--gnu/packages/patches/sed-hurd-path-max.patch34
-rw-r--r--gnu/packages/patches/tar-d_ino_in_dirent-fix.patch33
-rw-r--r--gnu/packages/perl.scm55
-rw-r--r--gnu/packages/xml.scm58
20 files changed, 433 insertions, 221 deletions
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index c6206fdce2..fa7c9e884a 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -101,7 +101,8 @@ including, for example, recursive directory searching.")
                                 ".tar.bz2"))
             (sha256
              (base32
-              "1myvrmh99jsvk7v3d7crm0gcrq51hmmm1r2kjyyci152in1x2j7h"))))
+              "1myvrmh99jsvk7v3d7crm0gcrq51hmmm1r2kjyyci152in1x2j7h"))
+            (patches (list (search-patch "sed-hurd-path-max.patch")))))
    (build-system gnu-build-system)
    (synopsis "Stream editor")
    (arguments
@@ -136,7 +137,8 @@ implementation offers several extensions over the standard utility.")
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1wi2zwm4c9r3h3b8y4w0nm0qq897kn8kyj9k22ba0iqvxj48vvk4"))))
+              "1wi2zwm4c9r3h3b8y4w0nm0qq897kn8kyj9k22ba0iqvxj48vvk4"))
+            (patches (list (search-patch "tar-d_ino_in_dirent-fix.patch")))))
    (build-system gnu-build-system)
    (synopsis "Managing tar archives")
    (description
@@ -159,7 +161,8 @@ standard utility.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "16d2r9kpivaak948mxzc0bai45mqfw73m113wrkmbffnalv1b5gx"))))
+                "16d2r9kpivaak948mxzc0bai45mqfw73m113wrkmbffnalv1b5gx"))
+              (patches (list (search-patch "patch-hurd-path-max.patch")))))
    (build-system gnu-build-system)
    (native-inputs `(("ed", ed)))
    (synopsis "Apply differences to originals, with optional backups")
@@ -205,14 +208,20 @@ interactive means to merge two files.")
             (sha256
              (base32
               "0amn0bbwqvsvvsh6drfwz20ydc2czk374lzw5kksbh6bf78k4ks3"))
-            (patches (list (search-patch "findutils-absolute-paths.patch")))))
+            (patches (map search-patch
+                          '("findutils-absolute-paths.patch"
+                            "findutils-localstatedir.patch")))))
    (build-system gnu-build-system)
    (arguments
-    ;; Work around cross-compilation failure.
-    ;; See <http://savannah.gnu.org/bugs/?27299#comment1>.
-    (if (%current-target-system)
-        '(#:configure-flags '("gl_cv_func_wcwidth_works=yes"))
-        '()))
+    `(#:configure-flags (list
+                         ;; Tell 'updatedb' to write to /var.
+                         "--localstatedir=/var"
+
+                         ;; Work around cross-compilation failure.  See
+                         ;; <http://savannah.gnu.org/bugs/?27299#comment1>.
+                         ,@(if (%current-target-system)
+                               '("gl_cv_func_wcwidth_works=yes")
+                               '()))))
    (synopsis "Operating on files matching given criteria")
    (description
     "Findutils supplies the basic file directory searching utilities of the
@@ -672,14 +681,14 @@ test environments.")
 (define-public which
   (package
     (name "which")
-    (version "2.20")
+    (version "2.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/which/which-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1y2p50zadb36izzh2zw4dm5hvdiydqf3qa88l8kav20dcmfbc5yl"))))
+                "1bgafvy3ypbhhfznwjv1lxmd6mci3x1byilnnkc7gcr486wlb8pl"))))
     (build-system gnu-build-system)
     (home-page "https://gnu.org/software/which/")
     (synopsis "Find full path of shell commands")
diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm
index 43ab216797..c8ec8cc274 100644
--- a/gnu/packages/bison.scm
+++ b/gnu/packages/bison.scm
@@ -40,7 +40,9 @@
        (base32
         "1qbgf6q1n2z17k8g33444m0q68kf3fbiq65q7jlrzpvvj73jh957"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs `(("perl" ,perl)
+                     ;; m4 is not present in PATH when cross-building
+                     ("m4" ,m4)))
     (inputs `(("flex" ,flex)))
     (propagated-inputs `(("m4" ,m4)))
     (home-page "http://www.gnu.org/software/bison/")
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index a5402f0556..db91bec5da 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -137,6 +137,28 @@
      (arguments
       `(#:guile ,%bootstrap-guile
         #:implicit-inputs? #f
+
+        #:modules ((guix build gnu-build-system)
+                   (guix build utils)
+                   (ice-9 ftw))                    ; for 'scandir'
+        #:phases (alist-cons-after
+                  'install 'add-symlinks
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    ;; The cross-gcc invokes 'as', 'ld', etc, without the
+                    ;; triplet prefix, so add symlinks.
+                    (let ((out (assoc-ref outputs "out"))
+                          (triplet-prefix (string-append ,(boot-triplet) "-")))
+                      (define (has-triplet-prefix? name)
+                        (string-prefix? triplet-prefix name))
+                      (define (remove-triplet-prefix name)
+                        (substring name (string-length triplet-prefix)))
+                      (with-directory-excursion (string-append out "/bin")
+                        (for-each (lambda (name)
+                                    (symlink name (remove-triplet-prefix name)))
+                                  (scandir "." has-triplet-prefix?)))
+                      #t))
+                  %standard-phases)
+
         ,@(substitute-keyword-arguments (package-arguments binutils)
             ((#:configure-flags cf)
              `(cons ,(string-append "--target=" (boot-triplet))
@@ -145,7 +167,7 @@
 
 (define gcc-boot0
   (package-with-bootstrap-guile
-   (package (inherit gcc-4.8)
+   (package (inherit gcc-4.9)
      (name "gcc-cross-boot0")
      (arguments
       `(#:guile ,%bootstrap-guile
@@ -155,7 +177,7 @@
                    (ice-9 regex)
                    (srfi srfi-1)
                    (srfi srfi-26))
-        ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
+        ,@(substitute-keyword-arguments (package-arguments gcc-4.9)
             ((#:configure-flags flags)
              `(append (list ,(string-append "--target=" (boot-triplet))
 
@@ -177,6 +199,8 @@
                             "--disable-libsanitizer"
                             "--disable-libitm"
                             "--disable-libgomp"
+                            "--disable-libcilkrts"
+                            "--disable-libvtv"
                             "--disable-libssp"
                             "--disable-libquadmath"
                             "--disable-decimal-float")
@@ -216,7 +240,7 @@
                     (with-directory-excursion
                         (string-append out "/lib/gcc/"
                                        ,(boot-triplet)
-                                       "/" ,(package-version gcc-4.8))
+                                       "/" ,(package-version gcc-4.9))
                       (symlink "libgcc.a" "libgcc_eh.a"))))
                 ,phases))))))
 
@@ -232,7 +256,7 @@
 
      ;; No need for Texinfo at this stage.
      (native-inputs (alist-delete "texinfo"
-                                  (package-native-inputs gcc-4.8))))))
+                                  (package-native-inputs gcc-4.9))))))
 
 (define perl-boot0
   (package-with-bootstrap-guile
@@ -270,10 +294,7 @@
   ;; 2nd stage inputs.
   `(("gcc" ,gcc-boot0)
     ("binutils-cross" ,binutils-boot0)
-
-    ;; Keep "binutils" here because the cross-gcc invokes `as', not the
-    ;; cross-`as'.
-    ,@%boot0-inputs))
+    ,@(alist-delete "binutils" %boot0-inputs)))
 
 (define glibc-final-with-bootstrap-bash
   ;; The final libc, "cross-built".  If everything went well, the resulting
@@ -331,7 +352,7 @@
 (define (cross-gcc-wrapper gcc binutils glibc bash)
   "Return a wrapper for the pseudo-cross toolchain GCC/BINUTILS/GLIBC
 that makes it available under the native tool names."
-  (package (inherit gcc-4.8)
+  (package (inherit gcc-4.9)
     (name (string-append (package-name gcc) "-wrapped"))
     (source #f)
     (build-system trivial-build-system)
@@ -498,7 +519,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
   ;; Intermediate libstdc++ that will allow us to build the final GCC
   ;; (remember that GCC-BOOT0 cannot build libstdc++.)
   (package-with-bootstrap-guile
-   (package (inherit gcc-4.8)
+   (package (inherit gcc-4.9)
      (name "libstdc++")
      (arguments
       `(#:guile ,%bootstrap-guile
@@ -517,7 +538,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                             (assoc-ref %outputs "out")
                                             "/include"
                                             ;; "/include/c++/"
-                                            ;; ,(package-version gcc-4.8)
+                                            ;; ,(package-version gcc-4.9)
                                             ))))
      (outputs '("out"))
      (inputs %boot2-inputs)
@@ -529,6 +550,12 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
   ;; The final GCC.
   (package (inherit gcc-boot0)
     (name "gcc")
+
+    ;; XXX: Currently #:allowed-references applies to all the outputs but the
+    ;; "debug" output contains disallowed references, notably
+    ;; linux-libre-headers.  Disable the debugging output to work around that.
+    (outputs (delete "debug" (package-outputs gcc-boot0)))
+
     (arguments
      `(#:guile ,%bootstrap-guile
        #:implicit-inputs? #f
@@ -545,7 +572,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
        ;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
        ,@(substitute-keyword-arguments (package-arguments gcc-boot0)
            ((#:configure-flags boot-flags)
-            (let loop ((args (package-arguments gcc-4.8)))
+            (let loop ((args (package-arguments gcc-4.9)))
               (match args
                 ((#:configure-flags normal-flags _ ...)
                  normal-flags)
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index f1aca505d8..9c27483466 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -85,101 +85,107 @@ may be either a libc package or #f.)"
   ;; Set the current target system so that 'glibc-dynamic-linker' returns the
   ;; right name.
   (parameterize ((%current-target-system target))
-    (substitute-keyword-arguments (package-arguments gcc-4.8)
-      ((#:configure-flags flags)
-       `(append (list ,(string-append "--target=" target)
-                      ,@(if libc
-                            '()
-                            `( ;; Disable features not needed at this stage.
-                              "--disable-shared" "--enable-static"
-
-                              ;; Disable C++ because libstdc++'s configure
-                              ;; script otherwise fails with "Link tests are not
-                              ;; allowed after GCC_NO_EXECUTABLES."
-                              "--enable-languages=c"
-
-                              "--disable-threads"  ;libgcc, would need libc
-                              "--disable-libatomic"
-                              "--disable-libmudflap"
-                              "--disable-libgomp"
-                              "--disable-libssp"
-                              "--disable-libquadmath"
-                              "--disable-decimal-float" ;would need libc
-                              )))
-
-                ,(if libc
-                     flags
-                     `(remove (cut string-match "--enable-languages.*" <>)
-                              ,flags))))
-      ((#:make-flags flags)
-       (if libc
-           `(let ((libc (assoc-ref %build-inputs "libc")))
-              ;; FLAGS_FOR_TARGET are needed for the target libraries to receive
-              ;; the -Bxxx for the startfiles.
-              (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
-                    ,flags))
-           flags))
-      ((#:phases phases)
-       (let ((phases
-              `(alist-cons-after
-                'install 'make-cross-binutils-visible
-                (lambda* (#:key outputs inputs #:allow-other-keys)
-                  (let* ((out      (assoc-ref outputs "out"))
-                         (libexec  (string-append out "/libexec/gcc/"
-                                                  ,target))
-                         (binutils (string-append
-                                    (assoc-ref inputs "binutils-cross")
-                                    "/bin/" ,target "-"))
-                         (wrapper  (string-append
-                                    (assoc-ref inputs "ld-wrapper-cross")
-                                    "/bin/" ,target "-ld")))
-                    (for-each (lambda (file)
-                                (symlink (string-append binutils file)
-                                         (string-append libexec "/"
-                                                        file)))
-                              '("as" "nm"))
-                    (symlink wrapper (string-append libexec "/ld"))
-                    #t))
-                ,phases)))
-         (if libc
-             `(alist-cons-before
-               'configure 'set-cross-path
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; Add the cross Linux headers to CROSS_CPATH, and remove them
-                 ;; from CPATH.
-                 (let ((libc  (assoc-ref inputs "libc"))
-                       (linux (assoc-ref inputs
-                                         "libc/linux-headers")))
-                   (define (cross? x)
-                     ;; Return #t if X is a cross-libc or cross Linux.
-                     (or (string-prefix? libc x)
-                         (string-prefix? linux x)))
-
-                   (setenv "CROSS_CPATH"
-                           (string-append libc "/include:"
-                                          linux "/include"))
-                   (setenv "CROSS_LIBRARY_PATH"
-                           (string-append libc "/lib"))
-
-                   (let ((cpath   (search-path-as-string->list
-                                   (getenv "CPATH")))
-                         (libpath (search-path-as-string->list
-                                   (getenv "LIBRARY_PATH"))))
-                     (setenv "CPATH"
-                             (list->search-path-as-string
-                              (remove cross? cpath) ":"))
-                     (setenv "LIBRARY_PATH"
-                             (list->search-path-as-string
-                              (remove cross? libpath) ":"))
-                     #t)))
-               ,phases)
-             phases)))
-      ((#:strip-binaries? _)
-       ;; Disable stripping as this can break binaries, with object files of
-       ;; libgcc.a showing up as having an unknown architecture.  See
-       ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
-       ;; for instance.
-       #f))))
+    ;; Disable stripping as this can break binaries, with object files of
+    ;; libgcc.a showing up as having an unknown architecture.  See
+    ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
+    ;; for instance.
+    (let ((args `(#:strip-binaries? #f
+                  ,@(package-arguments gcc-4.9))))
+     (substitute-keyword-arguments args
+       ((#:configure-flags flags)
+        `(append (list ,(string-append "--target=" target)
+                       ,@(if libc
+                             '()
+                             `( ;; Disable features not needed at this stage.
+                               "--disable-shared" "--enable-static"
+
+                               ;; Disable C++ because libstdc++'s configure
+                               ;; script otherwise fails with "Link tests are not
+                               ;; allowed after GCC_NO_EXECUTABLES."
+                               "--enable-languages=c"
+
+                               "--disable-threads" ;libgcc, would need libc
+                               "--disable-libatomic"
+                               "--disable-libmudflap"
+                               "--disable-libgomp"
+                               "--disable-libssp"
+                               "--disable-libquadmath"
+                               "--disable-decimal-float" ;would need libc
+                               )))
+
+                 ,(if libc
+                      flags
+                      `(remove (cut string-match "--enable-languages.*" <>)
+                               ,flags))))
+       ((#:make-flags flags)
+        (if libc
+            `(let ((libc (assoc-ref %build-inputs "libc")))
+               ;; FLAGS_FOR_TARGET are needed for the target libraries to receive
+               ;; the -Bxxx for the startfiles.
+               (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
+                     ,flags))
+            flags))
+       ((#:phases phases)
+        (let ((phases
+               `(alist-cons-after
+                 'install 'make-cross-binutils-visible
+                 (lambda* (#:key outputs inputs #:allow-other-keys)
+                   (let* ((out      (assoc-ref outputs "out"))
+                          (libexec  (string-append out "/libexec/gcc/"
+                                                   ,target))
+                          (binutils (string-append
+                                     (assoc-ref inputs "binutils-cross")
+                                     "/bin/" ,target "-"))
+                          (wrapper  (string-append
+                                     (assoc-ref inputs "ld-wrapper-cross")
+                                     "/bin/" ,target "-ld")))
+                     (for-each (lambda (file)
+                                 (symlink (string-append binutils file)
+                                          (string-append libexec "/"
+                                                         file)))
+                               '("as" "nm"))
+                     (symlink wrapper (string-append libexec "/ld"))
+                     #t))
+                 (alist-replace
+                  'install
+                  (lambda _
+                    ;; Unlike our 'strip' phase, this will do the right thing
+                    ;; for cross-compilers.
+                    (zero? (system* "make" "install-strip")))
+                  ,phases))))
+          (if libc
+              `(alist-cons-before
+                'configure 'set-cross-path
+                (lambda* (#:key inputs #:allow-other-keys)
+                  ;; Add the cross Linux headers to CROSS_CPATH, and remove them
+                  ;; from CPATH.
+                  (let ((libc  (assoc-ref inputs "libc"))
+                        (linux (assoc-ref inputs
+                                          "libc/linux-headers")))
+                    (define (cross? x)
+                      ;; Return #t if X is a cross-libc or cross Linux.
+                      (or (string-prefix? libc x)
+                          (string-prefix? linux x)))
+
+                    (setenv "CROSS_CPATH"
+                            (string-append libc "/include:"
+                                           linux "/include"))
+                    (setenv "CROSS_LIBRARY_PATH"
+                            (string-append libc "/lib"))
+
+                    (let ((cpath   (search-path-as-string->list
+                                    (getenv "CPATH")))
+                          (libpath (search-path-as-string->list
+                                    (getenv "LIBRARY_PATH"))))
+                      (setenv "CPATH"
+                              (list->search-path-as-string
+                               (remove cross? cpath) ":"))
+                      (setenv "LIBRARY_PATH"
+                              (list->search-path-as-string
+                               (remove cross? libpath) ":"))
+                      #t)))
+                ,phases)
+              phases)))))))
 
 (define (cross-gcc-patches target)
   "Return GCC patches needed for TARGET."
@@ -193,14 +199,14 @@ may be either a libc package or #f.)"
   "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
 XBINUTILS as the associated cross-Binutils.  If LIBC is false, then build a
 GCC that does not target a libc; otherwise, target that libc."
-  (package (inherit gcc-4.8)
+  (package (inherit gcc-4.9)
     (name (string-append "gcc-cross-"
                          (if libc "" "sans-libc-")
                          target))
-    (source (origin (inherit (package-source gcc-4.8))
+    (source (origin (inherit (package-source gcc-4.9))
               (patches
                (append
-                (origin-patches (package-source gcc-4.8))
+                (origin-patches (package-source gcc-4.9))
                 (cons (search-patch "gcc-cross-environment-variables.patch")
                       (cross-gcc-patches target))))))
 
@@ -230,7 +236,7 @@ GCC that does not target a libc; otherwise, target that libc."
        ("libc-native" ,@(assoc-ref %final-inputs "libc"))
 
        ;; Remaining inputs.
-       ,@(let ((inputs (append (package-inputs gcc-4.8)
+       ,@(let ((inputs (append (package-inputs gcc-4.9)
                                (alist-delete "libc" %final-inputs))))
            (if libc
                `(("libc" ,libc)
diff --git a/gnu/packages/flex.scm b/gnu/packages/flex.scm
index e76535cc17..7988e930e7 100644
--- a/gnu/packages/flex.scm
+++ b/gnu/packages/flex.scm
@@ -60,6 +60,8 @@
               (inputs (alist-delete "flex" (package-inputs bison))))))
        `(("bison" ,bison-for-tests)
          ("indent" ,indent))))
+    ;; m4 is not present in PATH when cross-building
+    (native-inputs `(("m4" ,m4)))
     (propagated-inputs `(("m4" ,m4)))
     (home-page "http://flex.sourceforge.net/")
     (synopsis "Fast lexical analyser generator")
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index 06ecf6a064..d2639a32a3 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -28,13 +28,13 @@
 (define-public gawk
   (package
    (name "gawk")
-   (version "4.1.1")
+   (version "4.1.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gawk/gawk-" version
                                 ".tar.xz"))
             (sha256
-             (base32 "1nz83vpss8xv7m475sv4qhhj40g74nvcw0y9kwq9ds8wzfmcdm7g"))))
+             (base32 "09d6pmx6h3i2glafm0jd1v1iyrs03vcyv2rkz12jisii3vlmbkz3"))))
    (build-system gnu-build-system)
    (arguments
     `(#:parallel-tests? #f                ; test suite fails in parallel
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index b652521bb8..beb007e95b 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -64,15 +64,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          '())))
 
 (define-public gcc-4.7
-  (let* ((stripped? #t)                           ; TODO: make this a parameter
-         (install-target
-          (lambda ()
-            ;; The 'install-strip' rule uses the native 'strip' instead of
-            ;; 'TARGET-strip' when cross-compiling.  Thus, use 'install' in that
-            ;; case.
-            (if (and stripped? (not (%current-target-system)))
-                "install-strip"
-                "install")))
+  (let* ((stripped? #t)      ;whether to strip the compiler, not the libraries
          (maybe-target-tools
           (lambda ()
             ;; Return the `_FOR_TARGET' variables that are needed when
@@ -144,8 +136,9 @@ where the OS part is overloaded to denote a specific ABI---into GCC
 
       ;; Separate out the run-time support libraries because all the
       ;; dynamic-linked objects depend on it.
-      (outputs '("out"                     ; commands, etc. (60+ MiB)
-                 "lib"))                   ; libgcc_s, libgomp, etc. (15+ MiB)
+      (outputs '("out"                    ;commands, etc. (60+ MiB)
+                 "lib"                    ;libgcc_s, libgomp, etc. (15+ MiB)
+                 "debug"))                ;debug symbols of run-time libraries
 
       (inputs `(("gmp" ,gmp)
                 ("mpfr" ,mpfr)
@@ -160,7 +153,6 @@ where the OS part is overloaded to denote a specific ABI---into GCC
 
       (arguments
        `(#:out-of-source? #t
-         #:strip-binaries? ,stripped?
          #:configure-flags ,(configure-flags)
          #:make-flags
          ;; None of the flags below are needed when doing a Canadian cross.
@@ -235,8 +227,8 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                    ;; below, make sure to update the relevant code in
                    ;; %gcc-static package as needed.
                    (format #f "#define GNU_USER_TARGET_LIB_SPEC \
-\"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib -lgcc_s}} \" ~a"
-                           libc libc libdir libdir suffix))
+\"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
+                           libc libc libdir suffix))
                   (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
                    (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
 #define STANDARD_STARTFILE_PREFIX_2 \"\"
@@ -248,6 +240,20 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                 (("static char const sed_cmd_z\\[\\] =.*;")
                  "static char const sed_cmd_z[] = \"sed\";"))
 
+              (when (file-exists? "libbacktrace")
+                ;; GCC 4.8+ comes with libbacktrace.  By default it builds
+                ;; with -Werror, which fails with a -Wcast-qual error in glibc
+                ;; 2.21's stdlib-bsearch.h.  Remove -Werror.
+                (substitute* "libbacktrace/configure"
+                  (("WARN_FLAGS=(.*)-Werror" _ flags)
+                   (string-append "WARN_FLAGS=" flags)))
+
+                (when (file-exists? "libsanitizer/libbacktrace")
+                  ;; Same in libsanitizer's bundled copy (!) found in 4.9+.
+                  (substitute* "libsanitizer/libbacktrace/Makefile.in"
+                    (("-Werror")
+                     ""))))
+
               ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s.
               ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354>
               ;; and <http://bugs.gnu.org/20358>.
@@ -280,11 +286,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
              (substitute* "Makefile"
                (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
                 "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
-           (alist-replace 'install
-                          (lambda* (#:key outputs #:allow-other-keys)
-                            (zero?
-                             (system* "make" ,(install-target))))
-                          %standard-phases)))))
+           %standard-phases))))
 
       (native-search-paths
        (list (search-path-specification
@@ -313,10 +315,6 @@ Go.  It also includes runtime support libraries for these languages.")
               (sha256
                (base32
                 "15c6gwm6dzsaagamxkak5smdkf1rdfbqqjs9jdbrp3lbg4ism02a"))
-
-              ;; ARM 'link' spec issue reported at
-              ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65711> and
-              ;; <https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01387.html>.
               (patches (list (search-patch "gcc-arm-link-spec-fix.patch")))))))
 
 (define-public gcc-4.9
diff --git a/gnu/packages/ld-wrapper.in b/gnu/packages/ld-wrapper.in
index db662e7d76..c3d6fa1005 100644
--- a/gnu/packages/ld-wrapper.in
+++ b/gnu/packages/ld-wrapper.in
@@ -143,12 +143,16 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
   (define path+files+args
     (fold (lambda (argument result)
             (match result
-              ((library-path library-files ("-dynamic-linker" . rest))
-               ;; When passed '-dynamic-linker ld.so', ignore 'ld.so'.
-               ;; See <http://bugs.gnu.org/20102>.
+              ((library-path library-files
+                             ((and flag
+                                   (or "-dynamic-linker" "-plugin"))
+                              . rest))
+               ;; When passed '-dynamic-linker ld.so', ignore 'ld.so'; when
+               ;; passed '-plugin liblto_plugin.so', ignore
+               ;; 'liblto_plugin.so'.  See <http://bugs.gnu.org/20102>.
                (list library-path
                      library-files
-                     (cons* argument "-dynamic-linker" rest)))
+                     (cons* argument flag rest)))
               ((library-path library-files previous-args)
                (cond ((string-prefix? "-L" argument) ;augment the search path
                       (list (append library-path
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index f636b91bf0..1b220c4e32 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -108,12 +108,21 @@
                (and (zero? (system* "make"
                                     (string-append "INSTALL_HDR_PATH=" out)
                                     "headers_install"))
-                    (mkdir (string-append out "/include/config"))
-                    (call-with-output-file
-                        (string-append out
-                                       "/include/config/kernel.release")
-                      (lambda (p)
-                        (format p "~a-default~%" ,version))))))))
+                    (begin
+                      (mkdir (string-append out "/include/config"))
+                      (call-with-output-file
+                          (string-append out
+                                         "/include/config/kernel.release")
+                        (lambda (p)
+                          (format p "~a-default~%" ,version)))
+
+                      ;; Remove the '.install' and '..install.cmd' files; the
+                      ;; latter contains store paths, which pulls in bootstrap
+                      ;; binaries in the build environment, and prevents bit
+                      ;; reproducibility for the bootstrap binaries.
+                      (for-each delete-file (find-files out "\\.install"))
+
+                      #t))))))
    (package
     (name "linux-libre-headers")
     (version version)
@@ -135,6 +144,7 @@
                  (alist-replace
                   'install ,install-phase
                   (alist-delete 'configure %standard-phases)))
+       #:allowed-references ()
        #:tests? #f))
     (synopsis "GNU Linux-Libre kernel headers")
     (description "Headers of the Linux-Libre kernel.")
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index 7f1b6d50b0..62398dfde3 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -374,10 +374,6 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
              (copy-recursively (string-append linux "/include/asm-generic")
                                (string-append incdir "/asm-generic"))
 
-             ;; Remove the '.install' and '..install.cmd' files; the latter
-             ;; contains store paths, which prevents bit reproducibility.
-             (for-each delete-file (find-files incdir "\\.install"))
-
              #t))))
       (inputs `(("libc" ,(let ((target (%current-target-system)))
                            (if target
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
index ed140d43c0..77c5080c0a 100644
--- a/gnu/packages/nettle.scm
+++ b/gnu/packages/nettle.scm
@@ -56,17 +56,17 @@ themselves.")
     (license gpl2+)))
 
 (define-public nettle
-  ;; This version is not API-compatible with version 2.  In particular GnuTLS
+  ;; This version is not API-compatible with version 2.  In particular, lsh
   ;; cannot use it yet.  So keep it separate.
   (package (inherit nettle-2)
-    (version "3.1")
+    (version "3.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/nettle/nettle-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1ly9kz5fgc8ilykz07crqwgjsfn4p2s6565gj1aq0w4fr179v1gn"))))
+                "0k1x57zviysvi91lkk66cg8v819vywm5g5yqs22wppfqcifx5m2z"))))
     (arguments
      (substitute-keyword-arguments (package-arguments nettle-2)
        ((#:configure-flags flags)
diff --git a/gnu/packages/patches/findutils-localstatedir.patch b/gnu/packages/patches/findutils-localstatedir.patch
new file mode 100644
index 0000000000..c774303cf1
--- /dev/null
+++ b/gnu/packages/patches/findutils-localstatedir.patch
@@ -0,0 +1,14 @@
+Do not try to create $localstatedir (aka. /var) since we don't have
+write access.
+
+--- findutils-4.4.2/locate/Makefile.in	2015-06-04 12:40:52.690935795 +0200
++++ findutils-4.4.2/locate/Makefile.in	2015-06-04 12:41:32.087286685 +0200
+@@ -1212,7 +1212,7 @@ updatedb: updatedb.sh Makefile
+ 	chmod +x $@
+ 
+ install-data-hook:
+-	$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
++	true
+ 
+ dblocation.texi: Makefile
+ 	echo '@set LOCATE_DB $(LOCATE_DB)' > $@
diff --git a/gnu/packages/patches/gawk-shell.patch b/gnu/packages/patches/gawk-shell.patch
index 89b8540a8d..80e9c65475 100644
--- a/gnu/packages/patches/gawk-shell.patch
+++ b/gnu/packages/patches/gawk-shell.patch
@@ -2,9 +2,9 @@ As for libc's `system', change Awk to look for `sh' in $PATH.  This patch is
 only meant to be used during bootstrapping, where we don't know in advance the
 absolute file name of `sh'.
 
---- gawk-4.0.0/io.c	2011-05-18 20:47:29.000000000 +0200
-+++ gawk-4.0.0/io.c	2012-12-18 15:56:06.000000000 +0100
-@@ -1759,7 +1759,7 @@ two_way_open(const char *str, struct red
+--- gawk-4.1.3/io.c	2015-05-19 15:37:20.000000000 +0200
++++ gawk-4.1.3/io.c	2015-06-09 18:39:36.918414881 +0200
+@@ -1945,7 +1945,7 @@ two_way_open(const char *str, struct red
  
  			signal(SIGPIPE, SIG_DFL);
  
@@ -13,22 +13,22 @@ absolute file name of `sh'.
  			_exit(errno == ENOENT ? 127 : 126);
  
  		case -1:
-@@ -1924,7 +1924,7 @@ use_pipes:
- 		    || close(ctop[0]) == -1 || close(ctop[1]) == -1)
+@@ -2129,7 +2129,7 @@ use_pipes:
  			fatal(_("close of pipe failed (%s)"), strerror(errno));
  		/* stderr does NOT get dup'ed onto child's stdout */
+ 		signal(SIGPIPE, SIG_DFL);
 -		execl("/bin/sh", "sh", "-c", str, NULL);
 +		execlp("sh", "sh", "-c", str, NULL);
  		_exit(errno == ENOENT ? 127 : 126);
  	}
- #endif /* NOT __EMX__ */
-@@ -2074,7 +2074,7 @@ gawk_popen(const char *cmd, struct redir
- 			fatal(_("moving pipe to stdout in child failed (dup: %s)"), strerror(errno));
+ #endif /* NOT __EMX__, NOT __MINGW32__ */
+@@ -2323,7 +2323,7 @@ gawk_popen(const char *cmd, struct redir
  		if (close(p[0]) == -1 || close(p[1]) == -1)
  			fatal(_("close of pipe failed (%s)"), strerror(errno));
+ 		signal(SIGPIPE, SIG_DFL);
 -		execl("/bin/sh", "sh", "-c", cmd, NULL);
 +		execlp("sh", "sh", "-c", cmd, NULL);
  		_exit(errno == ENOENT ? 127 : 126);
  	}
- #endif /* NOT __EMX__ */
+ #endif /* NOT __EMX__, NOT __MINGW32__ */
 
diff --git a/gnu/packages/patches/gcc-arm-link-spec-fix.patch b/gnu/packages/patches/gcc-arm-link-spec-fix.patch
index 0ffe8a1810..e00ed1bac0 100644
--- a/gnu/packages/patches/gcc-arm-link-spec-fix.patch
+++ b/gnu/packages/patches/gcc-arm-link-spec-fix.patch
@@ -1,6 +1,10 @@
 Do not pass -dynamic-linker to linker when !shared.
 Fixes <http://bugs.gnu.org/20102>.
 
+ARM 'link' spec issue reported at
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65711 and
+https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01387.html.
+
 Patch by Ludovic Courtès <ludo@gnu.org>.
 
 --- gcc-4.8.4/gcc/config/arm/linux-elf.h.orig	2015-04-08 20:31:20.376900478 +0200
diff --git a/gnu/packages/patches/guile-linux-syscalls.patch b/gnu/packages/patches/guile-linux-syscalls.patch
index 57c7f2589d..25a5e90e35 100644
--- a/gnu/packages/patches/guile-linux-syscalls.patch
+++ b/gnu/packages/patches/guile-linux-syscalls.patch
@@ -7,12 +7,13 @@ diff --git a/libguile/posix.c b/libguile/posix.c
 index 324f21b..cbee94d 100644
 --- a/libguile/posix.c
 +++ b/libguile/posix.c
-@@ -2286,6 +2286,261 @@ scm_init_popen (void)
+@@ -2245,6 +2245,263 @@ scm_init_popen (void)
  }
  #endif
  
 +
 +/* Linux! */
++#ifdef __linux__
 +
 +#include <sys/mount.h>
 +#include "libguile/foreign.h"
@@ -265,7 +266,10 @@ index 324f21b..cbee94d 100644
 +  return scm_from_short (ifr.ifr_flags);
 +}
 +#undef FUNC_NAME
++#endif
 +
  void
  scm_init_posix ()
  {
+-- 
+2.4.1
diff --git a/gnu/packages/patches/patch-hurd-path-max.patch b/gnu/packages/patches/patch-hurd-path-max.patch
new file mode 100644
index 0000000000..81e37930c2
--- /dev/null
+++ b/gnu/packages/patches/patch-hurd-path-max.patch
@@ -0,0 +1,48 @@
+See <http://lists.gnu.org/archive/html/bug-patch/2015-06/msg00009.html>
+
+From 0507dfad5f060161f01840067e1bb1615257b636 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
+Date: Mon, 8 Jun 2015 17:27:56 +0200
+Subject: [PATCH] Do not rely on PATH_MAX when reading a symlink target.
+
+* src/util.c (move_file, copy_file): Use 'fromst->st_size + 1' and
+'tost->st_size + 1' for the allocation, and 'fromst->st_size' and
+'tost->st_size' instead of PATH_MAX.  Fixes compilation on GNU/Hurd.
+---
+ src/util.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/util.c b/src/util.c
+index 82a7e37..c4c0f9d 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -460,12 +460,12 @@ move_file (char const *from, bool *from_needs_removal,
+ 
+ 	  /* FROM contains the contents of the symlink we have patched; need
+ 	     to convert that back into a symlink. */
+-	  char *buffer = xmalloc (PATH_MAX);
++	  char *buffer = xmalloc (fromst->st_size + 1);
+ 	  int fd, size = 0, i;
+ 
+ 	  if ((fd = safe_open (from, O_RDONLY | O_BINARY, 0)) < 0)
+ 	    pfatal ("Can't reopen file %s", quotearg (from));
+-	  while ((i = read (fd, buffer + size, PATH_MAX - size)) > 0)
++	  while ((i = read (fd, buffer + size, fromst->st_size - size)) > 0)
+ 	    size += i;
+ 	  if (i != 0 || close (fd) != 0)
+ 	    read_fatal ();
+@@ -610,9 +610,9 @@ copy_file (char const *from, char const *to, struct stat *tost,
+ 
+   if (S_ISLNK (mode))
+     {
+-      char *buffer = xmalloc (PATH_MAX);
++      char *buffer = xmalloc (tost->st_size + 1);
+ 
+-      if (safe_readlink (from, buffer, PATH_MAX) < 0)
++      if (safe_readlink (from, buffer, tost->st_size) < 0)
+ 	pfatal ("Can't read %s %s", "symbolic link", from);
+       if (safe_symlink (buffer, to) != 0)
+ 	pfatal ("Can't create %s %s", "symbolic link", to);
+-- 
+2.4.2
+
diff --git a/gnu/packages/patches/sed-hurd-path-max.patch b/gnu/packages/patches/sed-hurd-path-max.patch
new file mode 100644
index 0000000000..5226cba4cb
--- /dev/null
+++ b/gnu/packages/patches/sed-hurd-path-max.patch
@@ -0,0 +1,34 @@
+7bb8d35d0330161a5af5341471d0c183a067e8c2
+Author: Jose E. Marchesi <jemarch@gnu.org>
+Date:   Sun Oct 6 14:43:38 2013 +0200
+
+    Set PATH_MAX to some constant in case it is not defined in system
+    headers.
+    
+    2013-10-06  Jose E. Marchesi  <jemarch@gnu.org>
+    
+    	* basicdefs.h (PATH_MAX): Defined to some constant in case it is
+    	not defined by system headers.
+    	* sed/utils.c: Do not include pathmax.h anymore.
+    	* bootstrap.conf (gnulib_modules): Do not use the gnulib module
+    	pathmax.
+
+diff --git a/basicdefs.h b/basicdefs.h
+index 0d28a97..09f5beb 100644
+--- a/basicdefs.h
++++ b/basicdefs.h
+@@ -40,6 +41,13 @@ typedef unsigned long countT;
+ #define obstack_chunk_alloc  ck_malloc
+ #define obstack_chunk_free   free
+ 
++/* MAX_PATH is not defined in some platforms, most notably GNU/Hurd.
++   In that case we define it here to some constant.  Note however that
++   this relies in the fact that sed does reallocation if a buffer
++   needs to be larger than PATH_MAX.  */
++#ifndef PATH_MAX
++# define PATH_MAX 200
++#endif
+ 
+ /* handle misdesigned <ctype.h> macros (snarfed from lib/regex.c) */
+ /* Jim Meyering writes:
+ 
diff --git a/gnu/packages/patches/tar-d_ino_in_dirent-fix.patch b/gnu/packages/patches/tar-d_ino_in_dirent-fix.patch
new file mode 100644
index 0000000000..39d8e2b20a
--- /dev/null
+++ b/gnu/packages/patches/tar-d_ino_in_dirent-fix.patch
@@ -0,0 +1,33 @@
+commit e9ddc08da0982f36581ae5a8c7763453ff41cfe8
+Author: Sergey Poznyakoff <gray@gnu.org>
+Date:   Thu Sep 25 00:22:16 2014 +0300
+
+    Bugfixes.
+    
+    * doc/tar.1: Fix typo in font spec.
+    * src/tar.c (sort_mode_arg, sort_mode_flag): Protect "inode"
+    (SAVEDIR_SORT_INODE) with D_INO_IN_DIRENT
+
+diff --git a/src/tar.c b/src/tar.c
+index 225c624..f8102e0 100644
+--- a/src/tar.c
++++ b/src/tar.c
+@@ -1341,14 +1341,18 @@ static char filename_terminator;
+ static char const *const sort_mode_arg[] = {
+   "none",
+   "name",
++#if D_INO_IN_DIRENT
+   "inode",
++#endif
+   NULL
+ };
+ 
+ static int sort_mode_flag[] = {
+     SAVEDIR_SORT_NONE,
+     SAVEDIR_SORT_NAME,
++#if D_INO_IN_DIRENT
+     SAVEDIR_SORT_INODE
++#endif
+ };
+ 
+ ARGMATCH_VERIFY (sort_mode_arg, sort_mode_flag);
\ No newline at end of file
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index ec6f89a626..3d28455405 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -51,28 +51,39 @@
     (arguments
      '(#:tests? #f
        #:phases
-       (alist-replace
-        'configure
-        (lambda* (#:key inputs outputs #:allow-other-keys)
-          (let ((out  (assoc-ref outputs "out"))
-                (libc (assoc-ref inputs "libc")))
-            ;; Use the right path for `pwd'.
-            (substitute* "dist/Cwd/Cwd.pm"
-              (("/bin/pwd")
-               (which "pwd")))
-
-            (zero?
-             (system* "./Configure"
-                      (string-append "-Dprefix=" out)
-                      (string-append "-Dman1dir=" out "/share/man/man1")
-                      (string-append "-Dman3dir=" out "/share/man/man3")
-                      "-de" "-Dcc=gcc"
-                      "-Uinstallusrbinperl"
-                      "-Dinstallstyle=lib/perl5"
-                      "-Duseshrplib"
-                      (string-append "-Dlocincpth=" libc "/include")
-                      (string-append "-Dloclibpth=" libc "/lib")))))
-        %standard-phases)))
+       (modify-phases %standard-phases
+         (replace
+          'configure
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (let ((out  (assoc-ref outputs "out"))
+                  (libc (assoc-ref inputs "libc")))
+              ;; Use the right path for `pwd'.
+              (substitute* "dist/Cwd/Cwd.pm"
+                (("/bin/pwd")
+                 (which "pwd")))
+
+              (zero?
+               (system* "./Configure"
+                        (string-append "-Dprefix=" out)
+                        (string-append "-Dman1dir=" out "/share/man/man1")
+                        (string-append "-Dman3dir=" out "/share/man/man3")
+                        "-de" "-Dcc=gcc"
+                        "-Uinstallusrbinperl"
+                        "-Dinstallstyle=lib/perl5"
+                        "-Duseshrplib"
+                        (string-append "-Dlocincpth=" libc "/include")
+                        (string-append "-Dloclibpth=" libc "/lib"))))))
+
+         (add-before
+          'strip 'make-shared-objects-writable
+          (lambda* (#:key outputs #:allow-other-keys)
+            ;; The 'lib/perl5' directory contains ~50 MiB of .so.  Make them
+            ;; writable so that 'strip' actually strips them.
+            (let* ((out (assoc-ref outputs "out"))
+                   (lib (string-append out "/lib")))
+              (for-each (lambda (dso)
+                          (chmod dso #o755))
+                        (find-files lib "\\.so$"))))))))
     (native-search-paths (list (search-path-specification
                                 (variable "PERL5LIB")
                                 (files '("lib/perl5/site_perl")))))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index a7925d9aa6..c4ec33e2d7 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -34,6 +35,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages linux))
 
 (define-public expat
@@ -59,22 +61,19 @@ things the parser might find in the XML document (like start tags).")
 (define-public libxml2
   (package
     (name "libxml2")
-    (version "2.9.0")
+    (version "2.9.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "10ib8bpar2pl68aqksfinvfmqknwnk7i35ibq6yjl8dpb0cxj9dd"))))
+               "1g6mf03xcabmk5ing1lwqmasr803616gb2xhn7pll10x2l5w6y2i"))))
     (build-system gnu-build-system)
     (home-page "http://www.xmlsoft.org/")
     (synopsis "C parser for XML")
     (propagated-inputs `(("zlib" ,zlib))) ; libxml2.la says '-lz'.
-    (native-inputs `(("perl" ,perl)
-                     ("python" ,python-2))) ; incompatible with Python 3 (print syntax)
-
-
+    (native-inputs `(("perl" ,perl)))
     ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml'
     ;; sub-directory of any given package.
     (native-search-paths (list (search-path-specification
@@ -84,29 +83,40 @@ things the parser might find in the XML document (like start tags).")
                                 (file-pattern "^catalog\\.xml$")
                                 (file-type 'regular))))
     (search-paths native-search-paths)
-
-    (arguments
-     `(#:phases
-        (alist-replace
-         'install
-         (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-          (let ((install (assoc-ref %standard-phases 'install))
-                (glibc (assoc-ref inputs ,(if (%current-target-system)
-                                              "cross-libc" "libc")))
-                (out (assoc-ref outputs "out")))
-            (apply install args)
-            (chdir "python")
-            (substitute* "setup.py"
-              (("/opt/include")
-               (string-append glibc "/include")))
-            (system* "python" "setup.py" "install"
-                     (string-append "--prefix=" out))))
-        %standard-phases)))
     (description
      "Libxml2 is the XML C parser and toolkit developed for the Gnome project
 (but it is usable outside of the Gnome platform).")
     (license license:x11)))
 
+(define-public python-libxml2
+  (package (inherit libxml2)
+    (name "python-libxml2")
+    (build-system python-build-system)
+    (arguments
+     `(;; XXX: Tests are specified in 'Makefile.am', but not in 'setup.py'.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before
+          'build 'configure
+          (lambda* (#:key inputs #:allow-other-keys)
+            (chdir "python")
+            (let ((glibc   (assoc-ref inputs ,(if (%current-target-system)
+                                                  "cross-libc" "libc")))
+                  (libxml2 (assoc-ref inputs "libxml2")))
+              (substitute* "setup.py"
+                ;; For 'libxml2/libxml/tree.h'.
+                (("ROOT = r'/usr'")
+                 (format #f "ROOT = r'~a'" libxml2))
+                ;; For 'iconv.h'.
+                (("/opt/include")
+                 (string-append glibc "/include")))))))))
+    (inputs `(("libxml2" ,libxml2)))
+    (synopsis "Python bindings for the libxml2 library")))
+
+(define-public python2-libxml2
+  (package-with-python2 python-libxml2))
+
 (define-public libxslt
   (package
     (name "libxslt")