aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-04-10 18:58:23 -0400
committerGravatar Peter McGoron 2025-04-10 18:59:05 -0400
commitdc92aefa3a1725f1c1e9e15a0fe3a62d3a911192 (patch)
tree46a4cbcf0c0156ed0b1c92b828322a46099481aa
parentadd r7rs-pffi example (diff)
pffi guile example
Diffstat (limited to '')
-rw-r--r--README.md5
-rw-r--r--examples/hello-world/hello-world.scm (renamed from examples/hello-world/hello-world.sld)0
-rw-r--r--examples/pffi-chibi.scm (renamed from examples/pffi.scm)0
-rw-r--r--examples/pffi-guile.scm64
4 files changed, 69 insertions, 0 deletions
diff --git a/README.md b/README.md
index 29d5d2a..eec69b0 100644
--- a/README.md
+++ b/README.md
@@ -15,3 +15,8 @@ Packages of only Scheme code intended for use in Chibi should use the
to the appropriate directory. Code that contains shared objects (from
`chibi-ffi`) should use `gnu-build-system` and copy the files in an
input.
+
+## Guile
+
+Guix is the package manager for Guile so everything is already taken care
+of for us.
diff --git a/examples/hello-world/hello-world.sld b/examples/hello-world/hello-world.scm
index 234a593..234a593 100644
--- a/examples/hello-world/hello-world.sld
+++ b/examples/hello-world/hello-world.scm
diff --git a/examples/pffi.scm b/examples/pffi-chibi.scm
index e68224d..e68224d 100644
--- a/examples/pffi.scm
+++ b/examples/pffi-chibi.scm
diff --git a/examples/pffi-guile.scm b/examples/pffi-guile.scm
new file mode 100644
index 0000000..8519926
--- /dev/null
+++ b/examples/pffi-guile.scm
@@ -0,0 +1,64 @@
+#| 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 (gnu packages guile)
+ (guix build-system copy)
+ (guix git-download)
+ (guix packages)
+ (guix gexp)
+ (guix licenses))
+
+(package
+ (name "pffi-guile")
+ (version "0.5.0")
+ (synopsis "Portable Foreign Function Interface for R7RS")
+ (description "Portable Foreign Function Interface for R7RS")
+ (license lgpl3+)
+ (home-page "https://sr.ht/~retropikzel/r7rs-pffi")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~retropikzel/r7rs-pffi/")
+ (commit "v0.5.0")))
+ (file-name (git-file-name "r7rs-pffi" version))
+ (sha256
+ (base32 "1ggkafggyqqla6ba8dlhzvvf6v7i6scpa2xyr1mfxxy8iwnl70aa"))))
+ (build-system copy-build-system)
+ (inputs (list guile-3.0))
+ (arguments
+ (let* ((base-dir "share/guile/site/3.0/retropikzel/")
+ (libdir (string-append base-dir "r7rs-pffi/")))
+ ;; Guile doesn't load sld files. It also won't load relative to the
+ ;; site directory.
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (string-append (assoc-ref outputs "out")
+ "/"
+ ,libdir)))
+ (substitute* '("retropikzel/r7rs-pffi.sld")
+ (("\\(include \"r7rs-pffi")
+ (string-append "(include \""
+ out)))))))
+ #:install-plan
+ '(("retropikzel/r7rs-pffi.sld" ,(string-append
+ base-dir
+ "r7rs-pffi.scm"))
+ ("retropikzel/r7rs-pffi/guile.scm" ,libdir)
+ ("retropikzel/r7rs-pffi/main.scm" ,libdir)
+ ("retropikzel/r7rs-pffi/struct.scm" ,libdir))))))