ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/Makefile.PL
(Generate patch)

Comparing EV/Makefile.PL (file contents):
Revision 1.19 by root, Mon Nov 12 01:01:13 2007 UTC vs.
Revision 1.22 by root, Sat Nov 17 01:41:33 2007 UTC

1use 5.006; 1use 5.006;
2 2
3use Config; 3use Config;
4use ExtUtils::MakeMaker; 4use ExtUtils::MakeMaker;
5
6 5
7unless (-e "libev/ev_epoll.c") { 6unless (-e "libev/ev_epoll.c") {
8 print <<EOF; 7 print <<EOF;
9 8
10*** 9***
17 exit 1; 16 exit 1;
18} 17}
19 18
20print <<EOF; 19print <<EOF;
21 20
22
23*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 21*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
22
24 23
25Welcome to EV configuration. If you are in a hurry, just press return here 24Welcome to EV configuration. If you are in a hurry, just press return here
26and hope for the best. The defaults should usually do. 25and hope for the best. The defaults should usually do.
27 26
28EOF 27EOF
31 $ENV{PERL_MM_USE_DEFAULT} = 1; 30 $ENV{PERL_MM_USE_DEFAULT} = 1;
32} 31}
33 32
34print <<EOF; 33print <<EOF;
35 34
36
37*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 35*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
36
38 37
39POSIX optionally offers support for a monotonic clock source. EV 38POSIX optionally offers support for a monotonic clock source. EV
40can take advantage of this clock source to detect time jumps 39can take advantage of this clock source to detect time jumps
41reliably. Unfortunately, some systems are bound to be broken, so you can 40reliably. Unfortunately, some systems are bound to be broken, so you can
42disable this here: you can completely disable the detection and use of 41disable this here: you can completely disable the detection and use of
43the monotonic clock by answering 'n' here. Support for this clock type 42the monotonic clock by answering 'n' here. Support for this clock type
44will otherwise be autodetected at both compile- and runtime. 43will otherwise be autodetected at both compile- and runtime.
45 44
46EOF 45EOF
47 46
48if (prompt ("Enable optional support for CLOCK_MONOTONIC (y/n)?", "y") =~ /[yY]/) { 47$DEFINE .= " -DEV_USE_MONOTONIC=" . (0 + (prompt ("Enable optional support for CLOCK_MONOTONIC (y/n)?", "y") =~ /[yY]/));
49 $DEFINE .= " -DEV_USE_MONOTONIC";
50}
51 48
52print <<EOF; 49print <<EOF;
53 50
54
55*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 51*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
52
56 53
57POSIX optionally offers support for a (potentially) high-resolution 54POSIX optionally offers support for a (potentially) high-resolution
58realtime clock interface. In a good implementation, using it is faster 55realtime clock interface. In a good implementation, using it is faster
59than the normal method of using gettimeofday. Unfortunately, this option 56than the normal method of using gettimeofday. Unfortunately, this option
60is also bound to be broken on some systems, so you can disable use and 57is also bound to be broken on some systems, so you can disable use and
61probing of this feature altogether here. Otherwise support for this clock 58probing of this feature altogether here. Otherwise support for this clock
62type will be autodetected at compiletime. 59type will be autodetected at compiletime.
63 60
64EOF 61EOF
65 62
66if (prompt ("Prefer clock_gettime (CLOCK_REALTIME) over gettimeofday (y/n)?", "y") !~ /[yY]/) { 63$DEFINE .= " -DEV_USE_REALTIME=" . (0 + (prompt ("Prefer clock_gettime (CLOCK_REALTIME) over gettimeofday (y/n)?", "y") =~ /[yY]/));
67 $DEFINE .= " -DEV_USE_REALTIME=0";
68}
69 64
70print <<EOF; 65print <<EOF;
71 66
72
73*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 67*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
68
74 69
75EV can use various backends with various portability issue. The select 70EV can use various backends with various portability issue. The select
76backend is the most portable and makes for a good fallback, but it can be 71backend is the most portable and makes for a good fallback, but it can be
77limited to a low number of file descriptors and/or might not compile. If 72limited to a low number of file descriptors and/or might not compile. If
78you have problems with compiling ev_select., you might try to play around 73you have problems with compiling ev_select.c, you might try to play around
79with disabling it here, or forcing it to use the fd_set provided by your 74with disabling it here, or forcing it to use the fd_set provided by your
80OS, via the next question. I highly recommend keeping it in. 75OS, via the next question. I highly recommend keeping it in.
81 76
82EOF 77EOF
83 78
84if (prompt ("Enable select backend (y/n)?", "y") =~ /[yY]/) { 79if (prompt ("Enable select backend (y/n)?", "y") =~ /[yY]/) {
85 $DEFINE .= " -DEV_USE_SELECT"; 80 $DEFINE .= " -DEV_USE_SELECT=1";
86 81
87 print <<EOF; 82 print <<EOF;
88 83
89
90*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 84*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
85
91 86
92The select backend can operate in two modes. One uses the system-provided 87The select backend can operate in two modes. One uses the system-provided
93fd_set and is usually limited to 1024 file descriptors (64 on windows), 88fd_set and is usually limited to 1024 file descriptors (64 on windows),
94the other requires your header files to define NFDBITS and declare a 89the other requires your header files to define NFDBITS and declare a
95suitable fd_mask type. If you run into problems compiling ev_select.c, you 90suitable fd_mask type. If you run into problems compiling ev_select.c, you
98EOF 93EOF
99 94
100 if (prompt ("Force use of system fd_set for select backend (y/n)?", "n") =~ /[yY]/) { 95 if (prompt ("Force use of system fd_set for select backend (y/n)?", "n") =~ /[yY]/) {
101 $DEFINE .= " -DEV_SELECT_USE_FD_SET"; 96 $DEFINE .= " -DEV_SELECT_USE_FD_SET";
102 } 97 }
98} else {
99 $DEFINE .= " -DEV_USE_SELECT=0";
103} 100}
104 101
105print <<EOF; 102print <<EOF;
106 103
107
108*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 104*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
105
109 106
110The second very portable backend is poll(2). It does not exist on windows 107The second very portable backend is poll(2). It does not exist on windows
111and various versions of Mac OS X (and on the other versions it simply 108and various versions of Mac OS X (and on the other versions it simply
112doesn't work), but works basically everywhere else. It is recommended to use 109doesn't work), but works basically everywhere else. It is recommended to use
113the default here unless you run into compile problems in ev_poll.c. 110the default here unless you run into compile problems in ev_poll.c.
114 111
115EOF 112EOF
116 113
117if (prompt ("Enable poll backend (y/n)?", (-e "/usr/include/poll.h") ? "y" : "n") =~ /[yY]/) { 114$DEFINE .= " -DEV_USE_POLL=" . (0 + (prompt ("Enable poll backend (y/n)?", (-e "/usr/include/poll.h") ? "y" : "n") =~ /[yY]/));
118 $DEFINE .= " -DEV_USE_POLL";
119}
120 115
121print <<EOF; 116print <<EOF;
122 117
123
124*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 118*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
119
125 120
126EV by default uses select, which makes it hard to write efficient servers, 121EV by default uses select, which makes it hard to write efficient servers,
127especially if the number of active conencitons is much lower than the open 122especially if the number of active connections is much lower than the open
128ones. GNU/Linux systems have a more scalable method called "epoll", which 123ones. GNU/Linux systems have a more scalable method called "epoll", which
129EV can use. For this to work, both your kernel and glibc have to support 124EV can use. For this to work, both your kernel and glibc have to support
130epoll, but if you can compile it, the detection will be done at runtime, 125epoll, but if you can compile it, the detection will be done at runtime,
131and EV will safely fall back to using select when epoll isn't available. 126and EV will safely fall back to using select when epoll isn't available.
132If unsure, accept the default. 127If unsure, accept the default.
133 128
134EOF 129EOF
135 130
136if (prompt ("Enable epoll backend (y/n)?", (-e "/usr/include/sys/epoll.h") ? "y" : "n") =~ /[yY]/) { 131$DEFINE .= " -DEV_USE_EPOLL=" . (0 + (prompt ("Enable epoll backend (y/n)?", (-e "/usr/include/sys/epoll.h") ? "y" : "n") =~ /[yY]/));
137 $DEFINE .= " -DEV_USE_EPOLL";
138}
139 132
140print <<EOF; 133print <<EOF;
141 134
142
143*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 135*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
136
144 137
145Similarly to the epoll backend above, EV can take advantage of kqueue 138Similarly to the epoll backend above, EV can take advantage of kqueue
146on many BSD systems (it seems to be broken on Mac OS X though, but what 139on many BSD systems (it seems to be broken on Mac OS X though, but what
147isn't broken on that shoddy platform... ah yes, the cash gushing by apple, 140isn't broken on that shoddy platform... ah yes, the cash gushing by apple,
148selling defective software works perfectly there). Support for kqueue will 141selling defective software works perfectly there). Support for kqueue will
149be detected at runtime, with a safe fallback to other methods when it 142be detected at runtime, with a safe fallback to other methods when it
150cannot be used. 143cannot be used.
151 144
152EOF 145EOF
153 146
154if (prompt ("Enable kqueue backend (y/n)?", (-e "/usr/include/sys/event.h") ? "y" : "n") =~ /[yY]/) { 147$DEFINE .= " -DEV_USE_KQUEUE=" . (0 + (prompt ("Enable kqueue backend (y/n)?", (-e "/usr/include/sys/event.h") ? "y" : "n") =~ /[yY]/));
155 $DEFINE .= " -DEV_USE_KQUEUE";
156}
157 148
158print <<EOF; 149print <<EOF;
159 150
160
161*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 151*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
152
153
154Similarly to the kqueue backend above, EV can take advantage of the
155solaris 10 port interface. Support for port will be detected at runtime,
156with a safe fallback to other methods when it cannot be used.
157
158EOF
159
160$DEFINE .= " -DEV_USE_PORT=" . (0 + (prompt ("Enable port backend (y/n)?", (-e "/usr/include/sys/port.h") ? "y" : "n") =~ /[yY]/));
161
162print <<EOF;
163
164*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
165
162 166
163EV needs the functions pthread_atfork and clock_gettime. On most systems 167EV needs the functions pthread_atfork and clock_gettime. On most systems
164you need some special libraries for this (such as -lrt and -lpthread). You 168you need some special libraries for this (such as -lrt and -lpthread). You
165can specify additional libraries to provide these calls now, or accept the 169can specify additional libraries to provide these calls now, or accept the
166default. 170default.
170$LIBS = prompt "Extra libraries for pthread_atfork and clock_gettime?", "-lpthread -lrt"; 174$LIBS = prompt "Extra libraries for pthread_atfork and clock_gettime?", "-lpthread -lrt";
171 175
172 176
173print <<EOF; 177print <<EOF;
174 178
175
176*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 179*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
177 180
181
178EOF 182EOF
183
184my @anyevent = eval { require AnyEvent; $AnyEvent::VERSION < 2.6 } ? (AnyEvent => 2.6) : ();
179 185
180WriteMakefile( 186WriteMakefile(
181 dist => { 187 dist => {
182 PREOP => 'pod2text EV.pm | tee README >$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;', 188 PREOP => 'pod2text EV.pm | tee README >$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;',
183 COMPRESS => 'gzip -9v', 189 COMPRESS => 'gzip -9v',
190 }, 196 },
191 INC => "-Ilibev", 197 INC => "-Ilibev",
192 DEFINE => "$DEFINE", 198 DEFINE => "$DEFINE",
193 NAME => "EV", 199 NAME => "EV",
194 LIBS => [$LIBS], 200 LIBS => [$LIBS],
201 PREREQ_PM => {
202 @anyevent,
203 },
195 VERSION_FROM => "EV.pm", 204 VERSION_FROM => "EV.pm",
196 PM => { 205 PM => {
197 'EV.pm' => '$(INST_LIBDIR)/EV.pm', 206 'EV.pm' => '$(INST_LIBDIR)/EV.pm',
198 'EV/DNS.pm' => '$(INST_LIBDIR)/EV/DNS.pm', 207 'EV/DNS.pm' => '$(INST_LIBDIR)/EV/DNS.pm',
199 'EV/EVAPI.h' => '$(INST_LIBDIR)/EV/EVAPI.h', 208 'EV/EVAPI.h' => '$(INST_LIBDIR)/EV/EVAPI.h',

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines