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