wip: gnat-3.09
This commit is contained in:
parent
3b9158fa43
commit
4c0012e667
1 changed files with 216 additions and 0 deletions
216
wip/ada.scm
Normal file
216
wip/ada.scm
Normal file
|
@ -0,0 +1,216 @@
|
||||||
|
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||||
|
;;;
|
||||||
|
;;; This file is an addendum to GNU Guix.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||||
|
;;; under the terms of the GNU General Public License as published by
|
||||||
|
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
;;; your option) any later version.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||||
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
;;; GNU General Public License for more details.
|
||||||
|
;;;
|
||||||
|
;;; You should have received a copy of the GNU General Public License
|
||||||
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
(define-module (wip ada)
|
||||||
|
#:use-module ((guix licenses) #:prefix license:)
|
||||||
|
#:use-module (guix download)
|
||||||
|
#:use-module (guix packages)
|
||||||
|
#:use-module (guix utils)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (gnu packages base)
|
||||||
|
#:use-module (gnu packages bootstrap)
|
||||||
|
#:use-module (gnu packages gcc)
|
||||||
|
#:use-module (gnu packages texinfo)
|
||||||
|
#:use-module (srfi srfi-1)
|
||||||
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
|
(define-public gcc-2.7
|
||||||
|
(package
|
||||||
|
(inherit gcc)
|
||||||
|
(version "2.7.2.3")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "mirror://gnu/gcc/gcc-" version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0g3pffmbkm45kfidfc93mrakivv5j1b50rki2hqvnr101w7nw5hn"))
|
||||||
|
;(snippet
|
||||||
|
; #~(begin
|
||||||
|
; ;; Need a bison older than 3.0.5.
|
||||||
|
; (delete-file "objc-parse.c")
|
||||||
|
; (delete-file "cexp.c")
|
||||||
|
; (delete-file "c-parse.c")
|
||||||
|
; (delete-file "bi-parser.c")
|
||||||
|
; (delete-file "cp/parse.c")))
|
||||||
|
))
|
||||||
|
(supported-systems (fold delete %supported-systems
|
||||||
|
'("powerpc64le-linux" "riscv64-linux")))
|
||||||
|
(outputs '("out"))
|
||||||
|
(arguments
|
||||||
|
(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")
|
||||||
|
#:tests? #f ; There does not seem to be a test suite.
|
||||||
|
#:parallel-build? #f
|
||||||
|
#:make-flags
|
||||||
|
#~(list (string-append "CC=" #$(cc-for-target))
|
||||||
|
;; Despite objections to the contrary, OLDCC is still gcc.
|
||||||
|
(string-append "OLDCC=" #$(cc-for-target))
|
||||||
|
;; We need to add the -O1 when building with gcc-11.
|
||||||
|
"CFLAGS = -O1 -g"
|
||||||
|
;; badly punctuated parameter list in `#define'
|
||||||
|
;; None of these seem to ignore it :/
|
||||||
|
;"ENQUIRE_CFLAGS = -Wp,-std=c9x -DNO_MEM -DNO_LONG_DOUBLE_IO -O0"
|
||||||
|
;"ENQUIRE_CFLAGS = -w -DNO_MEM -DNO_LONG_DOUBLE_IO -O0"
|
||||||
|
;; Drop objc
|
||||||
|
"LANGUAGES = c proto")
|
||||||
|
#:phases
|
||||||
|
#~(modify-phases %standard-phases
|
||||||
|
(add-after 'unpack 'replace-deprecated-symbols
|
||||||
|
(lambda _
|
||||||
|
;; sys_nerr and sys_errlist removed in glibc-2.32.
|
||||||
|
(substitute* '("protoize.c"
|
||||||
|
"gcc.c"
|
||||||
|
"cpplib.c"
|
||||||
|
"collect2.c"
|
||||||
|
"cccp.c"
|
||||||
|
"cp/g++.c")
|
||||||
|
(("sys_nerr") "strerrorname_np")
|
||||||
|
(("sys_errlist") "strerrordesc_np"))
|
||||||
|
;; At some point gcc stops implementing varargs.h
|
||||||
|
;; and it moved to glibc.
|
||||||
|
(substitute* (find-files "." "\\.c$")
|
||||||
|
(("#include <varargs\\.h>")
|
||||||
|
"#include <stdarg.h>"))
|
||||||
|
(substitute* "protoize.c"
|
||||||
|
(("#include <stdio\\.h>")
|
||||||
|
"#include <stdio.h>\n#include <string.h>"))))
|
||||||
|
(add-before 'configure 'set-dynamic-linker-file-name
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
;; Tell GCC what the real loader file name is.
|
||||||
|
(substitute* "config/m68k/linux.h"
|
||||||
|
(("/lib/ld\\.so\\.1")
|
||||||
|
(search-input-file
|
||||||
|
inputs #$(glibc-dynamic-linker matching-system))))
|
||||||
|
(substitute* "config/i386/gnu.h"
|
||||||
|
(("/lib/ld\\.so")
|
||||||
|
(search-input-file
|
||||||
|
inputs #$(glibc-dynamic-linker matching-system))))
|
||||||
|
(substitute* '("config/i386/linux.h"
|
||||||
|
"config/m68k/linux.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 'patch-more-shebangs
|
||||||
|
(lambda _
|
||||||
|
(substitute* "genmultilib"
|
||||||
|
(("#!/bin/sh") (string-append "#!" (which "sh"))))
|
||||||
|
(substitute* "configure"
|
||||||
|
(("`/bin/sh") (string-append "`" (which "sh"))))
|
||||||
|
(substitute* "Makefile.in"
|
||||||
|
(("SHELL = /bin/sh")
|
||||||
|
(string-append "SHELL = " (which "sh"))))))))))
|
||||||
|
(native-inputs
|
||||||
|
(list texinfo
|
||||||
|
;; See above about badly punctuated parameter list.
|
||||||
|
(@ (gnu packages base) glibc-2.33)))
|
||||||
|
(inputs '())
|
||||||
|
(propagated-inputs '())
|
||||||
|
(native-search-paths
|
||||||
|
;; This package supports nothing but the C language.
|
||||||
|
(list (search-path-specification
|
||||||
|
(variable "C_INCLUDE_PATH")
|
||||||
|
(files '("include")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "LIBRARY_PATH")
|
||||||
|
(files '("lib")))))))
|
||||||
|
|
||||||
|
(define-public gnat-3.09
|
||||||
|
(package
|
||||||
|
(inherit gcc-2.7)
|
||||||
|
(name "gnat")
|
||||||
|
(version "3.09")
|
||||||
|
(arguments
|
||||||
|
(substitute-keyword-arguments (package-arguments gcc-2.7)
|
||||||
|
((#:make-flags flags)
|
||||||
|
;; TODO: Inherit from gcc-2.7.
|
||||||
|
;#~(append
|
||||||
|
; (remove (cut string-match "LANGUAGES" <>)
|
||||||
|
; #$flags)
|
||||||
|
; (list "LANGUAGES = c ada")))
|
||||||
|
#~(list (string-append "CC=" #$(cc-for-target))
|
||||||
|
;; Despite objections to the contrary, OLDCC is still gcc.
|
||||||
|
(string-append "OLDCC=" #$(cc-for-target))
|
||||||
|
;; We need to add the -O1 when building with gcc-11.
|
||||||
|
"CFLAGS = -O1 -g"
|
||||||
|
;; badly punctuated parameter list in `#define'
|
||||||
|
;; None of these seem to ignore it :/
|
||||||
|
;"ENQUIRE_CFLAGS = -Wp,-std=c9x -DNO_MEM -DNO_LONG_DOUBLE_IO -O0"
|
||||||
|
;"ENQUIRE_CFLAGS = -w -DNO_MEM -DNO_LONG_DOUBLE_IO -O0"
|
||||||
|
;; Drop objc and proto
|
||||||
|
"LANGUAGES = c ada"))
|
||||||
|
((#:phases phases)
|
||||||
|
#~(modify-phases #$phases
|
||||||
|
(add-after 'unpack 'unpack-ada-source
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
(invoke "tar" "xf" (assoc-ref inputs "ada-source"))
|
||||||
|
(rename-file "gnat-3.09.orig/ada" "ada")
|
||||||
|
;; Using 'invoke patch' returns the following error:
|
||||||
|
;; Hmm... I can't seem to find a patch in there anywhere.
|
||||||
|
;; Verbose patching so we can see the output in the logs.
|
||||||
|
(system
|
||||||
|
(string-append "patch --verbose -p0 < "
|
||||||
|
"gnat-3.09.orig/gnat-3.09-src/src/gcc-272.dif"))
|
||||||
|
(with-directory-excursion "ada"
|
||||||
|
(system
|
||||||
|
(string-append "patch --verbose -p0 < "
|
||||||
|
"../gnat-3.09.orig/gnat-3.09-src/src/linux.dif")))))
|
||||||
|
;; These are the instructions, but is it necessary?
|
||||||
|
(replace 'build
|
||||||
|
(lambda* (#:key (make-flags '()) #:allow-other-keys)
|
||||||
|
(apply invoke "make" make-flags)
|
||||||
|
(apply invoke "make" "bootstrap" make-flags)
|
||||||
|
(apply invoke "make" "gnatlib_and_tools" make-flags)))))))
|
||||||
|
(native-inputs
|
||||||
|
`(("ada-source"
|
||||||
|
,(origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "http://snapshot.debian.org/archive"
|
||||||
|
"/debian-archive/20090802T004153Z/debian"
|
||||||
|
"/dists/bo/main/source/devel/gnat_"
|
||||||
|
version ".orig.tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32 "1mw5qyss7lm59mhrxzzjkfa3bnqmq169w5ii8jy6m2868nz3r890"))))
|
||||||
|
;("ada" ,(@ (gnu packages ada) ada/ed)) ; This isn't enough to build gnat.
|
||||||
|
,@(package-native-inputs gcc-2.7)))
|
||||||
|
(native-search-paths
|
||||||
|
;; TODO: Add the search-path-specification for ADA.
|
||||||
|
(list (search-path-specification
|
||||||
|
(variable "C_INCLUDE_PATH")
|
||||||
|
(files '("include")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "LIBRARY_PATH")
|
||||||
|
(files '("lib")))))))
|
Loading…
Reference in a new issue