gnu: Add lua5.2-expat.
[jackhill/guix/guix.git] / gnu / packages / lua.scm
CommitLineData
712e6e68
CR
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
924cd631 3;;; Copyright © 2014 Raimon Grau <raimonster@gmail.com>
a2c03fb1 4;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
90f80bf2 5;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
864a9590 6;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
07cbe28e 7;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
03d8505f 8;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
7c97a063 9;;; Copyright © 2016, 2017, 2019 Clément Lassieur <clement@lassieur.org>
35cdc267 10;;; Copyright © 2016 José Miguel Sánchez García <jmi2k@openmailbox.org>
906f1b48 11;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
ce577655 12;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
712e6e68
CR
13;;;
14;;; This file is part of GNU Guix.
15;;;
16;;; GNU Guix is free software; you can redistribute it and/or modify it
17;;; under the terms of the GNU General Public License as published by
18;;; the Free Software Foundation; either version 3 of the License, or (at
19;;; your option) any later version.
20;;;
21;;; GNU Guix is distributed in the hope that it will be useful, but
22;;; WITHOUT ANY WARRANTY; without even the implied warranty of
23;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24;;; GNU General Public License for more details.
25;;;
26;;; You should have received a copy of the GNU General Public License
27;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
28
29(define-module (gnu packages lua)
572e433f 30 #:use-module ((guix licenses) #:prefix license:)
712e6e68
CR
31 #:use-module (guix packages)
32 #:use-module (guix download)
ce577655 33 #:use-module (guix git-download)
35cdc267 34 #:use-module (guix utils)
712e6e68 35 #:use-module (guix build-system gnu)
ce577655 36 #:use-module (guix build-system cmake)
712e6e68 37 #:use-module (gnu packages)
fd07a6a6 38 #:use-module (gnu packages readline)
d62dc2ae 39 #:use-module (gnu packages tls)
03d8505f 40 #:use-module (gnu packages xml)
41 #:use-module (gnu packages glib)
42 #:use-module (gnu packages libffi)
43 #:use-module (gnu packages pkg-config)
44 #:use-module (gnu packages xorg)
45 #:use-module (gnu packages gtk))
712e6e68
CR
46
47(define-public lua
48 (package
49 (name "lua")
6094a65e 50 (version "5.3.5")
712e6e68
CR
51 (source (origin
52 (method url-fetch)
6dbf1fec 53 (uri (string-append "https://www.lua.org/ftp/lua-"
712e6e68
CR
54 version ".tar.gz"))
55 (sha256
6094a65e 56 (base32 "1b2qn2rv96nmbm6zab4l877bd4zq7wpwm8drwjiy2ih4jqzysbhc"))
fc1adab1 57 (patches (search-patches "lua-pkgconfig.patch"
6dbf1fec 58 "lua-liblua-so.patch"))))
712e6e68 59 (build-system gnu-build-system)
b3546174 60 (inputs `(("readline" ,readline)))
712e6e68
CR
61 (arguments
62 '(#:modules ((guix build gnu-build-system)
07cbe28e
RW
63 (guix build utils)
64 (srfi srfi-1))
712e6e68 65 #:test-target "test"
07cbe28e 66 #:make-flags
c0d47cad 67 '("MYCFLAGS=-fPIC -DLUA_DL_DLOPEN"
07cbe28e 68 "linux")
a4349e7a
EF
69 #:phases
70 (modify-phases %standard-phases
71 (delete 'configure)
a4349e7a
EF
72 (replace 'install
73 (lambda* (#:key outputs #:allow-other-keys)
74 (let ((out (assoc-ref outputs "out")))
ffa95cf3
MW
75 (invoke "make" "install"
76 (string-append "INSTALL_TOP=" out)
77 (string-append "INSTALL_MAN=" out
78 "/share/man/man1"))))))))
6dbf1fec 79 (home-page "https://www.lua.org/")
9e771e3b 80 (synopsis "Embeddable scripting language")
712e6e68
CR
81 (description
82 "Lua is a powerful, fast, lightweight, embeddable scripting language. Lua
83combines simple procedural syntax with powerful data description constructs
35b9e423 84based on associative arrays and extensible semantics. Lua is dynamically typed,
712e6e68
CR
85runs by interpreting bytecode for a register-based virtual machine, and has
86automatic memory management with incremental garbage collection, making it ideal
87for configuration, scripting, and rapid prototyping.")
572e433f 88 (license license:x11)))
924cd631 89
6dbf1fec
MB
90(define-public lua-5.2
91 (package (inherit lua)
92 (version "5.2.4")
93 (source
94 (origin
95 (method url-fetch)
96 (uri (string-append "https://www.lua.org/ftp/lua-"
97 version ".tar.gz"))
98 (sha256
99 (base32 "0jwznq0l8qg9wh5grwg07b5cy3lzngvl5m2nl1ikp6vqssmf9qmr"))
100 (patches (search-patches "lua-pkgconfig.patch"
101 "lua-liblua-so.patch"))))))
102
01d3f19b
AE
103(define-public lua-5.1
104 (package (inherit lua)
105 (version "5.1.5")
106 (source (origin
107 (method url-fetch)
6dbf1fec 108 (uri (string-append "https://www.lua.org/ftp/lua-"
01d3f19b
AE
109 version ".tar.gz"))
110 (sha256
c361d075 111 (base32 "0cskd4w0g6rdm2q8q3i4n1h3j8kylhs3rq8mxwl9vwlmlxbgqh16"))
32fddd8e 112 (patches (search-patches "lua51-liblua-so.patch"
a287fafe
DM
113 "lua-CVE-2014-5461.patch"
114 "lua51-pkgconfig.patch"))))))
01d3f19b 115
924cd631
RG
116(define-public luajit
117 (package
118 (name "luajit")
906f1b48 119 (version "2.1.0-beta3")
924cd631
RG
120 (source (origin
121 (method url-fetch)
122 (uri (string-append "http://luajit.org/download/LuaJIT-"
123 version ".tar.gz"))
124 (sha256
906f1b48
TGR
125 (base32 "1hyrhpkwjqsv54hnnx4cl8vk44h9d6c9w0fz1jfjz00w255y7lhs"))
126 (patches (search-patches "luajit-no_ldconfig.patch"))))
924cd631
RG
127 (build-system gnu-build-system)
128 (arguments
a093bb69
TGR
129 `(#:tests? #f ; luajit is distributed without tests
130 #:phases
131 (modify-phases %standard-phases
132 (delete 'configure) ; no configure script
133 (add-after 'install 'create-luajit-symlink
134 (lambda* (#:key outputs #:allow-other-keys)
135 (let* ((out (assoc-ref outputs "out"))
136 (bin (string-append out "/bin")))
137 (with-directory-excursion bin
138 (symlink ,(string-append name "-" version)
139 ,name)
140 #t)))))
141 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
0386cdd3 142 (home-page "https://www.luajit.org/")
924cd631
RG
143 (synopsis "Just in time compiler for Lua programming language version 5.1")
144 (description
145 "LuaJIT is a Just-In-Time Compiler (JIT) for the Lua
146programming language. Lua is a powerful, dynamic and light-weight programming
147language. It may be embedded or used as a general-purpose, stand-alone
148language.")
572e433f 149 (license license:x11)))
fd07a6a6 150
7c97a063 151(define (make-lua-expat name lua)
fd07a6a6 152 (package
7c97a063 153 (name name)
fd07a6a6
RW
154 (version "1.3.0")
155 (source (origin
156 (method url-fetch)
157 (uri (string-append "https://matthewwild.co.uk/projects/"
158 "luaexpat/luaexpat-" version ".tar.gz"))
159 (sha256
160 (base32
161 "1hvxqngn0wf5642i5p3vcyhg3pmp102k63s9ry4jqyyqc1wkjq6h"))))
162 (build-system gnu-build-system)
163 (arguments
164 `(#:make-flags
7c97a063
CL
165 (let ((out (assoc-ref %outputs "out"))
166 (lua-version ,(version-major+minor (package-version lua))))
fd07a6a6 167 (list "CC=gcc"
7c97a063
CL
168 (string-append "LUA_LDIR=" out "/share/lua/" lua-version)
169 (string-append "LUA_CDIR=" out "/lib/lua/" lua-version)))
fd07a6a6
RW
170 #:phases
171 (modify-phases %standard-phases
172 (delete 'configure)
173 (replace 'check
174 (lambda _
175 (setenv "LUA_CPATH" "src/?.so;;")
176 (setenv "LUA_PATH" "src/?.lua;;")
12a16602
MW
177 (invoke "lua" "tests/test.lua")
178 (invoke "lua" "tests/test-lom.lua"))))))
fd07a6a6 179 (inputs
7c97a063 180 `(("lua" ,lua)
fd07a6a6
RW
181 ("expat" ,expat)))
182 (home-page "http://matthewwild.co.uk/projects/luaexpat/")
183 (synopsis "SAX XML parser based on the Expat library")
184 (description "LuaExpat is a SAX XML parser based on the Expat library.")
185 (license (package-license lua-5.1))))
c21b8261 186
7c97a063
CL
187(define-public lua5.1-expat
188 (make-lua-expat "lua5.1-expat" lua-5.1))
189
190(define-public lua5.2-expat
191 (make-lua-expat "lua5.2-expat" lua-5.2))
192
c21b8261
RW
193(define-public lua5.1-socket
194 (package
195 (name "lua5.1-socket")
50269c01 196 (version "3.0-rc1")
c21b8261
RW
197 (source (origin
198 (method url-fetch)
50269c01
CL
199 (uri (string-append
200 "https://github.com/diegonehab/luasocket/archive/v"
201 version ".tar.gz"))
a6888fe3 202 (file-name (string-append name "-" version ".tar.gz"))
c21b8261
RW
203 (sha256
204 (base32
50269c01 205 "0j8jx8bjicvp9khs26xjya8c495wrpb7parxfnabdqa5nnsxjrwb"))))
c21b8261
RW
206 (build-system gnu-build-system)
207 (arguments
208 `(#:make-flags
209 (let ((out (assoc-ref %outputs "out")))
50269c01 210 (list (string-append "INSTALL_TOP=" out)))
c21b8261
RW
211 #:phases
212 (modify-phases %standard-phases
213 (delete 'configure)
214 (replace 'check
215 (lambda _
216 (setenv "LUA_CPATH" (string-append "src/?.so." ,version ";;"))
217 (setenv "LUA_PATH" "src/?.lua;;")
218 (when (zero? (primitive-fork))
6e3fc9ba
MW
219 (invoke "lua" "test/testsrvr.lua"))
220 (invoke "lua" "test/testclnt.lua"))))))
c21b8261
RW
221 (inputs
222 `(("lua" ,lua-5.1)))
223 (home-page "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/")
224 (synopsis "Socket library for Lua")
225 (description "LuaSocket is a Lua extension library that is composed by two
226parts: a C core that provides support for the TCP and UDP transport layers,
227and a set of Lua modules that add support for functionality commonly needed by
228applications that deal with the Internet.
229
230Among the supported modules, the most commonly used implement the
231SMTP (sending e-mails), HTTP (WWW access) and FTP (uploading and downloading
232files) client protocols. These provide a very natural and generic interface
233to the functionality defined by each protocol. In addition, you will find
234that the MIME (common encodings), URL (anything you could possible want to do
235with one) and LTN12 (filters, sinks, sources and pumps) modules can be very
236handy.")
237 (license (package-license lua-5.1))))
182de8fc
RW
238
239(define-public lua5.1-filesystem
240 (package
241 (name "lua5.1-filesystem")
242 (version "1.6.3")
243 (source (origin
244 (method url-fetch)
245 (uri (string-append "https://github.com/keplerproject/"
246 "luafilesystem/archive/v_"
247 "1_6_3" ".tar.gz"))
248 (file-name (string-append name "-" version ".tar.gz"))
249 (sha256
250 (base32
251 "0s10ckxin0bysd6gaywqhxkpw3ybjhprr8m655b8cx3pxjwd49am"))))
252 (build-system gnu-build-system)
253 (arguments
254 `(#:make-flags
255 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
256 #:test-target "test"
257 #:phases
258 (modify-phases %standard-phases
259 (delete 'configure))))
260 (inputs
261 `(("lua" ,lua-5.1)))
262 (home-page "https://keplerproject.github.io/luafilesystem/index.html")
263 (synopsis "File system library for Lua")
264 (description "LuaFileSystem is a Lua library developed to complement the
265set of functions related to file systems offered by the standard Lua
266distribution. LuaFileSystem offers a portable way to access the underlying
267directory structure and file attributes.")
268 (license (package-license lua-5.1))))
d62dc2ae
RW
269
270(define-public lua5.1-sec
271 (package
272 (name "lua5.1-sec")
273 (version "0.6")
274 (source (origin
275 (method url-fetch)
276 (uri (string-append "https://github.com/brunoos/luasec/archive/"
277 "luasec-" version ".tar.gz"))
278 (sha256
279 (base32
280 "0pgd1anzznl4s0h16wg8dlw9mgdb9h52drlcki6sbf5y31fa7wyf"))))
281 (build-system gnu-build-system)
282 (arguments
283 `(#:make-flags
284 (let ((out (assoc-ref %outputs "out")))
285 (list "linux"
286 "CC=gcc"
287 "LD=gcc"
288 (string-append "LUAPATH=" out "/share/lua/5.1")
289 (string-append "LUACPATH=" out "/lib/lua/5.1")))
290 #:tests? #f ; no tests included
291 #:phases
292 (modify-phases %standard-phases
293 (delete 'configure))))
294 (inputs
295 `(("lua" ,lua-5.1)
296 ("openssl" ,openssl)))
297 (propagated-inputs
298 `(("lua-socket" ,lua5.1-socket)))
299 (home-page "https://github.com/brunoos/luasec/wiki")
300 (synopsis "OpenSSL bindings for Lua")
301 (description "LuaSec is a binding for OpenSSL library to provide TLS/SSL
302communication. It takes an already established TCP connection and creates a
303secure session between the peers.")
304 (license (package-license lua-5.1))))
03d8505f 305
306(define-public lua-lgi
307 (package
308 (name "lua-lgi")
ad514303 309 (version "0.9.2")
03d8505f 310 (source
311 (origin
312 (method url-fetch)
313 (uri (string-append
314 "https://github.com/pavouk/lgi/archive/"
315 version ".tar.gz"))
316 (file-name (string-append name "-" version ".tar.gz"))
317 (sha256
318 (base32
ad514303 319 "0kwcaj3ahi9gxfyp0lr5zgr6vi1mgsg9sz0980x0nwxlh9a11i6g"))))
03d8505f 320 (build-system gnu-build-system)
321 (arguments
322 '(#:make-flags (list "CC=gcc"
323 (string-append "PREFIX=" (assoc-ref %outputs "out")))
324 #:phases
325 (modify-phases %standard-phases
326 (delete 'configure) ; no configure script
327 (add-before 'build 'set-env
328 (lambda* (#:key inputs #:allow-other-keys)
329 ;; we need to load cairo dynamically
330 (let* ((cairo (string-append
331 (assoc-ref inputs "cairo") "/lib" )))
332 (setenv "LD_LIBRARY_PATH" cairo)
333 #t)))
334 (add-before 'build 'set-lua-version
335 (lambda _
336 ;; lua version and therefore install directories are hardcoded
337 ;; FIXME: This breaks when we update lua to >=5.3
338 (substitute* "./lgi/Makefile"
339 (("LUA_VERSION=5.1") "LUA_VERSION=5.2"))
340 #t))
341 (add-before 'check 'skip-test-gtk
342 (lambda _
343 ;; FIXME: Skip GTK tests:
344 ;; gtk3 - can't get it to run with the xorg-server config below
345 ;; and some non-gtk tests will also fail
346 ;; gtk2 - lots of functions aren't implemented
347 ;; We choose gtk2 as the lesser evil and simply skip the test.
348 ;; Currently, awesome is the only package that uses lua-lgi but
349 ;; it doesn't need or interact with GTK using lua-lgi.
350 (substitute* "./tests/test.lua"
351 (("'gtk.lua',") "-- 'gtk.lua',"))
352 #t))
353 (add-before 'check 'start-xserver-instance
354 (lambda* (#:key inputs #:allow-other-keys)
355 ;; There must be a running X server during tests.
356 (system (format #f "~a/bin/Xvfb :1 &"
357 (assoc-ref inputs "xorg-server")))
358 (setenv "DISPLAY" ":1")
359 #t)))))
360 (inputs
361 `(("gobject-introspection" ,gobject-introspection)
362 ("glib" ,glib)
c695fb76
TGR
363 ("pango" ,pango)
364 ("gtk" ,gtk+-2)
03d8505f 365 ("lua" ,lua)
366 ("cairo" ,cairo)
367 ("libffi" ,libffi)
c695fb76 368 ("xorg-server" ,xorg-server)))
03d8505f 369 (native-inputs
ad514303
LC
370 `(("pkg-config" ,pkg-config)
371 ("dbus" ,dbus))) ;tests use 'dbus-run-session'
03d8505f 372 (home-page "https://github.com/pavouk/lgi/")
373 (synopsis "Lua bridge to GObject based libraries")
374 (description
375 "LGI is gobject-introspection based dynamic Lua binding to GObject
376based libraries. It allows using GObject-based libraries directly from Lua.
377Notable examples are GTK+, GStreamer and Webkit.")
378 (license license:expat)))
35cdc267 379
149b2c43 380(define (make-lua-lpeg name lua)
35cdc267 381 (package
149b2c43 382 (name name)
139c8f94 383 (version "1.0.1")
35cdc267
JMSG
384 (source (origin
385 (method url-fetch)
386 (uri (string-append "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-"
387 version ".tar.gz"))
388 (sha256
139c8f94 389 (base32 "0sq25z3r324a324ky73izgq9mbf66j2xvjp0fxf227rwxalzgnb2"))))
35cdc267
JMSG
390 (build-system gnu-build-system)
391 (arguments
392 `(#:phases
393 (modify-phases %standard-phases
394 (delete 'configure)
395 ;; `make install` isn't available, so we have to do it manually
396 (replace 'install
397 (lambda* (#:key outputs #:allow-other-keys)
398 (let ((out (assoc-ref outputs "out"))
399 (lua-version ,(version-major+minor (package-version lua))))
400 (install-file "lpeg.so"
401 (string-append out "/lib/lua/" lua-version))
402 (install-file "re.lua"
403 (string-append out "/share/lua/" lua-version))
404 #t))))
405 #:test-target "test"))
c695fb76 406 (inputs `(("lua" ,lua)))
35cdc267
JMSG
407 (synopsis "Pattern-matching library for Lua")
408 (description
409 "LPeg is a pattern-matching library for Lua, based on Parsing Expression
410Grammars (PEGs).")
411 (home-page "http://www.inf.puc-rio.br/~roberto/lpeg")
412 (license license:expat)))
cf9a788d 413
149b2c43
CL
414(define-public lua-lpeg
415 (make-lua-lpeg "lua-lpeg" lua))
416
01a0a0c4
H
417(define-public lua5.1-lpeg
418 (make-lua-lpeg "lua5.1-lpeg" lua-5.1))
419
d9ed1779 420(define-public lua5.2-lpeg
149b2c43 421 (make-lua-lpeg "lua5.2-lpeg" lua-5.2))
d9ed1779 422
cf9a788d 423;; Lua 5.3 is not supported.
cb31a524 424(define (make-lua-bitop name lua)
cf9a788d 425 (package
cb31a524 426 (name name)
cf9a788d
RW
427 (version "1.0.2")
428 (source (origin
429 (method url-fetch)
430 (uri (string-append "http://bitop.luajit.org/download/"
431 "LuaBitOp-" version ".tar.gz"))
432 (sha256
433 (base32
434 "16fffbrgfcw40kskh2bn9q7m3gajffwd2f35rafynlnd7llwj1qj"))))
435 (build-system gnu-build-system)
436 (arguments
437 `(#:test-target "test"
438 #:make-flags
439 (list "INSTALL=install -pD"
440 (string-append "INSTALLPATH=printf "
441 (assoc-ref %outputs "out")
442 "/lib/lua/"
cb31a524 443 ,(version-major+minor (package-version lua))
cf9a788d
RW
444 "/bit/bit.so"))
445 #:phases
446 (modify-phases %standard-phases
447 (delete 'configure))))
c695fb76 448 (inputs `(("lua" ,lua)))
0386cdd3 449 (home-page "https://bitop.luajit.org/index.html")
cf9a788d
RW
450 (synopsis "Bitwise operations on numbers for Lua")
451 (description
452 "Lua BitOp is a C extension module for Lua which adds bitwise operations
453on numbers.")
454 (license license:expat)))
cb31a524
CL
455
456(define-public lua5.2-bitop
457 (make-lua-bitop "lua5.2-bitop" lua-5.2))
458
459(define-public lua5.1-bitop
460 (make-lua-bitop "lua5.1-bitop" lua-5.1))
ce577655
FT
461
462(define-public selene
463 (package
464 (name "selene")
465 (version "2017.08.25")
466 (source (origin
467 (method git-fetch)
468 (uri (git-reference
469 (url "https://github.com/jeremyong/Selene.git")
470 ;; The release is quite old.
471 (commit "ffe1ade2568d4cff5894552be8f43e63e379a4c9")))
472 (file-name "Selene")
473 (sha256
474 (base32
475 "1axrgv3rxxdsaf807lwvklfzicn6x6gpf35narllrnz9lg6hn508"))))
476 (build-system cmake-build-system)
477 (arguments
478 `(#:configure-flags
479 ;; lua pc file in CMakeLists.txt is lua5.3.pc
480 '("-DLUA_PC_CFG=lua;lua-5.3;lua-5.1")
481 #:test-target "all"
482 #:phases
483 ;; This is a header only library
484 (modify-phases %standard-phases
485 (delete 'build)
486 (replace 'install
487 (lambda* (#:key inputs outputs #:allow-other-keys)
488 (let* ((output (assoc-ref outputs "out"))
489 (source (assoc-ref inputs "source"))
490 (includedir (string-append output "/include")))
491 (copy-recursively
492 (string-append source "/include")
493 includedir))
494 #t))
495 ;; The path of test files are hard coded.
496 (replace 'check
497 (lambda* (#:key inputs outputs #:allow-other-keys)
498 (let* ((output (assoc-ref outputs "out"))
499 (source (assoc-ref inputs "source"))
500 (builddir (getcwd))
501 (testdir (string-append builddir "/test")))
502 (copy-recursively (string-append source "/test") testdir)
503 (invoke "make")
504 (mkdir-p "runner")
505 (copy-file "./test_runner" "./runner/test_runner")
506 (chdir "./runner")
507 (invoke "./test_runner")))))))
508 (native-inputs
509 `(("lua" ,lua)
510 ("pkg-config" ,pkg-config)))
511 (home-page "https://github.com/jeremyong/Selene")
512 (synopsis "Lua C++11 bindings")
513 (description
514 "Selene is a simple C++11 header-only library enabling seamless
515 interoperability between C++ and Lua programming language.")
516 (license license:zlib)))