GNU bug report logs - #49889
[PATCH 0/5] Add build system for Gerbil Scheme

Previous Next

Package: guix-patches;

Reported by: Xinglu Chen <public <at> yoctocell.xyz>

Date: Thu, 5 Aug 2021 14:07:02 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 49889 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Thu, 05 Aug 2021 14:07:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Xinglu Chen <public <at> yoctocell.xyz>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Thu, 05 Aug 2021 14:07:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: guix-patches <at> gnu.org
Subject: [PATCH 0/5] Add build system for Gerbil Scheme
Date: Thu, 05 Aug 2021 16:06:12 +0200
This series adds the ‘gerbil-build-system’ for building Gerbil packages.

The first patch moves the ‘gerbil’ package from (gnu packages scheme) to
(gnu packages gerbil).

The third patch adds the build system itself, and the fourth and fifth
patches add two Gerbil packages that use the new ‘gerbil-build-system’.

I don’t know if Gerbil packages should be ‘inputs’ or
‘propagated-inputs’.  I found two Gerbil packages that depended on other
Gerbil packages, but they both require a newer, unreleased Gerbil
package (Gerbil hasn’t had a new release for more than a year).  Maybe
we should add a ‘gerbil-next’ package?  ;-)

Xinglu Chen (5):
  gnu: gerbil: Move to (gnu packages gerbil).
  gnu: gerbil: Add 'native-search-paths' field.
  guix: Add 'gerbil-build-system'.
  gnu: Add gerbil-srfi-54.
  gnu: Add gerbil-clojerbil.

 Makefile.am                           |   2 +
 doc/guix.texi                         |  21 +++
 etc/snippets/scheme-mode/guix-package |   1 +
 gnu/local.mk                          |   2 +
 gnu/packages/gerbil.scm               | 199 ++++++++++++++++++++++++++
 gnu/packages/scheme.scm               | 105 +-------------
 guix/build-system/gerbil.scm          | 138 ++++++++++++++++++
 guix/build/gerbil-build-system.scm    |  78 ++++++++++
 8 files changed, 442 insertions(+), 104 deletions(-)
 create mode 100644 gnu/packages/gerbil.scm
 create mode 100644 guix/build-system/gerbil.scm
 create mode 100644 guix/build/gerbil-build-system.scm


base-commit: 517dacdb99e15f35c0ead462c9156896b5728be4
-- 
2.32.0






Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Thu, 05 Aug 2021 14:10:02 GMT) Full text and rfc822 format available.

Message #8 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49889 <at> debbugs.gnu.org
Subject: [PATCH 1/5] gnu: gerbil: Move to (gnu packages gerbil).
Date: Thu, 05 Aug 2021 16:09:33 +0200
* gnu/packages/scheme.scm (gerbil): Move from here...
* gnu/packages/gerbil.scm: New module.
(gerbil): ...to here
* gnu/local.mk (GNU_SYSTEM_MODULES): Register gnu/packages/gerbil.scm.
---
 gnu/local.mk            |   2 +
 gnu/packages/gerbil.scm | 137 ++++++++++++++++++++++++++++++++++++++++
 gnu/packages/scheme.scm | 105 +-----------------------------
 3 files changed, 140 insertions(+), 104 deletions(-)
 create mode 100644 gnu/packages/gerbil.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index 51a76e3638..ddbc057dc7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -44,6 +44,7 @@
 # Copyright © 2021 Arun Isaac <arunisaac <at> systemreboot.net>
 # Copyright © 2021 Sharlatan Hellseher <sharlatanus <at> gmail.com>
 # Copyright © 2021 Dmitry Polyakov <polyakov <at> liltechdude.xyz>
+# Copyright © 2021 Xinglu Chen <public <at> yoctocell.xyz>
 #
 # This file is part of GNU Guix.
 #
@@ -239,6 +240,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/genealogy.scm			\
   %D%/packages/genimage.scm			\
   %D%/packages/geo.scm				\
+  %D%/packages/gerbil.scm                       \
   %D%/packages/gettext.scm			\
   %D%/packages/ghostscript.scm			\
   %D%/packages/gimp.scm				\
