@@ -1317,6 +1317,7 @@ dist_patch_DATA = \
%D%/packages/patches/guile-fibers-epoll-instance-is-dead.patch \
%D%/packages/patches/guile-fibers-fd-finalizer-leak.patch \
%D%/packages/patches/guile-fibers-wait-for-io-readiness.patch \
+ %D%/packages/patches/guile-fibers-libevent-32-bit.patch \
%D%/packages/patches/guile-fix-invalid-unicode-handling.patch \
%D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch \
%D%/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch \
@@ -92,6 +92,7 @@ (define-module (gnu packages guile-xyz)
#:use-module (gnu packages hurd)
#:use-module (gnu packages image)
#:use-module (gnu packages imagemagick)
+ #:use-module (gnu packages libevent)
#:use-module (gnu packages libffi)
#:use-module (gnu packages libunistring)
#:use-module (gnu packages linux)
@@ -788,10 +789,10 @@ (define-public guile2.2-dsv
(inputs (list guile-2.2))
(propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
-(define-public guile-fibers-1.1
+(define-public guile-fibers-1.3
(package
(name "guile-fibers")
- (version "1.1.1")
+ (version "1.3.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -800,11 +801,9 @@ (define-public guile-fibers-1.1
(file-name (git-file-name name version))
(sha256
(base32
- "0ll63d7202clapg1k4bilbnlmfa4qvpjnsd7chbkka4kxf5klilc"))
+ "0wvdi4l58f9a5c9wi3cdc9l1bniscsixb6w2zj86mch7j7j814lc"))
(patches
- (search-patches "guile-fibers-wait-for-io-readiness.patch"
- "guile-fibers-epoll-instance-is-dead.patch"
- "guile-fibers-fd-finalizer-leak.patch"))))
+ (search-patches "guile-fibers-libevent-32-bit.patch"))))
(build-system gnu-build-system)
(arguments
(list #:make-flags
@@ -822,17 +821,15 @@ (define-public guile-fibers-1.1
(substitute* "Makefile"
(("tests/speedup.scm") ""))))))))
(native-inputs
- (list texinfo pkg-config autoconf automake libtool
+ (list texinfo pkg-config autoconf-2.71 automake libtool
guile-3.0 ;for 'guild compile
;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'
gettext-minimal))
(inputs
- (list guile-3.0)) ;for libguile-3.0.so
- (supported-systems
- ;; This version requires 'epoll' and is thus limited to Linux-based
- ;; systems, but this may change soon:
- ;; <https://github.com/wingo/fibers/pull/53>.
- (filter (cut string-suffix? "-linux" <>) %supported-systems))
+ (append (list guile-3.0) ;for libguile-3.0.so
+ (if (hurd-target?)
+ (list libevent)
+ '())))
(synopsis "Lightweight concurrency facility for Guile")
(description
"Fibers is a Guile library that implements a a lightweight concurrency
@@ -849,6 +846,36 @@ (define-public guile-fibers-1.1
(properties '((upstream-name . "fibers")))
(license license:lgpl3+)))
+(define-public guile-fibers-1.1
+ (package
+ (inherit guile-fibers-1.3)
+ (version "1.1.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/wingo/fibers")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "guile-fibers" version))
+ (sha256
+ (base32
+ "0ll63d7202clapg1k4bilbnlmfa4qvpjnsd7chbkka4kxf5klilc"))
+ (patches
+ (search-patches "guile-fibers-wait-for-io-readiness.patch"
+ "guile-fibers-epoll-instance-is-dead.patch"
+ "guile-fibers-fd-finalizer-leak.patch"))))
+ (native-inputs
+ (list texinfo pkg-config autoconf automake libtool
+ guile-3.0 ;for 'guild compile
+ ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'
+ gettext-minimal))
+ (inputs
+ (list guile-3.0)) ;for libguile-3.0.so
+ (supported-systems
+ ;; This version requires 'epoll' and is thus limited to Linux-based
+ ;; systems, which is fixed in 1.2.0:
+ ;; <https://github.com/wingo/fibers/pull/53>.
+ (filter (cut string-suffix? "-linux" <>) %supported-systems))))
+
(define-public guile-fibers-next
(let ((commit "99fc3e38048f732de67c43fde52e949fa294aa7d")
(revision "1"))
new file mode 100644
@@ -0,0 +1,18 @@
+This fixes a bug with the libevent backend on 32-bit platforms:
+
+ https://github.com/wingo/fibers/issues/86
+
+diff --git a/extensions/libevent.c b/extensions/libevent.c
+index 4f44de9..52c9d73 100644
+--- a/extensions/libevent.c
++++ b/extensions/libevent.c
+@@ -215,7 +215,8 @@ run_event_loop (void *p)
+ microsec = -1;
+ else if (data->timeout >= 0)
+ {
+- microsec = data->timeout / time_units_per_microsec;
++ microsec = (time_units_per_microsec == 0)
++ ? 0 : data->timeout / time_units_per_microsec;
+ tv.tv_sec = 0;
+ tv.tv_usec = microsec;
+ }