Commit | Line | Data |
---|---|---|
233e7676 | 1 | ;;; GNU Guix --- Functional package management for GNU |
9b65dea8 | 2 | ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> |
0791437f RW |
3 | ;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com> |
4 | ;;; Copyright © 2014, 2016, 2018 David Thompson <davet@gnu.org> | |
5 | ;;; Copyright © 2014, 2017, 2018 Mark H Weaver <mhw@netris.org> | |
c5793e7e | 6 | ;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org> |
c5793e7e | 7 | ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org> |
0791437f | 8 | ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name> |
a71d3358 | 9 | ;;; Copyright © 2016, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> |
aaf1bdc3 | 10 | ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com> |
0791437f | 11 | ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> |
e53bf62e | 12 | ;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com> |
0791437f RW |
13 | ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> |
14 | ;;; Copyright © 2017, 2018 Amirouche <amirouche@hypermove.net> | |
15 | ;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org> | |
c8e3651a | 16 | ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org> |
0791437f | 17 | ;;; Copyright © 2019 Taylan Kammer <taylan.kammer@gmail.com> |
3d867fea | 18 | ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il> |
1722d680 | 19 | ;;; |
233e7676 | 20 | ;;; This file is part of GNU Guix. |
1722d680 | 21 | ;;; |
233e7676 | 22 | ;;; GNU Guix is free software; you can redistribute it and/or modify it |
1722d680 LC |
23 | ;;; under the terms of the GNU General Public License as published by |
24 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
25 | ;;; your option) any later version. | |
26 | ;;; | |
233e7676 | 27 | ;;; GNU Guix is distributed in the hope that it will be useful, but |
1722d680 LC |
28 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of |
29 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
30 | ;;; GNU General Public License for more details. | |
31 | ;;; | |
32 | ;;; You should have received a copy of the GNU General Public License | |
233e7676 | 33 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
1722d680 | 34 | |
1ffa7090 | 35 | (define-module (gnu packages guile) |
71e0f217 | 36 | #:use-module ((guix licenses) #:prefix license:) |
59a43334 | 37 | #:use-module (gnu packages) |
146c6b62 RW |
38 | #:use-module (gnu packages autotools) |
39 | #:use-module (gnu packages base) | |
9c782445 | 40 | #:use-module (gnu packages bash) |
1ffa7090 | 41 | #:use-module (gnu packages bdw-gc) |
148585c2 | 42 | #:use-module (gnu packages compression) |
255d1bbe | 43 | #:use-module (gnu packages dbm) |
146c6b62 | 44 | #:use-module (gnu packages flex) |
1ffa7090 | 45 | #:use-module (gnu packages gawk) |
146c6b62 | 46 | #:use-module (gnu packages gettext) |
ee8ee748 | 47 | #:use-module (gnu packages hurd) |
1ffa7090 | 48 | #:use-module (gnu packages libffi) |
1ffa7090 | 49 | #:use-module (gnu packages libunistring) |
7119cca8 | 50 | #:use-module (gnu packages linux) |
1ffa7090 LC |
51 | #:use-module (gnu packages m4) |
52 | #:use-module (gnu packages multiprecision) | |
53 | #:use-module (gnu packages pkg-config) | |
54 | #:use-module (gnu packages readline) | |
cd0322a3 | 55 | #:use-module (gnu packages sqlite) |
f906d30c | 56 | #:use-module (gnu packages texinfo) |
bd233722 | 57 | #:use-module (gnu packages version-control) |
1722d680 | 58 | #:use-module (guix packages) |
87f5d366 | 59 | #:use-module (guix download) |
6bc24063 | 60 | #:use-module (guix git-download) |
32795fcf | 61 | #:use-module (guix build-system gnu) |
977d8666 | 62 | #:use-module (guix build-system guile) |
84af1e74 | 63 | #:use-module (guix deprecation) |
32795fcf | 64 | #:use-module (guix utils) |
d4660a54 MC |
65 | #:use-module (ice-9 match) |
66 | #:use-module ((srfi srfi-1) #:prefix srfi-1:)) | |
1722d680 LC |
67 | |
68 | ;;; Commentary: | |
69 | ;;; | |
c44899a2 | 70 | ;;; GNU Guile, and modules and extensions. |
1722d680 LC |
71 | ;;; |
72 | ;;; Code: | |
73 | ||
c44899a2 LC |
74 | (define-public guile-1.8 |
75 | (package | |
76 | (name "guile") | |
77 | (version "1.8.8") | |
78 | (source (origin | |
87f5d366 | 79 | (method url-fetch) |
0db342a5 | 80 | (uri (string-append "mirror://gnu/guile/guile-" version |
c44899a2 LC |
81 | ".tar.gz")) |
82 | (sha256 | |
83 | (base32 | |
01eafd38 | 84 | "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3")) |
fc1adab1 | 85 | (patches (search-patches "guile-1.8-cpp-4.5.patch")))) |
c44899a2 LC |
86 | (build-system gnu-build-system) |
87 | (arguments '(#:configure-flags '("--disable-error-on-warning") | |
c44899a2 LC |
88 | |
89 | ;; Insert a phase before `configure' to patch things up. | |
dc1d3cde KK |
90 | #:phases |
91 | (modify-phases %standard-phases | |
92 | (add-before 'configure 'patch-stuff | |
93 | (lambda* (#:key outputs #:allow-other-keys) | |
94 | ;; Add a call to `lt_dladdsearchdir' so that | |
95 | ;; `libguile-readline.so' & co. are in the | |
96 | ;; loader's search path. | |
97 | (substitute* "libguile/dynl.c" | |
98 | (("lt_dlinit.*$" match) | |
99 | (format #f | |
100 | " ~a~% lt_dladdsearchdir(\"~a/lib\");~%" | |
101 | match | |
102 | (assoc-ref outputs "out")))) | |
2f4fbe1c | 103 | |
dc1d3cde KK |
104 | ;; The usual /bin/sh... |
105 | (substitute* "ice-9/popen.scm" | |
106 | (("/bin/sh") (which "sh"))) | |
107 | #t))))) | |
528ea990 LC |
108 | |
109 | ;; When cross-compiling, a native version of Guile itself is needed. | |
110 | (native-inputs (if (%current-target-system) | |
111 | `(("self" ,this-package)) | |
112 | '())) | |
113 | ||
01eafd38 | 114 | (inputs `(("gawk" ,gawk) |
c44899a2 LC |
115 | ("readline" ,readline))) |
116 | ||
117 | ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be | |
118 | ;; propagated. | |
119 | (propagated-inputs `(("gmp" ,gmp) | |
be11b102 | 120 | ("libltdl" ,libltdl))) |
c44899a2 | 121 | |
9be8d7c8 LC |
122 | (native-search-paths |
123 | (list (search-path-specification | |
124 | (variable "GUILE_LOAD_PATH") | |
af070955 | 125 | (files '("share/guile/site"))))) |
9be8d7c8 | 126 | |
f50d2669 | 127 | (synopsis "Scheme implementation intended especially for extensions") |
c44899a2 | 128 | (description |
a22dc0c4 LC |
129 | "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the |
130 | official extension language of the GNU system. It is an implementation of | |
131 | the Scheme language which can be easily embedded in other applications to | |
132 | provide a convenient means of extending the functionality of the application | |
133 | without requiring the source code to be rewritten.") | |
6fd52309 | 134 | (home-page "https://www.gnu.org/software/guile/") |
71e0f217 | 135 | (license license:lgpl2.0+))) |
c44899a2 LC |
136 | |
137 | (define-public guile-2.0 | |
138 | (package | |
139 | (name "guile") | |
b5efd14a | 140 | (version "2.0.14") |
c44899a2 | 141 | (source (origin |
87f5d366 | 142 | (method url-fetch) |
0db342a5 | 143 | (uri (string-append "mirror://gnu/guile/guile-" version |
c44899a2 LC |
144 | ".tar.xz")) |
145 | (sha256 | |
146 | (base32 | |
b5efd14a | 147 | "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78")))) |
c44899a2 | 148 | (build-system gnu-build-system) |
528ea990 LC |
149 | |
150 | ;; When cross-compiling, a native version of Guile itself is needed. | |
151 | (native-inputs `(,@(if (%current-target-system) | |
152 | `(("self" ,this-package)) | |
153 | '()) | |
154 | ("pkgconfig" ,pkg-config))) | |
c44899a2 | 155 | (inputs `(("libffi" ,libffi) |
88da729f | 156 | ,@(libiconv-if-needed) |
baf549df LC |
157 | |
158 | ;; We need Bash when cross-compiling because some of the scripts | |
159 | ;; in bin/ refer to it. Use 'bash-minimal' because we don't need | |
160 | ;; an interactive Bash with Readline and all. | |
161 | ,@(if (target-mingw?) '() `(("bash" ,bash-minimal))))) | |
c44899a2 LC |
162 | (propagated-inputs |
163 | `( ;; These ones aren't normally needed here, but since `libguile-2.0.la' | |
164 | ;; reads `-lltdl -lunistring', adding them here will add the needed | |
165 | ;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see | |
166 | ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>. | |
167 | ("libunistring" ,libunistring) | |
be11b102 LC |
168 | |
169 | ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra | |
170 | ;; dependencies that LIBTOOL has, which is helpful during bootstrap. | |
171 | ("libltdl" ,libltdl) | |
c44899a2 LC |
172 | |
173 | ;; The headers and/or `guile-2.0.pc' refer to these packages, so they | |
174 | ;; must be propagated. | |
bda1bc6c | 175 | ("bdw-gc" ,libgc) |
c44899a2 LC |
176 | ("gmp" ,gmp))) |
177 | ||
9bf62d9b LC |
178 | (outputs '("out" "debug")) |
179 | ||
8ffaa93b | 180 | (arguments |
20897536 TGR |
181 | `(#:configure-flags '("--disable-static") ; saves 3 MiB |
182 | #:phases | |
183 | (modify-phases %standard-phases | |
ba2f61bb JN |
184 | ,@(if (hurd-system?) |
185 | '((add-after 'unpack 'disable-tests | |
186 | (lambda _ | |
187 | ;; Hangs at: "Running 00-repl-server.test" | |
188 | (rename-file "test-suite/tests/00-repl-server.test" "00-repl-server.test") | |
189 | ;; Sometimes Hangs at: "Running 00-socket.test" | |
190 | (rename-file "test-suite/tests/00-socket.test" "00-socket.test") | |
191 | ;; FAIL: srfi-18.test: thread-sleep!: thread sleeps fractions of a second | |
192 | (rename-file "test-suite/tests/srfi-18.test" "srfi-18.test") | |
193 | ;; failed to remove 't-guild-compile-7215.go.tdL7yC | |
194 | (substitute* "test-suite/standalone/Makefile.in" | |
195 | (("test-guild-compile ") "")) | |
196 | #t))) | |
197 | '()) | |
20897536 TGR |
198 | (add-before 'configure 'pre-configure |
199 | (lambda* (#:key inputs #:allow-other-keys) | |
200 | ;; Tell (ice-9 popen) the file name of Bash. | |
201 | (let ((bash (assoc-ref inputs "bash"))) | |
202 | (substitute* "module/ice-9/popen.scm" | |
203 | ;; If bash is #f allow fallback for user to provide | |
204 | ;; "bash" in PATH. This happens when cross-building to | |
205 | ;; MinGW for which we do not have Bash yet. | |
206 | (("/bin/sh") | |
207 | ,@(if (target-mingw?) | |
208 | '((if bash | |
209 | (string-append bash "/bin/bash") | |
210 | "bash")) | |
211 | '((string-append bash "/bin/bash"))))) | |
212 | #t)))))) | |
8ffaa93b | 213 | |
9be8d7c8 LC |
214 | (native-search-paths |
215 | (list (search-path-specification | |
216 | (variable "GUILE_LOAD_PATH") | |
af070955 | 217 | (files '("share/guile/site/2.0"))) |
9be8d7c8 LC |
218 | (search-path-specification |
219 | (variable "GUILE_LOAD_COMPILED_PATH") | |
b03f270e | 220 | (files '("lib/guile/2.0/site-ccache"))))) |
9be8d7c8 | 221 | |
f50d2669 | 222 | (synopsis "Scheme implementation intended especially for extensions") |
c44899a2 | 223 | (description |
a22dc0c4 LC |
224 | "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the |
225 | official extension language of the GNU system. It is an implementation of | |
226 | the Scheme language which can be easily embedded in other applications to | |
227 | provide a convenient means of extending the functionality of the application | |
228 | without requiring the source code to be rewritten.") | |
6fd52309 | 229 | (home-page "https://www.gnu.org/software/guile/") |
71e0f217 | 230 | (license license:lgpl3+))) |
c44899a2 | 231 | |
f6396d86 | 232 | (define-public guile-2.2 |
f906d30c | 233 | (package (inherit guile-2.0) |
f6396d86 | 234 | (name "guile") |
edc8fd2e | 235 | (version "2.2.7") |
4eae7980 LC |
236 | (source (origin |
237 | (method url-fetch) | |
34d624ce LC |
238 | |
239 | ;; Note: we are limited to one of the compression formats | |
240 | ;; supported by the bootstrap binaries, so no lzip here. | |
80a72572 | 241 | (uri (string-append "mirror://gnu/guile/guile-" version |
34d624ce | 242 | ".tar.xz")) |
4eae7980 LC |
243 | (sha256 |
244 | (base32 | |
edc8fd2e | 245 | "013mydzhfswqci6xmyc1ajzd59pfbdak15i0b090nhr9bzm7dxyd")) |
d9f0788a | 246 | (modules '((guix build utils))) |
44f07d1d CD |
247 | (patches (search-patches |
248 | "guile-2.2-skip-oom-test.patch")) | |
d9f0788a LC |
249 | |
250 | ;; Remove the pre-built object files. Instead, build everything | |
251 | ;; from source, at the expense of significantly longer build | |
252 | ;; times (almost 3 hours on a 4-core Intel i5). | |
6cbee49d MW |
253 | (snippet '(begin |
254 | (for-each delete-file | |
255 | (find-files "prebuilt" "\\.go$")) | |
256 | #t)))) | |
4fbd0f4f | 257 | (properties '((timeout . 72000) ;20 hours |
16b0f205 | 258 | (max-silent-time . 36000))) ;10 hours (needed on ARM |
1577a658 | 259 | ; when heavily loaded) |
dd90ed89 DT |
260 | (native-search-paths |
261 | (list (search-path-specification | |
262 | (variable "GUILE_LOAD_PATH") | |
263 | (files '("share/guile/site/2.2"))) | |
264 | (search-path-specification | |
265 | (variable "GUILE_LOAD_COMPILED_PATH") | |
1dcca83a | 266 | (files '("lib/guile/2.2/site-ccache"))))))) |
4eae7980 | 267 | |
edc8fd2e | 268 | (define-deprecated guile-2.2/bug-fix guile-2.2) |
4bd6f1d1 | 269 | |
8400d097 LC |
270 | (define-public guile-2.2.4 |
271 | (package/inherit | |
272 | guile-2.2 | |
273 | (version "2.2.4") | |
274 | (source (origin | |
275 | (inherit (package-source guile-2.2)) | |
276 | (uri (string-append "mirror://gnu/guile/guile-" version | |
277 | ".tar.xz")) | |
278 | (sha256 | |
279 | (base32 | |
280 | "07p3g0v2ba2vlfbfidqzlgbhnzdx46wh2rgc5gszq1mjyx5bks6r")))))) | |
34d624ce | 281 | |
e7921d5e LC |
282 | (define-public guile-3.0 |
283 | ;; This is the latest Guile stable version. | |
2d0e802f DT |
284 | (package |
285 | (inherit guile-2.2) | |
b6bee63b | 286 | (name "guile") |
7f1aa73b | 287 | (version "3.0.2") |
2d0e802f DT |
288 | (source (origin |
289 | (inherit (package-source guile-2.2)) | |
1a30351b | 290 | (uri (string-append "mirror://gnu/guile/guile-" |
2d0e802f DT |
291 | version ".tar.xz")) |
292 | (sha256 | |
293 | (base32 | |
7f1aa73b | 294 | "12lziar4j27j9whqp2n18427q45y9ghq7gdd8lqhmj1k0lr7vi2k")))) |
916ec91f LC |
295 | (arguments |
296 | ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd. | |
297 | (if (hurd-target?) | |
298 | (substitute-keyword-arguments (package-arguments guile-2.2) | |
299 | ((#:configure-flags flags ''()) | |
300 | `(cons "--disable-jit" ,flags))) | |
301 | (package-arguments guile-2.2))) | |
2d0e802f DT |
302 | (native-search-paths |
303 | (list (search-path-specification | |
304 | (variable "GUILE_LOAD_PATH") | |
305 | (files '("share/guile/site/3.0"))) | |
306 | (search-path-specification | |
307 | (variable "GUILE_LOAD_COMPILED_PATH") | |
308 | (files '("lib/guile/3.0/site-ccache" | |
e7921d5e LC |
309 | "share/guile/site/3.0"))))))) |
310 | ||
9e91f862 | 311 | (define-public guile-3.0-latest |
89ab6bfb LC |
312 | ;; TODO: Make this 'guile-3.0' on the next rebuild cycle. |
313 | (package | |
314 | (inherit guile-3.0) | |
9e91f862 | 315 | (version "3.0.4") |
89ab6bfb LC |
316 | (source (origin |
317 | (inherit (package-source guile-3.0)) | |
318 | (uri (string-append "mirror://gnu/guile/guile-" | |
319 | version ".tar.xz")) | |
320 | (sha256 | |
321 | (base32 | |
9e91f862 | 322 | "0c8dkyvs6xbxp7rgnhkyakajzhakay7qn9kahj1mj49x5vf4fybb")))))) |
89ab6bfb | 323 | |
0e8b0517 LC |
324 | (define-public guile-next |
325 | (deprecated-package "guile-next" guile-3.0)) | |
5cd074ea | 326 | |
cef392f3 CB |
327 | (define-public guile-3.0/libgc-7 |
328 | ;; Using libgc-7 avoid crashes that can occur, particularly when loading | |
329 | ;; data in to the Guix Data Service: | |
330 | ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40525 | |
331 | (hidden-package | |
332 | (package | |
9e91f862 | 333 | (inherit guile-3.0-latest) |
cef392f3 CB |
334 | (propagated-inputs |
335 | `(("bdw-gc" ,libgc-7) | |
336 | ,@(srfi-1:alist-delete "bdw-gc" (package-propagated-inputs guile-3.0))))))) | |
337 | ||
b6bee63b LC |
338 | (define-public guile-3.0/fixed |
339 | ;; A package of Guile that's rarely changed. It is the one used in the | |
340 | ;; `base' module, and thus changing it entails a full rebuild. | |
341 | (package | |
342 | (inherit guile-3.0) | |
343 | (properties '((hidden? . #t) ;people should install 'guile-2.2' | |
344 | (timeout . 72000) ;20 hours | |
345 | (max-silent-time . 36000))))) ;10 hours (needed on ARM | |
346 | ; when heavily loaded) | |
347 | ||
7c3b6b2e | 348 | (define* (make-guile-readline guile #:optional (name "guile-readline")) |
2ba2c98d | 349 | (package |
7c3b6b2e | 350 | (name name) |
2ba2c98d LC |
351 | (version (package-version guile)) |
352 | (source (package-source guile)) | |
353 | (build-system gnu-build-system) | |
354 | (arguments | |
355 | '(#:configure-flags '("--disable-silent-rules") | |
356 | #:phases (modify-phases %standard-phases | |
357 | (add-before 'build 'chdir | |
358 | (lambda* (#:key outputs #:allow-other-keys) | |
359 | (invoke "make" "-C" "libguile" "scmconfig.h") | |
360 | (invoke "make" "-C" "lib") | |
361 | (chdir "guile-readline") | |
362 | ||
363 | (substitute* "Makefile" | |
364 | (("../libguile/libguile-[[:graph:]]+\\.la") | |
365 | ;; Remove dependency on libguile-X.Y.la. | |
366 | "") | |
367 | (("^READLINE_LIBS = (.*)$" _ libs) | |
368 | ;; Link against the provided libguile. | |
369 | (string-append "READLINE_LIBS = " | |
370 | "-lguile-$(GUILE_EFFECTIVE_VERSION) " | |
371 | libs "\n")) | |
372 | (("\\$\\(top_builddir\\)/meta/build-env") | |
373 | ;; Use the provided Guile, not the one from | |
374 | ;; $(builddir). | |
375 | "") | |
376 | ||
377 | ;; Install modules to the 'site' directories. | |
378 | (("^moddir = .*$") | |
379 | "moddir = $(pkgdatadir)/site/$(GUILE_EFFECTIVE_VERSION)\n") | |
380 | (("^ccachedir = .*$") | |
381 | "ccachedir = $(pkglibdir)/$(GUILE_EFFECTIVE_VERSION)/site-ccache\n")) | |
382 | ||
383 | ;; Load 'guile-readline.so' from the right place. | |
384 | (substitute* "ice-9/readline.scm" | |
385 | (("load-extension \"guile-readline\"") | |
386 | (format #f "load-extension \ | |
387 | (string-append ~s \"/lib/guile/\" (effective-version) \"/extensions/guile-readline\")" | |
388 | (assoc-ref outputs "out")))) | |
389 | #t))))) | |
390 | (home-page (package-home-page guile)) | |
391 | (native-inputs (package-native-inputs guile)) | |
392 | (inputs | |
393 | `(,@(package-inputs guile) ;to placate 'configure' | |
394 | ,@(package-propagated-inputs guile) | |
395 | ("guile" ,guile) | |
396 | ("readline" ,readline))) | |
397 | (synopsis "Line editing support for GNU Guile") | |
398 | (description | |
399 | "This module provides line editing support via the Readline library for | |
400 | GNU@tie{}Guile. Use the @code{(ice-9 readline)} module and call its | |
401 | @code{activate-readline} procedure to enable it.") | |
402 | (license license:gpl3+))) | |
403 | ||
404 | (define-public guile-readline | |
142cd4dc | 405 | (make-guile-readline guile-3.0)) |
2ba2c98d | 406 | |
142cd4dc MB |
407 | (define-public guile2.2-readline |
408 | (make-guile-readline guile-2.2 "guile2.2-readline")) | |
7c3b6b2e | 409 | |
8f4acad7 LC |
410 | (define (guile-variant-package-name prefix) |
411 | (lambda (name) | |
412 | "Return NAME with PREFIX instead of \"guile-\", when applicable." | |
413 | (if (string-prefix? "guile-" name) | |
414 | (string-append prefix "-" | |
415 | (string-drop name | |
416 | (string-length "guile-"))) | |
417 | name))) | |
947a5d47 | 418 | |
8f4acad7 | 419 | (define package-for-guile-2.0 |
10b507b2 | 420 | ;; A procedure that rewrites the dependency tree of the given package to use |
e8bc2a01 MB |
421 | ;; GUILE-2.0 instead of GUILE-3.0. |
422 | (package-input-rewriting `((,guile-3.0 . ,guile-2.0)) | |
8f4acad7 | 423 | (guile-variant-package-name "guile2.0"))) |
947a5d47 | 424 | |
b6bee63b LC |
425 | (define package-for-guile-2.2 |
426 | (package-input-rewriting `((,guile-3.0 . ,guile-2.2)) | |
427 | (guile-variant-package-name "guile2.2"))) | |
428 | ||
429 | (define-syntax define-deprecated-guile3.0-package | |
430 | (lambda (s) | |
431 | "Define a deprecated package alias for \"guile3.0-something\"." | |
432 | (syntax-case s () | |
433 | ((_ name) | |
434 | (and (identifier? #'name) | |
435 | (string-prefix? "guile3.0-" (symbol->string (syntax->datum | |
436 | #'name)))) | |
437 | (let ((->guile (lambda (str) | |
438 | (let ((base (string-drop str | |
439 | (string-length "guile3.0-")))) | |
440 | (string-append "guile-" base))))) | |
441 | (with-syntax ((package-name (symbol->string (syntax->datum #'name))) | |
442 | (package | |
443 | (datum->syntax | |
444 | #'name | |
445 | (string->symbol | |
f69cf407 LC |
446 | (->guile (symbol->string (syntax->datum |
447 | #'name)))))) | |
448 | (old-name | |
449 | ;; XXX: This is the name generated by | |
450 | ;; 'define-deprecated'. | |
451 | (datum->syntax | |
452 | #'name | |
453 | (symbol-append '% (syntax->datum #'name) | |
454 | '/deprecated)))) | |
b6bee63b LC |
455 | #'(begin |
456 | (define-deprecated name package | |
457 | (deprecated-package package-name package)) | |
f69cf407 | 458 | (export old-name)))))))) |
89a99d53 | 459 | |
142cd4dc MB |
460 | (define-deprecated-guile3.0-package guile3.0-readline) |
461 | ||
4eae7980 | 462 | (define-public guile-for-guile-emacs |
a71d3358 RW |
463 | (let ((commit "15ca78482ac0dd2e3eb36dcb31765d8652d7106d") |
464 | (revision "1")) | |
465 | (package (inherit guile-2.2) | |
466 | (name "guile-for-guile-emacs") | |
467 | (version (git-version "2.1.2" revision commit)) | |
468 | (source (origin | |
469 | (method git-fetch) | |
470 | (uri (git-reference | |
471 | (url "git://git.savannah.gnu.org/guile.git") | |
472 | (commit commit))) | |
473 | (file-name (git-file-name name version)) | |
474 | (sha256 | |
475 | (base32 | |
476 | "1l7ik4q4zk7vq4m3gnwizc0b64b1mdr31hxqlzxs94xaf2lvi7s2")))) | |
477 | (arguments | |
478 | (substitute-keyword-arguments (package-arguments guile-2.2) | |
479 | ((#:phases phases '%standard-phases) | |
480 | `(modify-phases ,phases | |
481 | (replace 'bootstrap | |
482 | (lambda _ | |
483 | ;; Disable broken tests. | |
484 | ;; TODO: Fix them! | |
485 | (substitute* "test-suite/tests/gc.test" | |
486 | (("\\(pass-if \"after-gc-hook gets called\"" m) | |
487 | (string-append "#;" m))) | |
488 | (substitute* "test-suite/tests/version.test" | |
489 | (("\\(pass-if \"version reporting works\"" m) | |
490 | (string-append "#;" m))) | |
491 | ;; Warning: Unwind-only `out-of-memory' exception; skipping pre-unwind handler. | |
492 | ;; FAIL: test-out-of-memory | |
493 | (substitute* "test-suite/standalone/Makefile.am" | |
494 | (("(check_SCRIPTS|TESTS) \\+= test-out-of-memory") "")) | |
495 | ||
496 | (patch-shebang "build-aux/git-version-gen") | |
497 | (invoke "sh" "autogen.sh") | |
498 | #t)))))) | |
499 | (native-inputs | |
500 | `(("autoconf" ,autoconf) | |
501 | ("automake" ,automake) | |
502 | ("libtool" ,libtool) | |
503 | ("flex" ,flex) | |
504 | ("texinfo" ,texinfo) | |
505 | ("gettext" ,gettext-minimal) | |
506 | ,@(package-native-inputs guile-2.2)))))) | |
be3feafe | 507 | |
c44899a2 LC |
508 | \f |
509 | ;;; | |
510 | ;;; Extensions. | |
511 | ;;; | |
512 | ||
84af1e74 | 513 | (define-public guile-json-1 |
6050a1fb CR |
514 | (package |
515 | (name "guile-json") | |
15214828 | 516 | (version "1.2.0") |
f52ef55e | 517 | (home-page "https://github.com/aconchillo/guile-json") |
6050a1fb | 518 | (source (origin |
ffc72ec6 | 519 | (method url-fetch) |
28123c01 LC |
520 | (uri (string-append "mirror://savannah/guile-json/guile-json-" |
521 | version ".tar.gz")) | |
ffc72ec6 LC |
522 | (sha256 |
523 | (base32 | |
6efccabe | 524 | "15gnb84d7hpazqhskkf3g9z4r6knw54wfj4ch5270kakz1lp70c9")))) |
6050a1fb | 525 | (build-system gnu-build-system) |
6efccabe | 526 | (native-inputs `(("pkg-config" ,pkg-config) |
f52ef55e LC |
527 | ("guile" ,guile-2.2))) |
528 | (inputs `(("guile" ,guile-2.2))) | |
6050a1fb CR |
529 | (synopsis "JSON module for Guile") |
530 | (description | |
0f31d4f0 LC |
531 | "Guile-JSON supports parsing and building JSON documents according to the |
532 | specification. These are the main features: | |
533 | ||
534 | @itemize | |
535 | @item Strictly complies to @uref{http://json.org, specification}. | |
536 | @item Build JSON documents programmatically via macros. | |
537 | @item Unicode support for strings. | |
538 | @item Allows JSON pretty printing. | |
539 | @end itemize\n") | |
15214828 LC |
540 | |
541 | ;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+). | |
542 | (license license:gpl3+))) | |
6050a1fb | 543 | |
84af1e74 LC |
544 | ;; Deprecate the 'guile-json' alias to force the use 'guile-json-1' or |
545 | ;; 'guile-json-3'. In the future, we may reuse 'guile-json' as an alias for | |
546 | ;; 'guile-json-3'. | |
9b65dea8 | 547 | (define-deprecated guile-json guile-json-1) |
7f81cce3 | 548 | (export guile-json) |
584a3ca3 | 549 | |
2252f087 | 550 | (define-public guile2.0-json |
84af1e74 | 551 | (package-for-guile-2.0 guile-json-1)) |
947a5d47 | 552 | |
152d4076 LC |
553 | (define-public guile-json-3 |
554 | ;; This version is incompatible with 1.x; see the 'NEWS' file. | |
555 | (package | |
84af1e74 | 556 | (inherit guile-json-1) |
152d4076 | 557 | (name "guile-json") |
5d9e2187 | 558 | (version "3.5.0") |
152d4076 LC |
559 | (source (origin |
560 | (method url-fetch) | |
28123c01 LC |
561 | (uri (string-append "mirror://savannah/guile-json/guile-json-" |
562 | version ".tar.gz")) | |
152d4076 LC |
563 | (sha256 |
564 | (base32 | |
5d9e2187 MB |
565 | "0nj0684qgh6ppkbdyxqfyjwsv2qbyairxpi8fzrhsi3xnc7jn4im")))) |
566 | (native-inputs `(("pkg-config" ,pkg-config) | |
b6bee63b | 567 | ("guile" ,guile-3.0))) |
5d9e2187 | 568 | (inputs `(("guile" ,guile-3.0))))) |
b6bee63b | 569 | |
89a99d53 | 570 | (define-public guile3.0-json |
b6bee63b | 571 | (deprecated-package "guile3.0-json" guile-json-3)) |
89a99d53 | 572 | |
793a48ed LC |
573 | (define-public guile-json-4 |
574 | (package | |
575 | (inherit guile-json-3) | |
576 | (name "guile-json") | |
577 | (version "4.0.1") | |
578 | (source (origin | |
579 | (method url-fetch) | |
580 | (uri (string-append "mirror://savannah/guile-json/guile-json-" | |
581 | version ".tar.gz")) | |
582 | (sha256 | |
583 | (base32 | |
584 | "0f25qak4i57c3x0q9hlrll911l57bb8nz57rjkd02mn2fc2h3730")))))) | |
585 | ||
586 | (define-public guile2.2-json | |
587 | (package-for-guile-2.2 guile-json-4)) | |
588 | ||
93e7199b CAW |
589 | ;; There are two guile-gdbm packages, one using the FFI and one with |
590 | ;; direct C bindings, hence the verbose name. | |
591 | ||
592 | (define-public guile-gdbm-ffi | |
593 | (package | |
594 | (name "guile-gdbm-ffi") | |
595 | (version "20120209.fa1d5b6") | |
596 | (source (origin | |
597 | (method git-fetch) | |
598 | (uri (git-reference | |
b0e7b699 | 599 | (url "https://github.com/ijp/guile-gdbm") |
93e7199b | 600 | (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246"))) |
821f4dc2 | 601 | (file-name (string-append name "-" version "-checkout")) |
977d8666 LC |
602 | (patches (search-patches |
603 | "guile-gdbm-ffi-support-gdbm-1.14.patch")) | |
93e7199b CAW |
604 | (sha256 |
605 | (base32 | |
606 | "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj")))) | |
977d8666 LC |
607 | (build-system guile-build-system) |
608 | (arguments | |
609 | '(#:phases (modify-phases %standard-phases | |
610 | (add-after 'unpack 'move-examples | |
611 | (lambda* (#:key outputs #:allow-other-keys) | |
612 | ;; Move examples where they belong. | |
613 | (let* ((out (assoc-ref outputs "out")) | |
614 | (doc (string-append out "/share/doc/" | |
615 | (strip-store-file-name out) | |
616 | "/examples"))) | |
617 | (copy-recursively "examples" doc) | |
618 | (delete-file-recursively "examples") | |
619 | #t))) | |
620 | (add-after 'unpack 'set-libgdbm-file-name | |
621 | (lambda* (#:key inputs #:allow-other-keys) | |
622 | (substitute* "gdbm.scm" | |
623 | (("\\(dynamic-link \"libgdbm\"\\)") | |
624 | (format #f "(dynamic-link \"~a/lib/libgdbm.so\")" | |
625 | (assoc-ref inputs "gdbm")))) | |
626 | #t))))) | |
627 | (native-inputs | |
b6bee63b | 628 | `(("guile" ,guile-3.0))) |
56f31a9f | 629 | (inputs |
56f31a9f | 630 | `(("gdbm" ,gdbm))) |
93e7199b CAW |
631 | (home-page "https://github.com/ijp/guile-gdbm") |
632 | (synopsis "Guile bindings to the GDBM library via Guile's FFI") | |
633 | (description | |
634 | "Guile bindings to the GDBM key-value storage system, using | |
635 | Guile's foreign function interface.") | |
71e0f217 | 636 | (license license:gpl3+))) |
93e7199b | 637 | |
5bd3a841 LC |
638 | (define-public guile2.0-gdbm-ffi |
639 | (package-for-guile-2.0 guile-gdbm-ffi)) | |
640 | ||
b6bee63b LC |
641 | (define-public guile2.2-gdbm-ffi |
642 | (package-for-guile-2.2 guile-gdbm-ffi)) | |
643 | ||
644 | (define-deprecated-guile3.0-package guile3.0-gdbm-ffi) | |
93e7199b | 645 | |
e8ac1f8f | 646 | (define-public guile-sqlite3 |
319e26e4 LC |
647 | (package |
648 | (name "guile-sqlite3") | |
1eec6b0c | 649 | (version "0.1.2") |
3527f600 | 650 | (home-page "https://notabug.org/guile-sqlite3/guile-sqlite3.git") |
319e26e4 LC |
651 | (source (origin |
652 | (method git-fetch) | |
653 | (uri (git-reference | |
654 | (url home-page) | |
655 | (commit (string-append "v" version)))) | |
656 | (sha256 | |
657 | (base32 | |
1eec6b0c | 658 | "1nryy9j3bk34i0alkmc9bmqsm0ayz92k1cdf752mvhyjjn8nr928")) |
29e4d3ea | 659 | (file-name (string-append name "-" version "-checkout")))) |
319e26e4 LC |
660 | (build-system gnu-build-system) |
661 | (native-inputs | |
662 | `(("autoconf" ,autoconf) | |
663 | ("automake" ,automake) | |
02ed227f | 664 | ("guile" ,guile-3.0) |
319e26e4 LC |
665 | ("pkg-config" ,pkg-config))) |
666 | (inputs | |
b6bee63b | 667 | `(("guile" ,guile-3.0) |
319e26e4 LC |
668 | ("sqlite" ,sqlite))) |
669 | (synopsis "Access SQLite databases from Guile") | |
670 | (description | |
671 | "This package provides Guile bindings to the SQLite database system.") | |
672 | (license license:gpl3+))) | |
e8ac1f8f | 673 | |
c8e3651a EB |
674 | (define-public guile2.0-sqlite3 |
675 | (package-for-guile-2.0 guile-sqlite3)) | |
676 | ||
b6bee63b LC |
677 | (define-public guile2.2-sqlite3 |
678 | (package-for-guile-2.2 guile-sqlite3)) | |
679 | ||
680 | (define-deprecated-guile3.0-package guile3.0-sqlite3) | |
d15e4b1d | 681 | |
3b5783fc AB |
682 | (define-public guile-bytestructures |
683 | (package | |
684 | (name "guile-bytestructures") | |
247a47bc | 685 | (version "1.0.7") |
16e42db0 | 686 | (home-page "https://github.com/TaylanUB/scheme-bytestructures") |
3b5783fc | 687 | (source (origin |
16e42db0 MO |
688 | (method git-fetch) |
689 | (uri (git-reference | |
690 | (url home-page) | |
691 | (commit (string-append "v" version)))) | |
43476625 | 692 | (file-name (git-file-name name version)) |
3b5783fc AB |
693 | (sha256 |
694 | (base32 | |
247a47bc | 695 | "0q0habjiy3h9cigb7q1br9kz6z212dn2ab31f6dgd3rrmsfn5rvb")))) |
4f85f7f7 | 696 | (build-system gnu-build-system) |
9a78e181 | 697 | (arguments |
7ed9c312 LC |
698 | `(#:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings |
699 | ||
700 | #:phases (modify-phases %standard-phases | |
701 | (add-after 'install 'install-doc | |
702 | (lambda* (#:key outputs #:allow-other-keys) | |
703 | (let* ((out (assoc-ref outputs "out")) | |
704 | (package ,(package-full-name this-package "-")) | |
705 | (doc (string-append out "/share/doc/" package))) | |
706 | (install-file "README.md" doc) | |
707 | #t)))))) | |
726ecfeb | 708 | (native-inputs |
16e42db0 MO |
709 | `(("autoconf" ,autoconf) |
710 | ("automake" ,automake) | |
b9a9c8ef | 711 | ("pkg-config" ,pkg-config) |
b6bee63b | 712 | ("guile" ,guile-3.0))) |
3b5783fc | 713 | (inputs |
b6bee63b | 714 | `(("guile" ,guile-3.0))) |
3b5783fc AB |
715 | (synopsis "Structured access to bytevector contents for Guile") |
716 | (description | |
717 | "Guile bytestructures offers a system imitating the type system | |
718 | of the C programming language, to be used on bytevectors. C's type | |
719 | system works on raw memory, and Guile works on bytevectors which are | |
720 | an abstraction over raw memory. It's also more powerful than the C | |
721 | type system, elevating types to first-class status.") | |
abba4073 LC |
722 | (license license:gpl3+) |
723 | (properties '((upstream-name . "bytestructures"))))) | |
3b5783fc | 724 | |
726ecfeb LC |
725 | (define-public guile2.0-bytestructures |
726 | (package-for-guile-2.0 guile-bytestructures)) | |
727 | ||
b6bee63b LC |
728 | (define-public guile2.2-bytestructures |
729 | (package-for-guile-2.2 guile-bytestructures)) | |
730 | ||
731 | (define-deprecated-guile3.0-package guile3.0-bytestructures) | |
89a99d53 | 732 | |
bd233722 | 733 | (define-public guile-git |
e85035c9 LC |
734 | (package |
735 | (name "guile-git") | |
25623647 | 736 | (version "0.3.0") |
e85035c9 LC |
737 | (home-page "https://gitlab.com/guile-git/guile-git.git") |
738 | (source (origin | |
25623647 MB |
739 | (method url-fetch) |
740 | (uri (string-append "https://gitlab.com/guile-git/guile-git/uploads/" | |
741 | "4c563d8e7e1ff84396abe8ca7011bcaf/guile-git-" | |
742 | version ".tar.gz")) | |
e85035c9 LC |
743 | (sha256 |
744 | (base32 | |
25623647 | 745 | "0c5i3d16hp7gp9rd78vk9zc45js8bphf92m4lbb5gyi4l1yl7kkm")))) |
e85035c9 | 746 | (build-system gnu-build-system) |
3d867fea EF |
747 | (arguments |
748 | `(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings | |
e85035c9 | 749 | (native-inputs |
96a9675b | 750 | `(("pkg-config" ,pkg-config) |
b6bee63b | 751 | ("guile" ,guile-3.0) |
96a9675b | 752 | ("guile-bytestructures" ,guile-bytestructures))) |
e85035c9 | 753 | (inputs |
b6bee63b | 754 | `(("guile" ,guile-3.0) |
e85035c9 LC |
755 | ("libgit2" ,libgit2))) |
756 | (propagated-inputs | |
757 | `(("guile-bytestructures" ,guile-bytestructures))) | |
758 | (synopsis "Guile bindings for libgit2") | |
759 | (description | |
760 | "This package provides Guile bindings to libgit2, a library to | |
bd233722 | 761 | manipulate repositories of the Git version control system.") |
e85035c9 | 762 | (license license:gpl3+))) |
c5793e7e | 763 | |
b6bee63b LC |
764 | (define-public guile2.2-git |
765 | (package-for-guile-2.2 guile-git)) | |
01c11aeb | 766 | |
70bc6085 | 767 | (define-public guile2.0-git |
60353203 LC |
768 | (let ((base (package-for-guile-2.0 guile-git))) |
769 | (package | |
770 | (inherit base) | |
771 | ;; Libgit2's Guile test driver requires (ice-9 textual-ports), which is | |
772 | ;; not in Guile 2.0. Thus, keep LIBGIT2 as-is here (i.e., built against | |
773 | ;; Guile 2.2). | |
774 | (inputs `(("libgit2" ,libgit2) | |
775 | ,@(srfi-1:alist-delete "libgit2" | |
776 | (package-inputs base))))))) | |
70bc6085 | 777 | |
b6bee63b LC |
778 | (define-deprecated-guile3.0-package guile3.0-git) |
779 | ||
1722d680 | 780 | ;;; guile.scm ends here |
a8307a17 | 781 |