* gnu/packages/pascal.scm (fpc-bootstrap-aarch64): New variable. (fpc)[arguments]: Add cases for aarch64-linux. [native-inputs]: Add case for fpc-binary for aarch64-linux. Change-Id: I03630f9b36c10636db23c00aaf8f72b9ddf2390d
		
			
				
	
	
		
			391 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			391 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
| ;;; GNU Guix --- Functional package management for GNU
 | |
| ;;; Copyright © 2017 David Hashe <david.hashe@dhashe.com>
 | |
| ;;; Copyright © 2017 Kei Kebreau <address@hidden>
 | |
| ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
 | |
| ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 | |
| ;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
 | |
| ;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
 | |
| ;;;
 | |
| ;;; This file is part of 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 (gnu packages pascal)
 | |
|   #:use-module ((guix licenses) #:prefix license:)
 | |
|   #:use-module (guix packages)
 | |
|   #:use-module (guix download)
 | |
|   #:use-module (guix git-download)
 | |
|   #:use-module (guix gexp)
 | |
|   #:use-module (guix utils)
 | |
|   #:use-module (guix build-system gnu)
 | |
|   #:use-module (gnu packages)
 | |
|   #:use-module (gnu packages base)
 | |
|   #:use-module (gnu packages bootstrap)
 | |
|   #:use-module (gnu packages compression)
 | |
|   #:use-module (gnu packages gcc)
 | |
|   #:use-module (gnu packages glib)
 | |
|   #:use-module (gnu packages gtk)
 | |
|   #:use-module (gnu packages ncurses)
 | |
|   #:use-module (gnu packages perl)
 | |
|   #:use-module (gnu packages pkg-config)
 | |
|   #:use-module (gnu packages xml)
 | |
|   #:use-module (gnu packages xorg)
 | |
|   #:use-module (ice-9 match))
 | |
| 
 | |
| (define %fpc-version "3.2.2")
 | |
| (define %fpc-release-date "2021/05/19")
 | |
| 
 | |
| ;;; FIXME: Bootstrap properly; these are prebuilt binaries.
 | |
| (define fpc-bootstrap-aarch64
 | |
|   (origin
 | |
|     (method url-fetch)
 | |
|     (uri (string-append "mirror://sourceforge/freepascal/Linux/"
 | |
|                         %fpc-version "/fpc-" %fpc-version ".aarch64-linux.tar"))
 | |
|     (sha256
 | |
|      (base32
 | |
|       "0lalar6qk04acb2j8p6654hlz0yj6zdab046zi82zf5mnvwp155k"))))
 | |
| 
 | |
| (define fpc-bootstrap-i386
 | |
|   (origin
 | |
|     (method url-fetch)
 | |
|     (uri (string-append "mirror://sourceforge/freepascal/Linux/"
 | |
|                         %fpc-version "/fpc-" %fpc-version ".i386-linux.tar"))
 | |
|     (sha256
 | |
|      (base32
 | |
|       "0n4r85dsr86zlk7r4hbd4nj14sda6rwgdgzxg4gj4q981fn80agn"))))
 | |
| 
 | |
| (define fpc-bootstrap-powerpc
 | |
|   (origin
 | |
|     (method url-fetch)
 | |
|     (uri (string-append "mirror://sourceforge/freepascal/Linux/"
 | |
|                         %fpc-version "/fpc-" %fpc-version ".powerpc-linux.tar"))
 | |
|     (sha256
 | |
|      (base32
 | |
|       "1zhdypm99bzs5706g4nxwajiadv82jwd87cr300lrivy1rzj5h4a"))))
 | |
| 
 | |
| (define fpc-bootstrap-powerpc64le
 | |
|   (origin
 | |
|     (method url-fetch)
 | |
|     (uri (string-append "mirror://sourceforge/freepascal/Linux/"
 | |
|                         %fpc-version "/fpc-" %fpc-version ".powerpc64le-linux.tar"))
 | |
|     (sha256
 | |
|      (base32
 | |
|       "12p3lmi1vn7agpw4pipp6ra8r85319sjcvbzh7z6kangmry7vic3"))))
 | |
| 
 | |
