diff options
| author | 2025-04-10 16:32:39 -0400 | |
|---|---|---|
| committer | 2025-04-10 16:32:39 -0400 | |
| commit | 0acdcb6512fe8ee6642ef941aae4a08252c7fc8f (patch) | |
| tree | a4d8094a2b9c74374b7d299ff697a87b5ce47320 | |
chibi libraries
| -rw-r--r-- | README.md | 17 | ||||
| -rw-r--r-- | examples/hello-world.scm | 41 | ||||
| -rw-r--r-- | examples/hello-world/hello-world.sld | 6 | ||||
| -rw-r--r-- | guix/mcgoron/guix/chibi.scm | 54 |
4 files changed, 118 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..29d5d2a --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# Guix Scheme Containers and Environments + +Run Scheme implementations in Guix containers/environments, and package +libraries for them. + +## Chibi Scheme + +Chibi is meant to be embedded and doesn't have a modifiable global +library path of its own. Instead it uses a modified package definition +of `chibi-scheme` with the module path `share/guix-chibi` (interpreted) +and `lib/guix-chibi/` (shared objects). + +Packages of only Scheme code intended for use in Chibi should use the +`chibi-scheme-build-system` build system, which will simply copy files +to the appropriate directory. Code that contains shared objects (from +`chibi-ffi`) should use `gnu-build-system` and copy the files in an +input. diff --git a/examples/hello-world.scm b/examples/hello-world.scm new file mode 100644 index 0000000..19790d7 --- /dev/null +++ b/examples/hello-world.scm @@ -0,0 +1,41 @@ +#| Copyright (C) 2025 Peter McGoron + | + | This program 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. + | + | This program 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 this program. If not, see <https://www.gnu.org/licenses/>. + |# + +(use-modules (mcgoron guix chibi) + (guix packages) + (guix gexp) + (guix licenses)) + +(package + (name "hello-world-chibi") + (version "1.0") + (synopsis "Prints hello world") + (description "Prints hello world") + (license asl2.0) + (home-page "https://example.com") + (source (local-file "hello-world" #:recursive? #t)) + (build-system chibi-scheme-build-system) + (inputs (list chibi-scheme-with-path))) + +#;(pure-chibi-scheme-library (chibi/search-path) + "hello-world" + "1.0" + "Prints hello world" + "Prints hello world" + asl2.0 + "https://example.com" + "hello-world") + diff --git a/examples/hello-world/hello-world.sld b/examples/hello-world/hello-world.sld new file mode 100644 index 0000000..234a593 --- /dev/null +++ b/examples/hello-world/hello-world.sld @@ -0,0 +1,6 @@ +(define-library (hello-world) + (import (scheme base) (scheme write)) + (export hello-world) + (begin + (define (hello-world) + (display "hello, world\n"))))
\ No newline at end of file diff --git a/guix/mcgoron/guix/chibi.scm b/guix/mcgoron/guix/chibi.scm new file mode 100644 index 0000000..49e7545 --- /dev/null +++ b/guix/mcgoron/guix/chibi.scm @@ -0,0 +1,54 @@ +#| Copyright (C) 2025 Peter McGoron + | + | This program 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. + | + | This program 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 this program. If not, see <https://www.gnu.org/licenses/>. + |# + +(define-module (mcgoron guix chibi) + #:use-module (guix packages) + #:use-module (guix build-system) + #:use-module (guix build-system copy) + #:use-module (gnu packages scheme) + #:use-module (guix gexp) + #:export (chibi-scheme-with-path + chibi-scheme-build-system)) + +(define chibi-lib-dir "share/guix-chibi") +(define chibi-binlib-dir "lib/guix-chibi") + +(define-public chibi-scheme-with-path + (package + (inherit chibi-scheme) + (native-search-paths + (list (search-path-specification + (variable "CHIBI_MODULE_PATH") + (files (list chibi-lib-dir chibi-binlib-dir))))))) + +(define chibi-scheme-build-system + (let ((lower* (build-system-lower copy-build-system))) + (build-system + (name 'chibi-pure) + (description "Build system for copying Scheme libraries to Chibi module directory") + (lower + (lambda args + (apply lower* + (if (memq #:install-plan args) + args + (append + args + (list + #:install-plan + `'(("." ,(string-append chibi-lib-dir + "/")))))))))))) + +chibi-scheme-with-path |
