ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/Makefile.PL
Revision: 1.17
Committed: Thu Nov 8 00:44:17 2007 UTC (16 years, 6 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-0_6
Changes since 1.16: +1 -1 lines
Log Message:
implement periodic reschedule callbacks

File Contents

# Content
1 use 5.006;
2
3 use Config;
4 use ExtUtils::MakeMaker;
5
6
7 unless (-e "libev/ev_epoll.c") {
8 print <<EOF;
9
10 ***
11 *** ERROR: libev is missing or damaged. If you used a CVS check-out of EV,
12 *** you also have to check-out the "libev" module from the same CVS
13 *** repository into the EV dir (i.e. EV/libev from outside).
14 ***
15
16 EOF
17 exit 1;
18 }
19
20 print <<EOF;
21
22
23 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
24
25 Welcome to EV configuration. If you are in a hurry, just press return here
26 and hope for the best. The defaults should usually do.
27
28 EOF
29
30 if (prompt ("Skip further questions and use defaults (y/n)?", "y") =~ /[yY]/) {
31 $ENV{PERL_MM_USE_DEFAULT} = 1;
32 }
33
34 print <<EOF;
35
36
37 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
38
39 POSIX optionally offers support for a monotonic clock source. EV
40 can take advantage of this clock source to detect time jumps
41 reliably. Unfortunately, some systems are bound to be broken, so you can
42 disable this here: you can completely disable the detection and use of
43 the monotonic clock by answering 'n' here. Support for this clock type
44 will otherwise be autodetected at both compile- and runtime.
45
46 EOF
47
48 if (prompt ("Enable optional support for CLOCK_MONOTONIC (y/n)?", "y") =~ /[yY]/) {
49 $DEFINE .= " -DEV_USE_MONOTONIC";
50 }
51
52 print <<EOF;
53
54
55 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
56
57 POSIX optionally offers support for a (potentially) high-resolution
58 realtime clock interface. In a good implementation, using it is faster
59 than the normal method of using gettimeofday. Unfortunately, this option
60 is also bound to be broken on some systems, so you can disable use and
61 probing of this feature altogether here. Otherwise support for this clock
62 type will be autodetected at compiletime.
63
64 EOF
65
66 if (prompt ("Prefer clock_gettime (CLOCK_REALTIME) over gettimeofday (y/n)?", "y") !~ /[yY]/) {
67 $DEFINE .= " -DEV_USE_REALTIME=0";
68 }
69
70 print <<EOF;
71
72
73 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
74
75 EV by default uses select, which makes it hard to write efficient servers,
76 especially if the number of active conencitons is much lower than the open
77 ones. GNU/Linux systems have a more scalable method called "epoll", which
78 EV can use. For this to work, both your kernel and glibc have to support
79 epoll, but if you can compile it, the detection will be done at runtime,
80 and EV will safely fall back to using select when epoll isn't available.
81 If unsure, accept the default.
82
83 EOF
84
85 if (prompt ("Enable epoll backend (y/n)?", (-e "/usr/include/sys/epoll.h") ? "y" : "n") =~ /[yY]/) {
86 $DEFINE .= " -DEV_USE_EPOLL";
87 }
88
89 print <<EOF;
90
91
92 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
93
94 Similarly to the epoll backend above, EV can take advantage of kqueue on
95 many BSD systems (it seems to be broken on Mac OS X though). The kqueue
96 backend has not been tested, however, so it is disabled by default. Please
97 test (and preferably fix) the kqueue backend when you have a machine
98 supporting it. Support for kqueue will be detected at runtime, with a
99 safe fallback to other methods when it cannot be used.
100
101 EOF
102
103 if (prompt ("Enable kqueue backend (y/n)?", (-e "/usr/include/sys/event.h") ? "y" : "n") =~ /[yY]/) {
104 $DEFINE .= " -DEV_USE_KQUEUE";
105 }
106
107 print <<EOF;
108
109
110 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
111
112 EV needs the functions pthread_atfork and clock_gettime. On most systems
113 you need some special libraries for this (such as -lrt and -lpthread). You
114 can specify additional libraries to provide these calls now, or accept the
115 default.
116
117 EOF
118
119 $LIBS = prompt "Extra libraries for pthread_atfork and clock_gettime?", "-lpthread -lrt";
120
121
122 print <<EOF;
123
124
125 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
126
127 EOF
128
129 WriteMakefile(
130 dist => {
131 PREOP => 'pod2text EV.pm | tee README >$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;',
132 COMPRESS => 'gzip -9v',
133 SUFFIX => '.gz',
134 },
135 depend => {
136 "EV.c" => "EV/EVAPI.h "
137 . "libev/ev.c libev/ev.h libev/ev_epoll.c libev/ev_select.c libev/ev_kqueue.c libev/ev_poll.c "
138 . "libev/event.h libev/event.c libev/evdns.h libev/evdns.c",
139 },
140 INC => "-Ilibev",
141 DEFINE => "$DEFINE",
142 NAME => "EV",
143 LIBS => [$LIBS],
144 VERSION_FROM => "EV.pm",
145 PM => {
146 'EV.pm' => '$(INST_LIBDIR)/EV.pm',
147 'EV/AnyEvent.pm' => '$(INST_LIBDIR)/EV/AnyEvent.pm',
148 'EV/DNS.pm' => '$(INST_LIBDIR)/EV/DNS.pm',
149 'EV/EVAPI.h' => '$(INST_LIBDIR)/EV/EVAPI.h',
150 'EV/MakeMaker.pm' => '$(INST_LIBDIR)/EV/MakeMaker.pm',
151 'libev/ev.h' => '$(INST_LIBDIR)/EV/ev.h',
152 },
153 );
154
155