projects/guix·blob librewolf-updates · refs

1793 lines · 74.1 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <[email protected]>
3;;; Copyright © 2014 Raimon Grau <[email protected]>
4;;; Copyright © 2014 Mark H Weaver <[email protected]>
5;;; Copyright © 2014 Andreas Enge <[email protected]>
6;;; Copyright © 2016, 2017, 2020-2022 Efraim Flashner <[email protected]>
7;;; Copyright © 2016, 2019, 2024 Ricardo Wurmus <[email protected]>
8;;; Copyright © 2016 doncatnip <[email protected]>
9;;; Copyright © 2016, 2017, 2019 Clément Lassieur <[email protected]>
10;;; Copyright © 2016 José Miguel Sánchez García <[email protected]>
11;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <[email protected]>
12;;; Copyright © 2018 Fis Trivial <[email protected]>
13;;; Copyright © 2020 Nicolas Goaziou <[email protected]>
14;;; Copyright © 2020 Simon South <[email protected]>
15;;; Copyright © 2020 Paul A. Patience <[email protected]>
16;;; Copyright © 2021 Vinícius dos Santos Oliveira <[email protected]>
17;;; Copyright © 2021 Greg Hogan <[email protected]>
18;;; Copyright © 2022 Brandon Lucas <[email protected]>
19;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
20;;; Copyright © 2022 Leo Nikkilä <[email protected]>
21;;; Copyright © 2023 Yovan Naumovski <[email protected]>
22;;; Copyright © 2023 Valter Nazianzeno <[email protected]>
23;;; Copyright © 2023 Timo Wilken <[email protected]>
24;;; Copyright © 2024 Jan Wielkiewicz <[email protected]>
25;;; Copyright © 2024, 2026 Maxim Cournoyer <[email protected]>
26;;; Copyright © 2025 Zheng Junjie <[email protected]>
27;;; Copyright © 2025 Ashish SHUKLA <[email protected]>
28;;; Copyright © 2025 Aaron Boyd <[email protected]>
29;;;
30;;; This file is part of GNU Guix.
31;;;
32;;; GNU Guix is free software; you can redistribute it and/or modify it
33;;; under the terms of the GNU General Public License as published by
34;;; the Free Software Foundation; either version 3 of the License, or (at
35;;; your option) any later version.
36;;;
37;;; GNU Guix is distributed in the hope that it will be useful, but
38;;; WITHOUT ANY WARRANTY; without even the implied warranty of
39;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40;;; GNU General Public License for more details.
41;;;
42;;; You should have received a copy of the GNU General Public License
43;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
44
45(define-module (gnu packages lua)
46 #:use-module ((guix licenses) #:prefix license:)
47 #:use-module (guix packages)
48 #:use-module (guix download)
49 #:use-module (guix git-download)
50 #:use-module (guix gexp)
51 #:use-module (guix utils)
52 #:use-module (guix build-system gnu)
53 #:use-module (guix build-system cmake)
54 #:use-module (guix build-system meson)
55 #:use-module (guix build-system trivial)
56 #:use-module (gnu packages)
57 #:use-module (gnu packages autotools)
58 #:use-module (gnu packages base)
59 #:use-module (gnu packages bash)
60 #:use-module (gnu packages boost)
61 #:use-module (gnu packages curl)
62 #:use-module (gnu packages build-tools)
63 #:use-module (gnu packages check)
64 #:use-module (gnu packages compression)
65 #:use-module (gnu packages gcc)
66 #:use-module (gnu packages glib)
67 #:use-module (gnu packages gperf)
68 #:use-module (gnu packages gnupg)
69 #:use-module (gnu packages gtk)
70 #:use-module (gnu packages haskell-xyz)
71 #:use-module (gnu packages libevent)
72 #:use-module (gnu packages libffi)
73 #:use-module (gnu packages linux)
74 #:use-module (gnu packages m4)
75 #:use-module (gnu packages ncurses)
76 #:use-module (gnu packages ninja)
77 #:use-module (gnu packages pkg-config)
78 #:use-module (gnu packages pretty-print)
79 #:use-module (gnu packages rdf)
80 #:use-module (gnu packages re2c)
81 #:use-module (gnu packages readline)
82 #:use-module (gnu packages rsync)
83 #:use-module (gnu packages ssh)
84 #:use-module (gnu packages tls)
85 #:use-module (gnu packages version-control)
86 #:use-module (gnu packages vim)
87 #:use-module (gnu packages wget)
88 #:use-module (gnu packages xml)
89 #:use-module (gnu packages xorg)
90 #:use-module ((srfi srfi-1) #:hide (zip)))
91
92(define (lua-search-paths version)
93 (list (search-path-specification
94 (variable "GUIX_LUA_PATH")
95 (separator ";")
96 (files (list (string-append "share/lua/" version))))
97 (search-path-specification
98 (variable "GUIX_LUA_CPATH")
99 (separator ";")
100 (files (list (string-append "lib/lua/" version))))))
101
102(define-public lua
103 (package
104 (name "lua")
105 (version "5.3.5")
106 (source (origin
107 (method url-fetch)
108 (uri (string-append "https://www.lua.org/ftp/lua-"
109 version ".tar.gz"))
110 (sha256
111 (base32 "1b2qn2rv96nmbm6zab4l877bd4zq7wpwm8drwjiy2ih4jqzysbhc"))
112 (patches (search-patches "lua-pkgconfig.patch"
113 "lua-liblua-so.patch"
114 "lua-5.x-search-path-helpers.patch"
115 "lua-5.3-search-paths.patch"))))
116 (build-system gnu-build-system)
117 (inputs (list readline))
118 (arguments
119 `(#:modules ((guix build gnu-build-system)
120 (guix build utils)
121 (srfi srfi-1))
122 #:test-target "test"
123 #:make-flags
124 (list "MYCFLAGS=-fPIC -DLUA_DL_DLOPEN"
125 (string-append "CC=" ,(cc-for-target))
126 (string-append "SYSLIBS=-L" (assoc-ref %build-inputs "readline")
127 "/lib")
128 "linux")
129 #:phases
130 (modify-phases %standard-phases
131 (delete 'configure)
132 (replace 'install
133 (lambda* (#:key outputs #:allow-other-keys)
134 (let ((out (assoc-ref outputs "out")))
135 (invoke "make" "install"
136 (string-append "INSTALL_TOP=" out)
137 (string-append "INSTALL_MAN=" out
138 "/share/man/man1"))))))))
139 (native-search-paths (lua-search-paths "5.3"))
140 (home-page "https://www.lua.org/")
141 (synopsis "Embeddable scripting language")
142 (description
143 "Lua is a powerful, fast, lightweight, embeddable scripting language. Lua
144combines simple procedural syntax with powerful data description constructs
145based on associative arrays and extensible semantics. Lua is dynamically typed,
146runs by interpreting bytecode for a register-based virtual machine, and has
147automatic memory management with incremental garbage collection, making it ideal
148for configuration, scripting, and rapid prototyping.")
149 (license license:x11)))
150
151(define-public lua-5.4
152 (package (inherit lua)
153 (version "5.4.8")
154 (arguments
155 (substitute-keyword-arguments (package-arguments lua)
156 ((#:make-flags flags)
157 (append (delete "linux" flags)
158 '("linux-readline")))))
159 (source (origin
160 (method url-fetch)
161 (uri (string-append "https://www.lua.org/ftp/lua-"
162 version ".tar.gz"))
163 (sha256
164 (base32 "1bi90r9nzmqhjwhr8ysffhmhq30wxxcpqwmbxr33wyaf2npds62g"))
165 (patches (search-patches "lua-5.4-pkgconfig.patch"
166 "lua-5.4-liblua-so.patch"
167 "lua-5.x-search-path-helpers.patch"
168 "lua-5.4-search-paths.patch"))))
169 (native-search-paths (lua-search-paths "5.4"))))
170
171(define-public lua-5.2
172 (package (inherit lua)
173 (version "5.2.4")
174 (source
175 (origin
176 (method url-fetch)
177 (uri (string-append "https://www.lua.org/ftp/lua-"
178 version ".tar.gz"))
179 (sha256
180 (base32 "0jwznq0l8qg9wh5grwg07b5cy3lzngvl5m2nl1ikp6vqssmf9qmr"))
181 (patches (search-patches "lua-pkgconfig.patch"
182 "lua-liblua-so.patch"
183 "lua-5.x-search-path-helpers.patch"
184 "lua-5.2-search-paths.patch"))))
185 (native-search-paths (lua-search-paths "5.2"))))
186
187(define-public lua-5.1
188 (package (inherit lua)
189 (version "5.1.5")
190 (source (origin
191 (method url-fetch)
192 (uri (string-append "https://www.lua.org/ftp/lua-"
193 version ".tar.gz"))
194 (sha256
195 (base32 "0cskd4w0g6rdm2q8q3i4n1h3j8kylhs3rq8mxwl9vwlmlxbgqh16"))
196 (patches (search-patches "lua51-liblua-so.patch"
197 "lua-CVE-2014-5461.patch"
198 "lua51-pkgconfig.patch"
199 "lua-5.x-search-path-helpers.patch"
200 "lua-5.1-search-paths.patch"))))
201 (native-search-paths (lua-search-paths "5.1"))))
202
203(define-public luajit
204 (let ((branch "v2.1")
205 (commit "04dca7911ea255f37be799c18d74c305b921c1a6"))
206 (package
207 (name "luajit")
208 (version (git-version branch "0" commit))
209 (source (origin
210 (method git-fetch)
211 (uri (git-reference
212 (url "https://luajit.org/git/luajit.git")
213 (commit commit)))
214 (file-name (git-file-name name version))
215 (sha256
216 (base32
217 "0srwk9nmiz8a93f70inq2597ff6xy203ckr4c0k7jcksdixymi9v"))
218 (patches (search-patches "lua-5.x-search-path-helpers.patch"
219 "luajit-search-paths.patch"))))
220 (build-system gnu-build-system)
221 (arguments
222 (list #:tests? #f ; luajit is distributed without tests
223 #:phases
224 #~(modify-phases %standard-phases
225 #$@(if (target-riscv64?)
226 #~((add-after 'unpack 'patch
227 (lambda _
228 (invoke
229 "patch" "--force" "-p1" "-i"
230 #$(local-file
231 (search-patch
232 "luajit-add-riscv64-support.patch"))))))
233 #~())
234 (delete 'configure)) ; no configure script
235 #:make-flags #~(list (string-append "PREFIX="
236 (assoc-ref %outputs "out")))))
237 (native-search-paths
238 (list (search-path-specification
239 (variable "GUIX_LUA_PATH")
240 (separator ";")
241 (files (list "share/lua/5.1"
242 "share/luajit-2.1")))
243 (search-path-specification
244 (variable "GUIX_LUA_CPATH")
245 (separator ";")
246 (files (list "lib/lua/5.1")))))
247 (home-page "https://www.luajit.org/")
248 (synopsis
249 "Just in time compiler for Lua programming language version 5.1")
250 ;; On powerpc64le-linux, the build fails with an error: "No support for
251 ;; PowerPC 64 bit mode (yet)". See: https://issues.guix.gnu.org/49220
252 (supported-systems (fold delete %supported-systems
253 (list "powerpc64le-linux")))
254 (description
255 "LuaJIT is a Just-In-Time Compiler (JIT) for the Lua
256programming language. Lua is a powerful, dynamic and light-weight programming
257language. It may be embedded or used as a general-purpose, stand-alone
258language.")
259 (license license:x11))))
260
261(define-public luajit-lua52-openresty
262 (package
263 (inherit luajit)
264 (name "luajit-lua52-openresty")
265 (version "2.1-20201229")
266 (source
267 (origin
268 (method git-fetch)
269 (uri (git-reference
270 (url "https://github.com/openresty/luajit2.git")
271 (commit (string-append "v" version))))
272 (file-name (git-file-name name version))
273 (sha256
274 (base32 "07haj27kbpbnkv836c2nd36h2xislrmri52w0zbpxvl68xk6g96p"))))
275 (arguments
276 `(#:tests? #f ;no test
277 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
278 #:phases
279 (modify-phases %standard-phases
280 (delete 'configure) ;no configure script
281 (add-after 'unpack 'enable-lua52-compat
282 (lambda _
283 (substitute* "src/Makefile"
284 (("#(XCFLAGS\\+= -DLUAJIT_ENABLE_LUA52COMPAT)" _ flag) flag))
285 #t)))))
286 (home-page "https://github.com/openresty/luajit2")
287 (synopsis "OpenResty's Branch of LuaJIT 2")
288 (description
289 "This is the official OpenResty branch of LuaJIT. It is not to be
290considered a fork, since changes are regularly synchronized from the upstream
291LuaJIT project. This package also enables the Lua 5.2 compat mode needed by
292some projects.")))
293
294(define (make-lua-expat name lua)
295 (package
296 (name name)
297 (version "1.3.0")
298 (source (origin
299 (method url-fetch)
300 (uri (string-append "https://matthewwild.co.uk/projects/"
301 "luaexpat/luaexpat-" version ".tar.gz"))
302 (sha256
303 (base32
304 "1hvxqngn0wf5642i5p3vcyhg3pmp102k63s9ry4jqyyqc1wkjq6h"))))
305 (build-system gnu-build-system)
306 (arguments
307 `(#:make-flags
308 (let ((out (assoc-ref %outputs "out"))
309 (lua-version ,(version-major+minor (package-version lua))))
310 (list ,(string-append "CC=" (cc-for-target))
311 (string-append "LUA_LDIR=" out "/share/lua/" lua-version)
312 (string-append "LUA_CDIR=" out "/lib/lua/" lua-version)))
313 #:phases
314 (modify-phases %standard-phases
315 (delete 'configure)
316 (replace 'check
317 (lambda _
318 (setenv "LUA_CPATH" "src/?.so;;")
319 (setenv "LUA_PATH" "src/?.lua;;")
320 (invoke "lua" "tests/test.lua")
321 (invoke "lua" "tests/test-lom.lua"))))))
322 (inputs
323 (list lua expat))
324 (home-page "https://matthewwild.co.uk/projects/luaexpat/")
325 (synopsis "SAX XML parser based on the Expat library")
326 (description "LuaExpat is a SAX XML parser based on the Expat library.")
327 (license (package-license lua-5.1))))
328
329(define-public lua5.1-expat
330 (make-lua-expat "lua5.1-expat" lua-5.1))
331
332(define-public lua5.2-expat
333 (make-lua-expat "lua5.2-expat" lua-5.2))
334
335(define (make-lua-socket name lua)
336 (package
337 (name name)
338 (version "3.0-rc1")
339 (source (origin
340 (method git-fetch)
341 (uri (git-reference
342 (url "https://github.com/diegonehab/luasocket")
343 (commit (string-append "v" version))))
344 (file-name (git-file-name name version))
345 (sha256
346 (base32
347 "1chs7z7a3i3lck4x7rz60ziwbf793gw169hpjdfca8y4yf1hzsxk"))))
348 (build-system gnu-build-system)
349 (arguments
350 `(#:make-flags
351 (let ((out (assoc-ref %outputs "out"))
352 (lua-version ,(version-major+minor (package-version lua))))
353 (list (string-append "INSTALL_TOP=" out)
354 (string-append "LUAV?=" lua-version)))
355 #:phases
356 (modify-phases %standard-phases
357 (delete 'configure)
358 (replace 'check
359 (lambda _
360 (setenv "LUA_CPATH" (string-append "src/?.so." ,version ";;"))
361 (setenv "LUA_PATH" "src/?.lua;;")
362 (when (zero? (primitive-fork))
363 (invoke "lua" "test/testsrvr.lua"))
364 (invoke "lua" "test/testclnt.lua"))))))
365 (inputs
366 (list lua))
367 (home-page "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/")
368 (synopsis "Socket library for Lua")
369 (description "LuaSocket is a Lua extension library that is composed by two
370parts: a C core that provides support for the TCP and UDP transport layers,
371and a set of Lua modules that add support for functionality commonly needed by
372applications that deal with the Internet.
373
374Among the supported modules, the most commonly used implement the
375SMTP (sending e-mails), HTTP (WWW access) and FTP (uploading and downloading
376files) client protocols. These provide a very natural and generic interface
377to the functionality defined by each protocol. In addition, you will find
378that the MIME (common encodings), URL (anything you could possible want to do
379with one) and LTN12 (filters, sinks, sources and pumps) modules can be very
380handy.")
381 (license license:expat)))
382
383(define-public lua5.1-socket
384 (make-lua-socket "lua5.1-socket" lua-5.1))
385
386(define-public lua5.2-socket
387 (make-lua-socket "lua5.2-socket" lua-5.2))
388
389(define (make-lua-filesystem name lua)
390 (package
391 (name name)
392 (version "1.7.0.2")
393 (source (origin
394 (method git-fetch)
395 (uri (git-reference
396 (url "https://github.com/keplerproject/luafilesystem")
397 (commit (string-append "v"
398 (string-join
399 (string-split version #\.) "_")))))
400 (file-name (git-file-name name version))
401 (sha256
402 (base32
403 "0zmprgkm9zawdf9wnw0v3w6ibaj442wlc6alp39hmw610fl4vghi"))))
404 (build-system gnu-build-system)
405 (arguments
406 `(#:make-flags
407 (let ((out (assoc-ref %outputs "out"))
408 (lua-version ,(version-major+minor (package-version lua))))
409 (list (string-append "PREFIX=" out)
410 (string-append "LUA_LIBDIR=" out "/lib/lua/" lua-version)))
411 #:test-target "test"
412 #:phases
413 (modify-phases %standard-phases
414 (delete 'configure))))
415 (inputs
416 (list lua))
417 (home-page "https://keplerproject.github.io/luafilesystem/index.html")
418 (synopsis "File system library for Lua")
419 (description "LuaFileSystem is a Lua library developed to complement the
420set of functions related to file systems offered by the standard Lua
421distribution. LuaFileSystem offers a portable way to access the underlying
422directory structure and file attributes.")
423 (license (package-license lua-5.1))))
424
425(define-public lua-filesystem
426 (make-lua-filesystem "lua-filesystem" lua))
427
428(define-public lua5.1-filesystem
429 (make-lua-filesystem "lua5.1-filesystem" lua-5.1))
430
431(define-public lua5.2-filesystem
432 (make-lua-filesystem "lua5.2-filesystem" lua-5.2))
433
434(define-public lua-bee
435 ;; There are no releases; use the commit known to work with the packaged
436 ;; luamake.
437 (let ((commit "fe3feb2b62e8f0179dad5abb438ed4df39f675d4")
438 (revision "0"))
439 (package
440 (name "lua-bee")
441 (version (git-version "0.0.0" revision commit))
442 (source (origin
443 (method git-fetch)
444 (uri (git-reference
445 (url "https://github.com/actboy168/bee.lua/")
446 (commit commit)
447 ;; Requires a few git submodules such as the Lua
448 ;; sources to patch and a few source libraries.
449 (recursive? #t)))
450 (file-name (git-file-name name version))
451 (sha256
452 (base32
453 "1iv4cdkgcs123zw67ngq4jfbp7p7hkmj8zg2lbblipmm0hivhbd2"))))
454 (build-system gnu-build-system)
455 (arguments
456 (list
457 ;; TODO: Re-enable the tests after luamake can use a newer bee commit
458 ;; (see:
459 ;; <https://github.com/actboy168/bee.lua/commit/679c566f0f26bcf0c19e37066e678993122e1f34>).
460 #:tests? #f
461 #:phases
462 #~(modify-phases %standard-phases
463 (delete 'configure)
464 (replace 'build
465 (lambda* (#:key parallel-build? #:allow-other-keys)
466 (invoke "luamake"
467 "-EXE" "lua"
468 "-notest"
469 "-j" (if parallel-build?
470 (number->string (parallel-job-count))
471 "1")
472 "-v")))
473 (replace 'check
474 (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
475 (when tests?
476 (invoke "luamake"
477 "-EXE" "lua"
478 "-j" (if parallel-tests?
479 (number->string (parallel-job-count))
480 "1")
481 "test" "-v"))))
482 (replace 'install
483 (lambda _
484 (install-file "build/bin/lua"
485 (string-append #$output "/bin"))
486 (install-file "build/bin/bee.so"
487 (string-append #$output "/lib/")))))))
488 (native-inputs (list luamake))
489 (home-page "https://github.com/actboy168/bee.lua/")
490 (synopsis "Lua runtime with a few extra features")
491 (description "The Bee Lua runtime implements a few extra features
492such as:
493@itemize
494@item Deterministic tables traversal
495@item Enable @code{lua_assert} in debug mode
496@item Add error hook (for debugger)
497@item Add resume/yield hook (for debugger)
498@item Disable tail calls in debug mode (for debugger)
499@end itemize")
500 (license license:expat))))
501
502(define-public luamake
503 (package
504 (name "luamake")
505 (version "1.7")
506 (source (origin
507 (method git-fetch)
508 (uri (git-reference
509 (url "https://github.com/actboy168/luamake")
510 (commit (string-append "v" version))))
511 (file-name (git-file-name name version))
512 (sha256
513 (base32
514 "075sp8dpcb81kwrpp843f1y00kvaqan09np6spf6b72z5dhf6aiw"))))
515 (build-system gnu-build-system)
516 (arguments
517 (list
518 #:phases
519 #~(modify-phases %standard-phases
520 (add-after 'unpack 'copy-lua-bee-sources
521 (lambda* (#:key native-inputs inputs #:allow-other-keys)
522 (copy-recursively (dirname
523 (search-input-directory
524 (or native-inputs inputs) "bee"))
525 "bee.lua")))
526 (add-after 'unpack 'patch-commands
527 (lambda* (#:key inputs #:allow-other-keys)
528 (substitute* "scripts/action.lua"
529 (("\"ninja\"")
530 (format #f "~s" (search-input-file inputs "bin/ninja"))))))
531 (delete 'configure)
532 (replace 'build
533 (lambda* (#:key parallel-build? #:allow-other-keys)
534 (invoke "compile/build.sh" "-j"
535 (if parallel-build?
536 (number->string (parallel-job-count))
537 "1")
538 "notest" "-v")))
539 (replace 'check
540 (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
541 (when tests?
542 (invoke "compile/build.sh" "-j"
543 (if parallel-tests?
544 (number->string (parallel-job-count))
545 "1")
546 "test" "-v"))))
547 (replace 'install
548 (lambda _
549 (let ((bin (string-append #$output "/bin"))
550 (lib (string-append #$output "/lib/luamake")))
551 (install-file "luamake" lib)
552 (install-file "main.lua" lib)
553 (copy-recursively "scripts"
554 (string-append lib "/scripts"))
555 (copy-recursively "tools"
556 (string-append lib "/tools"))
557 (mkdir bin)
558 (symlink (string-append lib "/luamake")
559 (string-append bin "/luamake"))))))))
560 (native-inputs (list (package-source lua-bee)
561 ninja))
562 (inputs (list ninja))
563 (home-page "https://github.com/actboy168/luamake")
564 (synopsis "Make-inspired configuration and build system")
565 (description "Luamake is a platform independent configuration and
566build system that uses the standard Lua command-line interpreter.")
567 (license license:expat)))
568
569(define-public lua-language-server
570 (package
571 (name "lua-language-server")
572 (version "3.17.1")
573 (source (origin
574 (method git-fetch)
575 (uri (git-reference
576 (url "https://github.com/LuaLS/lua-language-server")
577 (commit version)
578 ;; There are quite a few bundled Lua libraries under the
579 ;; '3rd' and 'meta/3rd' directories; most are currently
580 ;; not packaged in Guix, and they all track exact
581 ;; commits, so it would be annoying to maintain them as
582 ;; separate origins (on top of having to patch the build
583 ;; system to unbundle them).
584 (recursive? #t)))
585 (file-name (git-file-name name version))
586 (sha256
587 (base32
588 "1fjhh02iph0mplqrgxfrdqfydrppksjsgw3lg6k8y5w6g24l3z1m"))))
589 (build-system gnu-build-system)
590 (arguments
591 (list
592 ;; The test suite currently fails with luamake apparently attempting to
593 ;; find the bee.so shared object (see:
594 ;; <https://github.com/LuaLS/lua-language-server/issues/3325>).
595 #:tests? #f
596 #:phases
597 #~(modify-phases %standard-phases
598 (delete 'configure)
599 (replace 'build
600 (lambda* (#:key parallel-build? #:allow-other-keys)
601 (invoke "luamake"
602 "-notest"
603 "-j" (if parallel-build?
604 (number->string (parallel-job-count))
605 "1")
606 "-v")))
607 (replace 'check
608 (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
609 (when tests?
610 (invoke "luamake"
611 "-j" (if parallel-tests?
612 (number->string (parallel-job-count))
613 "1")
614 "test" "-v"))))
615 (replace 'install
616 ;; This is inspired by the package definition in Slackware.
617 (lambda* (#:key inputs #:allow-other-keys)
618 (let* ((bin (string-append #$output "/bin"))
619 (lib (string-append #$output
620 "/libexec/lua-language-server"))
621 (lib/bin (string-append lib "/bin")))
622 ;; XXX: The binary expects some odd layout to find its resources,
623 ;; hence the bin subdirectory under libexec.
624 (mkdir-p lib)
625 (for-each (lambda (x)
626 (copy-recursively x (string-append lib "/" x)))
627 (list "bin"
628 "debugger.lua"
629 "locale"
630 "main.lua"
631 "meta"
632 "script"))
633 ;; Create a custom wrapper, adjusted to log elsewhere than in
634 ;; its read-only location under the store.
635 (mkdir bin)
636 (call-with-output-file (string-append bin "/lua-language-server")
637 (lambda (p)
638 (format p "#!~a
639exec ~a --logpath=\"/tmp/runtime-$USER/lua-language-server/log\" \
640--metapath=\"/tmp/runtime-$USER/lua-language-server/meta\" \"$@\""
641 (search-input-file inputs "bin/sh")
642 (string-append lib/bin
643 "/lua-language-server"))))
644 (chmod (string-append bin "/lua-language-server") #o755)))))))
645 (native-inputs (list luamake))
646 (inputs (list bash-minimal)) ;for the wrapper
647 (home-page "https://github.com/LuaLS/lua-language-server")
648 (synopsis "Lua language server")
649 (description "The Lua language server provides various language
650 features for Lua to make development easier and faster, including:
651@itemize
652@item Support for all recent versions of Lua, including LuaJIT
653@item Jump to definition
654@item Dynamic type checking
655@item Find references
656@item Diagnostics/Warnings
657@item Syntax checking
658@item Element renaming
659@item Hover to view details on variables, functions, and more
660@item Auto-completion
661@item Support for libraries
662@item Code formatting
663@item Spell checking
664@item Custom plugins
665@item Documentation generation
666@end itemize")
667 (license license:expat)))
668
669(define (make-lua-ossl name lua)
670 (package
671 (name name)
672 (version "20220711")
673 (source (origin
674 (method git-fetch)
675 (uri (git-reference
676 (url "https://github.com/wahern/luaossl")
677 (commit (string-append "rel-" version))))
678 (file-name (git-file-name name version))
679 (sha256
680 (base32
681 "1a9pgmc6fbhgh1m9ksz9fq057yzz46npqgakcsy9vngg47xacfdb"))))
682 (build-system gnu-build-system)
683 (arguments
684 (list
685 #:make-flags
686 #~(let ((lua-api-version #$(version-major+minor (package-version lua))))
687 (list (string-append "CC=" #$(cc-for-target))
688 "CFLAGS='-D HAVE_SYS_SYSCTL_H=0'" ; sys/sysctl.h is deprecated
689 (string-append "prefix=" #$output)
690 (string-append "LUA_APIS=" lua-api-version)))
691 #:phases
692 #~(modify-phases %standard-phases
693 (delete 'configure)
694 (delete 'check)
695 (add-after 'install 'check
696 (lambda _
697 (let ((lua-version #$(version-major+minor (package-version lua))))
698 (setenv "LUA_CPATH"
699 (string-append #$output "/lib/lua/" lua-version "/?.so;;"))
700 (setenv "LUA_PATH"
701 (string-append #$output "/share/lua/" lua-version "/?.lua;;"))
702 (with-directory-excursion "regress"
703 (for-each (lambda (f)
704 (unless (member f (list
705 ;; This test is for luajit only
706 "./104-interposition-discarded.lua"
707 ;; needs cqueues, which needs ossl
708 "./148-custom-extensions.lua"))
709 (invoke "lua" f)))
710 (find-files "." "^[0-9].*\\.lua$")))))))))
711 (inputs
712 (list lua openssl))
713 (home-page "https://25thandclement.com/~william/projects/luaossl.html")
714 (synopsis "OpenSSL bindings for Lua")
715 (description "The luaossl extension module for Lua provides comprehensive,
716low-level bindings to the OpenSSL library, including support for certificate
717and key management, key generation, signature verification, and deep bindings
718to the distinguished name, alternative name, and X.509v3 extension interfaces.
719It also binds OpenSSL's bignum, message digest, HMAC, cipher, and CSPRNG
720interfaces.")
721 (license license:expat)))
722
723(define-public lua-ossl
724 (make-lua-ossl "lua-ossl" lua))
725
726(define-public lua5.1-ossl
727 (make-lua-ossl "lua5.1-ossl" lua-5.1))
728
729(define-public lua5.2-ossl
730 (make-lua-ossl "lua5.2-ossl" lua-5.2))
731
732(define (make-lua-sec name lua)
733 (package
734 (name name)
735 (version "0.9")
736 (source (origin
737 (method git-fetch)
738 (uri (git-reference
739 (url "https://github.com/brunoos/luasec")
740 (commit (string-append "v" version))))
741 (file-name (git-file-name name version))
742 (sha256
743 (base32
744 "0ssncgkggyr8i3z6zbvgrgsqj2q8676rnsikhpfwnk9n7sx4gwbl"))))
745 (build-system gnu-build-system)
746 (arguments
747 `(#:make-flags
748 (let ((out (assoc-ref %outputs "out"))
749 (lua-version ,(version-major+minor (package-version lua))))
750 (list "linux"
751 ,(string-append "CC=" (cc-for-target))
752 "LD=gcc"
753 (string-append "LUAPATH=" out "/share/lua/" lua-version)
754 (string-append "LUACPATH=" out "/lib/lua/" lua-version)))
755 #:tests? #f ; no tests included
756 #:phases
757 (modify-phases %standard-phases
758 (delete 'configure))))
759 (inputs
760 (list lua openssl))
761 (propagated-inputs
762 `(("lua-socket"
763 ,(make-lua-socket
764 (format #f "lua~a-socket"
765 (version-major+minor (package-version lua))) lua))))
766 (home-page "https://github.com/brunoos/luasec/wiki")
767 (synopsis "OpenSSL bindings for Lua")
768 (description "LuaSec is a binding for OpenSSL library to provide TLS/SSL
769communication. It takes an already established TCP connection and creates a
770secure session between the peers.")
771 (license license:expat)))
772
773(define-public lua5.1-sec
774 (make-lua-sec "lua5.1-sec" lua-5.1))
775
776(define-public lua5.2-sec
777 (make-lua-sec "lua5.2-sec" lua-5.2))
778
779(define (make-lua-cqueues name lua lua-ossl)
780 (package
781 (name name)
782 (version "20200726")
783 (source (origin
784 (method git-fetch)
785 (uri (git-reference
786 (url "https://github.com/wahern/cqueues")
787 (commit (string-append "rel-" version))))
788 (file-name (git-file-name name version))
789 (sha256
790 (base32
791 "17gwqndlga6gnishgs6wk8cvgwzanddr42yikkg2xd4nanhcg8z9"))))
792 (build-system gnu-build-system)
793 (arguments
794 (list
795 #:modules '((guix build gnu-build-system)
796 (guix build utils)
797 (ice-9 string-fun))
798 #:make-flags
799 #~(let ((lua-api-version #$(version-major+minor (package-version lua))))
800 (list (string-append "CC=" #$(cc-for-target))
801 (string-append "LUA_APIS=" lua-api-version)))
802 #:phases
803 #~(modify-phases %standard-phases
804 (delete 'configure)
805 (delete 'check)
806 (replace 'install
807 (lambda* (#:key make-flags #:allow-other-keys)
808 (apply invoke "make" "install"
809 (append make-flags
810 (list (string-append "DESTDIR=" #$output)
811 "prefix=")))))
812 (add-after 'install 'check
813 (lambda* (#:key make-flags #:allow-other-keys)
814 (let*
815 ((lua-version #$(version-major+minor (package-version lua)))
816 (env-suffix (if (equal? lua-version "5.1")
817 ""
818 (string-append
819 "_"
820 (string-replace-substring lua-version "." "_"))))
821
822 (lua-cpath (lambda (p)
823 (string-append p "/lib/lua/" lua-version "/?.so")))
824 (lua-path (lambda (p)
825 (string-append p "/share/lua/" lua-version "/?.lua"))))
826 ;; The test suite sets Lua-version-specific search-path variables
827 ;; when available so we must do the same, as these take
828 ;; precedence over the generic "LUA_CPATH" and "LUA_PATH"
829 (setenv (string-append "LUA_CPATH" env-suffix)
830 (string-append
831 (string-join (map lua-cpath (list #$output #$lua-ossl)) ";")
832 ";;"))
833 (setenv (string-append "LUA_PATH" env-suffix)
834 (string-append
835 (string-join (map lua-path (list #$output #$lua-ossl)) ";")
836 ";;"))
837
838 ;; Skip regression tests we expect to fail
839 (with-directory-excursion "regress"
840 (for-each (lambda (f)
841 (rename-file f (string-append f ".skip")))
842 (append
843 ;; Regression tests that require network
844 ;; connectivity
845 '("22-client-dtls.lua"
846 "30-starttls-completion.lua"
847 "62-noname.lua"
848 "153-dns-resolvers.lua")
849
850 ;; Regression tests that require LuaJIT
851 '("44-resolvers-gc.lua"
852 "51-join-defunct-thread.lua"
853 ;; These both need the ffi module.
854 "73-starttls-buffering.lua"
855 "87-alpn-disappears.lua")
856
857 ;; Regression tests that require Lua 5.3
858 (if (not (equal? lua-version "5.3"))
859 '("152-thread-integer-passing.lua")
860 '()))))
861
862 (apply invoke "make" "check" make-flags)))))))
863 (native-inputs
864 (list m4))
865 (inputs
866 (list lua openssl))
867 (propagated-inputs
868 (list lua-ossl))
869 (home-page "https://25thandclement.com/~william/projects/cqueues.html")
870 (synopsis "Event loop for Lua using continuation queues")
871 (description "The cqueues extension module for Lua implements an event loop
872that operates through the yielding and resumption of coroutines. It is designed
873to be non-intrusive, composable, and embeddable within existing applications.")
874 (license license:expat)))
875
876(define-public lua-cqueues
877 (make-lua-cqueues "lua-cqueues" lua lua-ossl))
878
879(define-public lua5.1-cqueues
880 (make-lua-cqueues "lua5.1-cqueues" lua-5.1 lua5.1-ossl))
881
882(define-public lua5.2-cqueues
883 (make-lua-cqueues "lua5.2-cqueues" lua-5.2 lua5.2-ossl))
884
885(define-public lua-penlight
886 (package
887 (name "lua-penlight")
888 (version "1.7.0")
889 (source
890 (origin
891 (method git-fetch)
892 (uri (git-reference
893 (url "https://github.com/Tieske/Penlight")
894 (commit version)))
895 (file-name (git-file-name name version))
896 (sha256
897 (base32 "0qc2d1riyr4b5a0gnsmdw2lz5pw65s4ac60hc34w3mmk9l6yg6nl"))))
898 (build-system trivial-build-system)
899 (inputs
900 (list lua))
901 (propagated-inputs
902 (list lua-filesystem))
903 (arguments
904 `(#:modules ((guix build utils))
905 #:builder
906 (begin
907 (use-modules (guix build utils))
908 (let* ((source (assoc-ref %build-inputs "source"))
909 (lua-version ,(version-major+minor (package-version lua)))
910 (destination (string-append (assoc-ref %outputs "out")
911 "/share/lua/" lua-version)))
912 (mkdir-p destination)
913 (with-directory-excursion source
914 (copy-recursively "lua/" destination)))
915 #t)))
916 (home-page "http://tieske.github.io/Penlight/")
917 (synopsis "Collection of general purpose libraries for the Lua language")
918 (description "Penlight is a set of pure Lua libraries focusing on
919input data handling (such as reading configuration files), functional
920programming (such as map, reduce, placeholder expressions,etc), and OS
921path management. Much of the functionality is inspired by the Python
922standard libraries.")
923 (license license:expat)))
924
925(define-public lua-ldoc
926 (package
927 (name "lua-ldoc")
928 (version "1.4.6")
929 (source
930 (origin
931 (method git-fetch)
932 (uri (git-reference
933 (url "https://github.com/stevedonovan/LDoc")
934 (commit version)))
935 (file-name (git-file-name name version))
936 (sha256
937 (base32 "1h0cf7bp4am54r0j8lhjs2l1c7q5vz74ba0jvw9qdbaqimls46g8"))))
938 (build-system gnu-build-system)
939 (inputs
940 (list lua))
941 (propagated-inputs
942 (list lua-penlight))
943 (arguments
944 `(#:tests? #f ;tests must run after installation.
945 #:phases
946 (modify-phases %standard-phases
947 (add-after 'unpack 'fix-installation-directory
948 (lambda* (#:key outputs #:allow-other-keys)
949 (let ((out (assoc-ref outputs "out"))
950 (lua-version ,(version-major+minor (package-version lua))))
951 (substitute* "makefile"
952 (("LUA=.*") "#\n")
953 (("(LUA_PREFIX=).*" _ prefix)
954 (string-append prefix out "\n"))
955 (("(LUA_BINDIR=).*" _ prefix)
956 (string-append prefix out "/bin\n"))
957 (("(LUA_SHAREDIR=).*" _ prefix)
958 (string-append prefix out "/share/lua/" lua-version "\n"))))
959 #t))
960 (delete 'configure)
961 (add-before 'install 'create-bin-directory
962 (lambda* (#:key outputs #:allow-other-keys)
963 (mkdir-p (string-append (assoc-ref outputs "out") "/bin"))
964 #t)))))
965 (home-page "https://stevedonovan.github.io/ldoc/")
966 (synopsis "Lua documentation generator")
967 (description
968 "LDoc is a LuaDoc-compatible documentation generation system for
969Lua source code. It parses the declaration and documentation comments
970in a set of Lua source files and produces a set of XHTML pages
971describing the commented declarations and functions.")
972 (license license:expat)))
973
974(define (make-lua-lgi name lua)
975 (package
976 (name name)
977 (version "0.9.2")
978 (source
979 (origin
980 (method git-fetch)
981 (uri (git-reference
982 (url "https://github.com/pavouk/lgi")
983 (commit version)))
984 (file-name (git-file-name name version))
985 (patches (search-patches "lua-lgi-fix-ref.patch"
986 "lua-lgi-fix-pango.patch"))
987 (sha256
988 (base32 "03rbydnj411xpjvwsyvhwy4plm96481d7jax544mvk7apd8sd5jj"))))
989 (build-system gnu-build-system)
990 (arguments
991 `(#:make-flags
992 (list ,(string-append "CC=" (cc-for-target))
993 (string-append "PREFIX=" (assoc-ref %outputs "out")))
994 #:phases
995 (modify-phases %standard-phases
996 (delete 'configure) ; no configure script
997 (add-before 'build 'set-env
998 (lambda* (#:key inputs #:allow-other-keys)
999 ;; We need to load cairo dynamically.
1000 (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib")))
1001 (setenv "LD_LIBRARY_PATH" cairo)
1002 #t)))
1003 (add-before 'build 'set-lua-version
1004 (lambda _
1005 ;; Lua version and therefore install directories are hardcoded.
1006 (substitute* "./lgi/Makefile"
1007 (("LUA_VERSION=5.1")
1008 (format #f
1009 "LUA_VERSION=~a"
1010 ,(version-major+minor (package-version lua)))))
1011 #t))
1012 (add-before 'check 'skip-test-gtk
1013 (lambda _
1014 ;; FIXME: Skip GTK tests:
1015 ;; gtk3 - can't get it to run with the xorg-server config below
1016 ;; and some non-gtk tests will also fail
1017 ;; gtk2 - lots of functions aren't implemented
1018 ;; We choose gtk2 as the lesser evil and simply skip the test.
1019 ;; Currently, awesome is the only package that uses lua-lgi but
1020 ;; it doesn't need or interact with GTK using lua-lgi.
1021 (substitute* "./tests/test.lua"
1022 (("'gtk.lua',") "-- 'gtk.lua',"))
1023 #t))
1024 (add-before 'check 'start-xserver-instance
1025 (lambda* (#:key inputs #:allow-other-keys)
1026 ;; There must be a running X server during tests.
1027 (system (format #f "~a/bin/Xvfb :1 &"
1028 (assoc-ref inputs "xorg-server")))
1029 (setenv "DISPLAY" ":1")
1030 #t)))))
1031 (native-inputs
1032 (list dbus ;tests use 'dbus-run-session'
1033 pkg-config))
1034 (inputs
1035 `(("cairo" ,cairo)
1036 ("glib" ,glib)
1037 ("gobject-introspection" ,gobject-introspection)
1038 ("gtk" ,gtk+-2)
1039 ("libffi" ,libffi)
1040 ("lua" ,lua)
1041 ("pango" ,pango)
1042 ("xorg-server" ,xorg-server)))
1043 (home-page "https://github.com/pavouk/lgi/")
1044 (synopsis "Lua bridge to GObject based libraries")
1045 (description
1046 "LGI is gobject-introspection based dynamic Lua binding to GObject based
1047libraries. It allows using GObject-based libraries directly from Lua.
1048Notable examples are GTK+, GStreamer and Webkit.")
1049 (license license:expat)))
1050
1051(define-public lua-lgi
1052 (make-lua-lgi "lua-lgi" lua))
1053
1054(define-public lua5.1-lgi
1055 (make-lua-lgi "lua5.1-lgi" lua-5.1))
1056
1057(define-public lua5.2-lgi
1058 (make-lua-lgi "lua5.2-lgi" lua-5.2))
1059
1060(define (make-lua-lpeg name lua)
1061 (package
1062 (name name)
1063 (version "1.0.2")
1064 (source (origin
1065 (method url-fetch)
1066 (uri (string-append "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-"
1067 version ".tar.gz"))
1068 (sha256
1069 (base32 "1zjzl7acvcdavmcg5l7wi12jd4rh95q9pl5aiww7hv0v0mv6bmj8"))))
1070 (build-system gnu-build-system)
1071 (arguments
1072 `(#:phases
1073 (modify-phases %standard-phases
1074 (delete 'configure)
1075 ;; `make install` isn't available, so we have to do it manually
1076 (replace 'install
1077 (lambda* (#:key outputs #:allow-other-keys)
1078 (let ((out (assoc-ref outputs "out"))
1079 (lua-version ,(version-major+minor (package-version lua))))
1080 (install-file "lpeg.so"
1081 (string-append out "/lib/lua/" lua-version))
1082 (install-file "re.lua"
1083 (string-append out "/share/lua/" lua-version))
1084 #t))))
1085 #:test-target "test"))
1086 (inputs (list lua))
1087 (synopsis "Pattern-matching library for Lua")
1088 (description
1089 "LPeg is a pattern-matching library for Lua, based on Parsing Expression
1090Grammars (PEGs).")
1091 (home-page "https://www.inf.puc-rio.br/~roberto/lpeg")
1092 (license license:expat)))
1093
1094(define-public lua-lpeg
1095 (make-lua-lpeg "lua-lpeg" lua))
1096
1097(define-public lua5.1-lpeg
1098 (make-lua-lpeg "lua5.1-lpeg" lua-5.1))
1099
1100(define-public lua5.2-lpeg
1101 (make-lua-lpeg "lua5.2-lpeg" lua-5.2))
1102
1103(define (make-lua-luv name lua)
1104 (package
1105 (name name)
1106 (version "1.43.0-0")
1107 (source (origin
1108 ;; The release tarball includes the sources of libuv but does
1109 ;; not include the pkg-config files.
1110 (method git-fetch)
1111 (uri (git-reference
1112 (url "https://github.com/luvit/luv")
1113 (commit version)))
1114 (file-name (git-file-name name version))
1115 (sha256
1116 (base32
1117 "1yzi4bm845vl84wyv2qw4z1n1v285lgwm681swmp84brfy2s7czp"))))
1118 (build-system cmake-build-system)
1119 (arguments
1120 (list #:tests? #f ; there are none
1121 #:configure-flags
1122 #~'("-DWITH_LUA_ENGINE=Lua"
1123 "-DWITH_SHARED_LIBUV=On"
1124 "-DBUILD_MODULE=Off"
1125 "-DBUILD_SHARED_LIBS=On"
1126 "-DLUA_BUILD_TYPE=System")
1127 #:phases
1128 #~(modify-phases %standard-phases
1129 (add-after 'unpack 'copy-lua-compat
1130 (lambda* _
1131 (copy-recursively #+(this-package-native-input "lua-compat")
1132 "lua-compat")
1133 (setenv "CPATH"
1134 (string-append (getcwd) "/lua-compat/c-api:"
1135 (or (getenv "CPATH") "")))
1136 #t)))))
1137 (inputs
1138 (list lua libuv-for-luv))
1139 (native-inputs
1140 `(("lua-compat"
1141 ,(origin
1142 (method git-fetch)
1143 (uri (git-reference
1144 (url "https://github.com/keplerproject/lua-compat-5.3")
1145 (commit "v0.10")))
1146 (file-name "lua-compat-5.3-checkout")
1147 (sha256
1148 (base32
1149 "1caxn228gx48g6kymp9w7kczgxcg0v0cd5ixsx8viybzkd60dcn4"))))))
1150 (home-page "https://github.com/luvit/luv/")
1151 (synopsis "Libuv bindings for Lua")
1152 (description
1153 "This library makes libuv available to Lua scripts.")
1154 (license license:asl2.0)))
1155
1156(define-public lua-luv
1157 (make-lua-luv "lua-luv" lua))
1158
1159(define-public lua5.1-luv
1160 (make-lua-luv "lua5.1-luv" lua-5.1))
1161
1162(define-public lua5.2-luv
1163 (make-lua-luv "lua5.2-luv" lua-5.2))
1164
1165;; Lua 5.3 is not supported.
1166(define (make-lua-bitop name lua)
1167 (package
1168 (name name)
1169 (version "1.0.2")
1170 (source (origin
1171 (method url-fetch)
1172 (uri (string-append "http://bitop.luajit.org/download/"
1173 "LuaBitOp-" version ".tar.gz"))
1174 (sha256
1175 (base32
1176 "16fffbrgfcw40kskh2bn9q7m3gajffwd2f35rafynlnd7llwj1qj"))))
1177 (build-system gnu-build-system)
1178 (arguments
1179 `(#:test-target "test"
1180 #:make-flags
1181 (list "INSTALL=install -pD"
1182 (string-append "INSTALLPATH=printf "
1183 (assoc-ref %outputs "out")
1184 "/lib/lua/"
1185 ,(version-major+minor (package-version lua))
1186 "/bit/bit.so"))
1187 #:phases
1188 (modify-phases %standard-phases
1189 (delete 'configure))))
1190 (inputs (list lua))
1191 (home-page "https://bitop.luajit.org/index.html")
1192 (synopsis "Bitwise operations on numbers for Lua")
1193 (description
1194 "Lua BitOp is a C extension module for Lua which adds bitwise operations
1195on numbers.")
1196 (license license:expat)))
1197
1198(define-public lua5.2-bitop
1199 (make-lua-bitop "lua5.2-bitop" lua-5.2))
1200
1201(define-public lua5.1-bitop
1202 (make-lua-bitop "lua5.1-bitop" lua-5.1))
1203
1204(define-public lutok
1205 (package
1206 (name "lutok")
1207 (version "0.6.2")
1208 (source (origin
1209 (method git-fetch)
1210 (uri (git-reference
1211 (url "https://github.com/freebsd/lutok")
1212 (commit (string-append name "-" version))))
1213 (file-name (git-file-name name version))
1214 (sha256
1215 (base32
1216 "1hk8shp1vkxa09qxaafcfrgc9098cr75n5zc192bv8yjyvz0hvc3"))))
1217 (build-system gnu-build-system)
1218 ;; Disable the test suite to avoid a circular dependency on kyua.
1219 (arguments (list #:tests? #f))
1220 (native-inputs (list autoconf automake libtool pkg-config))
1221 (inputs (list atf))
1222 (propagated-inputs (list lua-5.4)) ;included in c_gate.hpp
1223 (home-page "https://github.com/freebsd/lutok")
1224 (synopsis "Lightweight C++ API for Lua")
1225 (description "Lutok is a lightweight C++ API library for Lua.
1226
1227Lutok provides thin C++ wrappers around the Lua C API to ease the interaction
1228between C++ and Lua. These wrappers make intensive use of @acronym{RAII,
1229Resource Acquisition is Initialization} to prevent resource leakage, expose
1230C++-friendly data types, report errors by means of exceptions and ensure that
1231the Lua stack is always left untouched in the face of errors. The library
1232also provides a small subset of miscellaneous utility functions built on top
1233of the wrappers.
1234
1235Lutok focuses on providing a clean and safe C++ interface; the drawback is
1236that it is not suitable for performance-critical environments. In order to
1237implement error-safe C++ wrappers on top of a Lua C binary library, Lutok adds
1238several layers or abstraction and error checking that go against the original
1239spirit of the Lua C API and thus degrade performance.")
1240 (license license:bsd-3)))
1241
1242(define-public selene
1243 (package
1244 (name "selene")
1245 (version "2017.08.25")
1246 (source (origin
1247 (method git-fetch)
1248 (uri (git-reference
1249 (url "https://github.com/jeremyong/Selene")
1250 ;; The release is quite old.
1251 (commit "ffe1ade2568d4cff5894552be8f43e63e379a4c9")))
1252 (file-name "Selene")
1253 (sha256
1254 (base32
1255 "1axrgv3rxxdsaf807lwvklfzicn6x6gpf35narllrnz9lg6hn508"))))
1256 (build-system cmake-build-system)
1257 (arguments
1258 `(#:configure-flags
1259 ;; lua pc file in CMakeLists.txt is lua5.3.pc
1260 '("-DLUA_PC_CFG=lua;lua-5.3;lua-5.1")
1261 #:phases
1262 ;; This is a header only library
1263 (modify-phases %standard-phases
1264 (delete 'build)
1265 (replace 'install
1266 (lambda* (#:key inputs outputs #:allow-other-keys)
1267 (let* ((output (assoc-ref outputs "out"))
1268 (source (assoc-ref inputs "source"))
1269 (includedir (string-append output "/include")))
1270 (copy-recursively
1271 (string-append source "/include")
1272 includedir))
1273 #t))
1274 ;; The path of test files are hard coded.
1275 (replace 'check
1276 (lambda* (#:key inputs outputs #:allow-other-keys)
1277 (let* ((output (assoc-ref outputs "out"))
1278 (source (assoc-ref inputs "source"))
1279 (builddir (getcwd))
1280 (testdir (string-append builddir "/test")))
1281 (copy-recursively (string-append source "/test") testdir)
1282 (invoke "make")
1283 (mkdir-p "runner")
1284 (copy-file "./test_runner" "./runner/test_runner")
1285 (chdir "./runner")
1286 (invoke "./test_runner")))))))
1287 (native-inputs
1288 (list lua pkg-config))
1289 (home-page "https://github.com/jeremyong/Selene")
1290 (synopsis "Lua C++11 bindings")
1291 (description
1292 "Selene is a simple C++11 header-only library enabling seamless
1293 interoperability between C++ and Lua programming language.")
1294 (license license:zlib)))
1295
1296(define-public lua-resty-core
1297 (package
1298 (name "lua-resty-core")
1299 (version "0.1.18")
1300 (source (origin
1301 (method git-fetch)
1302 (uri (git-reference
1303 (url "https://github.com/openresty/lua-resty-core")
1304 (commit (string-append "v" version))))
1305 (file-name (git-file-name name version))
1306 (sha256
1307 (base32
1308 "1c58hykwpg5zqbyhrcb703pzwbkih409v3bh2gady6z2kj9q32dw"))))
1309 (build-system trivial-build-system)
1310 (arguments
1311 `(#:modules ((guix build utils))
1312 #:builder
1313 (begin
1314 (use-modules (guix build utils))
1315 (let* ((luajit-major+minor ,(version-major+minor (package-version lua)))
1316 (package-lua-resty (lambda (input output)
1317 (mkdir-p (string-append output "/lib/lua"))
1318 (copy-recursively (string-append input "/lib/resty")
1319 (string-append output "/lib/lua/resty"))
1320 (copy-recursively (string-append input "/lib/ngx")
1321 (string-append output "/lib/ngx"))
1322 (symlink (string-append output "/lib/lua/resty")
1323 (string-append output "/lib/resty")))))
1324 (package-lua-resty (assoc-ref %build-inputs "source")
1325 (assoc-ref %outputs "out")))
1326 #t)))
1327 (home-page "https://github.com/openresty/lua-resty-core")
1328 (synopsis "Lua API for NGINX")
1329 (description "This package provides a FFI-based Lua API for
1330@code{ngx_http_lua_module} or @code{ngx_stream_lua_module}.")
1331 (license license:bsd-2)))
1332
1333(define-public lua-resty-lrucache
1334 (package
1335 (name "lua-resty-lrucache")
1336 (version "0.10")
1337 (source (origin
1338 (method git-fetch)
1339 (uri (git-reference
1340 (url "https://github.com/openresty/lua-resty-lrucache")
1341 (commit (string-append "v" version))))
1342 (file-name (git-file-name name version))
1343 (sha256
1344 (base32
1345 "1bsc54v1rvxmkwg7a2c01p192lvw5g576f589is8fy1m1c6v4ap8"))))
1346 (build-system trivial-build-system)
1347 (arguments
1348 `(#:modules ((guix build utils))
1349 #:builder
1350 (begin
1351 (use-modules (guix build utils))
1352 (let* ((luajit-major+minor ,(version-major+minor (package-version lua)))
1353 (package-lua-resty (lambda (input output)
1354 (mkdir-p (string-append output "/lib/lua/" luajit-major+minor))
1355 (copy-recursively (string-append input "/lib/resty")
1356 (string-append output "/lib/lua/" luajit-major+minor "/resty"))
1357 (symlink (string-append output "/lib/lua/" luajit-major+minor "/resty")
1358 (string-append output "/lib/resty")))))
1359 (package-lua-resty (assoc-ref %build-inputs "source")
1360 (assoc-ref %outputs "out")))
1361 #t)))
1362 (home-page "https://github.com/openresty/lua-resty-lrucache")
1363 (synopsis "Lua LRU cache based on the LuaJIT FFI")
1364 (description
1365 "This package provides Lua LRU cache based on the LuaJIT FFI.")
1366 (license license:bsd-2)))
1367
1368(define-public lua-resty-signal
1369 (package
1370 (name "lua-resty-signal")
1371 (version "0.02")
1372 (source (origin
1373 (method git-fetch)
1374 (uri (git-reference
1375 (url "https://github.com/openresty/lua-resty-signal")
1376 (commit (string-append "v" version))))
1377 (file-name (git-file-name name version))
1378 (sha256
1379 (base32
1380 "13y1pqn45y49mhqwywasfdsid46d0c33yi6mrnracbnmvyxz1cif"))))
1381 (build-system gnu-build-system)
1382 (arguments
1383 `(#:tests? #f ;TODO: Run the test suite.
1384 #:make-flags (list ,(string-append "CC=" (cc-for-target))
1385 (string-append "PREFIX=" %output))
1386 #:phases
1387 (modify-phases %standard-phases
1388 (delete 'configure)
1389 (add-after 'install 'install-lua
1390 (lambda* (#:key inputs outputs #:allow-other-keys)
1391 (use-modules (guix build utils))
1392 (let* ((luajit-major+minor ,(version-major+minor (package-version lua)))
1393 (package-lua-resty (lambda (input output)
1394 (mkdir-p (string-append output "/lib/lua/" luajit-major+minor))
1395 (copy-recursively (string-append input "/lib/resty")
1396 (string-append output "/lib/lua/" luajit-major+minor "/resty"))
1397 (symlink (string-append output "/lib/lua/" luajit-major+minor "/resty")
1398 (string-append output "/lib/resty")))))
1399 (package-lua-resty (assoc-ref inputs "source")
1400 (assoc-ref outputs "out")))
1401 #t)))))
1402 (home-page "https://github.com/openresty/lua-resty-signal")
1403 (synopsis "Lua library for killing or sending signals to Linux processes")
1404 (description "This package provides Lua library for killing or sending
1405signals to Linux processes.")
1406 (license license:bsd-3)))
1407
1408(define-public lua-tablepool
1409 (package
1410 (name "lua-tablepool")
1411 (version "0.01")
1412 (source (origin
1413 (method git-fetch)
1414 (uri (git-reference
1415 (url "https://github.com/openresty/lua-tablepool")
1416 (commit (string-append "v" version))))
1417 (file-name (git-file-name name version))
1418 (sha256
1419 (base32
1420 "03yjj3w6znvj6843prg84m0lkrn49l901f9hj9bgy3cj9s0awl6y"))))
1421 (build-system trivial-build-system)
1422 (arguments
1423 `(#:modules ((guix build utils))
1424 #:builder
1425 (begin
1426 (use-modules (guix build utils))
1427 (let* ((luajit-major+minor ,(version-major+minor (package-version lua)))
1428 (package-lua-resty (lambda (input output)
1429 (mkdir-p (string-append output "/lib/lua/" luajit-major+minor))
1430 (copy-recursively (string-append input "/lib")
1431 (string-append output "/lib")))))
1432 (package-lua-resty (assoc-ref %build-inputs "source")
1433 (assoc-ref %outputs "out")))
1434 #t)))
1435 (home-page "https://github.com/openresty/lua-tablepool")
1436 (synopsis "Lua table recycling pools for LuaJIT")
1437 (description "This package provides Lua table recycling pools for LuaJIT.")
1438 (license license:bsd-2)))
1439
1440(define-public lua-resty-shell
1441 (package
1442 (name "lua-resty-shell")
1443 (version "0.03")
1444 (source (origin
1445 (method git-fetch)
1446 (uri (git-reference
1447 (url "https://github.com/openresty/lua-resty-shell")
1448 (commit (string-append "v" version))))
1449 (file-name (git-file-name name version))
1450 (sha256
1451 (base32
1452 "1s6g04ip4hr97r2pd8ry3alq063604s9a3l0hn9nsidh81ps4dp7"))))
1453 (build-system trivial-build-system)
1454 (arguments
1455 `(#:modules ((guix build utils))
1456 #:builder
1457 (begin
1458 (use-modules (guix build utils))
1459 (let* ((luajit-major+minor ,(version-major+minor (package-version lua)))
1460 (package-lua-resty (lambda (input output)
1461 (mkdir-p (string-append output "/lib/lua/" luajit-major+minor))
1462 (copy-recursively (string-append input "/lib/resty")
1463 (string-append output "/lib/lua/" luajit-major+minor "/resty"))
1464 (symlink (string-append output "/lib/lua/" luajit-major+minor "/resty")
1465 (string-append output "/lib/resty")))))
1466 (package-lua-resty (assoc-ref %build-inputs "source")
1467 (assoc-ref %outputs "out")))
1468 #t)))
1469 (home-page "https://github.com/openresty/lua-resty-shell")
1470 (synopsis "Lua module for nonblocking system shell command executions")
1471 (description "This package provides Lua module for nonblocking system
1472shell command executions.")
1473 (license license:bsd-3)))
1474
1475(define-public (make-luarocks name lua)
1476 (package
1477 (name name)
1478 (version "3.9.2")
1479 (home-page "https://luarocks.org/")
1480 (source (origin
1481 (method url-fetch)
1482 (uri (string-append "https://luarocks.org/releases/luarocks-"
1483 version ".tar.gz"))
1484 (sha256
1485 (base32
1486 "1nsfp7cwqcxa8vmkcqkgi5wc0iax0j3gbdfd183kw81cq3nf99mw"))))
1487 (build-system gnu-build-system)
1488 (arguments
1489 `(#:tests? #f ;upstream has no tests
1490 #:phases
1491 (modify-phases %standard-phases
1492 (add-before 'build 'patch-bin-sh
1493 (lambda* (#:key inputs #:allow-other-keys)
1494 (substitute* '("GNUmakefile" "src/luarocks/fs/unix.lua"
1495 "src/luarocks/core/sysdetect.lua")
1496 (("/bin/sh")
1497 (search-input-file inputs "/bin/sh")))))
1498 (replace 'configure
1499 (lambda* (#:key outputs #:allow-other-keys)
1500 (let ((out (assoc-ref outputs "out")))
1501 (invoke "./configure"
1502 (string-append "--prefix=" out)))))
1503 (add-after 'install 'patch-unzip
1504 (lambda* (#:key inputs outputs #:allow-other-keys)
1505 (substitute*
1506 (string-append
1507 (assoc-ref outputs "out") "/etc/luarocks/config-"
1508 ,(substring (package-version lua) 0 3) ".lua") ;e.g. "5.2"
1509 (("variables = \\{")
1510 (string-append
1511 "variables = {\n"
1512 " AR = \"" (search-input-file inputs "/bin/ar") "\";\n"
1513 " BUNZIP2 = \"" (search-input-file inputs "/bin/bunzip2") "\";\n"
1514 " CC = \"" (search-input-file inputs "/bin/gcc") "\";\n"
1515 " CHMOD = \"" (search-input-file inputs "/bin/chmod") "\";\n"
1516 " CP = \"" (search-input-file inputs "/bin/cp") "\";\n"
1517 " CURL = \"" (search-input-file inputs "/bin/curl") "\";\n"
1518 " FIND = \"" (search-input-file inputs "/bin/find") "\";\n"
1519 " GIT = \"" (search-input-file inputs "/bin/git") "\";\n"
1520 " GPG = \"" (search-input-file inputs "/bin/gpg") "\";\n"
1521 " GUNZIP = \"" (search-input-file inputs "/bin/gunzip") "\";\n"
1522 " HG = \"" (search-input-file inputs "/bin/hg") "\";\n"
1523 " LD = \"" (search-input-file inputs "/bin/ld") "\";\n"
1524 " LS = \"" (search-input-file inputs "/bin/ls") "\";\n"
1525 " MAKE = \"" (search-input-file inputs "/bin/make") "\";\n"
1526 " MD5SUM = \"" (search-input-file inputs "/bin/md5sum") "\";\n"
1527 " MKDIR = \"" (search-input-file inputs "/bin/mkdir") "\";\n"
1528 " MKTEMP = \"" (search-input-file inputs "/bin/mktemp") "\";\n"
1529 " OPENSSL = \"" (search-input-file inputs "/bin/openssl") "\";\n"
1530 " PWD = \"" (search-input-file inputs "/bin/pwd") "\";\n"
1531 " RANLIB = \"" (search-input-file inputs "/bin/ranlib") "\";\n"
1532 " RM = \"" (search-input-file inputs "/bin/rm") "\";\n"
1533 " RMDIR = \"" (search-input-file inputs "/bin/rmdir") "\";\n"
1534 " RSYNC = \"" (search-input-file inputs "/bin/rsync") "\";\n"
1535 " SCP = \"" (search-input-file inputs "/bin/scp") "\";\n"
1536 " TAR = \"" (search-input-file inputs "/bin/tar") "\";\n"
1537 " TEST = \"" (search-input-file inputs "/bin/test") "\";\n"
1538 " TOUCH = \"" (search-input-file inputs "/bin/touch") "\";\n"
1539 " UNZIP = \"" (search-input-file inputs "/bin/unzip") " -n\";\n"
1540 " WGET = \"" (search-input-file inputs "/bin/wget") "\";\n"
1541 " ZIP = \"" (search-input-file inputs "/bin/zip") "\";"))))))))
1542 (inputs (list lua
1543 bash-minimal
1544 ;; Executables required by luarocks.
1545 binutils
1546 bzip2
1547 coreutils
1548 curl
1549 findutils
1550 gcc
1551 git
1552 gnupg
1553 gzip
1554 gnu-make
1555 mercurial
1556 openssh
1557 openssl
1558 rsync
1559 tar
1560 unzip
1561 wget
1562 zip))
1563 (native-inputs (list unzip))
1564 (synopsis "Package manager for Lua modules")
1565 (description
1566 "LuaRocks is the package manager for the Lua programming
1567language.
1568
1569It allows you to install Lua modules as self-contained packages called
1570@url{https://luarocks.org/en/Types_of_rocks, @emph{rocks}}, which also contain
1571version @url{https://luarocks.org/en/Dependencies, dependency} information.
1572This information can be used both during installation, so that when one rock
1573is requested all rocks it depends on are installed as well, and also
1574optionally at run time, so that when a module is required, the correct version
1575is loaded. LuaRocks supports both local and
1576@url{http://luarocks.org/en/Rocks_repositories, remote} repositories, and
1577multiple local rocks trees.")
1578 (license license:expat)))
1579
1580(define-public lua5.2-luarocks
1581 (make-luarocks "lua5.2-luarocks" lua-5.2))
1582
1583(define-public luarocks
1584 (make-luarocks "luarocks" lua))
1585
1586(define-public dkjson
1587 (package
1588 (name "dkjson")
1589 (version "2.8")
1590 (source
1591 (origin
1592 (method url-fetch)
1593 (uri (string-append "https://dkolf.de/dkjson-lua/dkjson-" version ".lua"))
1594 (sha256
1595 (base32 "0i3x9qzx2m25fpf1pd6j45imm1gpykpjxibbvfi9bcwgd1hg2fzb"))))
1596 (build-system trivial-build-system)
1597 (arguments
1598 (list
1599 #:modules '((guix build utils))
1600 #:builder
1601 #~(begin
1602 (use-modules (guix build utils))
1603 (let* ((luajit-major+minor
1604 #$(version-major+minor (package-version lua)))
1605 (lua-dir
1606 (string-append #$output "/share/lua/" luajit-major+minor)))
1607 (mkdir-p lua-dir)
1608 (copy-file #$source (string-append lua-dir "/dkjson.lua"))))))
1609 (inputs (list lua))
1610 (synopsis "JSON module for Lua")
1611 (description
1612 "dkjson is a lua module for processing json in lua. It can handle tasks
1613 like encoding or decoding JSON objects to and from lua tables.")
1614 (home-page "https://dkolf.de/dkjson-lua/")
1615 (license license:expat)))
1616
1617(define-public fennel
1618 (package
1619 (name "fennel")
1620 (version "1.6.0")
1621 (source (origin
1622 (method git-fetch)
1623 (uri (git-reference
1624 (url "https://git.sr.ht/~technomancy/fennel")
1625 (commit version)))
1626 (file-name (git-file-name name version))
1627 (sha256
1628 (base32
1629 "09gky2w8z83qqv0n9vx8jqsfldni14kjr6l7y5k44lq5i30i0fsv"))))
1630 (build-system gnu-build-system)
1631 (arguments
1632 (list #:make-flags #~(list (string-append "PREFIX="
1633 (assoc-ref %outputs "out")))
1634 #:test-target "test"
1635 #:phases #~(modify-phases %standard-phases
1636 (delete 'configure)
1637 (add-after 'build 'patch-fennel
1638 (lambda* (#:key inputs #:allow-other-keys)
1639 ;; Remove IRC CI build status reporting
1640 (delete-file "test/irc.lua")
1641 (substitute* "test/init.lua"
1642 ((",\\{hooks=\\{exit=dofile\\(\"test/irc.lua\"\\)\\}\\}")
1643 ""))
1644 (substitute* "fennel"
1645 (("/usr/bin/env .*lua")
1646 (search-input-file inputs "/bin/lua")))))
1647 (delete 'check)
1648 (add-after 'install 'check
1649 (assoc-ref %standard-phases
1650 'check)))))
1651 (inputs (list lua))
1652 (home-page "https://fennel-lang.org/")
1653 (synopsis "Lisp that compiles to Lua")
1654 (description
1655 "Fennel is a programming language that brings together the speed,
1656simplicity, and reach of Lua with the flexibility of a Lisp syntax and macro
1657system.")
1658 (license license:expat)))
1659
1660(define-public antifennel
1661 (package
1662 (version "0.2.0")
1663 (name "antifennel")
1664 (source
1665 (origin
1666 (method git-fetch)
1667 (uri (git-reference
1668 (url "https://git.sr.ht/~technomancy/antifennel")
1669 (commit version)))
1670 (sha256
1671 (base32 "1hd9h17q31b3gg88c657zq4han4air2ag55rrakbmcpy6n8acsqc"))
1672 (file-name (git-file-name name version))))
1673 (build-system gnu-build-system)
1674 (inputs (list luajit))
1675 (arguments
1676 (list
1677 #:phases #~(modify-phases %standard-phases
1678 (delete 'configure)
1679 ;; Tests pass after the fix introduced by the commit
1680 ;; ecd2169fcad1fa6616fdf6e6a8569f5b866601e5
1681 (delete 'check)
1682 (replace 'install
1683 (lambda _
1684 (install-file "antifennel"
1685 (string-append #$output "/bin")))))))
1686 (home-page "https://git.sr.ht/~technomancy/antifennel")
1687 (synopsis "Turn Lua code into Fennel code")
1688 (description
1689 "This package provides a way to turn Lua code into Fennel code.
1690This compiler does the opposite of what the Fennel compiler does.")
1691 (license license:expat)))
1692
1693(define-public fnlfmt
1694 (package
1695 (name "fnlfmt")
1696 (version "0.3.0")
1697 (source (origin
1698 (method git-fetch)
1699 (uri (git-reference
1700 (url "https://git.sr.ht/~technomancy/fnlfmt")
1701 (commit version)))
1702 (file-name (git-file-name name version))
1703 (sha256
1704 (base32
1705 "06gzw7f20yw4192kymr4karxw3ia3apjnjqpm6vxph87c67d1fa3"))
1706 (modules '((guix build utils)))
1707 (snippet
1708 #~(begin
1709 ;; Use input fennel instead of bundled fennel.
1710 (delete-file "fennel")
1711 (delete-file "fennel.lua")
1712 (substitute* "Makefile"
1713 (("./fennel") "fennel"))))))
1714 (build-system gnu-build-system)
1715 (arguments
1716 `(#:modules ((guix build gnu-build-system)
1717 (guix build utils)
1718 (ice-9 match))
1719 #:test-target "test"
1720 #:phases
1721 (modify-phases %standard-phases
1722 (delete 'configure)
1723 (add-before 'build 'patch-makefile
1724 (lambda* (#:key native-inputs inputs #:allow-other-keys)
1725 (substitute* "Makefile"
1726 ;; Patch lua shebang that gets inserted to fnlfmt.
1727 (("/usr/bin/env lua")
1728 (search-input-file (or native-inputs inputs) "/bin/lua")))))
1729 (replace 'install
1730 ;; There is no install target; manually install the output file.
1731 (lambda* (#:key outputs #:allow-other-keys)
1732 (let* ((out (assoc-ref outputs "out"))
1733 (bin (string-append out "/bin")))
1734 (for-each (lambda (file)
1735 (install-file file bin))
1736 (find-files "." "fnlfmt")))))
1737 (add-after 'install 'wrap
1738 (lambda* (#:key outputs #:allow-other-keys)
1739 (let* ((fnlfmt (assoc-ref outputs "out")))
1740 (wrap-program (string-append fnlfmt "/bin/fnlfmt")
1741 `("GUIX_LUA_PATH" ";" suffix (,(getenv "GUIX_LUA_PATH"))))
1742 #t))))))
1743 (inputs (list bash-minimal))
1744 (native-inputs (list lua fennel))
1745 (home-page "https://git.sr.ht/~technomancy/fnlfmt")
1746 (synopsis "Automatic formatting of Fennel code")
1747 (description
1748 "Fnlfmt is a tool for automatically formatting Fennel code in a consistent
1749way, following established lisp conventions.")
1750 (license license:lgpl3+)))
1751
1752(define-public fennel-ls
1753 (package
1754 (name "fennel-ls")
1755 (version "0.2.3")
1756 (source
1757 (origin
1758 (method git-fetch)
1759 (uri (git-reference
1760 (url "https://git.sr.ht/~xerool/fennel-ls")
1761 (commit version)))
1762 (file-name (git-file-name name version))
1763 (sha256
1764 (base32 "1fyyd6yg8xrb572hvk76yi9ga1ysrn6j40phf8ickav3s28i4k85"))))
1765 (build-system gnu-build-system)
1766 (arguments
1767 (list
1768 #:make-flags #~(list "VENDOR=false")
1769 #:tests? #f ; tests require additional dependencies
1770 #:phases
1771 #~(let ((luajit-major+minor
1772 #$(version-major+minor (package-version lua))))
1773 (modify-phases %standard-phases
1774 (delete 'configure)
1775 (add-before 'build 'rm-vendored-deps
1776 (lambda _
1777 (delete-file-recursively "fennel")
1778 (delete-file-recursively "deps/")))
1779 (replace 'install
1780 (lambda _
1781 (install-file "fennel-ls"
1782 (string-append #$output "/bin"))))
1783 (add-after 'install 'wrap
1784 (lambda _
1785 (wrap-program (string-append #$output "/bin/fennel-ls")
1786 `("GUIX_LUA_PATH" ";" prefix (,(getenv "GUIX_LUA_PATH"))))))))))
1787 (inputs (list bash-minimal lua fennel pandoc dkjson))
1788 (synopsis "Language server for Fennel")
1789 (description
1790 "Fennel Language Server is a language server for the Fennel programming
1791 language.")
1792 (home-page "https://git.sr.ht/~xerool/fennel-ls")
1793 (license license:expat)))