ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/constants.pl.PL
(Generate patch)

Comparing AnyEvent/constants.pl.PL (file contents):
Revision 1.3 by root, Sat Mar 13 00:08:08 2010 UTC vs.
Revision 1.8 by root, Mon Nov 22 06:32:18 2010 UTC

1#! perl 1#! perl
2
3# this file is unfortunately only executed at Makefile.PL time
4
5use Config;
6
7# when built as part of perl, these are not available
8BEGIN { eval "use Socket ()" }
9BEGIN { eval "use Fcntl ()" }
2 10
3open my $fh, ">lib/AnyEvent/constants.pl" 11open my $fh, ">lib/AnyEvent/constants.pl"
4 or die "lib/AnyEvent/constants.pl: $_[0]\n"; 12 or die "lib/AnyEvent/constants.pl: $_[0]\n";
5 13
6my $oldstdout = select $fh; 14my $oldstdout = select $fh;
7 15
16print "# automatically generated from constants.pl.PL for perl $] built for $Config{archname}\n";
17
8sub i($$) { 18sub i($$) {
9 print "sub $_[0] () { ", $_[1]*1, " }\n"; 19 print "sub $_[0](){", $_[1]*1, "}\n";
20}
21
22sub n($$) {
23 print "sub $_[0](){", (defined $_[1] ? $_[1]*1 : "undef"), "}\n";
10} 24}
11 25
12print "package AnyEvent;\n"; 26print "package AnyEvent;\n";
13 27
14our $WIN32 = $^O =~ /mswin32/i; 28our $WIN32 = $^O =~ /mswin32/i;
15 29
16 30# used a lot
17i CYGWIN => $^O =~ /cygwin/i; 31i CYGWIN => $^O =~ /cygwin/i;
18i WIN32 => $WIN32; 32i WIN32 => $WIN32;
19 33
34# add these purely to avoid loading Fcntl, which is slow and bloated.
20use Fcntl (); 35use Fcntl ();
21 36
22i F_SETFL => eval { Fcntl::F_SETFL() };
23i F_SETFD => eval { Fcntl::F_SETFD() }; 37i F_SETFD => eval { Fcntl::F_SETFD() } || 2;
38i F_SETFL => eval { Fcntl::F_SETFL() } || 4;
24i O_NONBLOCK => eval { Fcntl::O_NONBLOCK() }; 39i O_NONBLOCK => eval { Fcntl::O_NONBLOCK() } || 04000;
25i FD_CLOEXEC => eval { Fcntl::FD_CLOEXEC() }; 40i FD_CLOEXEC => eval { Fcntl::FD_CLOEXEC() } || 1;
26 41
27print "package AnyEvent::Util;\n"; 42print "package AnyEvent::Util;\n";
28 43
29# broken windows perls use undocumented error codes... 44# broken windows perls use undocumented error codes...
30if ($WIN32) { 45if ($WIN32) {
38 i WSAEINPROGRESS => -1e99; 53 i WSAEINPROGRESS => -1e99;
39} 54}
40 55
41my $af_inet6; 56my $af_inet6;
42 57
43$af_inet6 ||= eval { require Socket ; Socket::AF_INET6 () }; 58$af_inet6 ||= eval { Socket::AF_INET6 () }; # where it should be
44$af_ine6t ||= eval { require Socket6; Socket6::AF_INET6() }; 59$af_inet6 ||= eval { require Socket6; Socket6::AF_INET6() }; # where it actually is ...
45 60
46# uhoh 61# ... or isn't, because nobody has it installed
47$af_inet6 ||= 10 if $^O =~ /linux/; 62$af_inet6 ||= 10 if $^O =~ /linux/;
48$af_inet6 ||= 23 if $^O =~ /cygwin/i; 63$af_inet6 ||= 23 if $^O =~ /cygwin/i;
49$af_inet6 ||= 23 if AnyEvent::WIN32; 64$af_inet6 ||= 23 if AnyEvent::WIN32;
50$af_inet6 ||= 24 if $^O =~ /openbsd|netbsd/; 65$af_inet6 ||= 24 if $^O =~ /openbsd|netbsd/;
51$af_inet6 ||= 28 if $^O =~ /freebsd/; 66$af_inet6 ||= 28 if $^O =~ /freebsd/;
52 67
53#TODO: WSAxxx, EDOM/ESPIPE 68#TODO: EDOM/ESPIPE
69#TODO: maybe move socket stuff to Socket::?
54 70
55i _AF_INET6 => $af_inet6; 71i _AF_INET6 => $af_inet6;
56#i AF_UNIX => Socket::AF_UNIX (); 72#i AF_UNIX => Socket::AF_UNIX ();
57#i SOCK_STREAM => Socket::SOCK_STREAM (); 73#i SOCK_STREAM => Socket::SOCK_STREAM ();
58#i SOCK_DGRAM => Socket::SOCK_DGRAM (); 74#i SOCK_DGRAM => Socket::SOCK_DGRAM ();
60#i SO_REUSEADDR => Socket::SO_REUSEADDR (); 76#i SO_REUSEADDR => Socket::SO_REUSEADDR ();
61#i SO_KEEPALIVE => Socket::SO_KEEPALIVE (); 77#i SO_KEEPALIVE => Socket::SO_KEEPALIVE ();
62#i SO_OOBINLINE => Socket::SO_OOBINLINE (); 78#i SO_OOBINLINE => Socket::SO_OOBINLINE ();
63#i IPPROTO_TCP => Socket::IPPROTO_TCP (); 79#i IPPROTO_TCP => Socket::IPPROTO_TCP ();
64 80
81print "package AnyEvent::Socket;\n";
82
83# more hardcoded os-specific constants - none
84# of these are available via any known module, but we
85# are forward-looking and try Socket:: anyways.
86my %const;
87
88while (<DATA>) {
89 my ($os, $name, $default) = split /\s+/;
90
91 $const{$name} ||= undef; # make sure it exists
92
93 next unless $os eq $^O;
94
95 my $value = eval "Socket::$name ()";
96 $value = eval $default unless defined $value;
97
98 $const{$name} = $value;
99}
100
101for my $k (sort keys %const) {
102 n $k, $const{$k};
103}
104
65print "1;\n"; 105print "1;\n";
66 106
67close $fh; 107close $fh;
68select $oldstdout; 108select $oldstdout;
69 109
70rename "$ARGV[0]~", $ARGV[0]; 1101
71 111
721 112__DATA__
113linux TCP_MAXSEG 2
114linux TCP_CORK 3
115linux TCP_KEEPIDLE 4
116linux TCP_KEEPINTVL 5
117linux TCP_KEEPCNT 6
118linux TCP_SYNCNT 7
119linux TCP_LINGER2 8
120linux TCP_DEFER_ACCEPT 9
121linux TCP_WINDOW_CLAMP 10
122linux TCP_INFO 11
123linux TCP_QUICKACK 12
124linux TCP_CONGESTION 13
125linux TCP_MD5SIG 14
126netbsd TCP_MAXSEG 2
127netbsd TCP_KEEPIDLE 3
128netbsd TCP_NOPUSH 4
129netbsd TCP_KEEPINTVL 5
130netbsd TCP_KEEPCNT 6
131netbsd TCP_KEEPINIT 7
132netbsd TCP_NOOPT 8
133netbsd TCP_MD5SIG 0x10
134netbsd TCP_CONGESTION 0x20
135cygwin TCP_MAXSEG 0x02
136cygwin TCP_NOPUSH 0x04
137cygwin TCP_NOOPT 0x08
138freebsd TCP_MAXSEG 0x02
139freebsd TCP_NOPUSH 0x04
140freebsd TCP_NOOPT 0x08
141freebsd TCP_MD5SIG 0x10
142freebsd TCP_INFO 0x20
143freebsd TCP_CONGESTION 0x40
144solaris TCP_CORK 0x18
145solaris TCP_LINGER2 0x1C
146solaris TCP_INIT_CWND 0x15
147solaris TCP_KEEPALIVE 0x8
148solaris TCP_MAXSEG 0x02
149openbsd TCP_MAXSEG 0x02
150openbsd TCP_MD5SIG 0x04
151openbsd TCP_SACK_ENABLE 0x08
152darwin TCP_MAXSEG 0x02
153darwin TCP_NOPUSH 0x04
154darwin TCP_NOOPT 0x08
155darwin TCP_KEEPALIVE 0x10
156darwin TCP_CONNECTIONTIMEOUT 0x20

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines