gnu: Add lua-cqueues.

* gnu/packages/lua.scm (make-lua-cqueues): New function.
(lua-cqueues, lua5.1-cqueues, lua5.2-cqueues): New variables.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Simon South 2020-05-17 12:09:39 -04:00 committed by Ludovic Courtès
parent 31be8fc87f
commit 7c54e226f6
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5

View File

@ -401,6 +401,112 @@ secure session between the peers.")
(define-public lua5.2-sec
(make-lua-sec "lua5.2-sec" lua-5.2))
(define (make-lua-cqueues name lua lua-ossl)
(package
(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")