diff --git a/gnu/packages/gerbil.scm b/gnu/packages/gerbil.scm
new file mode 100644
index 0000000000..69e7ae76a8
--- /dev/null
+++ b/gnu/packages/gerbil.scm
@@ -0,0 +1,137 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2020 Edouard Klein <edk <at> beaver-labs.com>
+;;; Copyright © 2021 Xinglu Chen <public <at> yoctocell.xyz>
+;;;
+;;; 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 gerbil)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages scheme)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages)
+  #:use-module (guix build-system gerbil)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1))
+
+(define-public gerbil
+  (package
+    (name "gerbil")
+    (version "0.16")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vyzo/gerbil")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0vng0kxpnwsg8jbjdpyn4sdww36jz7zfpfbzayg9sdpz6bjxjy0f"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'bootstrap)
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "src")))
+         (replace 'configure
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (invoke "chmod" "755" "-R" ".")
+             ;; Otherwise fails when editing an r--r--r-- file.
+             (invoke "gsi-script" "configure"
+                     "--prefix" (assoc-ref outputs "out")
+                     "--with-gambit" (assoc-ref inputs "gambit-c"))))
+         (add-before 'patch-generated-file-shebangs 'fix-gxi-shebangs
+           (lambda _
+             ;; Some .ss files refer to gxi using /usr/bin/env gxi
+             ;; and 'patch-generated-file-shebangs can't fix that
+             ;; because gxi has not been compiled yet.
+             ;; We know where gxi is going to end up so we
+             ;; Doctor Who our fix here before the problem
+             ;; happens towards the end of the build.sh script.
+             (let ((abs-srcdir (getcwd)))
+               (for-each
+                (lambda (f)
+                   (substitute* f
+                     (("#!/usr/bin/env gxi")
+                      (string-append "#!" abs-srcdir "/../bin/gxi"))))
+                 '("./gerbil/gxc"
+                   "./lang/build.ss"
+                   "./misc/http-perf/build.ss"
+                   "./misc/rpc-perf/build.ss"
+                   "./misc/scripts/docsnarf.ss"
+                   "./misc/scripts/docstub.ss"
+                   "./misc/scripts/docsyms.ss"
+                   "./r7rs-large/build.ss"
+                   "./release.ss"
+                   "./std/build.ss"
+                   "./std/run-tests.ss"
+                   "./std/web/fastcgi-test.ss"
+                   "./std/web/rack-test.ss"
+                   "./tools/build.ss"
+                   "./tutorial/httpd/build.ss"
+                   "./tutorial/kvstore/build.ss"
+                   "./tutorial/lang/build.ss"
+                   "./tutorial/proxy/build-static.ss"
+                   "./tutorial/proxy/build.ss")))))
+         (replace
+          'build
+          (lambda*
+           (#:key inputs #:allow-other-keys)
+           (setenv "HOME" (getcwd))
+             (invoke
+              ;; The build script needs a tty or it'll crash on an ioctl
+              ;; trying to find the width of the terminal it's running on.
+              ;; Calling in script prevents that.
+              "script"
+              "-qefc"
+              "./build.sh")))
+         (delete 'check)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lib (string-append out "/lib")))
+               (mkdir-p bin)
+               (mkdir-p lib)
+               (copy-recursively "../bin" bin)
+               (copy-recursively "../lib" lib)))))))
+    (native-inputs
+     `(("coreutils" ,coreutils)
+       ("util-linux" ,util-linux)))
+    (propagated-inputs
+     `(("gambit-c" ,gambit-c)
+       ("zlib" ,zlib)
+       ("openssl" ,openssl)
+       ("sqlite" ,sqlite)))
+    (synopsis "Meta-dialect of Scheme with post-modern features")
+    (description "Gerbil is an opinionated dialect of Scheme designed for Systems
+Programming, with a state of the art macro and module system on top of the Gambit
+runtime.  The macro system is based on quote-syntax, and provides the full meta-syntactic
+tower with a native implementation of syntax-case.  It also provides a full-blown module
+system, similar to PLT Scheme's (sorry, Racket) modules.  The main difference from Racket
+is that Gerbil modules are single instantiation, supporting high performance ahead of
+time compilation and compiled macros.")
+    (home-page "https://cons.io")
+    (license (list license:lgpl2.1 license:asl2.0))))
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index c43d17219e..1ab4c329f8 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -13,7 +13,6 @@
 ;;; Copyright © 2018 Gabriel Hondet <gabrielhondet <at> gmail.com>
 ;;; Copyright © 2020 Pierre Neidhardt <mail <at> ambrevar.xyz>
 ;;; Copyright © 2020 Brett Gilio <brettg <at> gnu.org>