| (define fpc-bootstrap-x86_64
 | |
|   (origin
 | |
|     (method url-fetch)
 | |
|     (uri (string-append "mirror://sourceforge/freepascal/Linux/"
 | |
|                         %fpc-version "/fpc-" %fpc-version ".x86_64-linux.tar"))
 | |
|     (sha256
 | |
|      (base32
 | |
|       "10qywczzz4qlcmmzxb7axnvwniq76ky130vd8iv6ljskll4c7njs"))))
 | |
| 
 | |
| (define-public fpc
 | |
|   (package
 | |
|     (name "fpc")
 | |
|     (version %fpc-version)
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (string-append "mirror://sourceforge/freepascal/Source/"
 | |
|                                   version "/fpcbuild-" version ".tar.gz"))
 | |
|               (file-name (string-append name "-" version ".tar.gz"))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "07qna2pvlpa7j0i2wdixjxpizdvffv51nbr1waczk0xv8cq9kvw5"))
 | |
|               (patches (search-patches "fpc-reproducibility.patch"
 | |
|                                        "fpc-glibc-2.34-compat.patch"))
 | |
|               (modules '((guix build utils)))
 | |
|               (snippet
 | |
|                '(begin
 | |
|                   (rename-file "install/doc" "install-doc")
 | |
|                   (rename-file "install/man" "install-man")
 | |
|                   ;; Contains executables--some of them created by
 | |
|                   ;; closed-source compilers.
 | |
|                   (delete-file-recursively "install")
 | |
|                   (mkdir-p "install")
 | |
|                   (rename-file "install-doc" "install/doc")
 | |
|                   (rename-file "install-man" "install/man")
 | |
|                   (delete-file "fpcsrc/tests/utils/dosbox/exitcode.exe")))))
 | |
|     (build-system gnu-build-system)
 | |
|     (supported-systems '("i686-linux" "x86_64-linux"
 | |
|                          "powerpc-linux" "powerpc64le-linux"
 | |
|                          "aarch64-linux"))
 | |
|     (inputs
 | |
|      (list expat glibc ncurses zlib))
 | |
|     (native-inputs
 | |
|      ;; FPC is built with FPC, so we need bootstrap binaries.
 | |
|      `(("fpc-binary" ,(match (or (%current-target-system)
 | |
|                                  (%current-system))
 | |
|                        ("aarch64-linux" fpc-bootstrap-aarch64)
 | |
|                        ("i686-linux" fpc-bootstrap-i386)
 | |
|                        ("powerpc-linux" fpc-bootstrap-powerpc)
 | |
|                        ("powerpc64le-linux" fpc-bootstrap-powerpc64le)
 | |
|                        ("x86_64-linux" fpc-bootstrap-x86_64)
 | |
|                        ;; XXX: Wrong, but innocuous so long
 | |
|                        ;; `supported-systems' is kept in sync.
 | |
|                        (_ fpc-bootstrap-x86_64)))))
 | |
|     (arguments
 | |
|      `(#:tests? #f ; no tests available
 | |
|        #:phases
 | |
|        (let ((fpc-bootstrap-path
 | |
|               (string-append (getcwd) "/" ,name "-" ,version "/fpc-bin"))
 | |
|              (arch ,(cond
 | |
|                       ((target-aarch64?) "aarch64")
 | |
|                       ((target-x86-32?) "i386")
 | |
|                       ((target-ppc32?) "powerpc")
 | |
|                       ((target-ppc64le?) "powerpc64")
 | |
|                       ((target-x86-64?) "x86_64")
 | |
|                       (else "unknown"))))
 | |
|          (modify-phases %standard-phases
 | |
|            (add-after 'unpack 'unpack-bin
 | |
|              (lambda* (#:key inputs #:allow-other-keys)
 | |
|                (mkdir-p fpc-bootstrap-path)
 | |
|                (with-directory-excursion fpc-bootstrap-path
 | |
|                  (invoke "tar" "xvf" (assoc-ref inputs "fpc-binary")))))
 | |
|            (add-after 'unpack-bin 'install-bin
 | |
|              (lambda* (#:key inputs #:allow-other-keys)
 | |
|                (with-directory-excursion
 | |
|                  (string-append fpc-bootstrap-path "/fpc-" ,version "."
 | |
|                                 arch "-linux")
 | |
|                  (let ((binary-tarball
 | |
|                         (string-append "binary." arch "-linux.tar"))
 | |
|                        (compiler-tarball
 | |
|                         (string-append "base." arch "-linux.tar.gz"))
 | |
|                        (fpcmake-tarball
 | |
|                         (string-append "utils-fpcm." arch "-linux.tar.gz")))
 | |
|                    ;; Only the base compiler and fpcmake are needed.
 | |
|                    (invoke "tar" "xvf" binary-tarball compiler-tarball
 | |
|                            fpcmake-tarball)
 | |
|                    (invoke "tar" "xvf" compiler-tarball "-C..")
 | |
|                    (invoke "tar" "xvf" fpcmake-tarball "-C..")))))
 | |
|            (add-after 'patch-source-shebangs 'patch-inline-shebangs
 | |
|              (lambda _
 | |
|                (substitute* "fpcsrc/compiler/cscript.pas"
 | |
|                  (("#!/bin/sh") (string-append "#!" (which "sh"))))))
 | |
|            (add-before 'build 'patch-release-date
 | |
|              (lambda _                  ; reproducibility
 | |
|                (substitute* (list "fpcdocs/prog.tex"
 | |
|                                   "fpcsrc/packages/amunits/examples/sortdemo.pas"
 | |
|                                   "fpcsrc/packages/libogcfpc/src/ogc/libversion.inc"
 | |
|                                   "fpcsrc/utils/fpcres/fpcjres.pas"
 | |
|                                   "fpcsrc/utils/fpcres/fpcres.pas"
 | |
|                                   "fpcsrc/utils/fpcm/fpcmmain.pp"
 | |
|                                   "fpcsrc/utils/fpcreslipo/fpcreslipo.pp"
 | |
|                                   "fpcsrc/compiler/version.pas")
 | |
|                  (("\\{\\$I(NCLUDE)? %DATE%\\}")
 | |
|                   (format #f "'~a'" ,%fpc-release-date)))))
 | |
|            (replace 'configure
 | |
|              (lambda* (#:key inputs outputs #:allow-other-keys)
 | |
|                (substitute* "fpcsrc/compiler/systems/t_linux.pas"
 | |
|                  ;; Point to the current glibc dynamic linker.
 | |
|                  (("/lib/ld-linux.so.2")
 | |
|                   (search-input-file inputs ,(glibc-dynamic-linker)))
 | |
|                  (("/lib64/ld-linux-x86-64.so.2")
 | |
|                   (search-input-file inputs ,(glibc-dynamic-linker)))
 | |
|                  (("/lib/ld.so.1")
 | |
|                   (search-input-file inputs ,(glibc-dynamic-linker)))
 | |
|                  (("/lib64/ld64.so.[12]")
 | |
|                   (search-input-file inputs ,(glibc-dynamic-linker)))
 | |
|                  (("/lib/ld-linux(-armhf)?.so.3")
 | |
|                   (search-input-file inputs ,(glibc-dynamic-linker)))
 | |
|                  (("/lib/ld-linux-aarch64.so.1")
 | |
|                   (search-input-file inputs ,(glibc-dynamic-linker)))
 | |
|                  ;; Add glibc to ld's search path.
 | |
|                  (("if \\(isdll\\) then")
 | |
|                   (string-append
 | |
|                    "Add('SEARCH_DIR(\""
 | |
|                    (assoc-ref inputs "libc") "/lib"
 | |
|                    "\")');\n"
 | |
|                    "if (isdll) then")))
 | |
|                (substitute* "fpcsrc/compiler/options.pas"
 | |
|                  (("exepath\\+'../etc/'")
 | |
|                   (string-append "'" (assoc-ref outputs "out") "/etc'")))))
 | |
|            (replace 'build
 | |
|              (lambda* (#:key inputs #:allow-other-keys)
 | |
|                (let* ((fpc-bin (string-append fpc-bootstrap-path "/bin"))
 | |
|                       (fpc (string-append fpc-bin "/fpc"))
 | |
|                       (fpcmake (string-append fpc-bin "/fpcmake")))
 | |
|                  ;; The fpc binary needs to run the ppc[arch] binary (which
 | |
|                  ;; does the actual compiling) in this directory.
 | |
|                  (setenv "PATH"
 | |
|                         (string-append (getenv "PATH") ":"
 | |
|                                        fpc-bootstrap-path
 | |
|                                        "/lib/fpc/" ,version))
 | |
|                  (setenv "FPC" fpc)
 | |
|                  ;; Specify target operating system using "-T" option
 | |
|                  (invoke fpcmake (string-append "-T" arch "-linux"))
 | |
|                  (invoke "make" "build" "NOGDB=1"))))
 | |
|            (replace 'install
 | |
|              (lambda* (#:key outputs #:allow-other-keys)
 | |
|                (let* ((out (assoc-ref outputs "out"))
 | |
|                      ;; This is the suffix of the ppc[arch] binary.
 | |
|                      (suffix ,(cond
 | |
|                                 ((target-aarch64?) "a64")
 | |
|                                 ((target-x86-32?) "386")
 | |
|                                 ((target-ppc32?) "ppc")
 | |
|                                 ((target-ppc64le?) "ppc64")
 | |
|                                 ((target-x86-64?) "x64")
 | |
|                                 (else "")))
 | |
|                      (ppc (string-append "ppc" suffix)))
 | |
|                  (invoke "make" "install" "NOGDB=1"
 | |
|                          (string-append "INSTALL_PREFIX=" out))
 | |
|                  ;; Remove files that fail RUNPATH validation.
 | |
|                  ;; TODO: Fix it instead.
 | |
|                  (delete-file (string-append out "/lib/libpas2jslib.so"))
 | |
|                  ;; Add a symlink to the ppc[arch] binary so fpc works.
 | |
|                  (symlink (string-append out "/lib/fpc/" ,version "/" ppc)
 | |
|                           (string-append out "/bin/" ppc))
 | |
|                  ;; Install the example configuration file.
 | |
|                  (mkdir (string-append out "/etc"))
 | |
|                  (invoke
 | |
|                    (string-append out "/lib/fpc/" ,version "/samplecfg")
 | |
|                    (string-append out "/lib/fpc/" ,version)
 | |
|                    (string-append out "/etc")))))
 | |
|            (add-after 'install 'wrap
 | |
|              (lambda* (#:key inputs outputs #:allow-other-keys)
 | |
|                (let* ((out (assoc-ref outputs "out"))
 | |
|                       (fpc (string-append out "/bin/fpc"))
 | |
|                       (ld (assoc-ref inputs "ld-wrapper"))
 | |
|                       (glibc (assoc-ref inputs "glibc")))
 | |
|                  (wrap-program fpc
 | |
|                    `("PATH" ":" prefix (,(string-append ld "/bin")))
 | |
|                    `("LIBRARY_PATH" ":" prefix
 | |
|                      (,(string-append glibc "/lib")))))))))))
 | |
|     ;; fpc invokes gcc, so make sure LIBRARY_PATH et.al are set.
 | |
|     ;(native-search-paths (package-native-search-paths gcc))
 | |
|     (home-page "https://www.freepascal.org")
 | |
|     (synopsis "The Free Pascal Compiler")
 | |
|     (description
 | |
|      "Free Pascal is a professional Object Pascal compiler.  It supports the
 | |
| Turbo Pascal 7.0, Delphi, and Mac Pascal dialects.  Free Pascal also supports
 | |
| many useful extensions to the Pascal programming language.")
 | |
|     ;; The majority of the software included is licensed under the GPLv2
 | |
|     ;; or later.  For more licensing details, see the appropriate files in
 | |
|     ;; the install/doc directory of the source distribution.
 | |
|     (license license:gpl2+)))
 | |
| 
 | |
| (define-public p2c
 | |
|   (package
 | |
|     (name "p2c")
 | |
|     (version "2.02")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (string-append "http://users.fred.net/tds/lab/p2c/p2c-"
 | |
|                                   version ".zip"))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "17q6s0vbz298pks80bxf4r6gm8kwbrml1q3vfs6g6yj75sqj58xs"))))
 | |
|     (build-system gnu-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:make-flags
 | |
|       #~(list (string-append "CC=" #$(cc-for-target))
 | |
|               (string-append "HOMEDIR=" #$output "/lib/p2c")
 | |
|               (string-append "INCDIR=" #$output "/include/p2c")
 | |
|               (string-append "BINDIR=" #$output "/bin")
 | |
|               (string-append "LIBDIR=" #$output "/lib")
 | |
|               (string-append "MANDIR=" #$output "/share/man/man1")
 | |
|               "MANFILE=p2c.man.inst")
 | |
|       #:test-target "test"
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (delete 'configure)
 | |
|           (add-before 'build 'mkdir
 | |
|             (lambda _
 | |
|               (mkdir-p (string-append #$output "/share/man"))
 | |
|               (mkdir-p (string-append #$output "/lib"))
 | |
|               (mkdir-p (string-append #$output "/bin"))
 | |
|               (mkdir-p (string-append #$output "/include"))))
 | |
|           (add-before 'build 'chdir
 | |
|             (lambda _ (chdir "src"))))))
 | |
|     (native-inputs
 | |
|      (list perl unzip which))
 | |
|     (synopsis "p2c converts Pascal programs to C programs")
 | |
|     (description "This package provides @command{p2c}, a program to convert
 | |
| Pascal source code to C source code, and @command{p2cc}, a compiler for
 | |
| Pascal programs.")
 | |
|     (home-page "http://users.fred.net/tds/lab/p2c/")
 | |
|     (license license:gpl2+)))
 | |
| 
 | |
| (define-public lazarus
 | |
|   (package
 | |
|     (name "lazarus")
 | |
|     (version "2.2.6")
 | |
|     (source (origin
 | |
|               (method git-fetch)
 | |
|               (uri (git-reference
 | |
|                     (url
 | |
|                      "https://gitlab.com/freepascal.org/lazarus/lazarus.git")
 | |
|                     (commit (string-append "lazarus_"
 | |
|                                            (string-join (string-split version
 | |
|                                                                       #\.)
 | |
|                                                         "_")))))
 | |
|               (file-name (string-append name "-" version "-checkout"))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "0hpk6fxmy1h1q0df41jg1vnp8g8vynrg5v5ad43lv229nizfs3wj"))))
 | |
|     (build-system gnu-build-system)
 | |
|     (arguments
 | |
|      (list #:tests? #f ;No tests exist
 | |
|            #:make-flags #~(list (string-append "INSTALL_PREFIX="
 | |
|                                                #$output))
 | |
|            #:phases #~(modify-phases %standard-phases
 | |
|                         (delete 'configure)
 | |
|                         (replace 'build
 | |
|                           (lambda* (#:key inputs outputs #:allow-other-keys)
 | |
|                             (let* ((libdirs (map (lambda (x)
 | |
|                                                    (assoc-ref inputs x))
 | |
|                                                  '("glib" "gdk-pixbuf"
 | |
|                                                    "gtk+"
 | |
|                                                    "libx11"
 | |
|                                                    "libx11"
 | |
|                                                    "pango"
 | |
|                                                    "cairo"
 | |
|                                                    "atk")))
 | |
|                                    (libs (append (map (lambda (name)
 | |
|                                                         (string-append "-Fl"
 | |
|                                                                        name
 | |
|                                                                        "/lib"))
 | |
|                                                       libdirs)
 | |
|                                                  (map (lambda (name)
 | |
|                                                         (string-append
 | |
|                                                          "-k-rpath=" name
 | |
|                                                          "/lib")) libdirs))))
 | |
|                               (setenv "LAZARUS_LIBPATHS"
 | |
|                                       (string-join libs " "))
 | |
|                               (setenv "MAKEFLAGS"
 | |
|                                       (string-append "LHELP_OPT="
 | |
|                                                      (string-join libs "\\ "))))
 | |
|                             (invoke "make" "bigide"))))))
 | |
|     (native-inputs (list fpc pkg-config))
 | |
|     (inputs (list glib
 | |
|                   gdk-pixbuf
 | |
|                   gtk+-2
 | |
|                   libx11
 | |
|                   pango
 | |
|                   cairo
 | |
|                   atk))
 | |
|     (synopsis "Integrated development environment for Pascal")
 | |
|     (description "This package provides an integrated development environment
 | |
| for Pascal.")
 | |
|     (home-page "https://www.lazarus-ide.org/")
 | |
|     ;; Some Android stuff is under asl2.0. Some artwork is under CC-BY-SA-3
 | |
|     ;; or CC-BY-SA-4.
 | |
|     ;; Some components are under MIT expat.
 | |
|     ;; The Freetype components are under Freetype license.
 | |
|     ;; A lot of components are under LGPL-2+.
 | |
|     ;; synedit and turbopower_ipro are under MPL-1.1
 | |
|     ;; PascalScript is under a zlib-like license.
 | |
|     (license (list license:gpl2+ license:lgpl2.0+))))
 |