X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/d994325747486e7beddbf03255c8c95d58d08dc8..6e05adbb8f0396ef2bffef9cf56248e68aa8a3df:/gnu/packages/lua.scm diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm index 5e73f1ed89..5479b891bd 100644 --- a/gnu/packages/lua.scm +++ b/gnu/packages/lua.scm @@ -3,13 +3,15 @@ ;;; Copyright © 2014 Raimon Grau ;;; Copyright © 2014 Mark H Weaver ;;; Copyright © 2014 Andreas Enge -;;; Copyright © 2016, 2017 Efraim Flashner -;;; Copyright © 2016 Ricardo Wurmus +;;; Copyright © 2016, 2017, 2020 Efraim Flashner +;;; Copyright © 2016, 2019 Ricardo Wurmus ;;; Copyright © 2016 doncatnip ;;; Copyright © 2016, 2017, 2019 Clément Lassieur ;;; Copyright © 2016 José Miguel Sánchez García -;;; Copyright © 2018 Tobias Geerinckx-Rice +;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2018 Fis Trivial +;;; Copyright © 2020 Nicolas Goaziou +;;; Copyright © 2020 Simon South ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,11 +36,14 @@ #:use-module (guix utils) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) + #:use-module (guix build-system trivial) #:use-module (gnu packages) #:use-module (gnu packages readline) + #:use-module (gnu packages m4) #:use-module (gnu packages tls) #:use-module (gnu packages xml) #:use-module (gnu packages glib) + #:use-module (gnu packages libevent) #:use-module (gnu packages libffi) #:use-module (gnu packages pkg-config) #:use-module (gnu packages xorg) @@ -179,7 +184,7 @@ language.") (inputs `(("lua" ,lua) ("expat" ,expat))) - (home-page "http://matthewwild.co.uk/projects/luaexpat/") + (home-page "https://matthewwild.co.uk/projects/luaexpat/") (synopsis "SAX XML parser based on the Expat library") (description "LuaExpat is a SAX XML parser based on the Expat library.") (license (package-license lua-5.1)))) @@ -195,14 +200,14 @@ language.") (name name) (version "3.0-rc1") (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/diegonehab/luasocket/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/diegonehab/luasocket") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "0j8jx8bjicvp9khs26xjya8c495wrpb7parxfnabdqa5nnsxjrwb")))) + "1chs7z7a3i3lck4x7rz60ziwbf793gw169hpjdfca8y4yf1hzsxk")))) (build-system gnu-build-system) (arguments `(#:make-flags @@ -247,16 +252,18 @@ handy.") (define (make-lua-filesystem name lua) (package (name name) - (version "1.6.3") + (version "1.7.0.2") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/keplerproject/" - "luafilesystem/archive/v_" - "1_6_3" ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/keplerproject/luafilesystem") + (commit (string-append "v" + (string-join + (string-split version #\.) "_"))))) + (file-name (git-file-name name version)) (sha256 (base32 - "0s10ckxin0bysd6gaywqhxkpw3ybjhprr8m655b8cx3pxjwd49am")))) + "0zmprgkm9zawdf9wnw0v3w6ibaj442wlc6alp39hmw610fl4vghi")))) (build-system gnu-build-system) (arguments `(#:make-flags @@ -287,76 +294,343 @@ directory structure and file attributes.") (define-public lua5.2-filesystem (make-lua-filesystem "lua5.2-filesystem" lua-5.2)) -(define-public lua5.1-sec +(define (make-lua-ossl name lua) (package - (name "lua5.1-sec") - (version "0.6") + (name name) + (version "20170903") (source (origin (method url-fetch) - (uri (string-append "https://github.com/brunoos/luasec/archive/" - "luasec-" version ".tar.gz")) + (uri (string-append "https://25thandclement.com/~william/" + "projects/releases/luaossl-" version ".tgz")) + (sha256 + (base32 + "10392bvd0lzyibipblgiss09zlqh3a5zgqg1b9lgbybpqb9cv2k3")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (let ((out (assoc-ref %outputs "out")) + (lua-api-version ,(version-major+minor (package-version lua)))) + (list "CC=gcc" + "CFLAGS='-D HAVE_SYS_SYSCTL_H=0'" ; sys/sysctl.h is deprecated + (string-append "DESTDIR=" out) + (string-append "LUA_APIS=" lua-api-version) + "prefix=")) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (delete 'check) + (add-after 'install 'check + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (lua-version ,(version-major+minor (package-version lua)))) + (setenv "LUA_CPATH" + (string-append out "/lib/lua/" lua-version "/?.so;;")) + (setenv "LUA_PATH" + (string-append out "/share/lua/" lua-version "/?.lua;;")) + (with-directory-excursion "regress" + (for-each (lambda (f) + (invoke "lua" f)) + (find-files "." "^[0-9].*\\.lua$")))) + #t))))) + (inputs + `(("lua" ,lua) + ("openssl" ,openssl))) + (home-page "https://25thandclement.com/~william/projects/luaossl.html") + (synopsis "OpenSSL bindings for Lua") + (description "The luaossl extension module for Lua provides comprehensive, +low-level bindings to the OpenSSL library, including support for certificate and +key management, key generation, signature verification, and deep bindings to the +distinguished name, alternative name, and X.509v3 extension interfaces. It also +binds OpenSSL's bignum, message digest, HMAC, cipher, and CSPRNG interfaces.") + (license license:expat))) + +(define-public lua-ossl + (make-lua-ossl "lua-ossl" lua)) + +(define-public lua5.1-ossl + (make-lua-ossl "lua5.1-ossl" lua-5.1)) + +(define-public lua5.2-ossl + (make-lua-ossl "lua5.2-ossl" lua-5.2)) + +(define (make-lua-sec name lua) + (package + (name name) + (version "0.9") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/brunoos/luasec") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "0pgd1anzznl4s0h16wg8dlw9mgdb9h52drlcki6sbf5y31fa7wyf")))) + "0ssncgkggyr8i3z6zbvgrgsqj2q8676rnsikhpfwnk9n7sx4gwbl")))) (build-system gnu-build-system) (arguments `(#:make-flags - (let ((out (assoc-ref %outputs "out"))) + (let ((out (assoc-ref %outputs "out")) + (lua-version ,(version-major+minor (package-version lua)))) (list "linux" "CC=gcc" "LD=gcc" - (string-append "LUAPATH=" out "/share/lua/5.1") - (string-append "LUACPATH=" out "/lib/lua/5.1"))) + (string-append "LUAPATH=" out "/share/lua/" lua-version) + (string-append "LUACPATH=" out "/lib/lua/" lua-version))) #:tests? #f ; no tests included #:phases (modify-phases %standard-phases (delete 'configure)))) (inputs - `(("lua" ,lua-5.1) + `(("lua" ,lua) ("openssl" ,openssl))) (propagated-inputs - `(("lua-socket" ,lua5.1-socket))) + `(("lua-socket" + ,(make-lua-socket + (format #f "lua~a-socket" + (version-major+minor (package-version lua))) lua)))) (home-page "https://github.com/brunoos/luasec/wiki") (synopsis "OpenSSL bindings for Lua") (description "LuaSec is a binding for OpenSSL library to provide TLS/SSL communication. It takes an already established TCP connection and creates a secure session between the peers.") - (license (package-license lua-5.1)))) + (license license:expat))) -(define-public lua-lgi +(define-public lua5.1-sec + (make-lua-sec "lua5.1-sec" lua-5.1)) + +(define-public lua5.2-sec + (make-lua-sec "lua5.2-sec" lua-5.2)) + +(define (make-lua-cqueues name lua lua-ossl) (package - (name "lua-lgi") + (name name) + (version "20171014") + (source (origin + (method url-fetch) + (uri (string-append "https://25thandclement.com/~william/" + "projects/releases/cqueues-" version ".tgz")) + (sha256 + (base32 + "1dabhpn6r0hlln8vx9hxm34pfcm46qzgpb2apmziwg5z51fi4ksb")))) + (build-system gnu-build-system) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 string-fun)) + #:make-flags + (let ((out (assoc-ref %outputs "out")) + (lua-api-version ,(version-major+minor (package-version lua)))) + (list "CC=gcc" + (string-append "LUA_APIS=" lua-api-version))) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (delete 'check) + (replace 'install + (lambda* (#:key make-flags outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (apply invoke "make" "install" + (append make-flags + (list (string-append "DESTDIR=" out) + "prefix=")))))) + (add-after 'install 'check + (lambda* (#:key inputs outputs make-flags #:allow-other-keys) + (let* + ((lua-version ,(version-major+minor (package-version lua))) + (env-suffix (if (equal? lua-version "5.1") + "" + (string-append + "_" + (string-replace-substring lua-version "." "_")))) + + (lua-ossl (assoc-ref inputs "lua-ossl")) + (out (assoc-ref outputs "out")) + + (lua-cpath (lambda (p) + (string-append p "/lib/lua/" lua-version "/?.so"))) + (lua-path (lambda (p) + (string-append p "/share/lua/" lua-version "/?.lua")))) + ;; The test suite sets Lua-version-specific search-path variables + ;; when available so we must do the same, as these take + ;; precedence over the generic "LUA_CPATH" and "LUA_PATH" + (setenv (string-append "LUA_CPATH" env-suffix) + (string-append + (string-join (map lua-cpath (list out lua-ossl)) ";") + ";;")) + (setenv (string-append "LUA_PATH" env-suffix) + (string-append + (string-join (map lua-path (list out lua-ossl)) ";") + ";;")) + + ;; Skip regression tests we expect to fail + (with-directory-excursion "regress" + (for-each (lambda (f) + (rename-file f (string-append f ".skip"))) + (append + ;; Regression tests that require network + ;; connectivity + '("22-client-dtls.lua" + "30-starttls-completion.lua" + "62-noname.lua" + "153-dns-resolvers.lua") + + ;; Regression tests that require LuaJIT + '("44-resolvers-gc.lua" + "51-join-defunct-thread.lua") + + ;; Regression tests that require Lua 5.3 + (if (not (equal? lua-version "5.3")) + '("152-thread-integer-passing.lua") + '())))) + + (apply invoke "make" "check" make-flags))))))) + (native-inputs + `(("m4" ,m4))) + (inputs + `(("lua" ,lua) + ("openssl" ,openssl))) + (propagated-inputs + `(("lua-ossl" ,lua-ossl))) + (home-page "https://25thandclement.com/~william/projects/cqueues.html") + (synopsis "Event loop for Lua using continuation queues") + (description "The cqueues extension module for Lua implements an event loop +that operates through the yielding and resumption of coroutines. It is designed +to be non-intrusive, composable, and embeddable within existing applications.") + (license license:expat))) + +(define-public lua-cqueues + (make-lua-cqueues "lua-cqueues" lua lua-ossl)) + +(define-public lua5.1-cqueues + (make-lua-cqueues "lua5.1-cqueues" lua-5.1 lua5.1-ossl)) + +(define-public lua5.2-cqueues + (make-lua-cqueues "lua5.2-cqueues" lua-5.2 lua5.2-ossl)) + +(define-public lua-penlight + (package + (name "lua-penlight") + (version "1.7.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Tieske/Penlight") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0qc2d1riyr4b5a0gnsmdw2lz5pw65s4ac60hc34w3mmk9l6yg6nl")))) + (build-system trivial-build-system) + (inputs + `(("lua" ,lua))) + (propagated-inputs + `(("lua-filesystem" ,lua-filesystem))) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let* ((source (assoc-ref %build-inputs "source")) + (lua-version ,(version-major+minor (package-version lua))) + (destination (string-append (assoc-ref %outputs "out") + "/share/lua/" lua-version))) + (mkdir-p destination) + (with-directory-excursion source + (copy-recursively "lua/" destination))) + #t))) + (home-page "http://tieske.github.io/Penlight/") + (synopsis "Collection of general purpose libraries for the Lua language") + (description "Penlight is a set of pure Lua libraries focusing on +input data handling (such as reading configuration files), functional +programming (such as map, reduce, placeholder expressions,etc), and OS +path management. Much of the functionality is inspired by the Python +standard libraries.") + (license license:expat))) + +(define-public lua-ldoc + (package + (name "lua-ldoc") + (version "1.4.6") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/stevedonovan/LDoc") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1h0cf7bp4am54r0j8lhjs2l1c7q5vz74ba0jvw9qdbaqimls46g8")))) + (build-system gnu-build-system) + (inputs + `(("lua" ,lua))) + (propagated-inputs + `(("lua-penlight" ,lua-penlight))) + (arguments + `(#:tests? #f ;tests must run after installation. + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-installation-directory + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (lua-version ,(version-major+minor (package-version lua)))) + (substitute* "makefile" + (("LUA=.*") "#\n") + (("(LUA_PREFIX=).*" _ prefix) + (string-append prefix out "\n")) + (("(LUA_BINDIR=).*" _ prefix) + (string-append prefix out "/bin\n")) + (("(LUA_SHAREDIR=).*" _ prefix) + (string-append prefix out "/share/lua/" lua-version "\n")))) + #t)) + (delete 'configure) + (add-before 'install 'create-bin-directory + (lambda* (#:key outputs #:allow-other-keys) + (mkdir-p (string-append (assoc-ref outputs "out") "/bin")) + #t))))) + (home-page "http://stevedonovan.github.io/ldoc/") + (synopsis "Lua documentation generator") + (description + "LDoc is a LuaDoc-compatible documentation generation system for +Lua source code. It parses the declaration and documentation comments +in a set of Lua source files and produces a set of XHTML pages +describing the commented declarations and functions.") + (license license:expat))) + +(define (make-lua-lgi name lua) + (package + (name name) (version "0.9.2") (source - (origin - (method url-fetch) - (uri (string-append - "https://github.com/pavouk/lgi/archive/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0kwcaj3ahi9gxfyp0lr5zgr6vi1mgsg9sz0980x0nwxlh9a11i6g")))) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pavouk/lgi") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "03rbydnj411xpjvwsyvhwy4plm96481d7jax544mvk7apd8sd5jj")))) (build-system gnu-build-system) (arguments - '(#:make-flags (list "CC=gcc" - (string-append "PREFIX=" (assoc-ref %outputs "out"))) + `(#:make-flags + (list "CC=gcc" + (string-append "PREFIX=" (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases - (delete 'configure) ; no configure script + (delete 'configure) ; no configure script (add-before 'build 'set-env (lambda* (#:key inputs #:allow-other-keys) - ;; we need to load cairo dynamically - (let* ((cairo (string-append - (assoc-ref inputs "cairo") "/lib" ))) + ;; We need to load cairo dynamically. + (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))) (setenv "LD_LIBRARY_PATH" cairo) #t))) (add-before 'build 'set-lua-version (lambda _ - ;; lua version and therefore install directories are hardcoded - ;; FIXME: This breaks when we update lua to >=5.3 + ;; Lua version and therefore install directories are hardcoded. (substitute* "./lgi/Makefile" - (("LUA_VERSION=5.1") "LUA_VERSION=5.2")) + (("LUA_VERSION=5.1") + (format #f + "LUA_VERSION=~a" + ,(version-major+minor (package-version lua))))) #t)) (add-before 'check 'skip-test-gtk (lambda _ @@ -377,36 +651,45 @@ secure session between the peers.") (assoc-ref inputs "xorg-server"))) (setenv "DISPLAY" ":1") #t))))) + (native-inputs + `(("dbus" ,dbus) ;tests use 'dbus-run-session' + ("pkg-config" ,pkg-config))) (inputs - `(("gobject-introspection" ,gobject-introspection) + `(("cairo" ,cairo) ("glib" ,glib) - ("pango" ,pango) + ("gobject-introspection" ,gobject-introspection) ("gtk" ,gtk+-2) - ("lua" ,lua) - ("cairo" ,cairo) ("libffi" ,libffi) + ("lua" ,lua) + ("pango" ,pango) ("xorg-server" ,xorg-server))) - (native-inputs - `(("pkg-config" ,pkg-config) - ("dbus" ,dbus))) ;tests use 'dbus-run-session' (home-page "https://github.com/pavouk/lgi/") (synopsis "Lua bridge to GObject based libraries") (description - "LGI is gobject-introspection based dynamic Lua binding to GObject -based libraries. It allows using GObject-based libraries directly from Lua. + "LGI is gobject-introspection based dynamic Lua binding to GObject based +libraries. It allows using GObject-based libraries directly from Lua. Notable examples are GTK+, GStreamer and Webkit.") (license license:expat))) +(define-public lua-lgi + (make-lua-lgi "lua-lgi" lua)) + +(define-public lua5.1-lgi + (make-lua-lgi "lua5.1-lgi" lua-5.1)) + +(define-public lua5.2-lgi + (make-lua-lgi "lua5.2-lgi" lua-5.2)) + (define (make-lua-lpeg name lua) (package (name name) - (version "1.0.1") + (version "1.0.2") (source (origin (method url-fetch) (uri (string-append "http://www.inf.puc-rio.br/~roberto/lpeg/lpeg-" version ".tar.gz")) (sha256 - (base32 "0sq25z3r324a324ky73izgq9mbf66j2xvjp0fxf227rwxalzgnb2")))) + (base32 "1zjzl7acvcdavmcg5l7wi12jd4rh95q9pl5aiww7hv0v0mv6bmj8")))) (build-system gnu-build-system) (arguments `(#:phases @@ -440,6 +723,69 @@ Grammars (PEGs).") (define-public lua5.2-lpeg (make-lua-lpeg "lua5.2-lpeg" lua-5.2)) +(define (make-lua-luv name lua) + (package + (name name) + (version "1.32.0-0") + (source (origin + ;; The release tarball includes the sources of libuv but does + ;; not include the pkg-config files. + (method git-fetch) + (uri (git-reference + (url "https://github.com/luvit/luv") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0c65c1lhbl0axnyks3910gjs0z0hw7w6jvl07g8kbpnbvfl4qajh")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f ; there are none + #:configure-flags + '("-DWITH_LUA_ENGINE=Lua" + "-DWITH_SHARED_LIBUV=On" + "-DBUILD_MODULE=Off" + "-DBUILD_SHARED_LIBS=On" + "-DLUA_BUILD_TYPE=System") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'copy-lua-compat + (lambda* (#:key inputs #:allow-other-keys) + (copy-recursively (assoc-ref inputs "lua-compat") + "lua-compat") + (setenv "CPATH" + (string-append (getcwd) "/lua-compat:" + (or (getenv "CPATH") ""))) + #t))))) + (inputs + `(("lua" ,lua) + ("libuv" ,libuv))) + (native-inputs + `(("lua-compat" + ,(origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/keplerproject/lua-compat-5.3") + (commit "daebe77a2f498817713df37f0bb316db1d82222f"))) + (file-name "lua-compat-5.3-checkout") + (sha256 + (base32 + "02a14nvn7aggg1yikj9h3dcf8aqjbxlws1bfvqbpfxv9d5phnrpz")))))) + (home-page "https://github.com/luvit/luv/") + (synopsis "Libuv bindings for Lua") + (description + "This library makes libuv available to Lua scripts.") + (license license:asl2.0))) + +(define-public lua-luv + (make-lua-luv "lua-luv" lua)) + +(define-public lua5.1-luv + (make-lua-luv "lua5.1-luv" lua-5.1)) + +(define-public lua5.2-luv + (make-lua-luv "lua5.2-luv" lua-5.2)) + ;; Lua 5.3 is not supported. (define (make-lua-bitop name lua) (package @@ -486,7 +832,7 @@ on numbers.") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/jeremyong/Selene.git") + (url "https://github.com/jeremyong/Selene") ;; The release is quite old. (commit "ffe1ade2568d4cff5894552be8f43e63e379a4c9"))) (file-name "Selene")