ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/Makefile.PL
Revision: 1.32
Committed: Sun Apr 6 09:53:16 2008 UTC (16 years, 1 month ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.31: +15 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.4 use 5.006;
2    
3 root 1.7 use Config;
4 root 1.1 use ExtUtils::MakeMaker;
5    
6 root 1.10 unless (-e "libev/ev_epoll.c") {
7     print <<EOF;
8    
9     ***
10     *** ERROR: libev is missing or damaged. If you used a CVS check-out of EV,
11     *** you also have to check-out the "libev" module from the same CVS
12     *** repository into the EV dir (i.e. EV/libev from outside).
13     ***
14    
15     EOF
16     exit 1;
17     }
18    
19 root 1.11 print <<EOF;
20    
21 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
22 root 1.11
23    
24     Welcome to EV configuration. If you are in a hurry, just press return here
25     and hope for the best. The defaults should usually do.
26    
27     EOF
28    
29     if (prompt ("Skip further questions and use defaults (y/n)?", "y") =~ /[yY]/) {
30     $ENV{PERL_MM_USE_DEFAULT} = 1;
31     }
32    
33     print <<EOF;
34    
35 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
36 root 1.11
37    
38 root 1.14 POSIX optionally offers support for a monotonic clock source. EV
39     can take advantage of this clock source to detect time jumps
40     reliably. Unfortunately, some systems are bound to be broken, so you can
41     disable this here: you can completely disable the detection and use of
42     the monotonic clock by answering 'n' here. Support for this clock type
43 root 1.29 will otherwise be autodetected at both compile- and runtime. (this setting
44     currently affects the use of nanosleep over select as well).
45 root 1.11
46     EOF
47    
48 root 1.22 $DEFINE .= " -DEV_USE_MONOTONIC=" . (0 + (prompt ("Enable optional support for CLOCK_MONOTONIC (y/n)?", "y") =~ /[yY]/));
49 root 1.11
50     print <<EOF;
51    
52 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
53 root 1.11
54    
55     POSIX optionally offers support for a (potentially) high-resolution
56     realtime clock interface. In a good implementation, using it is faster
57     than the normal method of using gettimeofday. Unfortunately, this option
58     is also bound to be broken on some systems, so you can disable use and
59     probing of this feature altogether here. Otherwise support for this clock
60     type will be autodetected at compiletime.
61    
62     EOF
63    
64 root 1.22 $DEFINE .= " -DEV_USE_REALTIME=" . (0 + (prompt ("Prefer clock_gettime (CLOCK_REALTIME) over gettimeofday (y/n)?", "y") =~ /[yY]/));
65 root 1.11
66     print <<EOF;
67    
68 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
69 root 1.11
70    
71 root 1.32 Another useful bit of functionality is the Linux eventfd, which is useful
72     for faster signal handling (don't care) and intra-thread communications
73     (mostly useful for embedding). Kernel support for this will be probed at
74     runtime, but your libc must contain the necessary wrapper. Glibc 2.7 and
75     later should have this wrapper.
76    
77     EOF
78    
79     $DEFINE .= " -DEV_USE_EVENTFD=" . (0 + (prompt ("Enable linux eventfd support (y/n)?", (-e "/usr/include/sys/eventfd.h") ? "y" : "n") =~ /[yY]/));
80    
81     print <<EOF;
82    
83     *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
84    
85    
86 root 1.19 EV can use various backends with various portability issue. The select
87     backend is the most portable and makes for a good fallback, but it can be
88 root 1.22 limited to a low number of file descriptors and/or might not compile. If
89     you have problems with compiling ev_select.c, you might try to play around
90 root 1.19 with disabling it here, or forcing it to use the fd_set provided by your
91     OS, via the next question. I highly recommend keeping it in.
92    
93     EOF
94    
95     if (prompt ("Enable select backend (y/n)?", "y") =~ /[yY]/) {
96 root 1.22 $DEFINE .= " -DEV_USE_SELECT=1";
97 root 1.19
98     print <<EOF;
99    
100 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
101 root 1.19
102    
103     The select backend can operate in two modes. One uses the system-provided
104     fd_set and is usually limited to 1024 file descriptors (64 on windows),
105     the other requires your header files to define NFDBITS and declare a
106     suitable fd_mask type. If you run into problems compiling ev_select.c, you
107     can try forcing the use of the system fd_set here.
108    
109     EOF
110    
111     if (prompt ("Force use of system fd_set for select backend (y/n)?", "n") =~ /[yY]/) {
112     $DEFINE .= " -DEV_SELECT_USE_FD_SET";
113     }
114 root 1.22 } else {
115     $DEFINE .= " -DEV_USE_SELECT=0";
116 root 1.19 }
117    
118     print <<EOF;
119    
120 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
121 root 1.19
122    
123     The second very portable backend is poll(2). It does not exist on windows
124     and various versions of Mac OS X (and on the other versions it simply
125     doesn't work), but works basically everywhere else. It is recommended to use
126     the default here unless you run into compile problems in ev_poll.c.
127    
128     EOF
129    
130 root 1.22 $DEFINE .= " -DEV_USE_POLL=" . (0 + (prompt ("Enable poll backend (y/n)?", (-e "/usr/include/poll.h") ? "y" : "n") =~ /[yY]/));
131 root 1.19
132     print <<EOF;
133    
134 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
135 root 1.19
136    
137 root 1.24 Select and poll make it hard to write efficient servers, especially if the
138     number of active connections is much lower than the watched ones. GNU/Linux
139     systems have a more scalable method called "epoll", which EV can use. For
140     this to work, both your kernel and glibc have to support epoll, but if you
141     can compile it, the detection will be done at runtime, and EV will safely
142     fall back to using select when epoll isn't available. If unsure, accept
143     the default.
144 root 1.11
145     EOF
146    
147 root 1.22 $DEFINE .= " -DEV_USE_EPOLL=" . (0 + (prompt ("Enable epoll backend (y/n)?", (-e "/usr/include/sys/epoll.h") ? "y" : "n") =~ /[yY]/));
148 root 1.15
149     print <<EOF;
150    
151 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
152 root 1.15
153    
154 root 1.23 Similarly to the epoll backend above, EV can take advantage of kqueue on
155     many BSD systems. Support for kqueue will be detected at runtime, with a
156     safe fallback to other methods when it cannot be used.
157    
158 root 1.31 Note that kqueue is broken on most operating systems, so by default it
159     won't be used on many platforms, but you can still create your own event
160     loop with qkueue backend.
161    
162     Here is what we know:
163 root 1.23
164 root 1.28 NetBSD: partially working in at least 3.1. Yeah! :)
165 root 1.24 FreeBSD: broken on at least 6.2-STABLE,
166 root 1.28 sockets *likely* work, ptys definitely don't.
167 root 1.23 OpenBSD: reports indicate that it likely doesn't work
168     (similar problems as on FreeBSD).
169 root 1.28 OS X: completely, utterly broken on at least < 10.5.
170 root 1.11
171 root 1.15 EOF
172    
173 root 1.28 my $can_kqueue = -e "/usr/include/sys/event.h";
174 root 1.23
175     $DEFINE .= " -DEV_USE_KQUEUE=" . (0 + (prompt ("Enable kqueue backend (y/n)?", $can_kqueue ? "y" : "n") =~ /[yY]/));
176 root 1.11
177     print <<EOF;
178    
179 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
180 root 1.11
181    
182 root 1.21 Similarly to the kqueue backend above, EV can take advantage of the
183 root 1.26 solaris 10 event port interface. Support for event ports will be detected
184     at runtime, with a safe fallback to other methods when it cannot be used.
185 root 1.21
186     EOF
187    
188 root 1.26 $DEFINE .= " -DEV_USE_PORT=" . (0 + (prompt ("Enable event port backend (y/n)?", (-e "/usr/include/sys/port.h") ? "y" : "n") =~ /[yY]/));
189 root 1.21
190     print <<EOF;
191    
192 root 1.22 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
193 root 1.21
194    
195 root 1.11 EV needs the functions pthread_atfork and clock_gettime. On most systems
196 root 1.15 you need some special libraries for this (such as -lrt and -lpthread). You
197 root 1.23 can specify additional libraries to provide these calls (and any other
198     required by EV) now, or accept the default.
199 root 1.11
200     EOF
201    
202 root 1.23 $SOLARIS_LIBS = $^O =~ /solaris/ ? " -lsocket -lnsl" : "";
203    
204     $LIBS = prompt "Extra libraries for pthread_atfork and clock_gettime?", "-lpthread -lrt$SOLARIS_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     you have it, it is usually a good idea to enable it.
215    
216     EOF
217    
218     my $can_inotify = -e "/usr/include/sys/inotify.h";
219    
220     $DEFINE .= " -DEV_USE_INOTIFY=" . (0 + (prompt ("Enable inotify support (y/n)?", $can_inotify ? "y" : "n") =~ /[yY]/));
221    
222     print <<EOF;
223    
224     *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
225    
226    
227 root 1.11 EOF
228    
229 root 1.20 my @anyevent = eval { require AnyEvent; $AnyEvent::VERSION < 2.6 } ? (AnyEvent => 2.6) : ();
230    
231 root 1.1 WriteMakefile(
232     dist => {
233 root 1.2 PREOP => 'pod2text EV.pm | tee README >$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;',
234 root 1.1 COMPRESS => 'gzip -9v',
235     SUFFIX => '.gz',
236     },
237 root 1.10 depend => {
238 root 1.13 "EV.c" => "EV/EVAPI.h "
239 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 "
240 root 1.30 . "libev/ev_vars.h libev/ev_wrap.h",
241 root 1.10 },
242 root 1.8 INC => "-Ilibev",
243 root 1.11 DEFINE => "$DEFINE",
244 root 1.2 NAME => "EV",
245 root 1.11 LIBS => [$LIBS],
246 root 1.20 PREREQ_PM => {
247     @anyevent,
248     },
249 root 1.2 VERSION_FROM => "EV.pm",
250 root 1.5 PM => {
251     'EV.pm' => '$(INST_LIBDIR)/EV.pm',
252     'EV/EVAPI.h' => '$(INST_LIBDIR)/EV/EVAPI.h',
253     'EV/MakeMaker.pm' => '$(INST_LIBDIR)/EV/MakeMaker.pm',
254 root 1.8 'libev/ev.h' => '$(INST_LIBDIR)/EV/ev.h',
255 root 1.5 },
256 root 1.1 );
257    
258 root 1.6