unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme
@ 2021-08-05 14:06 Xinglu Chen
  2021-08-05 14:09 ` [bug#49889] [PATCH 1/5] gnu: gerbil: Move to (gnu packages gerbil) Xinglu Chen
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-08-05 14:06 UTC (permalink / raw)
  To: 49889

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






^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 1/5] gnu: gerbil: Move to (gnu packages gerbil).
  2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
@ 2021-08-05 14:09 ` Xinglu Chen
  2021-08-05 14:09 ` [bug#49889] [PATCH 2/5] gnu: gerbil: Add 'native-search-paths' field Xinglu Chen
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-08-05 14:09 UTC (permalink / raw)
  To: 49889

* 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@systemreboot.net>
 # Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 # Copyright © 2021 Dmitry Polyakov <polyakov@liltechdude.xyz>
+# Copyright © 2021 Xinglu Chen <public@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@beaver-labs.com>
+;;; Copyright © 2021 Xinglu Chen <public@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@gmail.com>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
-;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@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







^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 2/5] gnu: gerbil: Add 'native-search-paths' field.
  2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
  2021-08-05 14:09 ` [bug#49889] [PATCH 1/5] gnu: gerbil: Move to (gnu packages gerbil) Xinglu Chen
@ 2021-08-05 14:09 ` Xinglu Chen
  2021-08-05 14:10 ` [bug#49889] [PATCH 3/5] guix: Add 'gerbil-build-system' Xinglu Chen
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-08-05 14:09 UTC (permalink / raw)
  To: 49889

* 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







^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 3/5] guix: Add 'gerbil-build-system'.
  2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
  2021-08-05 14:09 ` [bug#49889] [PATCH 1/5] gnu: gerbil: Move to (gnu packages gerbil) Xinglu Chen
  2021-08-05 14:09 ` [bug#49889] [PATCH 2/5] gnu: gerbil: Add 'native-search-paths' field Xinglu Chen
@ 2021-08-05 14:10 ` Xinglu Chen
  2021-08-05 14:10 ` [bug#49889] [PATCH 4/5] gnu: Add gerbil-srfi-54 Xinglu Chen
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-08-05 14:10 UTC (permalink / raw)
  To: 49889

* 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@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@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







^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 4/5] gnu: Add gerbil-srfi-54.
  2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
                   ` (2 preceding siblings ...)
  2021-08-05 14:10 ` [bug#49889] [PATCH 3/5] guix: Add 'gerbil-build-system' Xinglu Chen
@ 2021-08-05 14:10 ` Xinglu Chen
  2021-08-05 14:10 ` [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil Xinglu Chen
  2022-02-04 21:42 ` [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Ludovic Courtès
  5 siblings, 0 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-08-05 14:10 UTC (permalink / raw)
  To: 49889

* 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







^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil.
  2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
                   ` (3 preceding siblings ...)
  2021-08-05 14:10 ` [bug#49889] [PATCH 4/5] gnu: Add gerbil-srfi-54 Xinglu Chen
@ 2021-08-05 14:10 ` Xinglu Chen
  2021-08-07 16:59   ` Maxime Devos
  2022-02-04 21:42 ` [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Ludovic Courtès
  5 siblings, 1 reply; 9+ messages in thread
From: Xinglu Chen @ 2021-08-05 14:10 UTC (permalink / raw)
  To: 49889

* 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







^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil.
  2021-08-05 14:10 ` [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil Xinglu Chen
@ 2021-08-07 16:59   ` Maxime Devos
  2021-08-15  7:41     ` Xinglu Chen
  0 siblings, 1 reply; 9+ messages in thread
From: Maxime Devos @ 2021-08-07 16:59 UTC (permalink / raw)
  To: Xinglu Chen, 49889

[-- Attachment #1: Type: text/plain, Size: 505 bytes --]

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.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil.
  2021-08-07 16:59   ` Maxime Devos
@ 2021-08-15  7:41     ` Xinglu Chen
  0 siblings, 0 replies; 9+ messages in thread
From: Xinglu Chen @ 2021-08-15  7:41 UTC (permalink / raw)
  To: Maxime Devos, 49889

[-- Attachment #1: Type: text/plain, Size: 616 bytes --]

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.  :-)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme
  2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
                   ` (4 preceding siblings ...)
  2021-08-05 14:10 ` [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil Xinglu Chen
@ 2022-02-04 21:42 ` Ludovic Courtès
  5 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2022-02-04 21:42 UTC (permalink / raw)
  To: Xinglu Chen; +Cc: 49889

Hello!

Xinglu Chen <public@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’.




^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-02-04 21:43 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-05 14:06 [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Xinglu Chen
2021-08-05 14:09 ` [bug#49889] [PATCH 1/5] gnu: gerbil: Move to (gnu packages gerbil) Xinglu Chen
2021-08-05 14:09 ` [bug#49889] [PATCH 2/5] gnu: gerbil: Add 'native-search-paths' field Xinglu Chen
2021-08-05 14:10 ` [bug#49889] [PATCH 3/5] guix: Add 'gerbil-build-system' Xinglu Chen
2021-08-05 14:10 ` [bug#49889] [PATCH 4/5] gnu: Add gerbil-srfi-54 Xinglu Chen
2021-08-05 14:10 ` [bug#49889] [PATCH 5/5] gnu: Add gerbil-clojerbil Xinglu Chen
2021-08-07 16:59   ` Maxime Devos
2021-08-15  7:41     ` Xinglu Chen
2022-02-04 21:42 ` [bug#49889] [PATCH 0/5] Add build system for Gerbil Scheme Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).