forked from maddingue/Sys-Syslog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.PL
192 lines (166 loc) · 6.57 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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
use 5.005;
use strict;
use ExtUtils::MakeMaker;
use File::Copy;
use File::Spec;
use Config;
# create a typemap for Perl 5.6
if ($] < 5.008) {
open(TYPEMAP, ">typemap") or die "fatal: can't write typemap: $!";
print TYPEMAP "const char *\t\tT_PV\n";
close(TYPEMAP);
}
# create a lib/ dir in order to avoid warnings in Test::Distribution
mkdir "lib", 0755;
# virtual paths given to EU::MM
my %virtual_path = ( 'Syslog.pm' => '$(INST_LIBDIR)/Syslog.pm' );
# detect when to use Win32::EvenLog
my (@extra_params, @extra_prereqs);
if ($^O =~ /Win32/) {
print " * Win32::EventLog detected.\n";
my $name = "PerlLog";
push @extra_prereqs,
"Win32::EventLog" => 0,
"Win32::TieRegistry" => 0,
"Win32::EventLog" => 0;
$virtual_path{'win32/Win32.pm' } = '$(INST_LIBDIR)/Syslog/Win32.pm';
$virtual_path{'win32/PerlLog.dll'} = '$(INST_ARCHAUTODIR)/PerlLog.dll';
push @extra_params, CCFLAGS => "$Config{ccflags} -Ifallback";
# recreate the DLL from its uuencoded form if it's not here
if (! -f File::Spec->catfile("win32", "$name.dll")) {
# read the uuencoded data
open(UU, '<' . File::Spec->catfile("win32", "$name\_dll.uu"))
or die "fatal: Can't read file '$name\_dll.uu': $!";
my $uudata = do { local $/; <UU> };
close(UU);
# write the DLL
open(DLL, '>' . File::Spec->catfile("win32", "$name.dll"))
or die "fatal: Can't write DLL '$name.dll': $!";
binmode(DLL);
print DLL unpack "u", $uudata;
close(DLL);
}
}
# detect when being built in Perl core
if (not grep { $_ eq 'PERL_CORE=1' } @ARGV) {
push @extra_params,
DEFINE => '-DUSE_PPPORT_H';
}
# on pre-5.6 Perls, add warnings::compat to the prereq modules
push @extra_prereqs, "warnings::compat" => "0.06" if $] < 5.006;
# starting with Perl 5.11, "site" and "vendor" directories finally are
# before "perl" (core) in @INC, thus allowing dual-life modules to be
# updated without the need to overwrite the old version
my $installdirs = $] < 5.011 ? "perl" : "site";
WriteMakefile(
NAME => 'Sys::Syslog',
LICENSE => 'perl',
AUTHOR => 'Sebastien Aperghis-Tramoni <[email protected]>',
VERSION_FROM => 'Syslog.pm',
ABSTRACT_FROM => 'Syslog.pm',
INSTALLDIRS => $installdirs,
XSPROTOARG => '-noprototypes',
PM => \%virtual_path,
PREREQ_PM => {
# run prereqs
'Carp' => 0,
'Fcntl' => 0,
'File::Basename' => 0,
'File::Spec' => 0,
'POSIX' => 0,
'Socket' => 0,
'XSLoader' => 0,
@extra_prereqs,
# build/test prereqs
'Test::More' => 0,
},
META_MERGE => {
resources => {
repository => "https://github.com/maddingue/Sys-Syslog.git",
},
},
PL_FILES => {},
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
clean => { FILES => 'Sys-Syslog-*' },
realclean => { FILES => 'lib const-c.inc const-xs.inc macros.all '
.'PerlLog.h typemap *.bak *.bin *.rc win32/PerlLog_dll' },
@extra_params
);
# find a default value for _PATH_LOG
my $_PATH_LOG;
if (-c "/dev/conslog" and -w _) {
# SunOS 5.8 has a worldwritable /dev/conslog STREAMS log driver.
# The /dev/log STREAMS log driver on this platform has permissions
# and ownership `crw-r----- root sys'. /dev/conslog has more liberal
# permissions.
$_PATH_LOG = "/dev/conslog";
}
elsif (-S "/var/run/syslog" and -w _) {
# Mac OS X puts it at a different path.
$_PATH_LOG = "/var/run/syslog";
}
elsif (-p "/dev/log" and -w _) {
# On HP-UX, /dev/log isn't a unix domain socket but a named pipe.
$_PATH_LOG = "/dev/log";
}
elsif ((-S "/dev/log" or -c _) and -w _) {
# Most unixes have a unix domain socket /dev/log.
$_PATH_LOG = "/dev/log";
}
else {
$_PATH_LOG = "";
}
# if possible, generate the code that handles the constants with
# ExtUtils::Constant, otherwise use cached copy in fallback/
if(eval {require ExtUtils::Constant; 1}) {
my @levels = qw(
LOG_ALERT LOG_CRIT LOG_DEBUG LOG_EMERG LOG_ERR
LOG_INFO LOG_NOTICE LOG_WARNING
);
my @facilities = (
# standard facilities
qw(
LOG_AUTH LOG_AUTHPRIV LOG_CRON LOG_DAEMON LOG_FTP LOG_KERN
LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR LOG_MAIL LOG_NEWS
LOG_SYSLOG LOG_USER LOG_UUCP
),
# Mac OS X specific facilities
{ name => "LOG_INSTALL", type => "IV", default => [ "IV", "LOG_USER" ] },
{ name => "LOG_LAUNCHD", type => "IV", default => [ "IV", "LOG_DAEMON"] },
{ name => "LOG_NETINFO", type => "IV", default => [ "IV", "LOG_DAEMON"] },
{ name => "LOG_RAS", type => "IV", default => [ "IV", "LOG_AUTH" ] },
{ name => "LOG_REMOTEAUTH", type => "IV", default => [ "IV", "LOG_AUTH" ] },
# modern BSD specific facilities
{ name => "LOG_CONSOLE", type => "IV", default => [ "IV", "LOG_USER" ] },
{ name => "LOG_NTP", type => "IV", default => [ "IV", "LOG_DAEMON"] },
{ name => "LOG_SECURITY", type => "IV", default => [ "IV", "LOG_AUTH" ] },
# IRIX specific facilities
{ name => "LOG_AUDIT", type => "IV", default => [ "IV", "LOG_AUTH" ] },
{ name => "LOG_LFMT", type => "IV", default => [ "IV", "LOG_USER" ] },
);
my @options = qw(
LOG_CONS LOG_PID LOG_NDELAY LOG_NOWAIT LOG_ODELAY LOG_PERROR
);
my @others_macros = (
qw(LOG_FACMASK),
{ name => "_PATH_LOG", type => "PV", default => [ "PV", qq("$_PATH_LOG") ] },
{ name => "LOG_PRIMASK", type => "IV", default => [ "IV", 7] },
{ name => "LOG_NFACILITIES", type => "IV", default => [ "IV", scalar @facilities] },
);
ExtUtils::Constant::WriteConstants(
NAME => 'Sys::Syslog',
NAMES => [ @levels, @facilities, @options, @others_macros ],
($] > 5.009002 ? (PROXYSUBS => 1) : ()),
);
my @names = map { ref $_ ? $_->{name} : $_ } @levels, @facilities, @options;
open(MACROS, '>macros.all') or warn "warning: Can't write 'macros.all': $!\n";
print MACROS join $/, @names;
close(MACROS);
}
else {
foreach my $file ('const-c.inc', 'const-xs.inc') {
my $fallback = File::Spec->catfile('fallback', $file);
copy($fallback, $file) or die "fatal: Can't copy $fallback to $file: $!";
}
}