-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile.PL
151 lines (126 loc) · 3.41 KB
/
Makefile.PL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!perl -w
use strict;
use ExtUtils::MakeMaker;
use Getopt::Long;
use POE::Test::Loops 1.033;
use lib 'inc';
use Devel::CheckLib;
unless ($^O eq 'linux') {
die "OS unsupported: this module requires Linux\n";
}
# epoll isn't available in all architectures until fairly recently
my %lib_opts =
(
header => "sys/epoll.h",
lib => "c",
function => <<'CODE',
int fd = epoll_create(10);
return fd == -1 ? 1 : 0;
CODE
);
unless (eval { assert_lib(%lib_opts); 1 }) {
print $@;
die "OS unsupported: your Linux doesn't appear to have epoll support\n";
}
my $trace;
my $default;
GetOptions('trace' => \$trace,
'default' => \$default);
# Switch to default behavior if STDIN isn't a tty.
# maybe POE::Test::Loops should export a function that does all this...
unless (-t STDIN) {
warn(
"\n",
"=============================================\n\n",
"STDIN is not a terminal. Assuming --default.\n\n",
"=============================================\n\n",
);
++$default;
}
# Remind the user she can use --default.
unless ($default) {
warn(
"\n",
"================================================\n\n",
"Prompts may be bypassed with the --default flag.\n\n",
"================================================\n\n",
);
}
# Should we run the network tests?
my $prompt = (
"Some of POE's tests require a functional network.\n" .
"You can skip these tests if you'd like.\n\n" .
"Would you like to skip the network tests?"
);
my $ret = "n";
if ($default) {
print $prompt, " [$ret] $ret\n\n";
}
else {
$ret = prompt($prompt, "n");
}
my $marker = 'run_network_tests';
unlink $marker;
if ($ret =~ /^n$/i) {
open(TOUCH,"+>$marker") and close TOUCH;
}
print "\n";
POE::Test::Loops::generate('t', [ 'POE::XS::Loop::EPoll' ], 0);
my %opts =
(
NAME => 'POE::XS::Loop::EPoll',
VERSION_FROM => 'lib/POE/XS/Loop/EPoll.pm',
OBJECT => 'EPoll.o alloc.o poexs.o',
PREREQ_PM =>
{
'POE' => 1.003,
'XSLoader' => 0
},
test => {
TESTS => 't/poe_xs_loop_epoll/*.t',
},
clean => { FILES => 't/poe_xs_loop_epoll/*.t ' . $marker },
);
my $eu_mmv = eval $ExtUtils::MakeMaker::VERSION;
if ($eu_mmv > 6.06) {
$opts{AUTHOR} = 'Tony Cook <tonyc@cpan.org>';
$opts{ABSTRACT} = 'XS loop implementation for POE using epoll_*()';
}
if ($trace) {
warn <<TRACEMSG;
==============================
Building with tracing enabled
==============================
TRACEMSG
$opts{DEFINE} = '-DXS_LOOP_TRACE';
}
else {
warn <<TRACEMSG;
========================================
Building with tracing disabled - run:
perl Makefile.PL --trace
for runtime POE tracing of the loop code
========================================
TRACEMSG
}
# LICENSE was introduced in 6.30_01, but Debian etch included
# (as of 2007/01/12) an ExtUtils::MakeMaker versioned 6.30_01 without
# LICENSE support
if ($eu_mmv > 6.3001) {
$opts{LICENSE} = 'perl';
}
# META_MERGE was introduced in 6.45_01 with a fix in 6.46
# previously we used EXTRA_META, which is deprecated
if ($eu_mmv >= 6.46) {
$opts{META_MERGE} =
{
configure_requires => { "POE::Test::Loops" => "1.033" },
build_requires => { "POE::Test::Loops" => "1.033" },
resources =>
{
repository => "git://github.com/tonycoz/poe-xs-loop-epoll.git",
bugtracker => "http://rt.cpan.org/Public/Dist/Display.html?Name=POE-XS-Loop-EPoll",
},
};
}
WriteMakefile(%opts);