mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
maint: Add Guix build files.
* guix.scm, build-aux/manifest.scm: New files. * Makefile.am (EXTRA_DIST): Add them. * README: Mention it.
This commit is contained in:
parent
5b42f8c154
commit
c617f4e04f
4 changed files with 216 additions and 1 deletions
|
@ -81,7 +81,8 @@ EXTRA_DIST = LICENSE HACKING GUILE-VERSION \
|
||||||
gnulib-local/m4/clock_time.m4.diff \
|
gnulib-local/m4/clock_time.m4.diff \
|
||||||
gnulib-local/build-aux/git-version-gen.diff \
|
gnulib-local/build-aux/git-version-gen.diff \
|
||||||
libguile/texi-fragments-to-docstrings \
|
libguile/texi-fragments-to-docstrings \
|
||||||
gdbinit
|
gdbinit \
|
||||||
|
guix.scm build-aux/manifest.scm
|
||||||
|
|
||||||
TESTS = check-guile
|
TESTS = check-guile
|
||||||
TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
|
TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
|
||||||
|
|
10
README
10
README
|
@ -128,6 +128,16 @@ When building from a Git checkout, these additional packages are needed:
|
||||||
- GNU Texinfo
|
- GNU Texinfo
|
||||||
- GNU Gperf
|
- GNU Gperf
|
||||||
|
|
||||||
|
If you use GNU Guix, you can obtain a shell for development with all the
|
||||||
|
dependencies by running the following command from the top directory of
|
||||||
|
the checkout:
|
||||||
|
|
||||||
|
guix shell
|
||||||
|
|
||||||
|
You can also build Guile by running:
|
||||||
|
|
||||||
|
guix build -f guix.scm
|
||||||
|
|
||||||
|
|
||||||
Special Instructions For Some Systems =====================================
|
Special Instructions For Some Systems =====================================
|
||||||
|
|
||||||
|
|
61
build-aux/manifest.scm
Normal file
61
build-aux/manifest.scm
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
;;; Copyright © 2023 Free Software Foundation, Inc.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of GNU Guile.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guile 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 Guile 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 Guile. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
;; This file defines a Guix manifest for use by Cuirass, the continuous
|
||||||
|
;; integration service running at <https://ci.guix.gnu.org>.
|
||||||
|
|
||||||
|
(use-modules (guix)
|
||||||
|
(guix profiles))
|
||||||
|
|
||||||
|
(define guile
|
||||||
|
(load "../guix.scm"))
|
||||||
|
|
||||||
|
(define* (package->manifest-entry* package system
|
||||||
|
#:key target)
|
||||||
|
"Return a manifest entry for PACKAGE on SYSTEM, optionally cross-compiled to
|
||||||
|
TARGET."
|
||||||
|
(manifest-entry
|
||||||
|
(inherit (package->manifest-entry package))
|
||||||
|
(name (string-append (package-name package) "." system
|
||||||
|
(if target
|
||||||
|
(string-append "." target)
|
||||||
|
"'")))
|
||||||
|
(item (with-parameters ((%current-system system)
|
||||||
|
(%current-target-system target))
|
||||||
|
package))))
|
||||||
|
|
||||||
|
(define native-builds
|
||||||
|
(manifest
|
||||||
|
(map (lambda (system)
|
||||||
|
(package->manifest-entry* guile system))
|
||||||
|
'("x86_64-linux" "i686-linux"
|
||||||
|
"aarch64-linux" "armhf-linux"
|
||||||
|
"powerpc64le-linux"))))
|
||||||
|
|
||||||
|
(define cross-builds
|
||||||
|
(manifest
|
||||||
|
(map (lambda (target)
|
||||||
|
(package->manifest-entry* guile "x86_64-linux"
|
||||||
|
#:target target))
|
||||||
|
'("i586-pc-gnu"
|
||||||
|
;; "arm-linux-gnueabihf"
|
||||||
|
"aarch64-linux-gnu"
|
||||||
|
"riscv64-linux-gnu"
|
||||||
|
"i686-w64-mingw32"
|
||||||
|
"x86_64-linux-gnu"))))
|
||||||
|
|
||||||
|
(concatenate-manifests (list native-builds cross-builds))
|
143
guix.scm
Normal file
143
guix.scm
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
;;; Copyright © 2023 Free Software Foundation, Inc.
|
||||||
|
;;;
|
||||||
|
;;; This file is part of GNU Guile.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guile 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 Guile 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 Guile. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
;; This file defines a Guix package. It can be used to spawn an
|
||||||
|
;; interactive development environment:
|
||||||
|
;;
|
||||||
|
;; guix shell
|
||||||
|
;;
|
||||||
|
;; Or it can be used to build Guile from a checkout in an isolated
|
||||||
|
;; environment:
|
||||||
|
;;
|
||||||
|
;; guix build -f guix.scm
|
||||||
|
;;
|
||||||
|
;; Likewise, you may cross-compile it:
|
||||||
|
;;
|
||||||
|
;; guix build -f guix.scm --target=x86_64-w64-mingw32
|
||||||
|
;;
|
||||||
|
;; … or perform a native build for another architecture, assuming
|
||||||
|
;; either offloading or transparent QEMU emulation is set up:
|
||||||
|
;;
|
||||||
|
;; guix build -f guix.scm -s riscv64-linux
|
||||||
|
|
||||||
|
(use-modules (guix)
|
||||||
|
(guix git-download)
|
||||||
|
(guix build-system gnu)
|
||||||
|
((guix licenses) #:prefix license:)
|
||||||
|
(gnu packages)
|
||||||
|
(gnu packages pkg-config))
|
||||||
|
|
||||||
|
(let ((vcs-file? (or (git-predicate (current-source-directory))
|
||||||
|
(const #t)))
|
||||||
|
(S specification->package))
|
||||||
|
(package
|
||||||
|
(name "guile")
|
||||||
|
(version "3.0.000-git")
|
||||||
|
(source (local-file "." "guile-checkout"
|
||||||
|
#:recursive? #t
|
||||||
|
#:select? vcs-file?))
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(arguments
|
||||||
|
(list #:configure-flags
|
||||||
|
#~'("--enable-mini-gmp"
|
||||||
|
#$@(if (target-x86-32?) ;<https://issues.guix.gnu.org/49368>
|
||||||
|
'("--disable-static" "CFLAGS=-g -O2 -fexcess-precision=standard")
|
||||||
|
'("--disable-static"))) ;saves 3 MiB
|
||||||
|
|
||||||
|
#:phases
|
||||||
|
#~(modify-phases %standard-phases
|
||||||
|
(add-before 'bootstrap 'set-version
|
||||||
|
(lambda _
|
||||||
|
;; Tell 'git-version-gen' what version this is, or it will
|
||||||
|
;; just pick "UNKNOWN", making it unusable as a replacement
|
||||||
|
;; for 'guile-3.0'. XXX: This is inaccurate when using
|
||||||
|
;; '--with-branch' but using (package-version this-package)
|
||||||
|
;; wouldn't give us a valid version string.
|
||||||
|
(call-with-output-file ".tarball-version"
|
||||||
|
(lambda (port)
|
||||||
|
(display #$version port)))
|
||||||
|
|
||||||
|
;; Set this one as well so 'version.test' passes.
|
||||||
|
(substitute* "GUILE-VERSION"
|
||||||
|
(("^GUILE_MICRO_VERSION=.*")
|
||||||
|
"GUILE_MICRO_VERSION=99\n"))))
|
||||||
|
(add-before 'configure 'pre-configure
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
;; Tell (ice-9 popen) the file name of Bash.
|
||||||
|
(let ((bash (false-if-exception
|
||||||
|
(search-input-file inputs "/bin/sh"))))
|
||||||
|
(substitute* "module/ice-9/popen.scm"
|
||||||
|
;; If bash is #f allow fallback for user to provide
|
||||||
|
;; "bash" in PATH. This happens when cross-building to
|
||||||
|
;; MinGW for which we do not have Bash yet.
|
||||||
|
(("/bin/sh")
|
||||||
|
(or bash "/bin/sh")))))))))
|
||||||
|
|
||||||
|
(native-inputs
|
||||||
|
(append (map S '("autoconf"
|
||||||
|
"automake"
|
||||||
|
"libtool"
|
||||||
|
"gettext"
|
||||||
|
"flex"
|
||||||
|
"texinfo"
|
||||||
|
"texlive-base" ;for "make pdf"
|
||||||
|
"texlive-epsf"
|
||||||
|
"gperf"
|
||||||
|
"git"
|
||||||
|
"gdb"
|
||||||
|
"strace"
|
||||||
|
"readline"
|
||||||
|
"lzip"))
|
||||||
|
|
||||||
|
;; Ensure we get a cross-pkg-config when needed.
|
||||||
|
(list pkg-config)
|
||||||
|
|
||||||
|
;; When cross-compiling, a native version of Guile itself
|
||||||
|
;; is needed.
|
||||||
|
(if (%current-target-system)
|
||||||
|
(list this-package)
|
||||||
|
'())))
|
||||||
|
(inputs
|
||||||
|
(append (list (S "libffi"))
|
||||||
|
|
||||||
|
;; We need Bash when cross-compiling because some of the
|
||||||
|
;; scripts in bin/ refer to it. Use 'bash-minimal' because
|
||||||
|
;; we don't need an interactive Bash with Readline and all.
|
||||||
|
(if (target-mingw?)
|
||||||
|
(list (S "libiconv"))
|
||||||
|
(list (S "bash-minimal")))))
|
||||||
|
(propagated-inputs
|
||||||
|
(map S '("libunistring" "libgc")))
|
||||||
|
|
||||||
|
(outputs '("out" "debug"))
|
||||||
|
|
||||||
|
(native-search-paths
|
||||||
|
(list (search-path-specification
|
||||||
|
(variable "GUILE_LOAD_PATH")
|
||||||
|
(files '("share/guile/site/3.0")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "GUILE_LOAD_COMPILED_PATH")
|
||||||
|
(files '("lib/guile/3.0/site-ccache")))))
|
||||||
|
(synopsis "Scheme implementation intended especially for extensions")
|
||||||
|
(description
|
||||||
|
"Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
|
||||||
|
official extension language of the GNU system. It is an implementation of
|
||||||
|
the Scheme language which can be easily embedded in other applications to
|
||||||
|
provide a convenient means of extending the functionality of the application
|
||||||
|
without requiring the source code to be rewritten.")
|
||||||
|
(home-page "https://www.gnu.org/software/guile/")
|
||||||
|
(license license:lgpl3+)))
|
Loading…
Add table
Add a link
Reference in a new issue