-;;; Copyright © 2020 Edouard Klein <edk <at> beaver-labs.com>
 ;;; Copyright © 2021 Philip McGrath <philip <at> philipmcgrath.com>
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv <at> posteo.net>
 ;;;
@@ -919,106 +918,4 @@ manager/installer @code{gauche-package} which can download, compile, install
 and list gauche extension packages.")
     (license bsd-3)))
 
-(define-public gerbil
-  (package
-    (name "gerbil")
-    (version "0.16")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/vyzo/gerbil")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0vng0kxpnwsg8jbjdpyn4sdww36jz7zfpfbzayg9sdpz6bjxjy0f"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (delete 'bootstrap)
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "src")
-             #t))
-         (replace 'configure
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (invoke "chmod" "755" "-R" ".")
-             ;; Otherwise fails when editing an r--r--r-- file.
-             (invoke "gsi-script" "configure"
-                     "--prefix" (assoc-ref outputs "out")
-                     "--with-gambit" (assoc-ref inputs "gambit-c"))))
-         (add-before 'patch-generated-file-shebangs 'fix-gxi-shebangs
-           (lambda _
-             ;; Some .ss files refer to gxi using /usr/bin/env gxi
-             ;; and 'patch-generated-file-shebangs can't fix that
-             ;; because gxi has not been compiled yet.
-             ;; We know where gxi is going to end up so we
-             ;; Doctor Who our fix here before the problem
-             ;; happens towards the end of the build.sh script.
-             (let ((abs-srcdir (getcwd)))
-               (for-each
-                (lambda (f)
-                   (substitute* f
-                     (("#!/usr/bin/env gxi")
-                      (string-append "#!" abs-srcdir "/../bin/gxi"))))
-                 '("./gerbil/gxc"
-                   "./lang/build.ss"
-                   "./misc/http-perf/build.ss"
-                   "./misc/rpc-perf/build.ss"
-                   "./misc/scripts/docsnarf.ss"
-                   "./misc/scripts/docstub.ss"
-                   "./misc/scripts/docsyms.ss"
-                   "./r7rs-large/build.ss"
-                   "./release.ss"
-                   "./std/build.ss"
-                   "./std/run-tests.ss"
-                   "./std/web/fastcgi-test.ss"
-                   "./std/web/rack-test.ss"
-                   "./tools/build.ss"
-                   "./tutorial/httpd/build.ss"
-                   "./tutorial/kvstore/build.ss"
-                   "./tutorial/lang/build.ss"
-                   "./tutorial/proxy/build-static.ss"
-                   "./tutorial/proxy/build.ss")))
-             #t))
-         (replace
-          'build
-          (lambda*
-           (#:key inputs #:allow-other-keys)
-           (setenv "HOME" (getcwd))
-             (invoke
-              ;; The build script needs a tty or it'll crash on an ioctl
-              ;; trying to find the width of the terminal it's running on.
-              ;; Calling in script prevents that.
-              "script"
-              "-qefc"
-              "./build.sh")))
-         (delete 'check)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (lib (string-append out "/lib")))
-               (mkdir-p bin)
-               (mkdir-p lib)
-               (copy-recursively "../bin" bin)
-               (copy-recursively "../lib" lib)))))))
-    (native-inputs
-     `(("coreutils" ,coreutils)
-       ("util-linux" ,util-linux)))
-    (propagated-inputs
-     `(("gambit-c" ,gambit-c)
-       ("zlib" ,zlib)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)))
-    (build-system gnu-build-system)
-    (synopsis "Meta-dialect of Scheme with post-modern features")
-    (description "Gerbil is an opinionated dialect of Scheme designed for Systems
-Programming, with a state of the art macro and module system on top of the Gambit
-runtime.  The macro system is based on quote-syntax, and provides the full meta-syntactic
-tower with a native implementation of syntax-case.  It also provides a full-blown module
-system, similar to PLT Scheme's (sorry, Racket) modules.  The main difference from Racket
-is that Gerbil modules are single instantiation, supporting high performance ahead of
-time compilation and compiled macros.")
-    (home-page "https://cons.io")
-    (license `(,lgpl2.1 ,asl2.0))))
+
-- 
2.32.0







Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Thu, 05 Aug 2021 14:10:02 GMT) Full text and rfc822 format available.

Message #11 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49889 <at> debbugs.gnu.org
Subject: [PATCH 2/5] gnu: gerbil: Add 'native-search-paths' field.
Date: Thu, 05 Aug 2021 16:09:39 +0200
* gnu/packages/gerbil.scm (gerbil): Add ‘native-search-paths’ field.
---
 gnu/packages/gerbil.scm | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/gnu/packages/gerbil.scm b/gnu/packages/gerbil.scm
index 69e7ae76a8..90559e9ea2 100644
--- a/gnu/packages/gerbil.scm
+++ b/gnu/packages/gerbil.scm
@@ -125,6 +125,10 @@
        ("zlib" ,zlib)
        ("openssl" ,openssl)
        ("sqlite" ,sqlite)))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GERBIL_LOADPATH")
+            (files (list "lib/gerbil")))))
     (synopsis "Meta-dialect of Scheme with post-modern features")
     (description "Gerbil is an opinionated dialect of Scheme designed for Systems
 Programming, with a state of the art macro and module system on top of the Gambit
-- 
2.32.0







Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Thu, 05 Aug 2021 14:11:01 GMT) Full text and rfc822 format available.

Message #14 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49889 <at> debbugs.gnu.org
Subject: [PATCH 3/5] guix: Add 'gerbil-build-system'.
Date: Thu, 05 Aug 2021 16:10:13 +0200
* guix/build/gerbil-build-system.scm: New module.
* guix/build-system/gerbil.scm: Likewise.
* Makefile.am (MODULES): Register them.
* doc/guix.texi (Build Systems): Document it
* etc/snippets/scheme-mode/guix-package: Add ‘gerbil-build-system’ to list of
build systems.
---
 Makefile.am                           |   2 +
 doc/guix.texi                         |  21 ++++
 etc/snippets/scheme-mode/guix-package |   1 +
 guix/build-system/gerbil.scm          | 138 ++++++++++++++++++++++++++
 guix/build/gerbil-build-system.scm    |  78 +++++++++++++++
 5 files changed, 240 insertions(+)
 create mode 100644 guix/build-system/gerbil.scm
 create mode 100644 guix/build/gerbil-build-system.scm

diff --git a/Makefile.am b/Makefile.am
index 5542aa1c56..4f773f27e5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -143,6 +143,7 @@ MODULES =					\
   guix/build-system/minify.scm			\
   guix/build-system/asdf.scm			\
   guix/build-system/copy.scm			\
+  guix/build-system/gerbil.scm                  \
   guix/build-system/glib-or-gtk.scm		\
   guix/build-system/gnu.scm			\
   guix/build-system/guile.scm			\
@@ -190,6 +191,7 @@ MODULES =					\
   guix/build/meson-build-system.scm		\
   guix/build/minify-build-system.scm		\
   guix/build/font-build-system.scm		\
+  guix/build/gerbil-build-system.scm            \
   guix/build/go-build-system.scm		\
   guix/build/android-repo.scm			\
   guix/build/asdf-build-system.scm		\
diff --git a/doc/guix.texi b/doc/guix.texi
index a826171f34..4f2146b7ac 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7733,6 +7733,27 @@ only one of them.  This is equivalent to passing the @code{-p} argument to
 @code{dune}.
 @end defvr
 
+@defvr {Scheme Variable} gerbil-build-system
+This variable is exported by @code{(guix build-system gerbil)}.  It
+implements a build procedure for Gerbil packages the standard
+@uref{https://cons.io/guide/package-manager.html, Gerbil build
+mechanism}.
+
+It runs the @file{build.ss} Gerbile script, which compiles the package.
+The script can also take custom commands and flags, which can be
+specified by the @code{#:build-flags} parameter.
+
+One can also specify a custom Gerbil package to use for compiling the
+package by specifying the the @code{#:gerbil} parameter.
+
+Gerbil projects don't have a standardized way of running tests, so not
+@code{check} phase is exists by default.
+
+@c TODO: Should Gerbil packages be ‘inputs’ or ‘propagated-inputs’?
+
+As of right now, cross-compilation is not supported.
+@end defvr
+
 @defvr {Scheme Variable} go-build-system
 This variable is exported by @code{(guix build-system go)}.  It
 implements a build procedure for Go packages using the standard
diff --git a/etc/snippets/scheme-mode/guix-package b/etc/snippets/scheme-mode/guix-package
index 9ff6f997d1..e2d645f731 100644
--- a/etc/snippets/scheme-mode/guix-package
+++ b/etc/snippets/scheme-mode/guix-package
@@ -18,6 +18,7 @@
                                           "dune-build-system"
                                           "emacs-build-system"
                                           "font-build-system"
+                                          "gerbil-build-system"
                                           "glib-or-gtk-build-system"
                                           "gnu-build-system"
                                           "go-build-system"
diff --git a/guix/build-system/gerbil.scm b/guix/build-system/gerbil.scm
new file mode 100644
index 0000000000..0dd61767b8
--- /dev/null
+++ b/guix/build-system/gerbil.scm
@@ -0,0 +1,138 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Xinglu Chen <public <at> yoctocell.xyz>
+;;;
+;;; 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 (guix build-system gerbil)
+  #:use-module (guix utils)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix search-paths)
+  #:use-module (guix packages)
+  #:use-module (guix derivations)
+  #:use-module (ice-9 match)
+  #:export (gerbil-build-system))
+
+;;; Commentary:
+;;;
+;;; Standard build procedure for packages using the Gerbil build system.
+;;;
+;;; Code:
+
+(define %gerbil-build-system-modules
+  ;; Build-side modules imported and used by default.
+  `((guix build gerbil-build-system)
+    (guix build union)
+    ,@%gnu-build-system-modules))
+
+(define (default-gerbil)
+  "Return the default Gerbil package."
+  ;; Lazily resolve the binding to avoid circular dependency.
+  (let ((gerbil (resolve-interface '(gnu packages gerbil))))
+    (module-ref gerbil 'gerbil)))
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                (gerbil (default-gerbil))
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+  (define private-keywords
+    '(#:source #:target #:gerbil #:inputs #:native-inputs))
+
+  ;; TODO: Cross-compilation support.
+  (and (not target)
+       (bag
+         (name name)
+         (system system)
+         (host-inputs `(,@(if source
+                              `(("source" ,source))
+                              '())
+                        ,@inputs))
+         (build-inputs `(("gerbil" ,gerbil)
+                         ("libc" ,(module-ref (resolve-interface
+                                               '(gnu packages base))
+                                              'glibc))
+                         ("gcc" ,(module-ref (resolve-interface
+                                              '(gnu packages gcc))
+                                             'gcc))
+                         ("binutils" ,(module-ref (resolve-interface
+                                                   '(gnu packages base))
+                                                  'binutils))
+                         ,@native-inputs))
+         (outputs outputs)
+         (build gerbil-build)
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (gerbil-build store name inputs
+                       #:key
+                       (phases '(@ (guix build gerbil-build-system)
+                                   %standard-phases))
+                       (outputs '("out"))
+                       (search-paths '())
+                       (build-flags ''())
+                       (gerbil (default-gerbil))
+                       ;; Tests are disabled by default because there is no
+                       ;; standard way to test Gerbil packages.  However, some
+                       ;; packages might have custom test phases, so pass the
+                       ;; #:tests? keyword, just in case.
+                       (tests? #f)
+                       (system (%current-system))
+                       (guile #f)
+                       (imported-modules %gerbil-build-system-modules)
+                       (modules '((guix build gerbil-build-system)
+                                  (guix build utils))))
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (gerbil-build #:name ,name
+                     #:source ,(match (assoc-ref inputs "source")
+                                 (((? derivation? source))
+                                  (derivation->output-path source))
+                                 ((source)
+                                  source)
+                                 (source
+                                  source))
+                     #:tests? ,tests?
+                     #:system ,system
+                     #:phases ,phases
+                     #:outputs %outputs
+                     #:build-flags ,build-flags
+                     #:search-paths ',(map search-path-specification->sexp
+                                           search-paths)
+                     #:inputs %build-inputs)))
+
+  (define guile-for-build
+    (match guile
+      ((? package?)
+       (package-derivation store guile system #:graft? #f))
+      (#f                                         ; the default
+       (let* ((distro (resolve-interface '(gnu packages commencement)))
+              (guile  (module-ref distro 'guile-final)))
+         (package-derivation store guile system #:graft? #f)))))
+
+  (build-expression->derivation store name builder
+                                #:inputs inputs
+                                #:system system
+                                #:modules imported-modules
+                                #:outputs outputs
+                                #:guile-for-build guile-for-build))
+
+(define gerbil-build-system
+  (build-system
+    (name 'gerbil)
+    (description "The standard Gerbil build system")
+    (lower lower)))
diff --git a/guix/build/gerbil-build-system.scm b/guix/build/gerbil-build-system.scm
new file mode 100644
index 0000000000..4355d8e444
--- /dev/null
+++ b/guix/build/gerbil-build-system.scm
@@ -0,0 +1,78 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Xinglu Chen <public <at> yoctocell.xyz>
+;;;
+;;; 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 (guix build gerbil-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build union)
+  #:use-module (guix build utils)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            gerbil-build))
+
+;;; Commentary:
+;;;
+;;; Build-side code for building Gerbil packages.
+;;;
+;;; Something to note is that there is no standard way to run tests
+;;; for Gerbil packages, so there is not `check' phase by default.
+;;;
+;;; Code:
+
+(define (gerbil-package? name)
+  "Whether NAME is a Gerbil package."
+  (string-prefix? "gerbil-" name))
+
+(define (gerbil-load-path inputs)
+  "Given an alist of inputs, INPUTS, return a list of directories to add
+to the GERBIL_LOADPTH environment variable."
+  (let* ((labels (map car inputs))
+         (gerbil-packages (filter gerbil-package? labels)))
+    (map (cut string-append <> "/lib/gerbil")
+         gerbil-packages)))
+  
+(define* (setup-gerbil-environment #:key inputs #:allow-other-keys)
+  ;; This is where the compiled modules will end up.
+  (setenv "GERBIL_PATH" (string-append (getcwd) "/.build"))
+  ;; Where to look for other Gerbil modules.
+  (setenv "GERBIL_LOADPATH" (string-join (gerbil-load-path inputs) ":")))
+  
+(define* (build #:key build-flags #:allow-other-keys)
+  ;; The build.ss script contians the build instructions.
+  (apply invoke "./build.ss" build-flags))
+
+(define* (install #:key outputs #:allow-other-keys)
+  (let ((out (assoc-ref outputs "out")))
+    (mkdir-p (string-append out "/lib/gerbil"))
+    (copy-recursively ".build/lib" (string-append out "/lib/gerbil"))
+    (copy-recursively ".build/bin" (string-append out "/bin"))))
+
+(define %standard-phases
+  (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
+    (delete 'configure)
+    (add-after 'unpack 'setup-gerbil-environment setup-gerbil-environment)
+    (replace 'build build)
+    (delete 'check)
+    (replace 'install install)))
+
+(define* (gerbil-build #:key (phases %standard-phases)
+                       #:allow-other-keys #:rest args)
+  "Build the given Gerbil packages, applying all of PHASES in order."
+  (apply gnu:gnu-build #:phases phases args))
+
+    
-- 
2.32.0







Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Thu, 05 Aug 2021 14:11:02 GMT) Full text and rfc822 format available.

Message #17 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49889 <at> debbugs.gnu.org
Subject: [PATCH 4/5] gnu: Add gerbil-srfi-54.
Date: Thu, 05 Aug 2021 16:10:18 +0200
* gnu/packages/gerbil.scm (gerbil-srfi-54): New variable.
---
 gnu/packages/gerbil.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/gerbil.scm b/gnu/packages/gerbil.scm
index 90559e9ea2..aee5da60cd 100644
--- a/gnu/packages/gerbil.scm
+++ b/gnu/packages/gerbil.scm
@@ -139,3 +139,28 @@ is that Gerbil modules are single instantiation, supporting high performance ahe
 time compilation and compiled macros.")
     (home-page "https://cons.io")
     (license (list license:lgpl2.1 license:asl2.0))))
+
+(define-public gerbil-srfi-54
+  ;; No releases; commit from 2019-01-13.
+  (let ((commit "a7db045ad3f150b5dde79c3320c34d8ac3589525")
+        (revision "0"))
+  (package
+    (name "gerbil-srfi-54")
+    (version (git-version "0.0.0" revision commit))
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/hckiang/srfi-54")
+                    (commit commit)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0k1ddfhvbmf9njxm1ybs61n9kpzjvha2j63mf756r7b3x5rk51b0"))))
+    (build-system gerbil-build-system)
+    (home-page "https://github.com/hckiang/srfi-54")
+    (synopsis "SRFI-54 for Gerbil Scheme")
+    (description "This package provides SRFI-54 for Gerbil Scheme.
+The implementation is exactly the same as the
+@uref{https://srfi.schemers.org/srfi-54/srfi-54.html, official
+reference documentation}.")
+    (license license:lgpl3+))))
-- 
2.32.0







Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Thu, 05 Aug 2021 14:11:02 GMT) Full text and rfc822 format available.

Message #20 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49889 <at> debbugs.gnu.org
Subject: [PATCH 5/5] gnu: Add gerbil-clojerbil.
Date: Thu, 05 Aug 2021 16:10:22 +0200
* gnu/packages/gerbil.scm (gerbil-clojerbil): New variable.
---
 gnu/packages/gerbil.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/gerbil.scm b/gnu/packages/gerbil.scm
index aee5da60cd..d254b39eff 100644
--- a/gnu/packages/gerbil.scm
+++ b/gnu/packages/gerbil.scm
@@ -164,3 +164,36 @@ The implementation is exactly the same as the
 @uref{https://srfi.schemers.org/srfi-54/srfi-54.html, official
 reference documentation}.")
     (license license:lgpl3+))))
+
+(define-public gerbil-clojerbil
+  ;; No releases; commit from 2021-05-24
+  (let ((commit "542f0d2cf0afb1d99ded76dee1f646e4d10efeb2")
+        (revision "0"))
+    (package
+      (name "gerbil-clojerbil")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/eraserhd/clojerbil")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1jipcmqhg9l2zi7bnbki5wky89i5xpd1ixnmyw2lm660i3p0gib4"))))
+      (build-system gerbil-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'build 'check
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((gerbil (assoc-ref inputs "gerbil")))
+                 (invoke (string-append gerbil "/bin/gxi") "run-tests.ss")))))))
+      (home-page "https://github.com/eraserhd/clojerbil")
+      (synopsis "Thin implementation of Clojure on top of Gerbil Scheme")
+      (description
+       "Clojerbil is a deliberately thin implementation of Clojure on top of
+Gerbil Scheme.  Its intent is to add Clojure-type niceties on top of Gerbil and
+allow simple Clojure code to work without making a complicated compatibility
+layer.")
+      (license license:unlicense))))
-- 
2.32.0







Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Sat, 07 Aug 2021 17:00:02 GMT) Full text and rfc822 format available.

Message #23 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Maxime Devos <maximedevos <at> telenet.be>
To: Xinglu Chen <public <at> yoctocell.xyz>, 49889 <at> debbugs.gnu.org
Subject: Re: [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil.
Date: Sat, 07 Aug 2021 18:59:24 +0200
[Message part 1 (text/plain, inline)]
Xinglu Chen schreef op do 05-08-2021 om 16:10 [+0200]:
> +           (add-after 'build 'check
> +             (lambda* (#:key inputs #:allow-other-keys)
> +               (let ((gerbil (assoc-ref inputs "gerbil")))
> +                 (invoke (string-append gerbil "/bin/gxi") "run-tests.ss")))))))

By wrapping the body in (when tests? ...), "--without-tests" would be supported.
The 'tests-true' linter should detect this, try "./pre-inst-env guix lint gerbil-clojerbil".

Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Sun, 15 Aug 2021 07:43:01 GMT) Full text and rfc822 format available.

Message #26 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: Maxime Devos <maximedevos <at> telenet.be>, 49889 <at> debbugs.gnu.org
Subject: Re: [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil.
Date: Sun, 15 Aug 2021 09:41:41 +0200
[Message part 1 (text/plain, inline)]
On Sat, Aug 07 2021, Maxime Devos wrote:

> Xinglu Chen schreef op do 05-08-2021 om 16:10 [+0200]:
>> +           (add-after 'build 'check
>> +             (lambda* (#:key inputs #:allow-other-keys)
>> +               (let ((gerbil (assoc-ref inputs "gerbil")))
>> +                 (invoke (string-append gerbil "/bin/gxi") "run-tests.ss")))))))
>
> By wrapping the body in (when tests? ...), "--without-tests" would be supported.
> The 'tests-true' linter should detect this, try "./pre-inst-env guix
> lint gerbil-clojerbil".

Good, catch!  I will send a reroll when I get some feedback on the build
system.  :-)
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#49889; Package guix-patches. (Fri, 04 Feb 2022 21:43:01 GMT) Full text and rfc822 format available.

Message #29 received at 49889 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Xinglu Chen <public <at> yoctocell.xyz>
Cc: 49889 <at> debbugs.gnu.org
Subject: Re: bug#49889: [PATCH 0/5] Add build system for Gerbil Scheme
Date: Fri, 04 Feb 2022 22:42:43 +0100
Hello!

Xinglu Chen <public <at> yoctocell.xyz> skribis:

> This series adds the ‘gerbil-build-system’ for building Gerbil packages.
>
> The first patch moves the ‘gerbil’ package from (gnu packages scheme) to
> (gnu packages gerbil).
>
> The third patch adds the build system itself, and the fourth and fifth
> patches add two Gerbil packages that use the new ‘gerbil-build-system’.
>
> I don’t know if Gerbil packages should be ‘inputs’ or
> ‘propagated-inputs’.  I found two Gerbil packages that depended on other
> Gerbil packages, but they both require a newer, unreleased Gerbil
> package (Gerbil hasn’t had a new release for more than a year).  Maybe
> we should add a ‘gerbil-next’ package?  ;-)
>
> Xinglu Chen (5):
>   gnu: gerbil: Move to (gnu packages gerbil).
>   gnu: gerbil: Add 'native-search-paths' field.
>   guix: Add 'gerbil-build-system'.
>   gnu: Add gerbil-srfi-54.
>   gnu: Add gerbil-clojerbil.

Looks like this fell through the cracks during the summer.  :-/

It all LGTM.  You’ll have to update the build system to the new API
though, and run ‘guix style -S inputs’ to remove input labels, and
possibly ‘guix style’ to adjust layout for ‘gerbil-clojerbil’ for
instance.

That’s all.

Could you send updated patches?

Thanks!

Ludo’.




This bug report was last modified 2 years and 81 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.