11# fibers
2- # Copyright (C) 2016 Andy Wingo <wingo@pobox.com>
2+ # Copyright (C) 2016 Andy Wingo <wingo@pobox.com>
3+ # Copyright (C) 2020 Abdulrahman Semrie <hsamireh@gmail.com>
4+ # Copyright (C) 2020-2022 Aleix Conchillo Flaqué <aconchillo@gmail.com>
35#
46# This program is free software: you can redistribute it and/or modify
57# it under the terms of the GNU Lesser General Public License as
@@ -26,42 +28,85 @@ info_TEXINFOS=fibers.texi
2628
2729SOURCES = \
2830 fibers.scm \
31+ fibers/affinity.scm \
2932 fibers/channels.scm \
3033 fibers/conditions.scm \
3134 fibers/config.scm \
3235 fibers/counter.scm \
36+ fibers/events-impl.scm \
3337 fibers/deque.scm \
34- fibers/epoll.scm \
3538 fibers/interrupts.scm \
3639 fibers/io-wakeup.scm \
3740 fibers/nameset.scm \
3841 fibers/operations.scm \
3942 fibers/posix-clocks.scm \
4043 fibers/psq.scm \
44+ fibers/repl.scm \
4145 fibers/scheduler.scm \
4246 fibers/stack.scm \
43- fibers/repl.scm \
4447 fibers/timers.scm \
4548 fibers/web/server.scm \
4649 web/server/fibers.scm
4750
48- BUILT_SOURCES = fibers/config.scm
51+ BUILT_SOURCES = \
52+ fibers/affinity.scm \
53+ fibers/config.scm \
54+ fibers/events-impl.scm \
55+ fibers/posix-clocks.scm
4956
5057extlibdir = $(libdir ) /guile/$(GUILE_EFFECTIVE_VERSION ) /extensions
51- extlib_LTLIBRARIES = epoll.la
5258AM_CFLAGS = -I$(srcdir ) $(WARN_CFLAGS ) $(DEBUG_CFLAGS )
53- epoll_la_SOURCES = epoll.c
54- epoll_la_CFLAGS = $(AM_CFLAGS ) $(GUILE_CFLAGS )
55- epoll_la_LIBADD = $(GUILE_LIBS )
56- epoll_la_LDFLAGS = -export-dynamic -module
57- $(GOBJECTS ) : epoll.la
59+
60+ extlib_LTLIBRARIES =
61+
62+ if HAVE_LIBEVENT
63+ extlib_LTLIBRARIES += fibers-libevent.la
64+ fibers_libevent_la_SOURCES = extensions/libevent.c
65+ fibers_libevent_la_CFLAGS = $(AM_CFLAGS ) $(GUILE_CFLAGS ) $(LIBEVENT_CFLAGS ) -I$(top_srcdir ) /extensions
66+ fibers_libevent_la_LDFLAGS = -module -no-undefined $(LIBEVENT_LIBS ) $(GUILE_LDFLAGS )
67+ $(GOBJECTS ) : fibers-libevent.la
68+
69+ fibers/events-impl.scm : Makefile fibers/libevent.scm
70+ cp -f $(abs_top_srcdir ) /fibers/libevent.scm $(abs_top_builddir ) /fibers/events-impl.scm
71+ else
72+ if HAVE_EPOLL_WAIT
73+ extlib_LTLIBRARIES += fibers-epoll.la
74+ fibers_epoll_la_SOURCES = extensions/epoll.c
75+ fibers_epoll_la_CFLAGS = $(AM_CFLAGS ) $(GUILE_CFLAGS ) -I$(top_srcdir ) /extensions
76+ fibers_epoll_la_LIBADD = $(GUILE_LIBS )
77+ fibers_epoll_la_LDFLAGS = -export-dynamic -module
78+ $(GOBJECTS ) : fibers-epoll.la
79+
80+ fibers/events-impl.scm : Makefile fibers/epoll.scm
81+ cp -f $(abs_top_srcdir ) /fibers/epoll.scm $(abs_top_builddir ) /fibers/events-impl.scm
82+ endif
83+ endif
84+
85+ if ! HAVE_CLOCK_NANOSLEEP
86+ extlib_LTLIBRARIES += fibers-clocks.la
87+ fibers_clocks_la_SOURCES = extensions/$(PLATFORM ) /clock-nanosleep.c
88+ fibers_clocks_la_CFLAGS = $(AM_CFLAGS ) $(GUILE_CFLAGS ) -I$(top_srcdir ) /extensions
89+ fibers_clocks_la_LDFLAGS = -module -no-undefined $(GUILE_LDFLAGS )
90+ endif
5891
5992fibers/config.scm : Makefile fibers/config.scm.in
6093 mkdir -p fibers
6194 sed -e " s|@extlibdir\@|$( extlibdir) |" \
6295 $(srcdir ) /fibers/config.scm.in > fibers/config.scm
6396
64- CLEANFILES += fibers/config.scm
97+ fibers/affinity.scm : Makefile fibers/affinity-$(PLATFORM ) .scm
98+ mkdir -p $(abs_top_builddir ) /fibers
99+ cp -f $(abs_top_srcdir ) /fibers/affinity-$(PLATFORM ) .scm $(abs_top_builddir ) /fibers/affinity.scm
100+
101+ fibers/posix-clocks.scm : Makefile fibers/posix-clocks-$(PLATFORM ) .scm
102+ mkdir -p $(abs_top_builddir ) /fibers
103+ cp -f $(abs_top_srcdir ) /fibers/posix-clocks-$(PLATFORM ) .scm $(abs_top_builddir ) /fibers/posix-clocks.scm
104+
105+ CLEANFILES += \
106+ fibers/affinity.scm \
107+ fibers/config.scm \
108+ fibers/events-impl.scm \
109+ fibers/posix-clocks.scm
65110
66111TESTS = \
67112 tests/basic.scm \
@@ -70,19 +115,40 @@ TESTS = \
70115 tests/foreign.scm \
71116 tests/io-wakeup.scm \
72117 tests/parameters.scm \
73- tests/ports.scm \
74118 tests/preemption.scm \
75- tests/speedup.scm \
119+ tests/speedup.scm
120+
121+ # The following tests require SOCK_NONBLOCK and SOCK_CLOEXEC. For now we just
122+ # run them on a platform that supports epoll (probably Linux).
123+ if HAVE_EPOLL_WAIT
124+ TESTS += \
125+ tests/ports.scm \
76126 tests/concurrent-web-server.scm
127+ endif
128+
77129TESTS_ENVIRONMENT=top_srcdir ="$(abs_top_srcdir ) " ./env $(GUILE ) -s
78130
79131EXTRA_DIST += \
132+ $(bin_SCRIPTS ) \
133+ $(TESTS ) \
80134 env.in \
81- fibers/config.scm.in \
82135 HACKING \
83136 COPYING.LESSER \
84137 README.md \
85138 TODO.md \
86- $(bin_SCRIPTS ) \
87- $(TESTS ) \
139+ fibers/config.scm.in \
140+ fibers/epoll.scm \
141+ fibers/libevent.scm \
142+ fibers/affinity-darwin.scm \
143+ fibers/affinity-generic.scm \
144+ fibers/posix-clocks-darwin.scm \
145+ fibers/posix-clocks-generic.scm \
88146 examples
147+
148+ # List all extension files here.
149+ EXTRA_DIST += \
150+ extensions/epoll.c \
151+ extensions/libevent.c \
152+ extensions/clock-nanosleep.h \
153+ extensions/darwin/clock-nanosleep.c \
154+ extensions/generic/clock-nanosleep.c
0 commit comments