xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/ext/Sys/Syslog/Makefile.PL (revision 8243:601214671c81)
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