diff options
| author | 2025-04-10 18:58:23 -0400 | |
|---|---|---|
| committer | 2025-04-10 18:59:05 -0400 | |
| commit | dc92aefa3a1725f1c1e9e15a0fe3a62d3a911192 (patch) | |
| tree | 46a4cbcf0c0156ed0b1c92b828322a46099481aa /examples/pffi-guile.scm | |
| parent | add r7rs-pffi example (diff) | |
pffi guile example
Diffstat (limited to 'examples/pffi-guile.scm')
| -rw-r--r-- | examples/pffi-guile.scm | 64 |
1 files changed, 64 insertions, 0 deletions
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)))))) |
