summaryrefslogtreecommitdiff
path: root/lib/ExtUtils/MM_Unix.pm
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2009-09-10 16:58:33 +0100
committerNicholas Clark <nick@ccl4.org>2009-09-10 16:58:33 +0100
commitb78fd7160df924147ff968f6dc2796473af0c484 (patch)
treeb5065e5b1ab461c11c74b5a0b4f848fcd0c3f118 /lib/ExtUtils/MM_Unix.pm
parent4d984b75f1859fc27f556ee42f31a04df42a2004 (diff)
downloadperl-b78fd7160df924147ff968f6dc2796473af0c484.tar.gz
Move ExtUtils::MakeMaker from lib to ext.
t/lib/TieOut.pm is now from Test::Simple. Only the tests needed changing. The exceptions to BEGIN/PERL_CORE/INC boilerplate removal were two instances of "../.." becoming "../../../..", and changing an %INC test from "strict.pm" to "less.pm", as TestInit causes strict to be loaded via a relative path, when it loads File::Spec to convert all paths from relative to absolute.
Diffstat (limited to 'lib/ExtUtils/MM_Unix.pm')
-rw-r--r--lib/ExtUtils/MM_Unix.pm3622
1 files changed, 0 insertions, 3622 deletions
diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm
deleted file mode 100644
index ad28b22b82..0000000000
--- a/lib/ExtUtils/MM_Unix.pm
+++ /dev/null
@@ -1,3622 +0,0 @@
-package ExtUtils::MM_Unix;
-
-require 5.006;
-
-use strict;
-
-use Carp;
-use ExtUtils::MakeMaker::Config;
-use File::Basename qw(basename dirname);
-use DirHandle;
-
-our %Config_Override;
-
-use ExtUtils::MakeMaker qw($Verbose neatvalue);
-
-# If we make $VERSION an our variable parse_version() breaks
-use vars qw($VERSION);
-$VERSION = '6.55_02';
-
-require ExtUtils::MM_Any;
-our @ISA = qw(ExtUtils::MM_Any);
-
-my %Is;
-BEGIN {
- $Is{OS2} = $^O eq 'os2';
- $Is{Win32} = $^O eq 'MSWin32' || $Config{osname} eq 'NetWare';
- $Is{Dos} = $^O eq 'dos';
- $Is{VMS} = $^O eq 'VMS';
- $Is{OSF} = $^O eq 'dec_osf';
- $Is{IRIX} = $^O eq 'irix';
- $Is{NetBSD} = $^O eq 'netbsd';
- $Is{Interix} = $^O eq 'interix';
- $Is{SunOS4} = $^O eq 'sunos';
- $Is{Solaris} = $^O eq 'solaris';
- $Is{SunOS} = $Is{SunOS4} || $Is{Solaris};
- $Is{BSD} = ($^O =~ /^(?:free|net|open)bsd$/ or
- grep( $^O eq $_, qw(bsdos interix dragonfly) )
- );
-}
-
-BEGIN {
- if( $Is{VMS} ) {
- # For things like vmsify()
- require VMS::Filespec;
- VMS::Filespec->import;
- }
-}
-
-
-=head1 NAME
-
-ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
-
-=head1 SYNOPSIS
-
-C<require ExtUtils::MM_Unix;>
-
-=head1 DESCRIPTION
-
-The methods provided by this package are designed to be used in
-conjunction with ExtUtils::MakeMaker. When MakeMaker writes a
-Makefile, it creates one or more objects that inherit their methods
-from a package C<MM>. MM itself doesn't provide any methods, but it
-ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
-specific packages take the responsibility for all the methods provided
-by MM_Unix. We are trying to reduce the number of the necessary
-overrides by defining rather primitive operations within
-ExtUtils::MM_Unix.
-
-If you are going to write a platform specific MM package, please try
-to limit the necessary overrides to primitive methods, and if it is not
-possible to do so, let's work out how to achieve that gain.
-
-If you are overriding any of these methods in your Makefile.PL (in the
-MY class), please report that to the makemaker mailing list. We are
-trying to minimize the necessary method overrides and switch to data
-driven Makefile.PLs wherever possible. In the long run less methods
-will be overridable via the MY class.
-
-=head1 METHODS
-
-The following description of methods is still under
-development. Please refer to the code for not suitably documented
-sections and complain loudly to the makemaker@perl.org mailing list.
-Better yet, provide a patch.
-
-Not all of the methods below are overridable in a
-Makefile.PL. Overridable methods are marked as (o). All methods are
-overridable by a platform specific MM_*.pm file.
-
-Cross-platform methods are being moved into MM_Any. If you can't find
-something that used to be in here, look in MM_Any.
-
-=cut
-
-# So we don't have to keep calling the methods over and over again,
-# we have these globals to cache the values. Faster and shrtr.
-my $Curdir = __PACKAGE__->curdir;
-my $Rootdir = __PACKAGE__->rootdir;
-my $Updir = __PACKAGE__->updir;
-
-
-=head2 Methods
-
-=over 4
-
-=item os_flavor
-
-Simply says that we're Unix.
-
-=cut
-
-sub os_flavor {
- return('Unix');
-}
-
-
-=item c_o (o)
-
-Defines the suffix rules to compile different flavors of C files to
-object files.
-
-=cut
-
-sub c_o {
-# --- Translation Sections ---
-
- my($self) = shift;
- return '' unless $self->needs_linking();
- my(@m);
-
- my $command = '$(CCCMD)';
- my $flags = '$(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE)';
-
- if (my $cpp = $Config{cpprun}) {
- my $cpp_cmd = $self->const_cccmd;
- $cpp_cmd =~ s/^CCCMD\s*=\s*\$\(CC\)/$cpp/;
- push @m, qq{
-.c.i:
- $cpp_cmd $flags \$*.c > \$*.i
-};
- }
-
- push @m, qq{
-.c.s:
- $command -S $flags \$*.c
-
-.c\$(OBJ_EXT):
- $command $flags \$*.c
-
-.cpp\$(OBJ_EXT):
- $command $flags \$*.cpp
-
-.cxx\$(OBJ_EXT):
- $command $flags \$*.cxx
-
-.cc\$(OBJ_EXT):
- $command $flags \$*.cc
-};
-
- push @m, qq{
-.C\$(OBJ_EXT):
- $command $flags \$*.C
-} if !$Is{OS2} and !$Is{Win32} and !$Is{Dos}; #Case-specific
-
- return join "", @m;
-}
-
-=item cflags (o)
-
-Does very much the same as the cflags script in the perl
-distribution. It doesn't return the whole compiler command line, but
-initializes all of its parts. The const_cccmd method then actually
-returns the definition of the CCCMD macro which uses these parts.
-
-=cut
-
-#'
-
-sub cflags {
- my($self,$libperl)=@_;
- return $self->{CFLAGS} if $self->{CFLAGS};
- return '' unless $self->needs_linking();
-
- my($prog, $uc, $perltype, %cflags);
- $libperl ||= $self->{LIBPERL_A} || "libperl$self->{LIB_EXT}" ;
- $libperl =~ s/\.\$\(A\)$/$self->{LIB_EXT}/;
-
- @cflags{qw(cc ccflags optimize shellflags)}
- = @Config{qw(cc ccflags optimize shellflags)};
- my($optdebug) = "";
-
- $cflags{shellflags} ||= '';
-
- my(%map) = (
- D => '-DDEBUGGING',
- E => '-DEMBED',
- DE => '-DDEBUGGING -DEMBED',
- M => '-DEMBED -DMULTIPLICITY',
- DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
- );
-
- if ($libperl =~ /libperl(\w*)\Q$self->{LIB_EXT}/){
- $uc = uc($1);
- } else {
- $uc = ""; # avoid warning
- }
- $perltype = $map{$uc} ? $map{$uc} : "";
-
- if ($uc =~ /^D/) {
- $optdebug = "-g";
- }
-
-
- my($name);
- ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
- if ($prog = $Config{$name}) {
- # Expand hints for this extension via the shell
- print STDOUT "Processing $name hint:\n" if $Verbose;
- my(@o)=`cc=\"$cflags{cc}\"
- ccflags=\"$cflags{ccflags}\"
- optimize=\"$cflags{optimize}\"
- perltype=\"$cflags{perltype}\"
- optdebug=\"$cflags{optdebug}\"
- eval '$prog'
- echo cc=\$cc
- echo ccflags=\$ccflags
- echo optimize=\$optimize
- echo perltype=\$perltype
- echo optdebug=\$optdebug
- `;
- foreach my $line (@o){
- chomp $line;
- if ($line =~ /(.*?)=\s*(.*)\s*$/){
- $cflags{$1} = $2;
- print STDOUT " $1 = $2\n" if $Verbose;
- } else {
- print STDOUT "Unrecognised result from hint: '$line'\n";
- }
- }
- }
-
- if ($optdebug) {
- $cflags{optimize} = $optdebug;
- }
-
- for (qw(ccflags optimize perltype)) {
- $cflags{$_} ||= '';
- $cflags{$_} =~ s/^\s+//;
- $cflags{$_} =~ s/\s+/ /g;
- $cflags{$_} =~ s/\s+$//;
- $self->{uc $_} ||= $cflags{$_};
- }
-
- if ($self->{POLLUTE}) {
- $self->{CCFLAGS} .= ' -DPERL_POLLUTE ';
- }
-
- my $pollute = '';
- if ($Config{usemymalloc} and not $Config{bincompat5005}
- and not $Config{ccflags} =~ /-DPERL_POLLUTE_MALLOC\b/
- and $self->{PERL_MALLOC_OK}) {
- $pollute = '$(PERL_MALLOC_DEF)';
- }
-
- $self->{CCFLAGS} = quote_paren($self->{CCFLAGS});
- $self->{OPTIMIZE} = quote_paren($self->{OPTIMIZE});
-
- return $self->{CFLAGS} = qq{
-CCFLAGS = $self->{CCFLAGS}
-OPTIMIZE = $self->{OPTIMIZE}
-PERLTYPE = $self->{PERLTYPE}
-MPOLLUTE = $pollute
-};
-
-}
-
-
-=item const_cccmd (o)
-
-Returns the full compiler call for C programs and stores the
-definition in CONST_CCCMD.
-
-=cut
-
-sub const_cccmd {
- my($self,$libperl)=@_;
- return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
- return '' unless $self->needs_linking();
- return $self->{CONST_CCCMD} =
- q{CCCMD = $(CC) -c $(PASTHRU_INC) $(INC) \\
- $(CCFLAGS) $(OPTIMIZE) \\
- $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \\
- $(XS_DEFINE_VERSION)};
-}
-
-=item const_config (o)
-
-Defines a couple of constants in the Makefile that are imported from
-%Config.
-
-=cut
-
-sub const_config {
-# --- Constants Sections ---
-
- my($self) = shift;
- my @m = <<"END";
-
-# These definitions are from config.sh (via $INC{'Config.pm'}).
-# They may have been overridden via Makefile.PL or on the command line.
-END
-
- my(%once_only);
- foreach my $key (@{$self->{CONFIG}}){
- # SITE*EXP macros are defined in &constants; avoid duplicates here
- next if $once_only{$key};
- $self->{uc $key} = quote_paren($self->{uc $key});
- push @m, uc($key) , ' = ' , $self->{uc $key}, "\n";
- $once_only{$key} = 1;
- }
- join('', @m);
-}
-
-=item const_loadlibs (o)
-
-Defines EXTRALIBS, LDLOADLIBS, BSLOADLIBS, LD_RUN_PATH. See
-L<ExtUtils::Liblist> for details.
-
-=cut
-
-sub const_loadlibs {
- my($self) = shift;
- return "" unless $self->needs_linking;
- my @m;
- push @m, qq{
-# $self->{NAME} might depend on some other libraries:
-# See ExtUtils::Liblist for details
-#
-};
- for my $tmp (qw/
- EXTRALIBS LDLOADLIBS BSLOADLIBS
- /) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
- # don't set LD_RUN_PATH if empty
- for my $tmp (qw/
- LD_RUN_PATH
- /) {
- next unless $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
- return join "", @m;
-}
-
-=item constants (o)
-
- my $make_frag = $mm->constants;
-
-Prints out macros for lots of constants.
-
-=cut
-
-sub constants {
- my($self) = @_;
- my @m = ();
-
- $self->{DFSEP} = '$(DIRFILESEP)'; # alias for internal use
-
- for my $macro (qw(
-
- AR_STATIC_ARGS DIRFILESEP DFSEP
- NAME NAME_SYM
- VERSION VERSION_MACRO VERSION_SYM DEFINE_VERSION
- XS_VERSION XS_VERSION_MACRO XS_DEFINE_VERSION
- INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB
- INST_MAN1DIR INST_MAN3DIR
- MAN1EXT MAN3EXT
- INSTALLDIRS INSTALL_BASE DESTDIR PREFIX
- PERLPREFIX SITEPREFIX VENDORPREFIX
- ),
- (map { ("INSTALL".$_,
- "DESTINSTALL".$_)
- } $self->installvars),
- qw(
- PERL_LIB
- PERL_ARCHLIB
- LIBPERL_A MYEXTLIB
- FIRST_MAKEFILE MAKEFILE_OLD MAKE_APERL_FILE
- PERLMAINCC PERL_SRC PERL_INC
- PERL FULLPERL ABSPERL
- PERLRUN FULLPERLRUN ABSPERLRUN
- PERLRUNINST FULLPERLRUNINST ABSPERLRUNINST
- PERL_CORE
- PERM_DIR PERM_RW PERM_RWX
-
- ) )
- {
- next unless defined $self->{$macro};
-
- # pathnames can have sharp signs in them; escape them so
- # make doesn't think it is a comment-start character.
- $self->{$macro} =~ s/#/\\#/g;
- push @m, "$macro = $self->{$macro}\n";
- }
-
- push @m, qq{
-MAKEMAKER = $self->{MAKEMAKER}
-MM_VERSION = $self->{MM_VERSION}
-MM_REVISION = $self->{MM_REVISION}
-};
-
- push @m, q{
-# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
-# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
-# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
-# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
-};
-
- for my $macro (qw/
- MAKE
- FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
- LDFROM LINKTYPE BOOTDEP
- / )
- {
- next unless defined $self->{$macro};
- push @m, "$macro = $self->{$macro}\n";
- }
-
- push @m, "
-# Handy lists of source code files:
-XS_FILES = ".$self->wraplist(sort keys %{$self->{XS}})."
-C_FILES = ".$self->wraplist(@{$self->{C}})."
-O_FILES = ".$self->wraplist(@{$self->{O_FILES}})."
-H_FILES = ".$self->wraplist(@{$self->{H}})."
-MAN1PODS = ".$self->wraplist(sort keys %{$self->{MAN1PODS}})."
-MAN3PODS = ".$self->wraplist(sort keys %{$self->{MAN3PODS}})."
-";
-
-
- push @m, q{
-# Where is the Config information that we are using/depend on
-CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
-};
-
-
- push @m, qq{
-# Where to build things
-INST_LIBDIR = $self->{INST_LIBDIR}
-INST_ARCHLIBDIR = $self->{INST_ARCHLIBDIR}
-
-INST_AUTODIR = $self->{INST_AUTODIR}
-INST_ARCHAUTODIR = $self->{INST_ARCHAUTODIR}
-
-INST_STATIC = $self->{INST_STATIC}
-INST_DYNAMIC = $self->{INST_DYNAMIC}
-INST_BOOT = $self->{INST_BOOT}
-};
-
-
- push @m, qq{
-# Extra linker info
-EXPORT_LIST = $self->{EXPORT_LIST}
-PERL_ARCHIVE = $self->{PERL_ARCHIVE}
-PERL_ARCHIVE_AFTER = $self->{PERL_ARCHIVE_AFTER}
-};
-
- push @m, "
-
-TO_INST_PM = ".$self->wraplist(sort keys %{$self->{PM}})."
-
-PM_TO_BLIB = ".$self->wraplist(%{$self->{PM}})."
-";
-
- join('',@m);
-}
-
-
-=item depend (o)
-
-Same as macro for the depend attribute.
-
-=cut
-
-sub depend {
- my($self,%attribs) = @_;
- my(@m,$key,$val);
- while (($key,$val) = each %attribs){
- last unless defined $key;
- push @m, "$key : $val\n";
- }
- join "", @m;
-}
-
-
-=item init_DEST
-
- $mm->init_DEST
-
-Defines the DESTDIR and DEST* variables paralleling the INSTALL*.
-
-=cut
-
-sub init_DEST {
- my $self = shift;
-
- # Initialize DESTDIR
- $self->{DESTDIR} ||= '';
-
- # Make DEST variables.
- foreach my $var ($self->installvars) {
- my $destvar = 'DESTINSTALL'.$var;
- $self->{$destvar} ||= '$(DESTDIR)$(INSTALL'.$var.')';
- }
-}
-
-
-=item init_dist
-
- $mm->init_dist;
-
-Defines a lot of macros for distribution support.
-
- macro description default
-
- TAR tar command to use tar
- TARFLAGS flags to pass to TAR cvf
-
- ZIP zip command to use zip
- ZIPFLAGS flags to pass to ZIP -r
-
- COMPRESS compression command to gzip --best
- use for tarfiles
- SUFFIX suffix to put on .gz
- compressed files
-
- SHAR shar command to use shar
-
- PREOP extra commands to run before
- making the archive
- POSTOP extra commands to run after
- making the archive
-
- TO_UNIX a command to convert linefeeds
- to Unix style in your archive
-
- CI command to checkin your ci -u
- sources to version control
- RCS_LABEL command to label your sources rcs -Nv$(VERSION_SYM): -q
- just after CI is run
-
- DIST_CP $how argument to manicopy() best
- when the distdir is created
-
- DIST_DEFAULT default target to use to tardist
- create a distribution
-
- DISTVNAME name of the resulting archive $(DISTNAME)-$(VERSION)
- (minus suffixes)
-
-=cut
-
-sub init_dist {
- my $self = shift;
-
- $self->{TAR} ||= 'tar';
- $self->{TARFLAGS} ||= 'cvf';
- $self->{ZIP} ||= 'zip';
- $self->{ZIPFLAGS} ||= '-r';
- $self->{COMPRESS} ||= 'gzip --best';
- $self->{SUFFIX} ||= '.gz';
- $self->{SHAR} ||= 'shar';
- $self->{PREOP} ||= '$(NOECHO) $(NOOP)'; # eg update MANIFEST
- $self->{POSTOP} ||= '$(NOECHO) $(NOOP)'; # eg remove the distdir
- $self->{TO_UNIX} ||= '$(NOECHO) $(NOOP)';
-
- $self->{CI} ||= 'ci -u';
- $self->{RCS_LABEL}||= 'rcs -Nv$(VERSION_SYM): -q';
- $self->{DIST_CP} ||= 'best';
- $self->{DIST_DEFAULT} ||= 'tardist';
-
- ($self->{DISTNAME} = $self->{NAME}) =~ s{::}{-}g unless $self->{DISTNAME};
- $self->{DISTVNAME} ||= $self->{DISTNAME}.'-'.$self->{VERSION};
-
-}
-
-=item dist (o)
-
- my $dist_macros = $mm->dist(%overrides);
-
-Generates a make fragment defining all the macros initialized in
-init_dist.
-
-%overrides can be used to override any of the above.
-
-=cut
-
-sub dist {
- my($self, %attribs) = @_;
-
- my $make = '';
- foreach my $key (qw(
- TAR TARFLAGS ZIP ZIPFLAGS COMPRESS SUFFIX SHAR
- PREOP POSTOP TO_UNIX
- CI RCS_LABEL DIST_CP DIST_DEFAULT
- DISTNAME DISTVNAME
- ))
- {
- my $value = $attribs{$key} || $self->{$key};
- $make .= "$key = $value\n";
- }
-
- return $make;
-}
-
-=item dist_basics (o)
-
-Defines the targets distclean, distcheck, skipcheck, manifest, veryclean.
-
-=cut
-
-sub dist_basics {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-distclean :: realclean distcheck
- $(NOECHO) $(NOOP)
-
-distcheck :
- $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
-
-skipcheck :
- $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
-
-manifest :
- $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
-
-veryclean : realclean
- $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old
-
-MAKE_FRAG
-
-}
-
-=item dist_ci (o)
-
-Defines a check in target for RCS.
-
-=cut
-
-sub dist_ci {
- my($self) = shift;
- return q{
-ci :
- $(PERLRUN) "-MExtUtils::Manifest=maniread" \\
- -e "@all = keys %{ maniread() };" \\
- -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \\
- -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
-};
-}
-
-=item dist_core (o)
-
- my $dist_make_fragment = $MM->dist_core;
-
-Puts the targets necessary for 'make dist' together into one make
-fragment.
-
-=cut
-
-sub dist_core {
- my($self) = shift;
-
- my $make_frag = '';
- foreach my $target (qw(dist tardist uutardist tarfile zipdist zipfile
- shdist))
- {
- my $method = $target.'_target';
- $make_frag .= "\n";
- $make_frag .= $self->$method();
- }
-
- return $make_frag;
-}
-
-
-=item B<dist_target>
-
- my $make_frag = $MM->dist_target;
-
-Returns the 'dist' target to make an archive for distribution. This
-target simply checks to make sure the Makefile is up-to-date and
-depends on $(DIST_DEFAULT).
-
-=cut
-
-sub dist_target {
- my($self) = shift;
-
- my $date_check = $self->oneliner(<<'CODE', ['-l']);
-print 'Warning: Makefile possibly out of date with $(VERSION_FROM)'
- if -e '$(VERSION_FROM)' and -M '$(VERSION_FROM)' < -M '$(FIRST_MAKEFILE)';
-CODE
-
- return sprintf <<'MAKE_FRAG', $date_check;
-dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
- $(NOECHO) %s
-MAKE_FRAG
-}
-
-=item B<tardist_target>
-
- my $make_frag = $MM->tardist_target;
-
-Returns the 'tardist' target which is simply so 'make tardist' works.
-The real work is done by the dynamically named tardistfile_target()
-method, tardist should have that as a dependency.
-
-=cut
-
-sub tardist_target {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-tardist : $(DISTVNAME).tar$(SUFFIX)
- $(NOECHO) $(NOOP)
-MAKE_FRAG
-}
-
-=item B<zipdist_target>
-
- my $make_frag = $MM->zipdist_target;
-
-Returns the 'zipdist' target which is simply so 'make zipdist' works.
-The real work is done by the dynamically named zipdistfile_target()
-method, zipdist should have that as a dependency.
-
-=cut
-
-sub zipdist_target {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-zipdist : $(DISTVNAME).zip
- $(NOECHO) $(NOOP)
-MAKE_FRAG
-}
-
-=item B<tarfile_target>
-
- my $make_frag = $MM->tarfile_target;
-
-The name of this target is the name of the tarball generated by
-tardist. This target does the actual work of turning the distdir into
-a tarball.
-
-=cut
-
-sub tarfile_target {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-$(DISTVNAME).tar$(SUFFIX) : distdir
- $(PREOP)
- $(TO_UNIX)
- $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(COMPRESS) $(DISTVNAME).tar
- $(POSTOP)
-MAKE_FRAG
-}
-
-=item zipfile_target
-
- my $make_frag = $MM->zipfile_target;
-
-The name of this target is the name of the zip file generated by
-zipdist. This target does the actual work of turning the distdir into
-a zip file.
-
-=cut
-
-sub zipfile_target {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-$(DISTVNAME).zip : distdir
- $(PREOP)
- $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-MAKE_FRAG
-}
-
-=item uutardist_target
-
- my $make_frag = $MM->uutardist_target;
-
-Converts the tarfile into a uuencoded file
-
-=cut
-
-sub uutardist_target {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-uutardist : $(DISTVNAME).tar$(SUFFIX)
- uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
-MAKE_FRAG
-}
-
-
-=item shdist_target
-
- my $make_frag = $MM->shdist_target;
-
-Converts the distdir into a shell archive.
-
-=cut
-
-sub shdist_target {
- my($self) = shift;
-
- return <<'MAKE_FRAG';
-shdist : distdir
- $(PREOP)
- $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-MAKE_FRAG
-}
-
-
-=item dlsyms (o)
-
-Used by some OS' to define DL_FUNCS and DL_VARS and write the *.exp files.
-
-Normally just returns an empty string.
-
-=cut
-
-sub dlsyms {
- return '';
-}
-
-
-=item dynamic_bs (o)
-
-Defines targets for bootstrap files.
-
-=cut
-
-sub dynamic_bs {
- my($self, %attribs) = @_;
- return '
-BOOTSTRAP =
-' unless $self->has_link_code();
-
- my $target = $Is{VMS} ? '$(MMS$TARGET)' : '$@';
-
- return sprintf <<'MAKE_FRAG', ($target) x 5;
-BOOTSTRAP = $(BASEEXT).bs
-
-# As Mkbootstrap might not write a file (if none is required)
-# we use touch to prevent make continually trying to remake it.
-# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP) : $(FIRST_MAKEFILE) $(BOOTDEP) $(INST_ARCHAUTODIR)$(DFSEP).exists
- $(NOECHO) $(ECHO) "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- $(NOECHO) $(PERLRUN) \
- "-MExtUtils::Mkbootstrap" \
- -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');"
- $(NOECHO) $(TOUCH) %s
- $(CHMOD) $(PERM_RW) %s
-
-$(INST_BOOT) : $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists
- $(NOECHO) $(RM_RF) %s
- - $(CP) $(BOOTSTRAP) %s
- $(CHMOD) $(PERM_RW) %s
-MAKE_FRAG
-}
-
-=item dynamic_lib (o)
-
-Defines how to produce the *.so (or equivalent) files.
-
-=cut
-
-sub dynamic_lib {
- my($self, %attribs) = @_;
- return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code;
-
- my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
- my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
- my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
- my($ldfrom) = '$(LDFROM)';
- $armaybe = 'ar' if ($Is{OSF} and $armaybe eq ':');
- my(@m);
- my $ld_opt = $Is{OS2} ? '$(OPTIMIZE) ' : ''; # Useful on other systems too?
- my $ld_fix = $Is{OS2} ? '|| ( $(RM_F) $@ && sh -c false )' : '';
- push(@m,'
-# This section creates the dynamically loadable $(INST_DYNAMIC)
-# from $(OBJECT) and possibly $(MYEXTLIB).
-ARMAYBE = '.$armaybe.'
-OTHERLDFLAGS = '.$ld_opt.$otherldflags.'
-INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-INST_DYNAMIC_FIX = '.$ld_fix.'
-
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
-');
- if ($armaybe ne ':'){
- $ldfrom = 'tmp$(LIB_EXT)';
- push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
- push(@m,' $(RANLIB) '."$ldfrom\n");
- }
- $ldfrom = "-all $ldfrom -none" if $Is{OSF};
-
- # The IRIX linker doesn't use LD_RUN_PATH
- my $ldrun = $Is{IRIX} && $self->{LD_RUN_PATH} ?
- qq{-rpath "$self->{LD_RUN_PATH}"} : '';
-
- # For example in AIX the shared objects/libraries from previous builds
- # linger quite a while in the shared dynalinker cache even when nobody
- # is using them. This is painful if one for instance tries to restart
- # a failed build because the link command will fail unnecessarily 'cos
- # the shared object/library is 'busy'.
- push(@m,' $(RM_F) $@
-');
-
- my $libs = '$(LDLOADLIBS)';
-
- if (($Is{NetBSD} || $Is{Interix}) && $Config{'useshrplib'} eq 'true') {
- # Use nothing on static perl platforms, and to the flags needed
- # to link against the shared libperl library on shared perl
- # platforms. We peek at lddlflags to see if we need -Wl,-R
- # or -R to add paths to the run-time library search path.
- if ($Config{'lddlflags'} =~ /-Wl,-R/) {
- $libs .= ' -L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -Wl,-R$(PERL_ARCHLIB)/CORE -lperl';
- } elsif ($Config{'lddlflags'} =~ /-R/) {
- $libs .= ' -L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -R$(PERL_ARCHLIB)/CORE -lperl';
- }
- }
-
- my $ld_run_path_shell = "";
- if ($self->{LD_RUN_PATH} ne "") {
- $ld_run_path_shell = 'LD_RUN_PATH="$(LD_RUN_PATH)" ';
- }
-
- push @m, sprintf <<'MAKE', $ld_run_path_shell, $ldrun, $ldfrom, $libs;
- %s$(LD) %s $(LDDLFLAGS) %s $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) \
- $(PERL_ARCHIVE) %s $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST) \
- $(INST_DYNAMIC_FIX)
-MAKE
-
- push @m, <<'MAKE';
- $(CHMOD) $(PERM_RWX) $@
-MAKE
-
- return join('',@m);
-}
-
-=item exescan
-
-Deprecated method. Use libscan instead.
-
-=cut
-
-sub exescan {
- my($self,$path) = @_;
- $path;
-}
-
-=item extliblist
-
-Called by init_others, and calls ext ExtUtils::Liblist. See
-L<ExtUtils::Liblist> for details.
-
-=cut
-
-sub extliblist {
- my($self,$libs) = @_;
- require ExtUtils::Liblist;
- $self->ext($libs, $Verbose);
-}
-
-=item find_perl
-
-Finds the executables PERL and FULLPERL
-
-=cut
-
-sub find_perl {
- my($self, $ver, $names, $dirs, $trace) = @_;
-
- if ($trace >= 2){
- print "Looking for perl $ver by these names:
-@$names
-in these dirs:
-@$dirs
-";
- }
-
- my $stderr_duped = 0;
- local *STDERR_COPY;
-
- unless ($Is{BSD}) {
- # >& and lexical filehandles together give 5.6.2 indigestion
- if( open(STDERR_COPY, '>&STDERR') ) { ## no critic
- $stderr_duped = 1;
- }
- else {
- warn <<WARNING;
-find_perl() can't dup STDERR: $!
-You might see some garbage while we search for Perl
-WARNING
- }
- }
-
- foreach my $name (@$names){
- foreach my $dir (@$dirs){
- next unless defined $dir; # $self->{PERL_SRC} may be undefined
- my ($abs, $val);
- if ($self->file_name_is_absolute($name)) { # /foo/bar
- $abs = $name;
- } elsif ($self->canonpath($name) eq
- $self->canonpath(basename($name))) { # foo
- $abs = $self->catfile($dir, $name);
- } else { # foo/bar
- $abs = $self->catfile($Curdir, $name);
- }
- print "Checking $abs\n" if ($trace >= 2);
- next unless $self->maybe_command($abs);
- print "Executing $abs\n" if ($trace >= 2);
-
- my $version_check = qq{$abs -le "require $ver; print qq{VER_OK}"};
- $version_check = "$Config{run} $version_check"
- if defined $Config{run} and length $Config{run};
-
- # To avoid using the unportable 2>&1 to suppress STDERR,
- # we close it before running the command.
- # However, thanks to a thread library bug in many BSDs
- # ( http://www.freebsd.org/cgi/query-pr.cgi?pr=51535 )
- # we cannot use the fancier more portable way in here
- # but instead need to use the traditional 2>&1 construct.
- if ($Is{BSD}) {
- $val = `$version_check 2>&1`;
- } else {
- close STDERR if $stderr_duped;
- $val = `$version_check`;
-
- # 5.6.2's 3-arg open doesn't work with >&
- open STDERR, ">&STDERR_COPY" ## no critic
- if $stderr_duped;
- }
-
- if ($val =~ /^VER_OK/m) {
- print "Using PERL=$abs\n" if $trace;
- return $abs;
- } elsif ($trace >= 2) {
- print "Result: '$val' ".($? >> 8)."\n";
- }
- }
- }
- print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
- 0; # false and not empty
-}
-
-
-=item fixin
-
- $mm->fixin(@files);
-
-Inserts the sharpbang or equivalent magic number to a set of @files.
-
-=cut
-
-sub fixin { # stolen from the pink Camel book, more or less
- my ( $self, @files ) = @_;
-
- my ($does_shbang) = $Config{'sharpbang'} =~ /^\s*\#\!/;
- for my $file (@files) {
- my $file_new = "$file.new";
- my $file_bak = "$file.bak";
-
- open( my $fixin, '<', $file ) or croak "Can't process '$file': $!";
- local $/ = "\n";
- chomp( my $line = <$fixin> );
- next unless $line =~ s/^\s*\#!\s*//; # Not a shbang file.
- # Now figure out the interpreter name.
- my ( $cmd, $arg ) = split ' ', $line, 2;
- $cmd =~ s!^.*/!!;
-
- # Now look (in reverse) for interpreter in absolute PATH (unless perl).
- my $interpreter;
- if ( $cmd =~ m{^perl(?:\z|[^a-z])} ) {
- if ( $Config{startperl} =~ m,^\#!.*/perl, ) {
- $interpreter = $Config{startperl};
- $interpreter =~ s,^\#!,,;
- }
- else {
- $interpreter = $Config{perlpath};
- }
- }
- else {
- my (@absdirs)
- = reverse grep { $self->file_name_is_absolute($_) } $self->path;
- $interpreter = '';
-
- foreach my $dir (@absdirs) {
- if ( $self->maybe_command($cmd) ) {
- warn "Ignoring $interpreter in $file\n"
- if $Verbose && $interpreter;
- $interpreter = $self->catfile( $dir, $cmd );
- }
- }
- }
-
- # Figure out how to invoke interpreter on this machine.
-
- my ($shb) = "";
- if ($interpreter) {
- print STDOUT "Changing sharpbang in $file to $interpreter"
- if $Verbose;
-
- # this is probably value-free on DOSISH platforms
- if ($does_shbang) {
- $shb .= "$Config{'sharpbang'}$interpreter";
- $shb .= ' ' . $arg if defined $arg;
- $shb .= "\n";
- }
- $shb .= qq{
-eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
- if 0; # not running under some shell
-} unless $Is{Win32}; # this won't work on win32, so don't
- }
- else {
- warn "Can't find $cmd in PATH, $file unchanged"
- if $Verbose;
- next;
- }
-
- open( my $fixout, ">", "$file_new" ) or do {
- warn "Can't create new $file: $!\n";
- next;
- };
-
- # Print out the new #! line (or equivalent).
- local $\;
- local $/;
- print $fixout $shb, <$fixin>;
- close $fixin;
- close $fixout;
-
- chmod 0666, $file_bak;
- unlink $file_bak;
- unless ( _rename( $file, $file_bak ) ) {
- warn "Can't rename $file to $file_bak: $!";
- next;
- }
- unless ( _rename( $file_new, $file ) ) {
- warn "Can't rename $file_new to $file: $!";
- unless ( _rename( $file_bak, $file ) ) {
- warn "Can't rename $file_bak back to $file either: $!";
- warn "Leaving $file renamed as $file_bak\n";
- }
- next;
- }
- unlink $file_bak;
- }
- continue {
- system("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
- }
-}
-
-
-sub _rename {
- my($old, $new) = @_;
-
- foreach my $file ($old, $new) {
- if( $Is{VMS} and basename($file) !~ /\./ ) {
- # rename() in 5.8.0 on VMS will not rename a file if it
- # does not contain a dot yet it returns success.
- $file = "$file.";
- }
- }
-
- return rename($old, $new);
-}
-
-
-=item force (o)
-
-Writes an empty FORCE: target.
-
-=cut
-
-sub force {
- my($self) = shift;
- '# Phony target to force checking subdirectories.
-FORCE :
- $(NOECHO) $(NOOP)
-';
-}
-
-=item guess_name
-
-Guess the name of this package by examining the working directory's
-name. MakeMaker calls this only if the developer has not supplied a
-NAME attribute.
-
-=cut
-
-# ';
-
-sub guess_name {
- my($self) = @_;
- use Cwd 'cwd';
- my $name = basename(cwd());
- $name =~ s|[\-_][\d\.\-]+\z||; # this is new with MM 5.00, we
- # strip minus or underline
- # followed by a float or some such
- print "Warning: Guessing NAME [$name] from current directory name.\n";
- $name;
-}
-
-=item has_link_code
-
-Returns true if C, XS, MYEXTLIB or similar objects exist within this
-object that need a compiler. Does not descend into subdirectories as
-needs_linking() does.
-
-=cut
-
-sub has_link_code {
- my($self) = shift;
- return $self->{HAS_LINK_CODE} if defined $self->{HAS_LINK_CODE};
- if ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB}){
- $self->{HAS_LINK_CODE} = 1;
- return 1;
- }
- return $self->{HAS_LINK_CODE} = 0;
-}
-
-
-=item init_dirscan
-
-Scans the directory structure and initializes DIR, XS, XS_FILES,
-C, C_FILES, O_FILES, H, H_FILES, PL_FILES, EXE_FILES.
-
-Called by init_main.
-
-=cut
-
-sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
- my($self) = @_;
- my(%dir, %xs, %c, %h, %pl_files, %pm);
-
- my %ignore = map {( $_ => 1 )} qw(Makefile.PL Build.PL test.pl t);
-
- # ignore the distdir
- $Is{VMS} ? $ignore{"$self->{DISTVNAME}.dir"} = 1
- : $ignore{$self->{DISTVNAME}} = 1;
-
- @ignore{map lc, keys %ignore} = values %ignore if $Is{VMS};
-
- foreach my $name ($self->lsdir($Curdir)){
- next if $name =~ /\#/;
- next if $name eq $Curdir or $name eq $Updir or $ignore{$name};
- next unless $self->libscan($name);
- if (-d $name){
- next if -l $name; # We do not support symlinks at all
- next if $self->{NORECURS};
- $dir{$name} = $name if (-f $self->catfile($name,"Makefile.PL"));
- } elsif ($name =~ /\.xs\z/){
- my($c); ($c = $name) =~ s/\.xs\z/.c/;
- $xs{$name} = $c;
- $c{$c} = 1;
- } elsif ($name =~ /\.c(pp|xx|c)?\z/i){ # .c .C .cpp .cxx .cc
- $c{$name} = 1
- unless $name =~ m/perlmain\.c/; # See MAP_TARGET
- } elsif ($name =~ /\.h\z/i){
- $h{$name} = 1;
- } elsif ($name =~ /\.PL\z/) {
- ($pl_files{$name} = $name) =~ s/\.PL\z// ;
- } elsif (($Is{VMS} || $Is{Dos}) && $name =~ /[._]pl$/i) {
- # case-insensitive filesystem, one dot per name, so foo.h.PL
- # under Unix appears as foo.h_pl under VMS or fooh.pl on Dos
- local($/); open(my $pl, '<', $name); my $txt = <$pl>; close $pl;
- if ($txt =~ /Extracting \S+ \(with variable substitutions/) {
- ($pl_files{$name} = $name) =~ s/[._]pl\z//i ;
- }
- else {
- $pm{$name} = $self->catfile($self->{INST_LIBDIR},$name);
- }
- } elsif ($name =~ /\.(p[ml]|pod)\z/){
- $pm{$name} = $self->catfile($self->{INST_LIBDIR},$name);
- }
- }
-
- $self->{PL_FILES} ||= \%pl_files;
- $self->{DIR} ||= [sort keys %dir];
- $self->{XS} ||= \%xs;
- $self->{C} ||= [sort keys %c];
- $self->{H} ||= [sort keys %h];
- $self->{PM} ||= \%pm;
-
- my @o_files = @{$self->{C}};
- $self->{O_FILES} = [grep s/\.c(pp|xx|c)?\z/$self->{OBJ_EXT}/i, @o_files];
-}
-
-
-=item init_MANPODS
-
-Determines if man pages should be generated and initializes MAN1PODS
-and MAN3PODS as appropriate.
-
-=cut
-
-sub init_MANPODS {
- my $self = shift;
-
- # Set up names of manual pages to generate from pods
- foreach my $man (qw(MAN1 MAN3)) {
- if ( $self->{"${man}PODS"}
- or $self->{"INSTALL${man}DIR"} =~ /^(none|\s*)$/
- ) {
- $self->{"${man}PODS"} ||= {};
- }
- else {
- my $init_method = "init_${man}PODS";
- $self->$init_method();
- }
- }
-}
-
-
-sub _has_pod {
- my($self, $file) = @_;
-
- my($ispod)=0;
- if (open( my $fh, '<', $file )) {
- while (<$fh>) {
- if (/^=(?:head\d+|item|pod)\b/) {
- $ispod=1;
- last;
- }
- }
- close $fh;
- } else {
- # If it doesn't exist yet, we assume, it has pods in it
- $ispod = 1;
- }
-
- return $ispod;
-}
-
-
-=item init_MAN1PODS
-
-Initializes MAN1PODS from the list of EXE_FILES.
-
-=cut
-
-sub init_MAN1PODS {
- my($self) = @_;
-
- if ( exists $self->{EXE_FILES} ) {
- foreach my $name (@{$self->{EXE_FILES}}) {
- next unless $self->_has_pod($name);
-
- $self->{MAN1PODS}->{$name} =
- $self->catfile("\$(INST_MAN1DIR)",
- basename($name).".\$(MAN1EXT)");
- }
- }
-}
-
-
-=item init_MAN3PODS
-
-Initializes MAN3PODS from the list of PM files.
-
-=cut
-
-sub init_MAN3PODS {
- my $self = shift;
-
- my %manifypods = (); # we collect the keys first, i.e. the files
- # we have to convert to pod
-
- foreach my $name (keys %{$self->{PM}}) {
- if ($name =~ /\.pod\z/ ) {
- $manifypods{$name} = $self->{PM}{$name};
- } elsif ($name =~ /\.p[ml]\z/ ) {
- if( $self->_has_pod($name) ) {
- $manifypods{$name} = $self->{PM}{$name};
- }
- }
- }
-
- my $parentlibs_re = join '|', @{$self->{PMLIBPARENTDIRS}};
-
- # Remove "Configure.pm" and similar, if it's not the only pod listed
- # To force inclusion, just name it "Configure.pod", or override
- # MAN3PODS
- foreach my $name (keys %manifypods) {
- if ($self->{PERL_CORE} and $name =~ /(config|setup).*\.pm/is) {
- delete $manifypods{$name};
- next;
- }
- my($manpagename) = $name;
- $manpagename =~ s/\.p(od|m|l)\z//;
- # everything below lib is ok
- unless($manpagename =~ s!^\W*($parentlibs_re)\W+!!s) {
- $manpagename = $self->catfile(
- split(/::/,$self->{PARENT_NAME}),$manpagename
- );
- }
- $manpagename = $self->replace_manpage_separator($manpagename);
- $self->{MAN3PODS}->{$name} =
- $self->catfile("\$(INST_MAN3DIR)", "$manpagename.\$(MAN3EXT)");
- }
-}
-
-
-=item init_PM
-
-Initializes PMLIBDIRS and PM from PMLIBDIRS.
-
-=cut
-
-sub init_PM {
- my $self = shift;
-
- # Some larger extensions often wish to install a number of *.pm/pl
- # files into the library in various locations.
-
- # The attribute PMLIBDIRS holds an array reference which lists
- # subdirectories which we should search for library files to
- # install. PMLIBDIRS defaults to [ 'lib', $self->{BASEEXT} ]. We
- # recursively search through the named directories (skipping any
- # which don't exist or contain Makefile.PL files).
-
- # For each *.pm or *.pl file found $self->libscan() is called with
- # the default installation path in $_[1]. The return value of
- # libscan defines the actual installation location. The default
- # libscan function simply returns the path. The file is skipped
- # if libscan returns false.
-
- # The default installation location passed to libscan in $_[1] is:
- #
- # ./*.pm => $(INST_LIBDIR)/*.pm
- # ./xyz/... => $(INST_LIBDIR)/xyz/...
- # ./lib/... => $(INST_LIB)/...
- #
- # In this way the 'lib' directory is seen as the root of the actual
- # perl library whereas the others are relative to INST_LIBDIR
- # (which includes PARENT_NAME). This is a subtle distinction but one
- # that's important for nested modules.
-
- unless( $self->{PMLIBDIRS} ) {
- if( $Is{VMS} ) {
- # Avoid logical name vs directory collisions
- $self->{PMLIBDIRS} = ['./lib', "./$self->{BASEEXT}"];
- }
- else {
- $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}];
- }
- }
-
- #only existing directories that aren't in $dir are allowed
-
- # Avoid $_ wherever possible:
- # @{$self->{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$self->{PMLIBDIRS}};
- my (@pmlibdirs) = @{$self->{PMLIBDIRS}};
- @{$self->{PMLIBDIRS}} = ();
- my %dir = map { ($_ => $_) } @{$self->{DIR}};
- foreach my $pmlibdir (@pmlibdirs) {
- -d $pmlibdir && !$dir{$pmlibdir} && push @{$self->{PMLIBDIRS}}, $pmlibdir;
- }
-
- unless( $self->{PMLIBPARENTDIRS} ) {
- @{$self->{PMLIBPARENTDIRS}} = ('lib');
- }
-
- return if $self->{PM} and $self->{ARGS}{PM};
-
- if (@{$self->{PMLIBDIRS}}){
- print "Searching PMLIBDIRS: @{$self->{PMLIBDIRS}}\n"
- if ($Verbose >= 2);
- require File::Find;
- File::Find::find(sub {
- if (-d $_){
- unless ($self->libscan($_)){
- $File::Find::prune = 1;
- }
- return;
- }
- return if /\#/;
- return if /~$/; # emacs temp files
- return if /,v$/; # RCS files
- return if m{\.swp$}; # vim swap files
-
- my $path = $File::Find::name;
- my $prefix = $self->{INST_LIBDIR};
- my $striplibpath;
-
- my $parentlibs_re = join '|', @{$self->{PMLIBPARENTDIRS}};
- $prefix = $self->{INST_LIB}
- if ($striplibpath = $path) =~ s{^(\W*)($parentlibs_re)\W}
- {$1}i;
-
- my($inst) = $self->catfile($prefix,$striplibpath);
- local($_) = $inst; # for backwards compatibility
- $inst = $self->libscan($inst);
- print "libscan($path) => '$inst'\n" if ($Verbose >= 2);
- return unless $inst;
- $self->{PM}{$path} = $inst;
- }, @{$self->{PMLIBDIRS}});
- }
-}
-
-
-=item init_DIRFILESEP
-
-Using / for Unix. Called by init_main.
-
-=cut
-
-sub init_DIRFILESEP {
- my($self) = shift;
-
- $self->{DIRFILESEP} = '/';
-}
-
-
-=item init_main
-
-Initializes AR, AR_STATIC_ARGS, BASEEXT, CONFIG, DISTNAME, DLBASE,
-EXE_EXT, FULLEXT, FULLPERL, FULLPERLRUN, FULLPERLRUNINST, INST_*,
-INSTALL*, INSTALLDIRS, LIB_EXT, LIBPERL_A, MAP_TARGET, NAME,
-OBJ_EXT, PARENT_NAME, PERL, PERL_ARCHLIB, PERL_INC, PERL_LIB,
-PERL_SRC, PERLRUN, PERLRUNINST, PREFIX, VERSION,
-VERSION_SYM, XS_VERSION.
-
-=cut
-
-sub init_main {
- my($self) = @_;
-
- # --- Initialize Module Name and Paths
-
- # NAME = Foo::Bar::Oracle
- # FULLEXT = Foo/Bar/Oracle
- # BASEEXT = Oracle
- # PARENT_NAME = Foo::Bar
-### Only UNIX:
-### ($self->{FULLEXT} =
-### $self->{NAME}) =~ s!::!/!g ; #eg. BSD/Foo/Socket
- $self->{FULLEXT} = $self->catdir(split /::/, $self->{NAME});
-
-
- # Copied from DynaLoader:
-
- my(@modparts) = split(/::/,$self->{NAME});
- my($modfname) = $modparts[-1];
-
- # Some systems have restrictions on files names for DLL's etc.
- # mod2fname returns appropriate file base name (typically truncated)
- # It may also edit @modparts if required.
- if (defined &DynaLoader::mod2fname) {
- $modfname = &DynaLoader::mod2fname(\@modparts);
- }
-
- ($self->{PARENT_NAME}, $self->{BASEEXT}) = $self->{NAME} =~ m!(?:([\w:]+)::)?(\w+)\z! ;
- $self->{PARENT_NAME} ||= '';
-
- if (defined &DynaLoader::mod2fname) {
- # As of 5.001m, dl_os2 appends '_'
- $self->{DLBASE} = $modfname;
- } else {
- $self->{DLBASE} = '$(BASEEXT)';
- }
-
-
- # --- Initialize PERL_LIB, PERL_SRC
-
- # *Real* information: where did we get these two from? ...
- my $inc_config_dir = dirname($INC{'Config.pm'});
- my $inc_carp_dir = dirname($INC{'Carp.pm'});
-
- unless ($self->{PERL_SRC}){
- foreach my $dir_count (1..8) { # 8 is the VMS limit for nesting
- my $dir = $self->catdir(($Updir) x $dir_count);
-
- if (-f $self->catfile($dir,"config_h.SH") &&
- -f $self->catfile($dir,"perl.h") &&
- -f $self->catfile($dir,"lib","strict.pm")
- ) {
- $self->{PERL_SRC}=$dir ;
- last;
- }
- }
- }
-
- warn "PERL_CORE is set but I can't find your PERL_SRC!\n" if
- $self->{PERL_CORE} and !$self->{PERL_SRC};
-
- if ($self->{PERL_SRC}){
- $self->{PERL_LIB} ||= $self->catdir("$self->{PERL_SRC}","lib");
-
- if (defined $Cross::platform) {
- $self->{PERL_ARCHLIB} =
- $self->catdir("$self->{PERL_SRC}","xlib",$Cross::platform);
- $self->{PERL_INC} =
- $self->catdir("$self->{PERL_SRC}","xlib",$Cross::platform,
- $Is{Win32}?("CORE"):());
- }
- else {
- $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
- $self->{PERL_INC} = ($Is{Win32}) ?
- $self->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
- }
-
- # catch a situation that has occurred a few times in the past:
- unless (
- -s $self->catfile($self->{PERL_SRC},'cflags')
- or
- $Is{VMS}
- &&
- -s $self->catfile($self->{PERL_SRC},'perlshr_attr.opt')
- or
- $Is{Win32}
- ){
- warn qq{
-You cannot build extensions below the perl source tree after executing
-a 'make clean' in the perl source tree.
-
-To rebuild extensions distributed with the perl source you should
-simply Configure (to include those extensions) and then build perl as
-normal. After installing perl the source tree can be deleted. It is
-not needed for building extensions by running 'perl Makefile.PL'
-usually without extra arguments.
-
-It is recommended that you unpack and build additional extensions away
-from the perl source tree.
-};
- }
- } else {
- # we should also consider $ENV{PERL5LIB} here
- my $old = $self->{PERL_LIB} || $self->{PERL_ARCHLIB} || $self->{PERL_INC};
- $self->{PERL_LIB} ||= $Config{privlibexp};
- $self->{PERL_ARCHLIB} ||= $Config{archlibexp};
- $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
- my $perl_h;
-
- if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))
- and not $old){
- # Maybe somebody tries to build an extension with an
- # uninstalled Perl outside of Perl build tree
- my $lib;
- for my $dir (@INC) {
- $lib = $dir, last if -e $self->catfile($dir, "Config.pm");
- }
- if ($lib) {
- # Win32 puts its header files in /perl/src/lib/CORE.
- # Unix leaves them in /perl/src.
- my $inc = $Is{Win32} ? $self->catdir($lib, "CORE" )
- : dirname $lib;
- if (-e $self->catfile($inc, "perl.h")) {
- $self->{PERL_LIB} = $lib;
- $self->{PERL_ARCHLIB} = $lib;
- $self->{PERL_INC} = $inc;
- $self->{UNINSTALLED_PERL} = 1;
- print STDOUT <<EOP;
-... Detected uninstalled Perl. Trying to continue.
-EOP
- }
- }
- }
- }
-
- # We get SITELIBEXP and SITEARCHEXP directly via
- # Get_from_Config. When we are running standard modules, these
- # won't matter, we will set INSTALLDIRS to "perl". Otherwise we
- # set it to "site". I prefer that INSTALLDIRS be set from outside
- # MakeMaker.
- $self->{INSTALLDIRS} ||= "site";
-
- $self->{MAN1EXT} ||= $Config{man1ext};
- $self->{MAN3EXT} ||= $Config{man3ext};
-
- # Get some stuff out of %Config if we haven't yet done so
- print STDOUT "CONFIG must be an array ref\n"
- if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY');
- $self->{CONFIG} = [] unless (ref $self->{CONFIG});
- push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config);
- push(@{$self->{CONFIG}}, 'shellflags') if $Config{shellflags};
- my(%once_only);
- foreach my $m (@{$self->{CONFIG}}){
- next if $once_only{$m};
- print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
- unless exists $Config{$m};
- $self->{uc $m} ||= $Config{$m};
- $once_only{$m} = 1;
- }
-
-# This is too dangerous:
-# if ($^O eq "next") {
-# $self->{AR} = "libtool";
-# $self->{AR_STATIC_ARGS} = "-o";
-# }
-# But I leave it as a placeholder
-
- $self->{AR_STATIC_ARGS} ||= "cr";
-
- # These should never be needed
- $self->{OBJ_EXT} ||= '.o';
- $self->{LIB_EXT} ||= '.a';
-
- $self->{MAP_TARGET} ||= "perl";
-
- $self->{LIBPERL_A} ||= "libperl$self->{LIB_EXT}";
-
- # make a simple check if we find strict
- warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory
- (strict.pm not found)"
- unless -f $self->catfile("$self->{PERL_LIB}","strict.pm") ||
- $self->{NAME} eq "ExtUtils::MakeMaker";
-}
-
-=item init_others
-
-Initializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH, LD,
-OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, SHELL, NOOP,
-FIRST_MAKEFILE, MAKEFILE_OLD, NOECHO, RM_F, RM_RF, TEST_F,
-TOUCH, CP, MV, CHMOD, UMASK_NULL, ECHO, ECHO_N
-
-=cut
-
-sub init_others { # --- Initialize Other Attributes
- my($self) = shift;
-
- $self->{ECHO} ||= 'echo';
- $self->{ECHO_N} ||= 'echo -n';
- $self->{RM_F} ||= "rm -f";
- $self->{RM_RF} ||= "rm -rf";
- $self->{TOUCH} ||= "touch";
- $self->{TEST_F} ||= "test -f";
- $self->{CP} ||= "cp";
- $self->{MV} ||= "mv";
- $self->{CHMOD} ||= "chmod";
- $self->{FALSE} ||= 'false';
- $self->{TRUE} ||= 'true';
-
- $self->{LD} ||= 'ld';
-
- $self->SUPER::init_others(@_);
-
- # After SUPER::init_others so $Config{shell} has a
- # chance to get set.
- $self->{SHELL} ||= '/bin/sh';
-
- return 1;
-}
-
-
-=item init_linker
-
-Unix has no need of special linker flags.
-
-=cut
-
-sub init_linker {
- my($self) = shift;
- $self->{PERL_ARCHIVE} ||= '';
- $self->{PERL_ARCHIVE_AFTER} ||= '';
- $self->{EXPORT_LIST} ||= '';
-}
-
-
-=begin _protected
-
-=item init_lib2arch
-
- $mm->init_lib2arch
-
-=end _protected
-
-=cut
-
-sub init_lib2arch {
- my($self) = shift;
-
- # The user who requests an installation directory explicitly
- # should not have to tell us an architecture installation directory
- # as well. We look if a directory exists that is named after the
- # architecture. If not we take it as a sign that it should be the
- # same as the requested installation directory. Otherwise we take
- # the found one.
- for my $libpair ({l=>"privlib", a=>"archlib"},
- {l=>"sitelib", a=>"sitearch"},
- {l=>"vendorlib", a=>"vendorarch"},
- )
- {
- my $lib = "install$libpair->{l}";
- my $Lib = uc $lib;
- my $Arch = uc "install$libpair->{a}";
- if( $self->{$Lib} && ! $self->{$Arch} ){
- my($ilib) = $Config{$lib};
-
- $self->prefixify($Arch,$ilib,$self->{$Lib});
-
- unless (-d $self->{$Arch}) {
- print STDOUT "Directory $self->{$Arch} not found\n"
- if $Verbose;
- $self->{$Arch} = $self->{$Lib};
- }
- print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose;
- }
- }
-}
-
-
-=item init_PERL
-
- $mm->init_PERL;
-
-Called by init_main. Sets up ABSPERL, PERL, FULLPERL and all the
-*PERLRUN* permutations.
-
- PERL is allowed to be miniperl
- FULLPERL must be a complete perl
-
- ABSPERL is PERL converted to an absolute path
-
- *PERLRUN contains everything necessary to run perl, find it's
- libraries, etc...
-
- *PERLRUNINST is *PERLRUN + everything necessary to find the
- modules being built.
-
-=cut
-
-sub init_PERL {
- my($self) = shift;
-
- my @defpath = ();
- foreach my $component ($self->{PERL_SRC}, $self->path(),
- $Config{binexp})
- {
- push @defpath, $component if defined $component;
- }
-
- # Build up a set of file names (not command names).
- my $thisperl = $self->canonpath($^X);
- $thisperl .= $Config{exe_ext} unless
- # VMS might have a file version # at the end
- $Is{VMS} ? $thisperl =~ m/$Config{exe_ext}(;\d+)?$/i
- : $thisperl =~ m/$Config{exe_ext}$/i;
-
- # We need a relative path to perl when in the core.
- $thisperl = $self->abs2rel($thisperl) if $self->{PERL_CORE};
-
- my @perls = ($thisperl);
- push @perls, map { "$_$Config{exe_ext}" }
- ('perl', 'perl5', "perl$Config{version}");
-
- # miniperl has priority over all but the cannonical perl when in the
- # core. Otherwise its a last resort.
- my $miniperl = "miniperl$Config{exe_ext}";
- if( $self->{PERL_CORE} ) {
- splice @perls, 1, 0, $miniperl;
- }
- else {
- push @perls, $miniperl;
- }
-
- $self->{PERL} ||=
- $self->find_perl(5.0, \@perls, \@defpath, $Verbose );
- # don't check if perl is executable, maybe they have decided to
- # supply switches with perl
-
- # When built for debugging, VMS doesn't create perl.exe but ndbgperl.exe.
- my $perl_name = 'perl';
- $perl_name = 'ndbgperl' if $Is{VMS} &&
- defined $Config{usevmsdebug} && $Config{usevmsdebug} eq 'define';
-
- # XXX This logic is flawed. If "miniperl" is anywhere in the path
- # it will get confused. It should be fixed to work only on the filename.
- # Define 'FULLPERL' to be a non-miniperl (used in test: target)
- ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/$perl_name/i
- unless $self->{FULLPERL};
-
- # Little hack to get around VMS's find_perl putting "MCR" in front
- # sometimes.
- $self->{ABSPERL} = $self->{PERL};
- my $has_mcr = $self->{ABSPERL} =~ s/^MCR\s*//;
- if( $self->file_name_is_absolute($self->{ABSPERL}) ) {
- $self->{ABSPERL} = '$(PERL)';
- }
- else {
- $self->{ABSPERL} = $self->rel2abs($self->{ABSPERL});
-
- # Quote the perl command if it contains whitespace
- $self->{ABSPERL} = $self->quote_literal($self->{ABSPERL})
- if $self->{ABSPERL} =~ /\s/;
-
- $self->{ABSPERL} = 'MCR '.$self->{ABSPERL} if $has_mcr;
- }
-
- # Are we building the core?
- $self->{PERL_CORE} = $ENV{PERL_CORE} unless exists $self->{PERL_CORE};
- $self->{PERL_CORE} = 0 unless defined $self->{PERL_CORE};
-
- # How do we run perl?
- foreach my $perl (qw(PERL FULLPERL ABSPERL)) {
- my $run = $perl.'RUN';
-
- $self->{$run} = "\$($perl)";
-
- # Make sure perl can find itself before it's installed.
- $self->{$run} .= q{ "-I$(PERL_LIB)" "-I$(PERL_ARCHLIB)"}
- if $self->{UNINSTALLED_PERL} || $self->{PERL_CORE};
-
- $self->{$perl.'RUNINST'} =
- sprintf q{$(%sRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"}, $perl;
- }
-
- return 1;
-}
-
-
-=item init_platform
-
-=item platform_constants
-
-Add MM_Unix_VERSION.
-
-=cut
-
-sub init_platform {
- my($self) = shift;
-
- $self->{MM_Unix_VERSION} = $VERSION;
- $self->{PERL_MALLOC_DEF} = '-DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc '.
- '-Dfree=Perl_mfree -Drealloc=Perl_realloc '.
- '-Dcalloc=Perl_calloc';
-
-}
-
-sub platform_constants {
- my($self) = shift;
- my $make_frag = '';
-
- foreach my $macro (qw(MM_Unix_VERSION PERL_MALLOC_DEF))
- {
- next unless defined $self->{$macro};
- $make_frag .= "$macro = $self->{$macro}\n";
- }
-
- return $make_frag;
-}
-
-
-=item init_PERM
-
- $mm->init_PERM
-
-Called by init_main. Initializes PERL_*
-
-=cut
-
-sub init_PERM {
- my($self) = shift;
-
- $self->{PERM_DIR} = 755 unless defined $self->{PERM_DIR};
- $self->{PERM_RW} = 644 unless defined $self->{PERM_RW};
- $self->{PERM_RWX} = 755 unless defined $self->{PERM_RWX};
-
- return 1;
-}
-
-
-=item init_xs
-
- $mm->init_xs
-
-Sets up macros having to do with XS code. Currently just INST_STATIC,
-INST_DYNAMIC and INST_BOOT.
-
-=cut
-
-sub init_xs {
- my $self = shift;
-
- if ($self->has_link_code()) {
- $self->{INST_STATIC} =
- $self->catfile('$(INST_ARCHAUTODIR)', '$(BASEEXT)$(LIB_EXT)');
- $self->{INST_DYNAMIC} =
- $self->catfile('$(INST_ARCHAUTODIR)', '$(DLBASE).$(DLEXT)');
- $self->{INST_BOOT} =
- $self->catfile('$(INST_ARCHAUTODIR)', '$(BASEEXT).bs');
- } else {
- $self->{INST_STATIC} = '';
- $self->{INST_DYNAMIC} = '';
- $self->{INST_BOOT} = '';
- }
-}
-
-=item install (o)
-
-Defines the install target.
-
-=cut
-
-sub install {
- my($self, %attribs) = @_;
- my(@m);
-
- push @m, q{
-install :: pure_install doc_install
- $(NOECHO) $(NOOP)
-
-install_perl :: pure_perl_install doc_perl_install
- $(NOECHO) $(NOOP)
-
-install_site :: pure_site_install doc_site_install
- $(NOECHO) $(NOOP)
-
-install_vendor :: pure_vendor_install doc_vendor_install
- $(NOECHO) $(NOOP)
-
-pure_install :: pure_$(INSTALLDIRS)_install
- $(NOECHO) $(NOOP)
-
-doc_install :: doc_$(INSTALLDIRS)_install
- $(NOECHO) $(NOOP)
-
-pure__install : pure_site_install
- $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-doc__install : doc_site_install
- $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-pure_perl_install :: all
- $(NOECHO) $(MOD_INSTALL) \
- read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(DESTINSTALLPRIVLIB) \
- $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
- $(INST_BIN) $(DESTINSTALLBIN) \
- $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
- $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
- $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
- }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
-
-
-pure_site_install :: all
- $(NOECHO) $(MOD_INSTALL) \
- read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(DESTINSTALLSITELIB) \
- $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
- $(INST_BIN) $(DESTINSTALLSITEBIN) \
- $(INST_SCRIPT) $(DESTINSTALLSITESCRIPT) \
- $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
- $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
- $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
- }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
-
-pure_vendor_install :: all
- $(NOECHO) $(MOD_INSTALL) \
- read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(DESTINSTALLVENDORLIB) \
- $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
- $(INST_BIN) $(DESTINSTALLVENDORBIN) \
- $(INST_SCRIPT) $(DESTINSTALLVENDORSCRIPT) \
- $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
- $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
-
-doc_perl_install :: all
- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
- -$(NOECHO) $(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLPRIVLIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
-
-doc_site_install :: all
- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
- -$(NOECHO) $(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLSITELIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
-
-doc_vendor_install :: all
- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
- -$(NOECHO) $(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLVENDORLIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
-
-};
-
- push @m, q{
-uninstall :: uninstall_from_$(INSTALLDIRS)dirs
- $(NOECHO) $(NOOP)
-
-uninstall_from_perldirs ::
- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
-
-uninstall_from_sitedirs ::
- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
-
-uninstall_from_vendordirs ::
- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{
-};
-
- join("",@m);
-}
-
-=item installbin (o)
-
-Defines targets to make and to install EXE_FILES.
-
-=cut
-
-sub installbin {
- my($self) = shift;
-
- return "" unless $self->{EXE_FILES} && ref $self->{EXE_FILES} eq "ARRAY";
- my @exefiles = @{$self->{EXE_FILES}};
- return "" unless @exefiles;
-
- @exefiles = map vmsify($_), @exefiles if $Is{VMS};
-
- my %fromto;
- for my $from (@exefiles) {
- my($path)= $self->catfile('$(INST_SCRIPT)', basename($from));
-
- local($_) = $path; # for backwards compatibility
- my $to = $self->libscan($path);
- print "libscan($from) => '$to'\n" if ($Verbose >=2);
-
- $to = vmsify($to) if $Is{VMS};
- $fromto{$from} = $to;
- }
- my @to = values %fromto;
-
- my @m;
- push(@m, qq{
-EXE_FILES = @exefiles
-
-pure_all :: @to
- \$(NOECHO) \$(NOOP)
-
-realclean ::
-});
-
- # realclean can get rather large.
- push @m, map "\t$_\n", $self->split_command('$(RM_F)', @to);
- push @m, "\n";
-
-
- # A target for each exe file.
- while (my($from,$to) = each %fromto) {
- last unless defined $from;
-
- push @m, sprintf <<'MAKE', $to, $from, $to, $from, $to, $to, $to;
-%s : %s $(FIRST_MAKEFILE) $(INST_SCRIPT)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists
- $(NOECHO) $(RM_F) %s
- $(CP) %s %s
- $(FIXIN) %s
- -$(NOECHO) $(CHMOD) $(PERM_RWX) %s
-
-MAKE
-
- }
-
- join "", @m;
-}
-
-
-=item linkext (o)
-
-Defines the linkext target which in turn defines the LINKTYPE.
-
-=cut
-
-sub linkext {
- my($self, %attribs) = @_;
- # LINKTYPE => static or dynamic or ''
- my($linktype) = defined $attribs{LINKTYPE} ?
- $attribs{LINKTYPE} : '$(LINKTYPE)';
- "
-linkext :: $linktype
- \$(NOECHO) \$(NOOP)
-";
-}
-
-=item lsdir
-
-Takes as arguments a directory name and a regular expression. Returns
-all entries in the directory that match the regular expression.
-
-=cut
-
-sub lsdir {
- my($self) = shift;
- my($dir, $regex) = @_;
- my(@ls);
- my $dh = new DirHandle;
- $dh->open($dir || ".") or return ();
- @ls = $dh->read;
- $dh->close;
- @ls = grep(/$regex/, @ls) if $regex;
- @ls;
-}
-
-=item macro (o)
-
-Simple subroutine to insert the macros defined by the macro attribute
-into the Makefile.
-
-=cut
-
-sub macro {
- my($self,%attribs) = @_;
- my(@m,$key,$val);
- while (($key,$val) = each %attribs){
- last unless defined $key;
- push @m, "$key = $val\n";
- }
- join "", @m;
-}
-
-=item makeaperl (o)
-
-Called by staticmake. Defines how to write the Makefile to produce a
-static new perl.
-
-By default the Makefile produced includes all the static extensions in
-the perl library. (Purified versions of library files, e.g.,
-DynaLoader_pure_p1_c0_032.a are automatically ignored to avoid link errors.)
-
-=cut
-
-sub makeaperl {
- my($self, %attribs) = @_;
- my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
- @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
- my(@m);
- push @m, "
-# --- MakeMaker makeaperl section ---
-MAP_TARGET = $target
-FULLPERL = $self->{FULLPERL}
-";
- return join '', @m if $self->{PARENT};
-
- my($dir) = join ":", @{$self->{DIR}};
-
- unless ($self->{MAKEAPERL}) {
- push @m, q{
-$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
- $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
-
-$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
- $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
- $(NOECHO) $(PERLRUNINST) \
- Makefile.PL DIR=}, $dir, q{ \
- MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
- MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
-
- foreach (@ARGV){
- if( /\s/ ){
- s/=(.*)/='$1'/;
- }
- push @m, " \\\n\t\t$_";
- }
-# push @m, map( " \\\n\t\t$_", @ARGV );
- push @m, "\n";
-
- return join '', @m;
- }
-
-
-
- my($cccmd, $linkcmd, $lperl);
-
-
- $cccmd = $self->const_cccmd($libperl);
- $cccmd =~ s/^CCCMD\s*=\s*//;
- $cccmd =~ s/\$\(INC\)/ "-I$self->{PERL_INC}" /;
- $cccmd .= " $Config{cccdlflags}"
- if ($Config{useshrplib} eq 'true');
- $cccmd =~ s/\(CC\)/\(PERLMAINCC\)/;
-
- # The front matter of the linkcommand...
- $linkcmd = join ' ', "\$(CC)",
- grep($_, @Config{qw(ldflags ccdlflags)});
- $linkcmd =~ s/\s+/ /g;
- $linkcmd =~ s,(perl\.exp),\$(PERL_INC)/$1,;
-
- # Which *.a files could we make use of...
- my %static;
- require File::Find;
- File::Find::find(sub {
- return unless m/\Q$self->{LIB_EXT}\E$/;
-
- # Skip perl's libraries.
- return if m/^libperl/ or m/^perl\Q$self->{LIB_EXT}\E$/;
-
- # Skip purified versions of libraries
- # (e.g., DynaLoader_pure_p1_c0_032.a)
- return if m/_pure_\w+_\w+_\w+\.\w+$/ and -f "$File::Find::dir/.pure";
-
- if( exists $self->{INCLUDE_EXT} ){
- my $found = 0;
-
- (my $xx = $File::Find::name) =~ s,.*?/auto/,,s;
- $xx =~ s,/?$_,,;
- $xx =~ s,/,::,g;
-
- # Throw away anything not explicitly marked for inclusion.
- # DynaLoader is implied.
- foreach my $incl ((@{$self->{INCLUDE_EXT}},'DynaLoader')){
- if( $xx eq $incl ){
- $found++;
- last;
- }
- }
- return unless $found;
- }
- elsif( exists $self->{EXCLUDE_EXT} ){
- (my $xx = $File::Find::name) =~ s,.*?/auto/,,s;
- $xx =~ s,/?$_,,;
- $xx =~ s,/,::,g;
-
- # Throw away anything explicitly marked for exclusion
- foreach my $excl (@{$self->{EXCLUDE_EXT}}){
- return if( $xx eq $excl );
- }
- }
-
- # don't include the installed version of this extension. I
- # leave this line here, although it is not necessary anymore:
- # I patched minimod.PL instead, so that Miniperl.pm won't
- # enclude duplicates
-
- # Once the patch to minimod.PL is in the distribution, I can
- # drop it
- return if $File::Find::name =~ m:auto/$self->{FULLEXT}/$self->{BASEEXT}$self->{LIB_EXT}\z:;
- use Cwd 'cwd';
- $static{cwd() . "/" . $_}++;
- }, grep( -d $_, @{$searchdirs || []}) );
-
- # We trust that what has been handed in as argument, will be buildable
- $static = [] unless $static;
- @static{@{$static}} = (1) x @{$static};
-
- $extra = [] unless $extra && ref $extra eq 'ARRAY';
- for (sort keys %static) {
- next unless /\Q$self->{LIB_EXT}\E\z/;
- $_ = dirname($_) . "/extralibs.ld";
- push @$extra, $_;
- }
-
- s/^(.*)/"-I$1"/ for @{$perlinc || []};
-
- $target ||= "perl";
- $tmp ||= ".";
-
-# MAP_STATIC doesn't look into subdirs yet. Once "all" is made and we
-# regenerate the Makefiles, MAP_STATIC and the dependencies for
-# extralibs.all are computed correctly
- push @m, "
-MAP_LINKCMD = $linkcmd
-MAP_PERLINC = @{$perlinc || []}
-MAP_STATIC = ",
-join(" \\\n\t", reverse sort keys %static), "
-
-MAP_PRELIBS = $Config{perllibs} $Config{cryptlib}
-";
-
- if (defined $libperl) {
- ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
- }
- unless ($libperl && -f $lperl) { # Ilya's code...
- my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
- $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};
- $libperl ||= "libperl$self->{LIB_EXT}";
- $libperl = "$dir/$libperl";
- $lperl ||= "libperl$self->{LIB_EXT}";
- $lperl = "$dir/$lperl";
-
- if (! -f $libperl and ! -f $lperl) {
- # We did not find a static libperl. Maybe there is a shared one?
- if ($Is{SunOS}) {
- $lperl = $libperl = "$dir/$Config{libperl}";
- # SUNOS ld does not take the full path to a shared library
- $libperl = '' if $Is{SunOS4};
- }
- }
-
- print STDOUT "Warning: $libperl not found
- If you're going to build a static perl binary, make sure perl is installed
- otherwise ignore this warning\n"
- unless (-f $lperl || defined($self->{PERL_SRC}));
- }
-
- # SUNOS ld does not take the full path to a shared library
- my $llibperl = $libperl ? '$(MAP_LIBPERL)' : '-lperl';
-
- push @m, "
-MAP_LIBPERL = $libperl
-LLIBPERL = $llibperl
-";
-
- push @m, '
-$(INST_ARCHAUTODIR)/extralibs.all : $(INST_ARCHAUTODIR)$(DFSEP).exists '.join(" \\\n\t", @$extra).'
- $(NOECHO) $(RM_F) $@
- $(NOECHO) $(TOUCH) $@
-';
-
- foreach my $catfile (@$extra){
- push @m, "\tcat $catfile >> \$\@\n";
- }
-
-push @m, "
-\$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
- \$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) \$(LLIBPERL) `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
- \$(NOECHO) \$(ECHO) 'To install the new \"\$(MAP_TARGET)\" binary, call'
- \$(NOECHO) \$(ECHO) ' \$(MAKE) \$(USEMAKEFILE) $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
- \$(NOECHO) \$(ECHO) 'To remove the intermediate files say'
- \$(NOECHO) \$(ECHO) ' \$(MAKE) \$(USEMAKEFILE) $makefilename map_clean'
-
-$tmp/perlmain\$(OBJ_EXT): $tmp/perlmain.c
-";
- push @m, "\t".$self->cd($tmp, qq[$cccmd "-I\$(PERL_INC)" perlmain.c])."\n";
-
- push @m, qq{
-$tmp/perlmain.c: $makefilename}, q{
- $(NOECHO) $(ECHO) Writing $@
- $(NOECHO) $(PERL) $(MAP_PERLINC) "-MExtUtils::Miniperl" \\
- -e "writemain(grep s#.*/auto/##s, split(q| |, q|$(MAP_STATIC)|))" > $@t && $(MV) $@t $@
-
-};
- push @m, "\t", q{$(NOECHO) $(PERL) $(INSTALLSCRIPT)/fixpmain
-} if (defined (&Dos::UseLFN) && Dos::UseLFN()==0);
-
-
- push @m, q{
-doc_inst_perl :
- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
- -$(NOECHO) $(DOC_INSTALL) \
- "Perl binary" "$(MAP_TARGET)" \
- MAP_STATIC "$(MAP_STATIC)" \
- MAP_EXTRA "`cat $(INST_ARCHAUTODIR)/extralibs.all`" \
- MAP_LIBPERL "$(MAP_LIBPERL)" \
- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
-
-};
-
- push @m, q{
-inst_perl : pure_inst_perl doc_inst_perl
-
-pure_inst_perl : $(MAP_TARGET)
- }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(DESTINSTALLBIN)','$(MAP_TARGET)').q{
-
-clean :: map_clean
-
-map_clean :
- }.$self->{RM_F}.qq{ $tmp/perlmain\$(OBJ_EXT) $tmp/perlmain.c \$(MAP_TARGET) $makefilename \$(INST_ARCHAUTODIR)/extralibs.all
-};
-
- join '', @m;
-}
-
-=item makefile (o)
-
-Defines how to rewrite the Makefile.
-
-=cut
-
-sub makefile {
- my($self) = shift;
- my $m;
- # We do not know what target was originally specified so we
- # must force a manual rerun to be sure. But as it should only
- # happen very rarely it is not a significant problem.
- $m = '
-$(OBJECT) : $(FIRST_MAKEFILE)
-
-' if $self->{OBJECT};
-
- my $newer_than_target = $Is{VMS} ? '$(MMS$SOURCE_LIST)' : '$?';
- my $mpl_args = join " ", map qq["$_"], @ARGV;
-
- $m .= sprintf <<'MAKE_FRAG', $newer_than_target, $mpl_args;
-# We take a very conservative approach here, but it's worth it.
-# We move Makefile to Makefile.old here to avoid gnu make looping.
-$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
- $(NOECHO) $(ECHO) "Makefile out-of-date with respect to %s"
- $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
- -$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
- -$(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
- - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
- $(PERLRUN) Makefile.PL %s
- $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
- $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
- $(FALSE)
-
-MAKE_FRAG
-
- return $m;
-}
-
-
-=item maybe_command
-
-Returns true, if the argument is likely to be a command.
-
-=cut
-
-sub maybe_command {
- my($self,$file) = @_;
- return $file if -x $file && ! -d $file;
- return;
-}
-
-
-=item needs_linking (o)
-
-Does this module need linking? Looks into subdirectory objects (see
-also has_link_code())
-
-=cut
-
-sub needs_linking {
- my($self) = shift;
-
- my $caller = (caller(0))[3];
- confess("needs_linking called too early") if
- $caller =~ /^ExtUtils::MakeMaker::/;
- return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING};
- if ($self->has_link_code or $self->{MAKEAPERL}){
- $self->{NEEDS_LINKING} = 1;
- return 1;
- }
- foreach my $child (keys %{$self->{CHILDREN}}) {
- if ($self->{CHILDREN}->{$child}->needs_linking) {
- $self->{NEEDS_LINKING} = 1;
- return 1;
- }
- }
- return $self->{NEEDS_LINKING} = 0;
-}
-
-
-=item parse_abstract
-
-parse a file and return what you think is the ABSTRACT
-
-=cut
-
-sub parse_abstract {
- my($self,$parsefile) = @_;
- my $result;
-
- local $/ = "\n";
- open(my $fh, '<', $parsefile) or die "Could not open '$parsefile': $!";
- my $inpod = 0;
- my $package = $self->{DISTNAME};
- $package =~ s/-/::/g;
- while (<$fh>) {
- $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
- next if !$inpod;
- chop;
- next unless /^($package\s-\s)(.*)/;
- $result = $2;
- last;
- }
- close $fh;
-
- return $result;
-}
-
-=item parse_version
-
- my $version = MM->parse_version($file);
-
-Parse a $file and return what $VERSION is set to by the first assignment.
-It will return the string "undef" if it can't figure out what $VERSION
-is. $VERSION should be for all to see, so C<our $VERSION> or plain $VERSION
-are okay, but C<my $VERSION> is not.
-
-parse_version() will try to C<use version> before checking for
-C<$VERSION> so the following will work.
-
- $VERSION = qv(1.2.3);
-
-=cut
-
-sub parse_version {
- my($self,$parsefile) = @_;
- my $result;
-
- local $/ = "\n";
- local $_;
- open(my $fh, '<', $parsefile) or die "Could not open '$parsefile': $!";
- my $inpod = 0;
- while (<$fh>) {
- $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
- next if $inpod || /^\s*#/;
- chop;
- next if /^\s*(if|unless)/;
- next unless m{(?<!\\) ([\$*]) (([\w\:\']*) \bVERSION)\b .* =}x;
- my $eval = qq{
- package ExtUtils::MakeMaker::_version;
- no strict;
- BEGIN { eval {
- # Ensure any version() routine which might have leaked
- # into this package has been deleted. Interferes with
- # version->import()
- undef *version;
- require version;
- "version"->import;
- } }
-
- local $1$2;
- \$$2=undef;
- do {
- $_
- };
- \$$2;
- };
- local $^W = 0;
- $result = eval($eval); ## no critic
- warn "Could not eval '$eval' in $parsefile: $@" if $@;
- last if defined $result;
- }
- close $fh;
-
- $result = "undef" unless defined $result;
- return $result;
-}
-
-
-=item pasthru (o)
-
-Defines the string that is passed to recursive make calls in
-subdirectories.
-
-=cut
-
-sub pasthru {
- my($self) = shift;
- my(@m);
-
- my(@pasthru);
- my($sep) = $Is{VMS} ? ',' : '';
- $sep .= "\\\n\t";
-
- foreach my $key (qw(LIB LIBPERL_A LINKTYPE OPTIMIZE
- PREFIX INSTALL_BASE)
- )
- {
- next unless defined $self->{$key};
- push @pasthru, "$key=\"\$($key)\"";
- }
-
- foreach my $key (qw(DEFINE INC)) {
- next unless defined $self->{$key};
- push @pasthru, "PASTHRU_$key=\"\$(PASTHRU_$key)\"";
- }
-
- push @m, "\nPASTHRU = ", join ($sep, @pasthru), "\n";
- join "", @m;
-}
-
-=item perl_script
-
-Takes one argument, a file name, and returns the file name, if the
-argument is likely to be a perl script. On MM_Unix this is true for
-any ordinary, readable file.
-
-=cut
-
-sub perl_script {
- my($self,$file) = @_;
- return $file if -r $file && -f _;
- return;
-}
-
-=item perldepend (o)
-
-Defines the dependency from all *.h files that come with the perl
-distribution.
-
-=cut
-
-sub perldepend {
- my($self) = shift;
- my(@m);
-
- my $make_config = $self->cd('$(PERL_SRC)', '$(MAKE) lib/Config.pm');
-
- push @m, sprintf <<'MAKE_FRAG', $make_config if $self->{PERL_SRC};
-# Check for unpropogated config.sh changes. Should never happen.
-# We do NOT just update config.h because that is not sufficient.
-# An out of date config.h is not fatal but complains loudly!
-$(PERL_INC)/config.h: $(PERL_SRC)/config.sh
- -$(NOECHO) $(ECHO) "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; $(FALSE)
-
-$(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
- $(NOECHO) $(ECHO) "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
- %s
-MAKE_FRAG
-
- return join "", @m unless $self->needs_linking;
-
- push @m, q{
-PERL_HDRS = \
- $(PERL_INC)/EXTERN.h \
- $(PERL_INC)/INTERN.h \
- $(PERL_INC)/XSUB.h \
- $(PERL_INC)/av.h \
- $(PERL_INC)/cc_runtime.h \
- $(PERL_INC)/config.h \
- $(PERL_INC)/cop.h \
- $(PERL_INC)/cv.h \
- $(PERL_INC)/dosish.h \
- $(PERL_INC)/embed.h \
- $(PERL_INC)/embedvar.h \
- $(PERL_INC)/fakethr.h \
- $(PERL_INC)/form.h \
- $(PERL_INC)/gv.h \
- $(PERL_INC)/handy.h \
- $(PERL_INC)/hv.h \
- $(PERL_INC)/intrpvar.h \
- $(PERL_INC)/iperlsys.h \
- $(PERL_INC)/keywords.h \
- $(PERL_INC)/mg.h \
- $(PERL_INC)/nostdio.h \
- $(PERL_INC)/op.h \
- $(PERL_INC)/opcode.h \
- $(PERL_INC)/patchlevel.h \
- $(PERL_INC)/perl.h \
- $(PERL_INC)/perlio.h \
- $(PERL_INC)/perlsdio.h \
- $(PERL_INC)/perlsfio.h \
- $(PERL_INC)/perlvars.h \
- $(PERL_INC)/perly.h \
- $(PERL_INC)/pp.h \
- $(PERL_INC)/pp_proto.h \
- $(PERL_INC)/proto.h \
- $(PERL_INC)/regcomp.h \
- $(PERL_INC)/regexp.h \
- $(PERL_INC)/regnodes.h \
- $(PERL_INC)/scope.h \
- $(PERL_INC)/sv.h \
- $(PERL_INC)/thread.h \
- $(PERL_INC)/unixish.h \
- $(PERL_INC)/util.h
-
-$(OBJECT) : $(PERL_HDRS)
-} if $self->{OBJECT};
-
- push @m, join(" ", values %{$self->{XS}})." : \$(XSUBPPDEPS)\n" if %{$self->{XS}};
-
- join "\n", @m;
-}
-
-
-=item pm_to_blib
-
-Defines target that copies all files in the hash PM to their
-destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
-
-=cut
-
-sub pm_to_blib {
- my $self = shift;
- my($autodir) = $self->catdir('$(INST_LIB)','auto');
- my $r = q{
-pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
-};
-
- # VMS will swallow '' and PM_FILTER is often empty. So use q[]
- my $pm_to_blib = $self->oneliner(<<CODE, ['-MExtUtils::Install']);
-pm_to_blib({\@ARGV}, '$autodir', q[\$(PM_FILTER)], '\$(PERM_DIR)')
-CODE
-
- my @cmds = $self->split_command($pm_to_blib, %{$self->{PM}});
-
- $r .= join '', map { "\t\$(NOECHO) $_\n" } @cmds;
- $r .= qq{\t\$(NOECHO) \$(TOUCH) pm_to_blib\n};
-
- return $r;
-}
-
-=item post_constants (o)
-
-Returns an empty string per default. Dedicated to overrides from
-within Makefile.PL after all constants have been defined.
-
-=cut
-
-sub post_constants{
- "";
-}
-
-=item post_initialize (o)
-
-Returns an empty string per default. Used in Makefile.PLs to add some
-chunk of text to the Makefile after the object is initialized.
-
-=cut
-
-sub post_initialize {
- "";
-}
-
-=item postamble (o)
-
-Returns an empty string. Can be used in Makefile.PLs to write some
-text to the Makefile at the end.
-
-=cut
-
-sub postamble {
- "";
-}
-
-# transform dot-separated version string into comma-separated quadruple
-# examples: '1.2.3.4.5' => '1,2,3,4'
-# '1.2.3' => '1,2,3,0'
-sub _ppd_version {
- my ($self, $string) = @_;
- return join ',', ((split /\./, $string), (0) x 4)[0..3];
-}
-
-=item ppd
-
-Defines target that creates a PPD (Perl Package Description) file
-for a binary distribution.
-
-=cut
-
-sub ppd {
- my($self) = @_;
-
- my $abstract = $self->{ABSTRACT} || '';
- $abstract =~ s/\n/\\n/sg;
- $abstract =~ s/</&lt;/g;
- $abstract =~ s/>/&gt;/g;
-
- my $author = $self->{AUTHOR} || '';
- $author =~ s/</&lt;/g;
- $author =~ s/>/&gt;/g;
-
- my $ppd_xml = sprintf <<'PPD_HTML', $self->{VERSION}, $abstract, $author;
-<SOFTPKG NAME="$(DISTNAME)" VERSION="%s">
- <ABSTRACT>%s</ABSTRACT>
- <AUTHOR>%s</AUTHOR>
-PPD_HTML
-
- $ppd_xml .= " <IMPLEMENTATION>\n";
- if ( $self->{MIN_PERL_VERSION} ) {
- my $min_perl_version = $self->_ppd_version($self->{MIN_PERL_VERSION});
- $ppd_xml .= sprintf <<'PPD_PERLVERS', $min_perl_version;
- <PERLCORE VERSION="%s" />
-PPD_PERLVERS
-
- }
-
- # Don't add "perl" to requires. perl dependencies are
- # handles by ARCHITECTURE.
- my %prereqs = %{$self->{PREREQ_PM}};
- delete $prereqs{perl};
-
- # Build up REQUIRE
- foreach my $prereq (sort keys %prereqs) {
- my $name = $prereq;
- $name .= '::' unless $name =~ /::/;
- my $version = $prereqs{$prereq}+0; # force numification
-
- my %attrs = ( NAME => $name );
- $attrs{VERSION} = $version if $version;
- my $attrs = join " ", map { qq[$_="$attrs{$_}"] } keys %attrs;
- $ppd_xml .= qq( <REQUIRE $attrs />\n);
- }
-
- my $archname = $Config{archname};
- if ($] >= 5.008) {
- # archname did not change from 5.6 to 5.8, but those versions may
- # not be not binary compatible so now we append the part of the
- # version that changes when binary compatibility may change
- $archname .= "-$Config{PERL_REVISION}.$Config{PERL_VERSION}";
- }
- $ppd_xml .= sprintf <<'PPD_OUT', $archname;
- <ARCHITECTURE NAME="%s" />
-PPD_OUT
-
- if ($self->{PPM_INSTALL_SCRIPT}) {
- if ($self->{PPM_INSTALL_EXEC}) {
- $ppd_xml .= sprintf qq{ <INSTALL EXEC="%s">%s</INSTALL>\n},
- $self->{PPM_INSTALL_EXEC}, $self->{PPM_INSTALL_SCRIPT};
- }
- else {
- $ppd_xml .= sprintf qq{ <INSTALL>%s</INSTALL>\n},
- $self->{PPM_INSTALL_SCRIPT};
- }
- }
-
- my ($bin_location) = $self->{BINARY_LOCATION} || '';
- $bin_location =~ s/\\/\\\\/g;
-
- $ppd_xml .= sprintf <<'PPD_XML', $bin_location;
- <CODEBASE HREF="%s" />
- </IMPLEMENTATION>
-</SOFTPKG>
-PPD_XML
-
- my @ppd_cmds = $self->echo($ppd_xml, '$(DISTNAME).ppd');
-
- return sprintf <<'PPD_OUT', join "\n\t", @ppd_cmds;
-# Creates a PPD (Perl Package Description) for a binary distribution.
-ppd :
- %s
-PPD_OUT
-
-}
-
-=item prefixify
-
- $MM->prefixify($var, $prefix, $new_prefix, $default);
-
-Using either $MM->{uc $var} || $Config{lc $var}, it will attempt to
-replace it's $prefix with a $new_prefix.
-
-Should the $prefix fail to match I<AND> a PREFIX was given as an
-argument to WriteMakefile() it will set it to the $new_prefix +
-$default. This is for systems whose file layouts don't neatly fit into
-our ideas of prefixes.
-
-This is for heuristics which attempt to create directory structures
-that mirror those of the installed perl.
-
-For example:
-
- $MM->prefixify('installman1dir', '/usr', '/home/foo', 'man/man1');
-
-this will attempt to remove '/usr' from the front of the
-$MM->{INSTALLMAN1DIR} path (initializing it to $Config{installman1dir}
-if necessary) and replace it with '/home/foo'. If this fails it will
-simply use '/home/foo/man/man1'.
-
-=cut
-
-sub prefixify {
- my($self,$var,$sprefix,$rprefix,$default) = @_;
-
- my $path = $self->{uc $var} ||
- $Config_Override{lc $var} || $Config{lc $var} || '';
-
- $rprefix .= '/' if $sprefix =~ m|/$|;
-
- print STDERR " prefixify $var => $path\n" if $Verbose >= 2;
- print STDERR " from $sprefix to $rprefix\n" if $Verbose >= 2;
-
- if( $self->{ARGS}{PREFIX} &&
- $path !~ s{^\Q$sprefix\E\b}{$rprefix}s )
- {
-
- print STDERR " cannot prefix, using default.\n" if $Verbose >= 2;
- print STDERR " no default!\n" if !$default && $Verbose >= 2;
-
- $path = $self->catdir($rprefix, $default) if $default;
- }
-
- print " now $path\n" if $Verbose >= 2;
- return $self->{uc $var} = $path;
-}
-
-
-=item processPL (o)
-
-Defines targets to run *.PL files.
-
-=cut
-
-sub processPL {
- my $self = shift;
- my $pl_files = $self->{PL_FILES};
-
- return "" unless $pl_files;
-
- my $m = '';
- foreach my $plfile (sort keys %$pl_files) {
- my $list = ref($pl_files->{$plfile})
- ? $pl_files->{$plfile}
- : [$pl_files->{$plfile}];
-
- foreach my $target (@$list) {
- if( $Is{VMS} ) {
- $plfile = vmsify($self->eliminate_macros($plfile));
- $target = vmsify($self->eliminate_macros($target));
- }
-
- # Normally a .PL file runs AFTER pm_to_blib so it can have
- # blib in its @INC and load the just built modules. BUT if
- # the generated module is something in $(TO_INST_PM) which
- # pm_to_blib depends on then it can't depend on pm_to_blib
- # else we have a dependency loop.
- my $pm_dep;
- my $perlrun;
- if( defined $self->{PM}{$target} ) {
- $pm_dep = '';
- $perlrun = 'PERLRUN';
- }
- else {
- $pm_dep = 'pm_to_blib';
- $perlrun = 'PERLRUNINST';
- }
-
- $m .= <<MAKE_FRAG;
-
-all :: $target
- \$(NOECHO) \$(NOOP)
-
-$target :: $plfile $pm_dep
- \$($perlrun) $plfile $target
-MAKE_FRAG
-
- }
- }
-
- return $m;
-}
-
-=item quote_paren
-
-Backslashes parentheses C<()> in command line arguments.
-Doesn't handle recursive Makefile C<$(...)> constructs,
-but handles simple ones.
-
-=cut
-
-sub quote_paren {
- my $arg = shift;
- $arg =~ s{\$\((.+?)\)}{\$\\\\($1\\\\)}g; # protect $(...)
- $arg =~ s{(?<!\\)([()])}{\\$1}g; # quote unprotected
- $arg =~ s{\$\\\\\((.+?)\\\\\)}{\$($1)}g; # unprotect $(...)
- return $arg;
-}
-
-=item replace_manpage_separator
-
- my $man_name = $MM->replace_manpage_separator($file_path);
-
-Takes the name of a package, which may be a nested package, in the
-form 'Foo/Bar.pm' and replaces the slash with C<::> or something else
-safe for a man page file name. Returns the replacement.
-
-=cut
-
-sub replace_manpage_separator {
- my($self,$man) = @_;
-
- $man =~ s,/+,::,g;
- return $man;
-}
-
-
-=item cd
-
-=cut
-
-sub cd {
- my($self, $dir, @cmds) = @_;
-
- # No leading tab and no trailing newline makes for easier embedding
- my $make_frag = join "\n\t", map { "cd $dir && $_" } @cmds;
-
- return $make_frag;
-}
-
-=item oneliner
-
-=cut
-
-sub oneliner {
- my($self, $cmd, $switches) = @_;
- $switches = [] unless defined $switches;
-
- # Strip leading and trailing newlines
- $cmd =~ s{^\n+}{};
- $cmd =~ s{\n+$}{};
-
- my @cmds = split /\n/, $cmd;
- $cmd = join " \n\t -e ", map $self->quote_literal($_), @cmds;
- $cmd = $self->escape_newlines($cmd);
-
- $switches = join ' ', @$switches;
-
- return qq{\$(ABSPERLRUN) $switches -e $cmd --};
-}
-
-
-=item quote_literal
-
-=cut
-
-sub quote_literal {
- my($self, $text) = @_;
-
- # I think all we have to quote is single quotes and I think
- # this is a safe way to do it.
- $text =~ s{'}{'\\''}g;
-
- return "'$text'";
-}
-
-
-=item escape_newlines
-
-=cut
-
-sub escape_newlines {
- my($self, $text) = @_;
-
- $text =~ s{\n}{\\\n}g;
-
- return $text;
-}
-
-
-=item max_exec_len
-
-Using POSIX::ARG_MAX. Otherwise falling back to 4096.
-
-=cut
-
-sub max_exec_len {
- my $self = shift;
-
- if (!defined $self->{_MAX_EXEC_LEN}) {
- if (my $arg_max = eval { require POSIX; &POSIX::ARG_MAX }) {
- $self->{_MAX_EXEC_LEN} = $arg_max;
- }
- else { # POSIX minimum exec size
- $self->{_MAX_EXEC_LEN} = 4096;
- }
- }
-
- return $self->{_MAX_EXEC_LEN};
-}
-
-
-=item static (o)
-
-Defines the static target.
-
-=cut
-
-sub static {
-# --- Static Loading Sections ---
-
- my($self) = shift;
- '
-## $(INST_PM) has been moved to the all: target.
-## It remains here for awhile to allow for old usage: "make static"
-static :: $(FIRST_MAKEFILE) $(INST_STATIC)
- $(NOECHO) $(NOOP)
-';
-}
-
-=item static_lib (o)
-
-Defines how to produce the *.a (or equivalent) files.
-
-=cut
-
-sub static_lib {
- my($self) = @_;
- return '' unless $self->has_link_code;
-
- my(@m);
- push(@m, <<'END');
-
-$(INST_STATIC) : $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists
- $(RM_RF) $@
-END
-
- # If this extension has its own library (eg SDBM_File)
- # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
- push(@m, <<'MAKE_FRAG') if $self->{MYEXTLIB};
- $(CP) $(MYEXTLIB) $@
-MAKE_FRAG
-
- my $ar;
- if (exists $self->{FULL_AR} && -x $self->{FULL_AR}) {
- # Prefer the absolute pathed ar if available so that PATH
- # doesn't confuse us. Perl itself is built with the full_ar.
- $ar = 'FULL_AR';
- } else {
- $ar = 'AR';
- }
- push @m, sprintf <<'MAKE_FRAG', $ar;
- $(%s) $(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@
- $(CHMOD) $(PERM_RWX) $@
- $(NOECHO) $(ECHO) "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
-MAKE_FRAG
-
- # Old mechanism - still available:
- push @m, <<'MAKE_FRAG' if $self->{PERL_SRC} && $self->{EXTRALIBS};
- $(NOECHO) $(ECHO) "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
-MAKE_FRAG
-
- join('', @m);
-}
-
-=item staticmake (o)
-
-Calls makeaperl.
-
-=cut
-
-sub staticmake {
- my($self, %attribs) = @_;
- my(@static);
-
- my(@searchdirs)=($self->{PERL_ARCHLIB}, $self->{SITEARCHEXP}, $self->{INST_ARCHLIB});
-
- # And as it's not yet built, we add the current extension
- # but only if it has some C code (or XS code, which implies C code)
- if (@{$self->{C}}) {
- @static = $self->catfile($self->{INST_ARCHLIB},
- "auto",
- $self->{FULLEXT},
- "$self->{BASEEXT}$self->{LIB_EXT}"
- );
- }
-
- # Either we determine now, which libraries we will produce in the
- # subdirectories or we do it at runtime of the make.
-
- # We could ask all subdir objects, but I cannot imagine, why it
- # would be necessary.
-
- # Instead we determine all libraries for the new perl at
- # runtime.
- my(@perlinc) = ($self->{INST_ARCHLIB}, $self->{INST_LIB}, $self->{PERL_ARCHLIB}, $self->{PERL_LIB});
-
- $self->makeaperl(MAKE => $self->{MAKEFILE},
- DIRS => \@searchdirs,
- STAT => \@static,
- INCL => \@perlinc,
- TARGET => $self->{MAP_TARGET},
- TMP => "",
- LIBPERL => $self->{LIBPERL_A}
- );
-}
-
-=item subdir_x (o)
-
-Helper subroutine for subdirs
-
-=cut
-
-sub subdir_x {
- my($self, $subdir) = @_;
-
- my $subdir_cmd = $self->cd($subdir,
- '$(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) all $(PASTHRU)'
- );
- return sprintf <<'EOT', $subdir_cmd;
-
-subdirs ::
- $(NOECHO) %s
-EOT
-
-}
-
-=item subdirs (o)
-
-Defines targets to process subdirectories.
-
-=cut
-
-sub subdirs {
-# --- Sub-directory Sections ---
- my($self) = shift;
- my(@m);
- # This method provides a mechanism to automatically deal with
- # subdirectories containing further Makefile.PL scripts.
- # It calls the subdir_x() method for each subdirectory.
- foreach my $dir (@{$self->{DIR}}){
- push(@m, $self->subdir_x($dir));
-#### print "Including $dir subdirectory\n";
- }
- if (@m){
- unshift(@m, "
-# The default clean, realclean and test targets in this Makefile
-# have automatically been given entries for each subdir.
-
-");
- } else {
- push(@m, "\n# none")
- }
- join('',@m);
-}
-
-=item test (o)
-
-Defines the test targets.
-
-=cut
-
-sub test {
-# --- Test and Installation Sections ---
-
- my($self, %attribs) = @_;
- my $tests = $attribs{TESTS} || '';
- if (!$tests && -d 't') {
- $tests = $self->find_tests;
- }
- # note: 'test.pl' name is also hardcoded in init_dirscan()
- my(@m);
- push(@m,"
-TEST_VERBOSE=0
-TEST_TYPE=test_\$(LINKTYPE)
-TEST_FILE = test.pl
-TEST_FILES = $tests
-TESTDB_SW = -d
-
-testdb :: testdb_\$(LINKTYPE)
-
-test :: \$(TEST_TYPE) subdirs-test
-
-subdirs-test ::
- \$(NOECHO) \$(NOOP)
-
-");
-
- foreach my $dir (@{ $self->{DIR} }) {
- my $test = $self->cd($dir, '$(MAKE) test $(PASTHRU)');
-
- push @m, <<END
-subdirs-test ::
- \$(NOECHO) $test
-
-END
- }
-
- push(@m, "\t\$(NOECHO) \$(ECHO) 'No tests defined for \$(NAME) extension.'\n")
- unless $tests or -f "test.pl" or @{$self->{DIR}};
- push(@m, "\n");
-
- push(@m, "test_dynamic :: pure_all\n");
- push(@m, $self->test_via_harness('$(FULLPERLRUN)', '$(TEST_FILES)'))
- if $tests;
- push(@m, $self->test_via_script('$(FULLPERLRUN)', '$(TEST_FILE)'))
- if -f "test.pl";
- push(@m, "\n");
-
- push(@m, "testdb_dynamic :: pure_all\n");
- push(@m, $self->test_via_script('$(FULLPERLRUN) $(TESTDB_SW)',
- '$(TEST_FILE)'));
- push(@m, "\n");
-
- # Occasionally we may face this degenerate target:
- push @m, "test_ : test_dynamic\n\n";
-
- if ($self->needs_linking()) {
- push(@m, "test_static :: pure_all \$(MAP_TARGET)\n");
- push(@m, $self->test_via_harness('./$(MAP_TARGET)', '$(TEST_FILES)')) if $tests;
- push(@m, $self->test_via_script('./$(MAP_TARGET)', '$(TEST_FILE)')) if -f "test.pl";
- push(@m, "\n");
- push(@m, "testdb_static :: pure_all \$(MAP_TARGET)\n");
- push(@m, $self->test_via_script('./$(MAP_TARGET) $(TESTDB_SW)', '$(TEST_FILE)'));
- push(@m, "\n");
- } else {
- push @m, "test_static :: test_dynamic\n";
- push @m, "testdb_static :: testdb_dynamic\n";
- }
- join("", @m);
-}
-
-=item test_via_harness (override)
-
-For some reason which I forget, Unix machines like to have
-PERL_DL_NONLAZY set for tests.
-
-=cut
-
-sub test_via_harness {
- my($self, $perl, $tests) = @_;
- return $self->SUPER::test_via_harness("PERL_DL_NONLAZY=1 $perl", $tests);
-}
-
-=item test_via_script (override)
-
-Again, the PERL_DL_NONLAZY thing.
-
-=cut
-
-sub test_via_script {
- my($self, $perl, $script) = @_;
- return $self->SUPER::test_via_script("PERL_DL_NONLAZY=1 $perl", $script);
-}
-
-
-=item tool_xsubpp (o)
-
-Determines typemaps, xsubpp version, prototype behaviour.
-
-=cut
-
-sub tool_xsubpp {
- my($self) = shift;
- return "" unless $self->needs_linking;
-
- my $xsdir;
- my @xsubpp_dirs = @INC;
-
- # Make sure we pick up the new xsubpp if we're building perl.
- unshift @xsubpp_dirs, $self->{PERL_LIB} if $self->{PERL_CORE};
-
- foreach my $dir (@xsubpp_dirs) {
- $xsdir = $self->catdir($dir, 'ExtUtils');
- if( -r $self->catfile($xsdir, "xsubpp") ) {
- last;
- }
- }
-
- my $tmdir = File::Spec->catdir($self->{PERL_LIB},"ExtUtils");
- my(@tmdeps) = $self->catfile($tmdir,'typemap');
- if( $self->{TYPEMAPS} ){
- foreach my $typemap (@{$self->{TYPEMAPS}}){
- if( ! -f $typemap ) {
- warn "Typemap $typemap not found.\n";
- }
- else {
- push(@tmdeps, $typemap);
- }
- }
- }
- push(@tmdeps, "typemap") if -f "typemap";
- my(@tmargs) = map("-typemap $_", @tmdeps);
- if( exists $self->{XSOPT} ){
- unshift( @tmargs, $self->{XSOPT} );
- }
-
- if ($Is{VMS} &&
- $Config{'ldflags'} &&
- $Config{'ldflags'} =~ m!/Debug!i &&
- (!exists($self->{XSOPT}) || $self->{XSOPT} !~ /linenumbers/)
- )
- {
- unshift(@tmargs,'-nolinenumbers');
- }
-
-
- $self->{XSPROTOARG} = "" unless defined $self->{XSPROTOARG};
-
- return qq{
-XSUBPPDIR = $xsdir
-XSUBPP = \$(XSUBPPDIR)\$(DFSEP)xsubpp
-XSUBPPRUN = \$(PERLRUN) \$(XSUBPP)
-XSPROTOARG = $self->{XSPROTOARG}
-XSUBPPDEPS = @tmdeps \$(XSUBPP)
-XSUBPPARGS = @tmargs
-XSUBPP_EXTRA_ARGS =
-};
-};
-
-
-=item all_target
-
-Build man pages, too
-
-=cut
-
-sub all_target {
- my $self = shift;
-
- return <<'MAKE_EXT';
-all :: pure_all manifypods
- $(NOECHO) $(NOOP)
-MAKE_EXT
-}
-
-=item top_targets (o)
-
-Defines the targets all, subdirs, config, and O_FILES
-
-=cut
-
-sub top_targets {
-# --- Target Sections ---
-
- my($self) = shift;
- my(@m);
-
- push @m, $self->all_target, "\n" unless $self->{SKIPHASH}{'all'};
-
- push @m, '
-pure_all :: config pm_to_blib subdirs linkext
- $(NOECHO) $(NOOP)
-
-subdirs :: $(MYEXTLIB)
- $(NOECHO) $(NOOP)
-
-config :: $(FIRST_MAKEFILE) blibdirs
- $(NOECHO) $(NOOP)
-';
-
- push @m, '
-$(O_FILES): $(H_FILES)
-' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
-
- push @m, q{
-help :
- perldoc ExtUtils::MakeMaker
-};
-
- join('',@m);
-}
-
-=item writedoc
-
-Obsolete, deprecated method. Not used since Version 5.21.
-
-=cut
-
-sub writedoc {
-# --- perllocal.pod section ---
- my($self,$what,$name,@attribs)=@_;
- my $time = localtime;
- print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
- print join "\n\n=item *\n\n", map("C<$_>",@attribs);
- print "\n\n=back\n\n";
-}
-
-=item xs_c (o)
-
-Defines the suffix rules to compile XS files to C.
-
-=cut
-
-sub xs_c {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs.c:
- $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
-';
-}
-
-=item xs_cpp (o)
-
-Defines the suffix rules to compile XS files to C++.
-
-=cut
-
-sub xs_cpp {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs.cpp:
- $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
-';
-}
-
-=item xs_o (o)
-
-Defines suffix rules to go from XS to object files directly. This is
-only intended for broken make implementations.
-
-=cut
-
-sub xs_o { # many makes are too dumb to use xs_c then c_o
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs$(OBJ_EXT):
- $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
- $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c
-';
-}
-
-
-1;
-
-=back
-
-=head1 SEE ALSO
-
-L<ExtUtils::MakeMaker>
-
-=cut
-
-__END__