summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2022-02-15 10:21:47 +0200
committerEfraim Flashner <efraim@flashner.co.il>2022-02-15 11:43:23 +0200
commit3f929203cf9c387dd9972a05b3c3af608d2bd21d (patch)
tree07732838c9fe0ae4753acfef201a315627b14ab9
parentae03f401381e956c4c41b4cf495cbde964fa43d0 (diff)
downloadguix-3f929203cf9c387dd9972a05b3c3af608d2bd21d.tar.gz
gnu: gcc-2.95: Support more systems.
* gnu/packages/gcc.scm (gcc-2.95)[supported-systems]: Allow all except
powerpc64le-linux and riscv64-linux.
[arguments]: Set #:system to the 32-bit version of our supported 64-bit
architectures. Modify custom 'set-dynamic-linker-file-name phase to use
the glibc-dynamic-linker for the selected system, and to substitute more
locations.
-rw-r--r--gnu/packages/gcc.scm81
1 files changed, 53 insertions, 28 deletions
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index a330be3336..6a030df449 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -50,6 +50,7 @@
   #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
   #:use-module (ice-9 regex))
 
 (define %gcc-infrastructure
@@ -696,39 +697,63 @@ It also includes runtime support libraries for these languages.")
                   (substitute* "configure"
                     (("host_tools=(.*)texinfo" _ before)
                      (string-append "host_tools=" before)))))))
-    (supported-systems '("i686-linux" "x86_64-linux"))
+    (supported-systems (fold delete %supported-systems
+                             '("powerpc64le-linux" "riscv64-linux")))
     (native-inputs (list texinfo dejagnu))
     (inputs '())
     (propagated-inputs '())
     (outputs '("out"))
     (arguments
-     (list #:system "i686-linux"                ;x86_64 didn't exist back then
-           #:configure-flags #~'("--disable-werror")
-
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-before 'configure 'set-dynamic-linker-file-name
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   ;; Tell GCC what the real loader file name is.
-                   (substitute* "gcc/config/i386/linux.h"
-                     (("/lib/ld-linux\\.so\\.[12]")
-                      (search-input-file inputs "/lib/ld-linux.so.2")))))
-               (replace 'configure
-                 (lambda* (#:key outputs build configure-flags
-                           #:allow-other-keys)
-                   ;; It's an old 'configure' script so it needs some help.
-                   (setenv "CONFIG_SHELL" (which "sh"))
-                   (apply invoke "./configure"
-                          (string-append "--prefix=" #$output)
-                          (string-append "--build=" build)
-                          (string-append "--host=" build)
-                          configure-flags)))
-               (add-before 'configure 'remove-bundled-texinfo
-                 (lambda _
-                   ;; Go ahead despite the many warnings.
-                   (substitute* '("Makefile.in" "gcc/Makefile.in")
-                     (("^MAKEINFOFLAGS =.*")
-                      "MAKEINFOFLAGS = --force\n")))))))
+     (let ((matching-system
+             (match (%current-system)
+               ;; This package predates our 64-bit architectures.
+               ;; Force a 32-bit build targeting a similar architecture.
+               ("aarch64-linux"
+                "armhf-linux")
+               ("x86_64-linux"
+                "i686-linux")
+               (_
+                (%current-system)))))
+       (list #:system matching-system
+             #:configure-flags #~'("--disable-werror")
+
+             #:phases
+             #~(modify-phases %standard-phases
+                 (add-before 'configure 'set-dynamic-linker-file-name
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     ;; Tell GCC what the real loader file name is.
+                     (substitute* '("gcc/config/alpha/linux-elf.h"
+                                    "gcc/config/m68k/linux.h"
+                                    "gcc/config/mips/linux.h"
+                                    "gcc/config/rs6000/linux.h")
+                       (("/lib/ld\\.so\\.1")
+                        (search-input-file
+                          inputs #$(glibc-dynamic-linker matching-system))))
+                     (substitute* '("gcc/config/alpha/linux-elf.h"
+                                    "gcc/config/arm/linux-elf.h"
+                                    "gcc/config/i386/linux.h"
+                                    "gcc/config/m68k/linux.h"
+                                    "gcc/config/sparc/linux.h"
+                                    "gcc/config/sparc/linux64.h")
+                       (("/lib(64)?/ld-linux\\.so\\.[12]")
+                        (search-input-file
+                          inputs #$(glibc-dynamic-linker matching-system))))))
+                 (replace 'configure
+                   (lambda* (#:key outputs build configure-flags
+                             #:allow-other-keys)
+                     ;; It's an old 'configure' script so it needs some help.
+                     (setenv "CONFIG_SHELL" (which "sh"))
+                     (apply invoke "./configure"
+                            (string-append "--prefix=" #$output)
+                            (string-append "--build=" build)
+                            (string-append "--host=" build)
+                            configure-flags)))
+                 (add-before 'configure 'remove-bundled-texinfo
+                   (lambda _
+                     ;; Go ahead despite the many warnings.
+                     (substitute* '("Makefile.in" "gcc/Makefile.in")
+                       (("^MAKEINFOFLAGS =.*")
+                        "MAKEINFOFLAGS = --force\n"))))))))
     (native-search-paths
      ;; This package supports nothing but the C language.
      (list (search-path-specification