Fwd: CPAN Upload: S/SA/SAPER/Sys-Syslog-0.26.tar.gz
[p5sagit/p5-mst-13.2.git] / ext / Sys / Syslog / Makefile.PL
CommitLineData
6e4ef777 1use strict;
a650b841 2use Config;
8ce86de8 3use ExtUtils::MakeMaker;
8168e71f 4eval 'use ExtUtils::MakeMaker::Coverage';
a650b841 5use File::Copy;
6use File::Path;
7use File::Spec;
d329efa2 8require 5.005;
8ce86de8 9
a650b841 10
11# create a typemap for Perl 5.6
12if ($] < 5.008) {
13 open(TYPEMAP, ">typemap") or die "fatal: can't write typemap: $!";
14 print TYPEMAP "const char *\t\tT_PV\n";
15 close(TYPEMAP);
16}
17
18# create a lib/ dir in order to avoid warnings in Test::Distribution
d329efa2 19mkdir "lib", 0755;
a650b841 20
21# virtual paths given to EU::MM
22my %virtual_path = ( 'Syslog.pm' => '$(INST_LIBDIR)/Syslog.pm' );
23
24# detect when to use Win32::EvenLog
25my (@extra_params, @extra_prereqs);
26my $use_eventlog = eval "use Win32::EventLog; 1";
27
28if ($use_eventlog) {
29 print " * Win32::EventLog detected.\n";
30 my $name = "PerlLog";
31
f93f88eb 32 push @extra_prereqs,
33 Win32 => 0, "Win32::TieRegistry" => 0, "Win32::EventLog" => 0;
a650b841 34
35 $virtual_path{'win32/Win32.pm' } = '$(INST_LIBDIR)/Syslog/Win32.pm';
36 $virtual_path{'win32/PerlLog.dll'} = '$(INST_ARCHAUTODIR)/PerlLog.dll';
37
f93f88eb 38 push @extra_params, CCFLAGS => "-Ifallback";
39
a650b841 40 # recreate the DLL from its uuencoded form if it's not here
41 if (! -f File::Spec->catfile("win32", "$name.dll")) {
42 # read the uuencoded data
43 open(UU, '<' . File::Spec->catfile("win32", "$name\_dll.uu"))
44 or die "fatal: Can't read file '$name\_dll.uu': $!";
45 my $uudata = do { local $/; <UU> };
46 close(UU);
47
48 # write the DLL
49 open(DLL, '>' . File::Spec->catfile("win32", "$name.dll"))
50 or die "fatal: Can't write DLL '$name.dll': $!";
51 binmode(DLL);
52 print DLL unpack "u", $uudata;
53 close(DLL);
54 }
55}
56elsif ($^O =~ /Win32/) {
57 print <<"NOTICE"
58 *** You're running on a Win32 system, but you lack the Win32::EventLog\a
59 *** module, part of the libwin32 distribution. Although Sys::Syslog can
60 *** be used without Win32::EventLog, it won't be very useful except for
61 *** sending remote syslog messages. If you want to log messages on the
62 *** local host as well, please install libwin32 then Sys::Syslog again.
63NOTICE
64}
65
66# detect when being built in Perl core
67if (grep { $_ eq 'PERL_CORE=1' } @ARGV) {
68 push @extra_params,
69 MAN3PODS => {}; # Pods will be built by installman.
70}
71else {
72 push @extra_params,
73 DEFINE => '-DUSE_PPPORT_H';
74}
75
328c41c4 76# on pre-5.6 Perls, add warnings::compat to the prereq modules
77push @extra_prereqs, "warnings::compat" if $] < 5.006;
78
8ce86de8 79WriteMakefile(
8168e71f 80 NAME => 'Sys::Syslog',
6e4ef777 81 LICENSE => 'perl',
f93f88eb 82 AUTHOR => 'Sebastien Aperghis-Tramoni <sebastien@aperghis.net>',
8168e71f 83 VERSION_FROM => 'Syslog.pm',
84 ABSTRACT_FROM => 'Syslog.pm',
85 INSTALLDIRS => 'perl',
8168e71f 86 XSPROTOARG => '-noprototypes',
a650b841 87 PM => \%virtual_path,
8168e71f 88 PREREQ_PM => {
f93f88eb 89 # run prereqs
90 'Carp' => 0,
91 'Fcntl' => 0,
92 'File::Basename' => 0,
93 'File::Spec' => 0,
94 'POSIX' => 0,
95 'Socket' => 0,
96 'XSLoader' => 0,
a650b841 97 @extra_prereqs,
f93f88eb 98
99 # build/test prereqs
100 'Test::More' => 0,
8168e71f 101 },
2605937c 102 PL_FILES => {},
8168e71f 103 dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
104 clean => { FILES => 'Sys-Syslog-*' },
f93f88eb 105 realclean => { FILES => 'lib const-c.inc const-xs.inc macros.all '
106 .'PerlLog.h typemap *.bak *.bin *.rc win32/PerlLog_dll' },
107 NO_META => 1,
a650b841 108 @extra_params
8ce86de8 109);
cf2bd340 110
a650b841 111
112# find a default value for _PATH_LOG
f66a7beb 113my $_PATH_LOG;
114
a650b841 115if (-c "/dev/conslog" and -w _) {
8168e71f 116 # SunOS 5.8 has a worldwritable /dev/conslog STREAMS log driver.
117 # The /dev/log STREAMS log driver on this platform has permissions
118 # and ownership `crw-r----- root sys'. /dev/conslog has more liberal
119 # permissions.
120 $_PATH_LOG = "/dev/conslog";
a650b841 121}
a650b841 122elsif (-S "/var/run/syslog" and -w _) {
123 # Mac OS X puts it at a different path.
124 $_PATH_LOG = "/var/run/syslog";
125}
d329efa2 126elsif (-p "/dev/log" and -w _) {
127 # On HP-UX, /dev/log isn't a unix domain socket but a named pipe.
128 $_PATH_LOG = "/dev/log";
129}
35a209d1 130elsif ((-S "/dev/log" or -c _) and -w _) {
47ebfcbb 131 # Most unixes have a unix domain socket /dev/log.
132 $_PATH_LOG = "/dev/log";
133}
a650b841 134else {
8168e71f 135 $_PATH_LOG = "";
f66a7beb 136}
cf2bd340 137
a650b841 138
139# if possible, generate the code that handles the constants with
140# ExtUtils::Constant, otherwise use cached copy in fallback/
8168e71f 141if(eval {require ExtUtils::Constant; 1}) {
a650b841 142 my @levels = qw(
143 LOG_ALERT LOG_CRIT LOG_DEBUG LOG_EMERG LOG_ERR
144 LOG_INFO LOG_NOTICE LOG_WARNING
145 );
146
147 my @facilities = (
148 # standard facilities
149 qw(
150 LOG_AUTH LOG_AUTHPRIV LOG_CRON LOG_DAEMON LOG_FTP LOG_KERN
151 LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
152 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR LOG_MAIL LOG_NEWS
153 LOG_SYSLOG LOG_USER LOG_UUCP
154 ),
155 # Mac OS X specific facilities
156 { name => "LOG_INSTALL", type => "IV", default => [ "IV", "LOG_USER" ] },
157 { name => "LOG_LAUNCHD", type => "IV", default => [ "IV", "LOG_DAEMON"] },
158 { name => "LOG_NETINFO", type => "IV", default => [ "IV", "LOG_DAEMON"] },
159 { name => "LOG_RAS", type => "IV", default => [ "IV", "LOG_AUTH" ] },
160 { name => "LOG_REMOTEAUTH", type => "IV", default => [ "IV", "LOG_AUTH" ] },
161 # modern BSD specific facilities
162 { name => "LOG_CONSOLE", type => "IV", default => [ "IV", "LOG_USER" ] },
163 { name => "LOG_NTP", type => "IV", default => [ "IV", "LOG_DAEMON"] },
164 { name => "LOG_SECURITY", type => "IV", default => [ "IV", "LOG_AUTH" ] },
165 # IRIX specific facilities
166 { name => "LOG_AUDIT", type => "IV", default => [ "IV", "LOG_AUTH" ] },
167 { name => "LOG_LFMT", type => "IV", default => [ "IV", "LOG_USER" ] },
168 );
169
170 my @options = qw(
171 LOG_CONS LOG_PID LOG_NDELAY LOG_NOWAIT LOG_ODELAY LOG_PERROR
172 );
173
174 my @others_macros = (
175 qw(LOG_FACMASK),
176 { name => "_PATH_LOG", type => "PV", default => [ "PV", qq("$_PATH_LOG") ] },
177 { name => "LOG_PRIMASK", type => "IV", default => [ "IV", 7] },
178 { name => "LOG_NFACILITIES", type => "IV", default => [ "IV", scalar @facilities] },
8168e71f 179 );
180
181 ExtUtils::Constant::WriteConstants(
182 NAME => 'Sys::Syslog',
a650b841 183 NAMES => [ @levels, @facilities, @options, @others_macros ],
2605937c 184 ($] > 5.009002 ? (PROXYSUBS => 1) : ()),
8168e71f 185 );
186
a650b841 187 my @names = map { ref $_ ? $_->{name} : $_ } @levels, @facilities, @options;
188 open(MACROS, '>macros.all') or warn "warning: Can't write 'macros.all': $!\n";
189 print MACROS join $/, @names;
8168e71f 190 close(MACROS);
a650b841 191}
192else {
8168e71f 193 foreach my $file ('const-c.inc', 'const-xs.inc') {
194 my $fallback = File::Spec->catfile('fallback', $file);
a650b841 195 copy($fallback, $file) or die "fatal: Can't copy $fallback to $file: $!";
8168e71f 196 }
197}