1N/Ause strict;
1N/Ause Config;
1N/Ause ExtUtils::MakeMaker;
1N/Aeval 'use ExtUtils::MakeMaker::Coverage';
1N/Ause File::Copy;
1N/Ause File::Path;
1N/Ause File::Spec;
1N/Arequire 5.005;
1N/A
1N/A
1N/A# create a typemap for Perl 5.6
1N/Aif ($] < 5.008) {
1N/A open(TYPEMAP, ">typemap") or die "fatal: can't write typemap: $!";
1N/A print TYPEMAP "const char *\t\tT_PV\n";
1N/A close(TYPEMAP);
1N/A}
1N/A
1N/A# create a lib/ dir in order to avoid warnings in Test::Distribution
1N/Amkdir "lib", 0755;
1N/A
1N/A# virtual paths given to EU::MM
1N/Amy %virtual_path = ( 'Syslog.pm' => '$(INST_LIBDIR)/Syslog.pm' );
1N/A
1N/A# detect when to use Win32::EvenLog
1N/Amy (@extra_params, @extra_prereqs);
1N/Amy $use_eventlog = eval "use Win32::EventLog; 1";
1N/A
1N/Aif ($use_eventlog) {
1N/A print " * Win32::EventLog detected.\n";
1N/A my $name = "PerlLog";
1N/A
1N/A push @extra_prereqs,
1N/A Win32 => 0, "Win32::TieRegistry" => 0, "Win32::EventLog" => 0;
1N/A
1N/A $virtual_path{'win32/Win32.pm' } = '$(INST_LIBDIR)/Syslog/Win32.pm';
1N/A $virtual_path{'win32/PerlLog.dll'} = '$(INST_ARCHAUTODIR)/PerlLog.dll';
1N/A
1N/A push @extra_params, CCFLAGS => "-Ifallback";
1N/A
1N/A # recreate the DLL from its uuencoded form if it's not here
1N/A if (! -f File::Spec->catfile("win32", "$name.dll")) {
1N/A # read the uuencoded data
1N/A open(UU, '<' . File::Spec->catfile("win32", "$name\_dll.uu"))
1N/A or die "fatal: Can't read file '$name\_dll.uu': $!";
1N/A my $uudata = do { local $/; <UU> };
1N/A close(UU);
1N/A
1N/A # write the DLL
1N/A open(DLL, '>' . File::Spec->catfile("win32", "$name.dll"))
1N/A or die "fatal: Can't write DLL '$name.dll': $!";
1N/A binmode(DLL);
1N/A print DLL unpack "u", $uudata;
1N/A close(DLL);
1N/A }
1N/A}
1N/Aelsif ($^O =~ /Win32/) {
1N/A print <<"NOTICE"
1N/A *** You're running on a Win32 system, but you lack the Win32::EventLog\a
1N/A *** module, part of the libwin32 distribution. Although Sys::Syslog can
1N/A *** be used without Win32::EventLog, it won't be very useful except for
1N/A *** sending remote syslog messages. If you want to log messages on the
1N/A *** local host as well, please install libwin32 then Sys::Syslog again.
1N/ANOTICE
1N/A}
1N/A
1N/A# detect when being built in Perl core
1N/Aif (grep { $_ eq 'PERL_CORE=1' } @ARGV) {
1N/A push @extra_params,
1N/A MAN3PODS => {}; # Pods will be built by installman.
1N/A}
1N/Aelse {
1N/A push @extra_params,
1N/A DEFINE => '-DUSE_PPPORT_H';
1N/A}
1N/A
1N/A# on pre-5.6 Perls, add warnings::compat to the prereq modules
1N/Apush @extra_prereqs, "warnings::compat" => "0.06" if $] < 5.006;
1N/A
1N/AWriteMakefile(
1N/A NAME => 'Sys::Syslog',
1N/A LICENSE => 'perl',
1N/A AUTHOR => 'Sebastien Aperghis-Tramoni <sebastien@aperghis.net>',
1N/A VERSION_FROM => 'Syslog.pm',
1N/A ABSTRACT_FROM => 'Syslog.pm',
1N/A INSTALLDIRS => 'perl',
1N/A XSPROTOARG => '-noprototypes',
1N/A PM => \%virtual_path,
1N/A PREREQ_PM => {
1N/A # run prereqs
1N/A 'Carp' => 0,
1N/A 'Fcntl' => 0,
1N/A 'File::Basename' => 0,
1N/A 'File::Spec' => 0,
1N/A 'POSIX' => 0,
1N/A 'Socket' => 0,
1N/A 'XSLoader' => 0,
1N/A @extra_prereqs,
1N/A
1N/A # build/test prereqs
1N/A 'Test::More' => 0,
1N/A },
1N/A PL_FILES => {},
1N/A dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
1N/A clean => { FILES => 'Sys-Syslog-*' },
1N/A realclean => { FILES => 'lib const-c.inc const-xs.inc macros.all '
1N/A .'PerlLog.h typemap *.bak *.bin *.rc win32/PerlLog_dll' },
1N/A @extra_params
1N/A);
1N/A
1N/A
1N/A# find a default value for _PATH_LOG
1N/Amy $_PATH_LOG;
1N/A
1N/Aif (-c "/dev/conslog" and -w _) {
1N/A # SunOS 5.8 has a worldwritable /dev/conslog STREAMS log driver.
1N/A # The /dev/log STREAMS log driver on this platform has permissions
1N/A # and ownership `crw-r----- root sys'. /dev/conslog has more liberal
1N/A # permissions.
1N/A $_PATH_LOG = "/dev/conslog";
1N/A}
1N/Aelsif (-S "/var/run/syslog" and -w _) {
1N/A # Mac OS X puts it at a different path.
1N/A $_PATH_LOG = "/var/run/syslog";
1N/A}
1N/Aelsif (-p "/dev/log" and -w _) {
1N/A # On HP-UX, /dev/log isn't a unix domain socket but a named pipe.
1N/A $_PATH_LOG = "/dev/log";
1N/A}
1N/Aelsif ((-S "/dev/log" or -c _) and -w _) {
1N/A # Most unixes have a unix domain socket /dev/log.
1N/A $_PATH_LOG = "/dev/log";
1N/A}
1N/Aelse {
1N/A $_PATH_LOG = "";
1N/A}
1N/A
1N/A
1N/A# if possible, generate the code that handles the constants with
1N/A# ExtUtils::Constant, otherwise use cached copy in fallback/
1N/Aif(eval {require ExtUtils::Constant; 1}) {
1N/A my @levels = qw(
1N/A LOG_ALERT LOG_CRIT LOG_DEBUG LOG_EMERG LOG_ERR
1N/A LOG_INFO LOG_NOTICE LOG_WARNING
1N/A );
1N/A
1N/A my @facilities = (
1N/A # standard facilities
1N/A qw(
1N/A LOG_AUTH LOG_AUTHPRIV LOG_CRON LOG_DAEMON LOG_FTP LOG_KERN
1N/A LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
1N/A LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR LOG_MAIL LOG_NEWS
1N/A LOG_SYSLOG LOG_USER LOG_UUCP
1N/A ),
1N/A # Mac OS X specific facilities
1N/A { name => "LOG_INSTALL", type => "IV", default => [ "IV", "LOG_USER" ] },
1N/A { name => "LOG_LAUNCHD", type => "IV", default => [ "IV", "LOG_DAEMON"] },
1N/A { name => "LOG_NETINFO", type => "IV", default => [ "IV", "LOG_DAEMON"] },
1N/A { name => "LOG_RAS", type => "IV", default => [ "IV", "LOG_AUTH" ] },
1N/A { name => "LOG_REMOTEAUTH", type => "IV", default => [ "IV", "LOG_AUTH" ] },
1N/A # modern BSD specific facilities
1N/A { name => "LOG_CONSOLE", type => "IV", default => [ "IV", "LOG_USER" ] },
1N/A { name => "LOG_NTP", type => "IV", default => [ "IV", "LOG_DAEMON"] },
1N/A { name => "LOG_SECURITY", type => "IV", default => [ "IV", "LOG_AUTH" ] },
1N/A # IRIX specific facilities
1N/A { name => "LOG_AUDIT", type => "IV", default => [ "IV", "LOG_AUTH" ] },
1N/A { name => "LOG_LFMT", type => "IV", default => [ "IV", "LOG_USER" ] },
1N/A );
1N/A
1N/A my @options = qw(
1N/A LOG_CONS LOG_PID LOG_NDELAY LOG_NOWAIT LOG_ODELAY LOG_PERROR
1N/A );
1N/A
1N/A my @others_macros = (
1N/A qw(LOG_FACMASK),
1N/A { name => "_PATH_LOG", type => "PV", default => [ "PV", qq("$_PATH_LOG") ] },
1N/A { name => "LOG_PRIMASK", type => "IV", default => [ "IV", 7] },
1N/A { name => "LOG_NFACILITIES", type => "IV", default => [ "IV", scalar @facilities] },
1N/A );
1N/A
1N/A ExtUtils::Constant::WriteConstants(
1N/A NAME => 'Sys::Syslog',
1N/A NAMES => [ @levels, @facilities, @options, @others_macros ],
1N/A ($] > 5.009002 ? (PROXYSUBS => 1) : ()),
1N/A );
1N/A
1N/A my @names = map { ref $_ ? $_->{name} : $_ } @levels, @facilities, @options;
1N/A open(MACROS, '>macros.all') or warn "warning: Can't write 'macros.all': $!\n";
1N/A print MACROS join $/, @names;
1N/A close(MACROS);
1N/A}
1N/Aelse {
1N/A foreach my $file ('const-c.inc', 'const-xs.inc') {
1N/A my $fallback = File::Spec->catfile('fallback', $file);
1N/A copy($fallback, $file) or die "fatal: Can't copy $fallback to $file: $!";
1N/A }
1N/A}