ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/Makefile.PL
Revision: 1.56
Committed: Sat Sep 6 19:03:28 2014 UTC (9 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.55: +5 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.43 use 5.008002;
2 root 1.4
3 root 1.37 use strict qw(vars subs);
4 root 1.7 use Config;
5 root 1.1 use ExtUtils::MakeMaker;
6    
7 root 1.55 sub have_inc($) {
8     scalar grep -r "$_/$_[0]", $Config{usrinc}, split / /, $Config{incpth}
9     }
10    
11 root 1.56 my $DEFINE;
12    
13 root 1.10 unless (-e "libev/ev_epoll.c") {
14     print <<EOF;
15    
16     ***
17     *** ERROR: libev is missing or damaged. If you used a CVS check-out of EV,
18     *** you also have to check-out the "libev" module from the same CVS
19     *** repository into the EV dir (i.e. EV/libev from outside).
20     ***
21    
22     EOF
23     exit 1;
24     }
25    
26 root 1.11 print <<EOF;
27    
28 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
29 root 1.11
30    
31     Welcome to EV configuration. If you are in a hurry, just press return here
32     and hope for the best. The defaults should usually do.
33    
34     EOF
35    
36     if (prompt ("Skip further questions and use defaults (y/n)?", "y") =~ /[yY]/) {
37     $ENV{PERL_MM_USE_DEFAULT} = 1;
38     }
39    
40     print <<EOF;
41    
42 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
43 root 1.11
44    
45 root 1.14 POSIX optionally offers support for a monotonic clock source. EV
46 root 1.45 can take advantage of this clock source to detect time jumps more
47 root 1.14 reliably. Unfortunately, some systems are bound to be broken, so you can
48     disable this here: you can completely disable the detection and use of
49     the monotonic clock by answering 'n' here. Support for this clock type
50 root 1.29 will otherwise be autodetected at both compile- and runtime. (this setting
51     currently affects the use of nanosleep over select as well).
52 root 1.11
53     EOF
54    
55 root 1.56 unless (prompt ("Enable optional support for CLOCK_MONOTONIC (y/n)?", "y") =~ /[yY]/) {
56     $DEFINE .= " -DEV_USE_MONOTONIC=0";
57     }
58 root 1.11
59     print <<EOF;
60    
61 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
62 root 1.11
63    
64     POSIX optionally offers support for a (potentially) high-resolution
65     realtime clock interface. In a good implementation, using it is faster
66     than the normal method of using gettimeofday. Unfortunately, this option
67 root 1.39 is also bound to be broken on some systems, and current EV versions do not
68 root 1.45 actually call gettimeofday very often, so it defaults to no.
69 root 1.11
70     EOF
71    
72 root 1.39 $DEFINE .= " -DEV_USE_REALTIME=" . (0 + (prompt ("Prefer clock_gettime (CLOCK_REALTIME) over gettimeofday (y/n)?", "n") =~ /[yY]/));
73 root 1.11
74     print <<EOF;
75    
76 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
77 root 1.11
78    
79 root 1.46 EV can use various backends with various portability issues. The select
80 root 1.19 backend is the most portable and makes for a good fallback, but it can be
81 root 1.22 limited to a low number of file descriptors and/or might not compile. If
82     you have problems with compiling ev_select.c, you might try to play around
83 root 1.19 with disabling it here, or forcing it to use the fd_set provided by your
84     OS, via the next question. I highly recommend keeping it in.
85    
86     EOF
87    
88     if (prompt ("Enable select backend (y/n)?", "y") =~ /[yY]/) {
89 root 1.22 $DEFINE .= " -DEV_USE_SELECT=1";
90 root 1.19
91     print <<EOF;
92    
93 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
94 root 1.19
95    
96     The select backend can operate in two modes. One uses the system-provided
97     fd_set and is usually limited to 1024 file descriptors (64 on windows),
98     the other requires your header files to define NFDBITS and declare a
99     suitable fd_mask type. If you run into problems compiling ev_select.c, you
100     can try forcing the use of the system fd_set here.
101    
102     EOF
103    
104     if (prompt ("Force use of system fd_set for select backend (y/n)?", "n") =~ /[yY]/) {
105     $DEFINE .= " -DEV_SELECT_USE_FD_SET";
106 root 1.55 }
107 root 1.22 } else {
108     $DEFINE .= " -DEV_USE_SELECT=0";
109 root 1.55 }
110 root 1.19
111     print <<EOF;
112    
113 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
114 root 1.19
115    
116     The second very portable backend is poll(2). It does not exist on windows
117     and various versions of Mac OS X (and on the other versions it simply
118     doesn't work), but works basically everywhere else. It is recommended to use
119     the default here unless you run into compile problems in ev_poll.c.
120    
121     EOF
122    
123 root 1.55 $DEFINE .= " -DEV_USE_POLL=" . (0 + (prompt ("Enable poll backend (y/n)?", (have_inc "poll.h") ? "y" : "n") =~ /[yY]/));
124 root 1.19
125     print <<EOF;
126    
127 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
128 root 1.19
129    
130 root 1.24 Select and poll make it hard to write efficient servers, especially if the
131     number of active connections is much lower than the watched ones. GNU/Linux
132     systems have a more scalable method called "epoll", which EV can use. For
133     this to work, both your kernel and glibc have to support epoll, but if you
134     can compile it, the detection will be done at runtime, and EV will safely
135     fall back to using select when epoll isn't available. If unsure, accept
136     the default.
137 root 1.11
138     EOF
139    
140 root 1.55 my $can_epoll = have_inc "sys/epoll.h";
141 root 1.37 $can_epoll = $ENV{EV_EPOLL} if exists $ENV{EV_EPOLL};
142     $DEFINE .= " -DEV_USE_EPOLL=" . (0 + (prompt ("Enable epoll backend (y/n)?", $can_epoll ? "y" : "n") =~ /[yY]/));
143 root 1.15
144     print <<EOF;
145    
146 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
147 root 1.15
148    
149 root 1.23 Similarly to the epoll backend above, EV can take advantage of kqueue on
150     many BSD systems. Support for kqueue will be detected at runtime, with a
151     safe fallback to other methods when it cannot be used.
152    
153 root 1.31 Note that kqueue is broken on most operating systems, so by default it
154     won't be used on many platforms, but you can still create your own event
155 root 1.40 loop with kqueue backend if you ask specifically for it.
156 root 1.31
157     Here is what we know:
158 root 1.23
159 root 1.45 NetBSD: partially working in at least 3.1 and later. Yeah! :)
160     FreeBSD: broken on at least 6.2-STABLE, spotty in later versions,
161 root 1.28 sockets *likely* work, ptys definitely don't.
162 root 1.23 OpenBSD: reports indicate that it likely doesn't work
163     (similar problems as on FreeBSD).
164 root 1.45 OS X: completely, utterly broken on at least <= 10.6.
165 root 1.11
166 root 1.15 EOF
167    
168 root 1.55 my $can_kqueue = have_inc "sys/event.h";
169 root 1.37 $can_kqueue = $ENV{EV_KQUEUE} if exists $ENV{EV_KQUEUE};
170 root 1.23 $DEFINE .= " -DEV_USE_KQUEUE=" . (0 + (prompt ("Enable kqueue backend (y/n)?", $can_kqueue ? "y" : "n") =~ /[yY]/));
171 root 1.11
172     print <<EOF;
173    
174 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
175 root 1.11
176    
177 root 1.21 Similarly to the kqueue backend above, EV can take advantage of the
178 root 1.26 solaris 10 event port interface. Support for event ports will be detected
179     at runtime, with a safe fallback to other methods when it cannot be used.
180 root 1.21
181     EOF
182    
183 root 1.55 $DEFINE .= " -DEV_USE_PORT=" . (0 + (prompt ("Enable event port backend (y/n)?", (have_inc "sys/port.h") ? "y" : "n") =~ /[yY]/));
184 root 1.21
185     print <<EOF;
186    
187 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
188 root 1.21
189    
190 root 1.11 EV needs the functions pthread_atfork and clock_gettime. On most systems
191 root 1.15 you need some special libraries for this (such as -lrt and -lpthread). You
192 root 1.23 can specify additional libraries to provide these calls (and any other
193     required by EV) now, or accept the default.
194 root 1.11
195 root 1.53 On GNU/Linux systems, EV uses the LSB 3.1 __register_atfork function
196     to avoid the dependency on libpthread, and directly uses the clock_gettime
197     syscall to avoid a dependency on librt.
198    
199 root 1.11 EOF
200    
201 root 1.38 my $solaris_libs = $^O =~ /solaris/i ? "-lsocket -lnsl" : "";
202 root 1.53 my $librt = $^O =~ /linux/i ? "" : "-lpthread -lrt";
203     my $LIBS = exists $ENV{EV_LIBS} ? $ENV{EV_LIBS} : "$librt $solaris_libs";
204     $LIBS = prompt "Extra libraries for pthread_atfork and clock_gettime?", $LIBS;
205 root 1.15
206 root 1.11
207     print <<EOF;
208    
209 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
210 root 1.11
211    
212 root 1.25 A backend of a different kind is the Linux inotify(7) interface, which can
213     be used to speed up (and reduce resource consumption) of stat watchers. If
214 root 1.40 you have the include file and libc support for it, it is usually a good
215     idea to enable it, as kernel availability is detected at runtime.
216 root 1.25
217     EOF
218    
219 root 1.55 my $can_inotify = have_inc "sys/inotify.h";
220 root 1.37 $can_inotify = $ENV{EV_INOTIFY} if exists $ENV{EV_INOTIFY};
221 root 1.25 $DEFINE .= " -DEV_USE_INOTIFY=" . (0 + (prompt ("Enable inotify support (y/n)?", $can_inotify ? "y" : "n") =~ /[yY]/));
222    
223     print <<EOF;
224    
225     *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
226    
227    
228 root 1.36 Another useful bit of functionality is the Linux eventfd, which is useful
229     for faster signal handling (don't care) and intra-thread communications
230     (more relevant). Kernel support for this will be probed at runtime, but
231     your libc must contain the necessary wrapper. Glibc 2.7 and later should
232     have this wrapper.
233    
234     EOF
235    
236 root 1.55 my $can_eventfd = have_inc "sys/eventfd.h";
237 root 1.37 $can_eventfd = $ENV{EV_EVENTFD} if exists $ENV{EV_EVENTFD};
238     $DEFINE .= " -DEV_USE_EVENTFD=" . (0 + (prompt ("Enable linux eventfd support (y/n)?", $can_eventfd ? "y" : "n") =~ /[yY]/));
239 root 1.36
240     print <<EOF;
241    
242     *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
243    
244    
245 root 1.42 Another sometimes useful bit of functionality is the Linux signalfd, which
246     is useful for faster signal handling (don't care). Kernel support for
247     this will be probed at runtime, but your libc must contain the necessary
248 root 1.44 wrapper. Glibc 2.7 and later should have this wrapper.
249 root 1.42
250     EOF
251    
252 root 1.55 my $can_signalfd = have_inc "sys/signalfd.h";
253 root 1.42 $can_signalfd = $ENV{EV_SIGNALFD} if exists $ENV{EV_SIGNALFD};
254     $DEFINE .= " -DEV_USE_SIGNALFD=" . (0 + (prompt ("Enable linux signalfd support (y/n)?", $can_signalfd ? "y" : "n") =~ /[yY]/));
255    
256     print <<EOF;
257    
258     *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
259    
260    
261 root 1.48 Very rarely, people want to tweak EV even more, e.g. to exclude
262 root 1.52 or include certain watcher types or backends. This can be done by adding
263 root 1.48 extra -D options here, or via the EV_EXTRA_DEFS environment variable.
264 root 1.52
265     For example, if you run into compile problems because of missing memory
266     fences (or you just want extra performance), you can tell EV to not support
267     smp and threads via -DEV_NO_THREADS.
268    
269 root 1.48 Normal persons just press enter.
270    
271     EOF
272    
273 root 1.49 $DEFINE .= " " . prompt "Any extra -D options?", "$ENV{EV_EXTRA_DEFS}";
274 root 1.48
275     print <<EOF;
276    
277     *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
278    
279    
280 root 1.11 EOF
281    
282 root 1.47 my @anyevent = eval { require AnyEvent; $AnyEvent::VERSION < 5.29 } ? (AnyEvent => 5.29) : ();
283 root 1.20
284 root 1.1 WriteMakefile(
285     dist => {
286 root 1.2 PREOP => 'pod2text EV.pm | tee README >$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;',
287 root 1.1 COMPRESS => 'gzip -9v',
288     SUFFIX => '.gz',
289     },
290 root 1.10 depend => {
291 root 1.13 "EV.c" => "EV/EVAPI.h "
292 root 1.17 . "libev/ev.c libev/ev.h libev/ev_epoll.c libev/ev_select.c libev/ev_kqueue.c libev/ev_poll.c "
293 root 1.30 . "libev/ev_vars.h libev/ev_wrap.h",
294 root 1.10 },
295 root 1.8 INC => "-Ilibev",
296 root 1.11 DEFINE => "$DEFINE",
297 root 1.2 NAME => "EV",
298 root 1.11 LIBS => [$LIBS],
299 root 1.20 PREREQ_PM => {
300     @anyevent,
301 root 1.41 "common::sense" => 0,
302 root 1.20 },
303 root 1.2 VERSION_FROM => "EV.pm",
304 root 1.5 PM => {
305 root 1.54 'EV.pm' => '$(INST_LIB)/EV.pm',
306     'EV/EVAPI.h' => '$(INST_LIB)/EV/EVAPI.h',
307     'EV/MakeMaker.pm' => '$(INST_LIB)/EV/MakeMaker.pm',
308     'libev/ev.h' => '$(INST_LIB)/EV/ev.h',
309     'libev/ev.pod' => '$(INST_LIB)/EV/libev.pod',
310 root 1.5 },
311 root 1.34 MAN3PODS => {
312     'EV.pm' => '$(INST_MAN3DIR)/EV.$(MAN3EXT)',
313     'EV/MakeMaker.pm' => '$(INST_MAN3DIR)/EV::MakeMaker.$(MAN3EXT)',
314 root 1.35 'libev/ev.pod' => '$(INST_MAN3DIR)/EV::libev.$(MAN3EXT)',
315 root 1.34 },
316 root 1.1 );
317    
318 root 1.6