1 package ExtUtils::MM_Unix;
7 use File::Basename qw(basename dirname fileparse);
10 our ($Is_Mac,$Is_OS2,$Is_VMS,$Is_Win32,$Is_Dos,$Is_PERL_OBJECT,
11 $Verbose,%pm,%static,$Xsubpp_Version);
13 our $VERSION = '1.12603';
15 require ExtUtils::MakeMaker;
16 ExtUtils::MakeMaker->import(qw($Verbose &neatvalue));
18 $Is_OS2 = $^O eq 'os2';
19 $Is_Mac = $^O eq 'MacOS';
20 $Is_Win32 = $^O eq 'MSWin32';
21 $Is_Dos = $^O eq 'dos';
23 $Is_PERL_OBJECT = $Config{'ccflags'} =~ /-DPERL_OBJECT/;
25 if ($Is_VMS = $^O eq 'VMS') {
26 require VMS::Filespec;
27 import VMS::Filespec qw( &vmsify );
32 ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
36 C<require ExtUtils::MM_Unix;>
40 The methods provided by this package are designed to be used in
41 conjunction with ExtUtils::MakeMaker. When MakeMaker writes a
42 Makefile, it creates one or more objects that inherit their methods
43 from a package C<MM>. MM itself doesn't provide any methods, but it
44 ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
45 specific packages take the responsibility for all the methods provided
46 by MM_Unix. We are trying to reduce the number of the necessary
47 overrides by defining rather primitive operations within
50 If you are going to write a platform specific MM package, please try
51 to limit the necessary overrides to primitive methods, and if it is not
52 possible to do so, let's work out how to achieve that gain.
54 If you are overriding any of these methods in your Makefile.PL (in the
55 MY class), please report that to the makemaker mailing list. We are
56 trying to minimize the necessary method overrides and switch to data
57 driven Makefile.PLs wherever possible. In the long run less methods
58 will be overridable via the MY class.
62 The following description of methods is still under
63 development. Please refer to the code for not suitably documented
64 sections and complain loudly to the makemaker mailing list.
66 Not all of the methods below are overridable in a
67 Makefile.PL. Overridable methods are marked as (o). All methods are
68 overridable by a platform specific MM_*.pm file (See
69 L<ExtUtils::MM_VMS>) and L<ExtUtils::MM_OS2>).
71 =head2 Preloaded methods
77 No physical check on the filesystem, but a logical cleanup of a
78 path. On UNIX eliminated successive slashes and successive "/.".
85 # Handle POSIX-style node names beginning with double slash
87 if ( $^O =~ m/^qnx|nto$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
90 $path =~ s|(?<=[^/])/+|/|g ; # xx////xx -> xx/xx
91 $path =~ s|(/\.)+/|/|g ; # xx/././xx -> xx/xx
92 $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
93 $path =~ s|(?<=[^/])/\z|| ; # xx/ -> xx
99 Concatenate two or more directory names to form a complete path ending
100 with a directory. But remove the trailing slash from the resulting
101 string, because it doesn't look good, isn't necessary and confuses
102 OS2. Of course, if this is the root directory, don't cut off the
113 # append a slash to each argument unless it has one there
114 $_ .= "/" if $_ eq '' or substr($_,-1) ne "/";
116 $self->canonpath(join('', @args));
121 Concatenate one or more directory names and a filename to form a
122 complete path ending with a filename
129 return $self->canonpath($file) unless @_;
130 my $dir = $self->catdir(@_);
132 $_ .= "/" unless substr($_,length($_)-1,1) eq "/";
134 return $self->canonpath($dir.$file);
139 Returns a string representing of the current directory. "." on UNIX.
149 Returns a string representing of the root directory. "/" on UNIX.
159 Returns a string representing of the parent directory. ".." on UNIX.
167 sub ExtUtils::MM_Unix::c_o ;
168 sub ExtUtils::MM_Unix::clean ;
169 sub ExtUtils::MM_Unix::const_cccmd ;
170 sub ExtUtils::MM_Unix::const_config ;
171 sub ExtUtils::MM_Unix::const_loadlibs ;
172 sub ExtUtils::MM_Unix::constants ;
173 sub ExtUtils::MM_Unix::depend ;
174 sub ExtUtils::MM_Unix::dir_target ;
175 sub ExtUtils::MM_Unix::dist ;
176 sub ExtUtils::MM_Unix::dist_basics ;
177 sub ExtUtils::MM_Unix::dist_ci ;
178 sub ExtUtils::MM_Unix::dist_core ;
179 sub ExtUtils::MM_Unix::dist_dir ;
180 sub ExtUtils::MM_Unix::dist_test ;
181 sub ExtUtils::MM_Unix::dlsyms ;
182 sub ExtUtils::MM_Unix::dynamic ;
183 sub ExtUtils::MM_Unix::dynamic_bs ;
184 sub ExtUtils::MM_Unix::dynamic_lib ;
185 sub ExtUtils::MM_Unix::exescan ;
186 sub ExtUtils::MM_Unix::export_list ;
187 sub ExtUtils::MM_Unix::extliblist ;
188 sub ExtUtils::MM_Unix::file_name_is_absolute ;
189 sub ExtUtils::MM_Unix::find_perl ;
190 sub ExtUtils::MM_Unix::fixin ;
191 sub ExtUtils::MM_Unix::force ;
192 sub ExtUtils::MM_Unix::guess_name ;
193 sub ExtUtils::MM_Unix::has_link_code ;
194 sub ExtUtils::MM_Unix::htmlifypods ;
195 sub ExtUtils::MM_Unix::init_dirscan ;
196 sub ExtUtils::MM_Unix::init_main ;
197 sub ExtUtils::MM_Unix::init_others ;
198 sub ExtUtils::MM_Unix::install ;
199 sub ExtUtils::MM_Unix::installbin ;
200 sub ExtUtils::MM_Unix::libscan ;
201 sub ExtUtils::MM_Unix::linkext ;
202 sub ExtUtils::MM_Unix::lsdir ;
203 sub ExtUtils::MM_Unix::macro ;
204 sub ExtUtils::MM_Unix::makeaperl ;
205 sub ExtUtils::MM_Unix::makefile ;
206 sub ExtUtils::MM_Unix::manifypods ;
207 sub ExtUtils::MM_Unix::maybe_command ;
208 sub ExtUtils::MM_Unix::maybe_command_in_dirs ;
209 sub ExtUtils::MM_Unix::needs_linking ;
210 sub ExtUtils::MM_Unix::nicetext ;
211 sub ExtUtils::MM_Unix::parse_version ;
212 sub ExtUtils::MM_Unix::pasthru ;
213 sub ExtUtils::MM_Unix::path ;
214 sub ExtUtils::MM_Unix::perl_archive;
215 sub ExtUtils::MM_Unix::perl_archive_after;
216 sub ExtUtils::MM_Unix::perl_script ;
217 sub ExtUtils::MM_Unix::perldepend ;
218 sub ExtUtils::MM_Unix::pm_to_blib ;
219 sub ExtUtils::MM_Unix::post_constants ;
220 sub ExtUtils::MM_Unix::post_initialize ;
221 sub ExtUtils::MM_Unix::postamble ;
222 sub ExtUtils::MM_Unix::ppd ;
223 sub ExtUtils::MM_Unix::prefixify ;
224 sub ExtUtils::MM_Unix::processPL ;
225 sub ExtUtils::MM_Unix::realclean ;
226 sub ExtUtils::MM_Unix::replace_manpage_separator ;
227 sub ExtUtils::MM_Unix::static ;
228 sub ExtUtils::MM_Unix::static_lib ;
229 sub ExtUtils::MM_Unix::staticmake ;
230 sub ExtUtils::MM_Unix::subdir_x ;
231 sub ExtUtils::MM_Unix::subdirs ;
232 sub ExtUtils::MM_Unix::test ;
233 sub ExtUtils::MM_Unix::test_via_harness ;
234 sub ExtUtils::MM_Unix::test_via_script ;
235 sub ExtUtils::MM_Unix::tool_autosplit ;
236 sub ExtUtils::MM_Unix::tool_xsubpp ;
237 sub ExtUtils::MM_Unix::tools_other ;
238 sub ExtUtils::MM_Unix::top_targets ;
239 sub ExtUtils::MM_Unix::writedoc ;
240 sub ExtUtils::MM_Unix::xs_c ;
241 sub ExtUtils::MM_Unix::xs_cpp ;
242 sub ExtUtils::MM_Unix::xs_o ;
243 sub ExtUtils::MM_Unix::xsubpp_version ;
245 package ExtUtils::MM_Unix;
255 =head2 SelfLoaded methods
261 Defines the suffix rules to compile different flavors of C files to
267 # --- Translation Sections ---
270 return '' unless $self->needs_linking();
272 if (my $cpp = $Config{cpprun}) {
273 my $cpp_cmd = $self->const_cccmd;
274 $cpp_cmd =~ s/^CCCMD\s*=\s*\$\(CC\)/$cpp/;
277 '. $cpp_cmd . ' $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c > $*.i
282 $(CCCMD) -S $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
286 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
290 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.C
291 ' if $^O ne 'os2' and $^O ne 'MSWin32' and $^O ne 'dos'; #Case-specific
294 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cpp
297 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cxx
300 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cc
307 Does very much the same as the cflags script in the perl
308 distribution. It doesn't return the whole compiler command line, but
309 initializes all of its parts. The const_cccmd method then actually
310 returns the definition of the CCCMD macro which uses these parts.
317 my($self,$libperl)=@_;
318 return $self->{CFLAGS} if $self->{CFLAGS};
319 return '' unless $self->needs_linking();
321 my($prog, $uc, $perltype, %cflags);
322 $libperl ||= $self->{LIBPERL_A} || "libperl$self->{LIB_EXT}" ;
323 $libperl =~ s/\.\$\(A\)$/$self->{LIB_EXT}/;
325 @cflags{qw(cc ccflags optimize shellflags)}
326 = @Config{qw(cc ccflags optimize shellflags)};
329 $cflags{shellflags} ||= '';
334 DE => '-DDEBUGGING -DEMBED',
335 M => '-DEMBED -DMULTIPLICITY',
336 DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
339 if ($libperl =~ /libperl(\w*)\Q$self->{LIB_EXT}/){
342 $uc = ""; # avoid warning
344 $perltype = $map{$uc} ? $map{$uc} : "";
352 ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
353 if ($prog = $Config::Config{$name}) {
354 # Expand hints for this extension via the shell
355 print STDOUT "Processing $name hint:\n" if $Verbose;
356 my(@o)=`cc=\"$cflags{cc}\"
357 ccflags=\"$cflags{ccflags}\"
358 optimize=\"$cflags{optimize}\"
359 perltype=\"$cflags{perltype}\"
360 optdebug=\"$cflags{optdebug}\"
363 echo ccflags=\$ccflags
364 echo optimize=\$optimize
365 echo perltype=\$perltype
366 echo optdebug=\$optdebug
371 if ($line =~ /(.*?)=\s*(.*)\s*$/){
373 print STDOUT " $1 = $2\n" if $Verbose;
375 print STDOUT "Unrecognised result from hint: '$line'\n";
381 $cflags{optimize} = $optdebug;
384 for (qw(ccflags optimize perltype)) {
385 $cflags{$_} =~ s/^\s+//;
386 $cflags{$_} =~ s/\s+/ /g;
387 $cflags{$_} =~ s/\s+$//;
388 $self->{uc $_} ||= $cflags{$_}
391 if ($Is_PERL_OBJECT) {
392 $self->{CCFLAGS} =~ s/-DPERL_OBJECT(\b|$)/-DPERL_CAPI/g;
394 if ($Config{'cc'} =~ /^cl/i) {
395 # Turn off C++ mode of the MSC compiler
396 $self->{CCFLAGS} =~ s/-TP(\s|$)//g;
397 $self->{OPTIMIZE} =~ s/-TP(\s|$)//g;
399 elsif ($Config{'cc'} =~ /^bcc32/i) {
400 # Turn off C++ mode of the Borland compiler
401 $self->{CCFLAGS} =~ s/-P(\s|$)//g;
402 $self->{OPTIMIZE} =~ s/-P(\s|$)//g;
404 elsif ($Config{'cc'} =~ /^gcc/i) {
405 # Turn off C++ mode of the GCC compiler
406 $self->{CCFLAGS} =~ s/-xc\+\+(\s|$)//g;
407 $self->{OPTIMIZE} =~ s/-xc\+\+(\s|$)//g;
412 if ($self->{POLLUTE}) {
413 $self->{CCFLAGS} .= ' -DPERL_POLLUTE ';
417 if ($Config{usemymalloc} and not $Config{bincompat5005}
418 and not $Config{ccflags} =~ /-DPERL_POLLUTE_MALLOC\b/
419 and $self->{PERL_MALLOC_OK}) {
420 $pollute = '$(PERL_MALLOC_DEF)';
423 return $self->{CFLAGS} = qq{
424 CCFLAGS = $self->{CCFLAGS}
425 OPTIMIZE = $self->{OPTIMIZE}
426 PERLTYPE = $self->{PERLTYPE}
434 Defines the clean target.
439 # --- Cleanup and Distribution Sections ---
441 my($self, %attribs) = @_;
444 # Delete temporary files but do not touch installed files. We don\'t delete
445 # the Makefile here so a later make realclean still has a makefile to use.
449 # clean subdirectories first
450 for $dir (@{$self->{DIR}}) {
451 if ($Is_Win32 && Win32::IsWin95()) {
454 \$(TEST_F) $self->{MAKEFILE}
461 -cd $dir && \$(TEST_F) $self->{MAKEFILE} && \$(MAKE) clean
466 my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
467 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
468 push(@otherfiles, qw[./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all
469 perlmain.c tmon.out mon.out core core.*perl.*.?
470 *perl.core so_locations pm_to_blib
471 *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT)
472 $(BOOTSTRAP) $(BASEEXT).bso
473 $(BASEEXT).def lib$(BASEEXT).def
476 push @m, "\t-$self->{RM_RF} @otherfiles\n";
477 # See realclean and ext/utils/make_ext for usage of Makefile.old
479 "\t-$self->{MV} $self->{MAKEFILE} $self->{MAKEFILE}.old \$(DEV_NULL)\n");
481 "\t$attribs{POSTOP}\n") if $attribs{POSTOP};
485 =item const_cccmd (o)
487 Returns the full compiler call for C programs and stores the
488 definition in CONST_CCCMD.
493 my($self,$libperl)=@_;
494 return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
495 return '' unless $self->needs_linking();
496 return $self->{CONST_CCCMD} =
497 q{CCCMD = $(CC) -c $(INC) $(CCFLAGS) $(OPTIMIZE) \\
498 $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \\
499 $(XS_DEFINE_VERSION)};
502 =item const_config (o)
504 Defines a couple of constants in the Makefile that are imported from
510 # --- Constants Sections ---
514 push(@m,"\n# These definitions are from config.sh (via $INC{'Config.pm'})\n");
515 push(@m,"\n# They may have been overridden via Makefile.PL or on the command line\n");
517 foreach $m (@{$self->{CONFIG}}){
518 # SITE*EXP macros are defined in &constants; avoid duplicates here
519 next if $once_only{$m} or $m eq 'sitelibexp' or $m eq 'sitearchexp';
520 push @m, "\U$m\E = ".$self->{uc $m}."\n";
526 =item const_loadlibs (o)
528 Defines EXTRALIBS, LDLOADLIBS, BSLOADLIBS, LD_RUN_PATH. See
529 L<ExtUtils::Liblist> for details.
535 return "" unless $self->needs_linking;
538 # $self->{NAME} might depend on some other libraries:
539 # See ExtUtils::Liblist for details
544 EXTRALIBS LDLOADLIBS BSLOADLIBS LD_RUN_PATH
546 next unless defined $self->{$tmp};
547 push @m, "$tmp = $self->{$tmp}\n";
554 Initializes lots of constants and .SUFFIXES and .PHONY
564 AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
565 VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
566 INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
567 INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
568 INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
569 PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
570 FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
571 PERL_INC PERL FULLPERL FULL_AR
574 next unless defined $self->{$tmp};
575 push @m, "$tmp = $self->{$tmp}\n";
579 VERSION_MACRO = VERSION
580 DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
581 XS_VERSION_MACRO = XS_VERSION
582 XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
583 PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
587 MAKEMAKER = $INC{'ExtUtils/MakeMaker.pm'}
588 MM_VERSION = $ExtUtils::MakeMaker::VERSION
592 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
593 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
594 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
595 # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
596 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
600 FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
601 LDFROM LINKTYPE PM_FILTER
603 next unless defined $self->{$tmp};
604 push @m, "$tmp = $self->{$tmp}\n";
608 # Handy lists of source code files:
609 XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
610 C_FILES = ".join(" \\\n\t", @{$self->{C}})."
611 O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
612 H_FILES = ".join(" \\\n\t", @{$self->{H}})."
613 HTMLLIBPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLLIBPODS}})."
614 HTMLSCRIPTPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLSCRIPTPODS}})."
615 MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
616 MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
620 INST_HTMLPRIVLIBDIR INSTALLHTMLPRIVLIBDIR
621 INST_HTMLSITELIBDIR INSTALLHTMLSITELIBDIR
622 INST_HTMLSCRIPTDIR INSTALLHTMLSCRIPTDIR
623 INST_HTMLLIBDIR HTMLEXT
624 INST_MAN1DIR INSTALLMAN1DIR MAN1EXT
625 INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
627 next unless defined $self->{$tmp};
628 push @m, "$tmp = $self->{$tmp}\n";
635 my $method = lc($tmp);
636 # warn "self[$self] method[$method]";
637 push @m, "$tmp = ", $self->$method(), "\n";
641 .NO_CONFIG_REC: Makefile
642 } if $ENV{CLEARCASE_ROOT};
644 # why not q{} ? -- emacs
646 # work around a famous dec-osf make(1) feature(?):
649 .SUFFIXES: .xs .c .C .cpp .i .s .cxx .cc \$(OBJ_EXT)
651 # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
652 # some make implementations will delete the Makefile when we rebuild it. Because
653 # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
654 # does so. Our milage may vary.
655 # .PRECIOUS: Makefile # seems to be not necessary anymore
657 .PHONY: all config static dynamic test linkext manifest
659 # Where is the Config information that we are using/depend on
660 CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
663 my @parentdir = split(/::/, $self->{PARENT_NAME});
665 # Where to put things:
666 INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
667 INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
669 INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
670 INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
673 if ($self->has_link_code()) {
675 INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT)$(LIB_EXT)
676 INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(DLBASE).$(DLEXT)
677 INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
687 $tmp = $self->export_list;
691 $tmp = $self->perl_archive;
695 $tmp = $self->perl_archive_after;
697 PERL_ARCHIVE_AFTER = $tmp
701 #INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
703 #PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
707 TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
709 PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
717 Same as macro for the depend attribute.
722 my($self,%attribs) = @_;
724 while (($key,$val) = each %attribs){
725 last unless defined $key;
726 push @m, "$key: $val\n";
733 Takes an array of directories that need to exist and returns a
734 Makefile entry for a .exists file in these directories. Returns
735 nothing, if the entry has already been processed. We're helpless
736 though, if the same directory comes as $(FOO) _and_ as "bar". Both of
737 them get an entry, that's why we use "::".
742 # --- Make-Directories section (internal method) ---
743 # dir_target(@array) returns a Makefile entry for the file .exists in each
744 # named directory. Returns nothing, if the entry has already been processed.
745 # We're helpless though, if the same directory comes as $(FOO) _and_ as "bar".
746 # Both of them get an entry, that's why we use "::". I chose '$(PERL)' as the
747 # prerequisite, because there has to be one, something that doesn't change
750 my($self,@dirs) = @_;
751 my(@m,$dir,$targdir);
752 foreach $dir (@dirs) {
753 my($src) = $self->catfile($self->{PERL_INC},'perl.h');
754 my($targ) = $self->catfile($dir,'.exists');
755 # catfile may have adapted syntax of $dir to target OS, so...
756 if ($Is_VMS) { # Just remove file name; dirspec is often in macro
757 ($targdir = $targ) =~ s:/?\.exists\z::;
759 else { # while elsewhere we expect to see the dir separator in $targ
760 $targdir = dirname($targ);
762 next if $self->{DIR_TARGET}{$self}{$targdir}++;
765 $self->{NOECHO}\$(MKPATH) $targdir
766 $self->{NOECHO}\$(EQUALIZE_TIMESTAMP) $src $targ
769 -$self->{NOECHO}\$(CHMOD) \$(PERM_RWX) $targdir
777 Defines a lot of macros for distribution support.
782 my($self, %attribs) = @_;
785 # VERSION should be sanitised before use as a file name
786 my($version) = $attribs{VERSION} || '$(VERSION)';
787 my($name) = $attribs{NAME} || '$(DISTNAME)';
788 my($tar) = $attribs{TAR} || 'tar'; # eg /usr/bin/gnutar
789 my($tarflags) = $attribs{TARFLAGS} || 'cvf';
790 my($zip) = $attribs{ZIP} || 'zip'; # eg pkzip Yuck!
791 my($zipflags) = $attribs{ZIPFLAGS} || '-r';
792 my($compress) = $attribs{COMPRESS} || 'gzip --best';
793 my($suffix) = $attribs{SUFFIX} || '.gz'; # eg .gz
794 my($shar) = $attribs{SHAR} || 'shar'; # eg "shar --gzip"
795 my($preop) = $attribs{PREOP} || "$self->{NOECHO}\$(NOOP)"; # eg update MANIFEST
796 my($postop) = $attribs{POSTOP} || "$self->{NOECHO}\$(NOOP)"; # eg remove the distdir
798 my($to_unix) = $attribs{TO_UNIX} || ($Is_OS2
800 . '$(TEST_F) tmp.zip && $(RM) tmp.zip;'
801 . ' $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip -o tmp.zip && $(RM) tmp.zip'
802 : "$self->{NOECHO}\$(NOOP)");
804 my($ci) = $attribs{CI} || 'ci -u';
805 my($rcs_label)= $attribs{RCS_LABEL}|| 'rcs -Nv$(VERSION_SYM): -q';
806 my($dist_cp) = $attribs{DIST_CP} || 'best';
807 my($dist_default) = $attribs{DIST_DEFAULT} || 'tardist';
810 DISTVNAME = ${name}-$version
822 RCS_LABEL = $rcs_label
824 DIST_DEFAULT = $dist_default
829 =item dist_basics (o)
831 Defines the targets distclean, distcheck, skipcheck, manifest, veryclean.
839 distclean :: realclean distcheck
844 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \\
850 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \\
856 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \\
861 veryclean : realclean
862 $(RM_F) *~ *.orig */*~ */*.orig
869 Defines a check in target for RCS.
878 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
879 -e "@all = keys %{ maniread() };" \\
880 -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \\
881 -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
888 Defines the targets dist, tardist, zipdist, uutardist, shdist
896 dist : $(DIST_DEFAULT)
897 }.$self->{NOECHO}.q{$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
898 -e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "}.$self->{MAKEFILE}.q{";'
900 tardist : $(DISTVNAME).tar$(SUFFIX)
902 zipdist : $(DISTVNAME).zip
904 $(DISTVNAME).tar$(SUFFIX) : distdir
907 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
908 $(RM_RF) $(DISTVNAME)
909 $(COMPRESS) $(DISTVNAME).tar
912 $(DISTVNAME).zip : distdir
914 $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
915 $(RM_RF) $(DISTVNAME)
918 uutardist : $(DISTVNAME).tar$(SUFFIX)
919 uuencode $(DISTVNAME).tar$(SUFFIX) \\
920 $(DISTVNAME).tar$(SUFFIX) > \\
921 $(DISTVNAME).tar$(SUFFIX)_uu
925 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
926 $(RM_RF) $(DISTVNAME)
934 Defines the scratch directory target that will hold the distribution
935 before tar-ing (or shar-ing).
944 $(RM_RF) $(DISTVNAME)
945 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \\
946 -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
953 Defines a target that produces the distribution in the
954 scratchdirectory, and runs 'perl Makefile.PL; make ;make test' in that
964 cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
965 cd $(DISTVNAME) && $(MAKE)
966 cd $(DISTVNAME) && $(MAKE) test
973 Used by AIX and VMS to define DL_FUNCS and DL_VARS and write the *.exp
979 my($self,%attribs) = @_;
981 return '' unless ($^O eq 'aix' && $self->needs_linking() );
983 my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
984 my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
985 my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
989 dynamic :: $self->{BASEEXT}.exp
991 ") unless $self->{SKIPHASH}{'dynamic'}; # dynamic and static are subs, so...
994 static :: $self->{BASEEXT}.exp
996 ") unless $self->{SKIPHASH}{'static'}; # we avoid a warning if we tick them
999 $self->{BASEEXT}.exp: Makefile.PL
1000 ",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
1001 Mksymlists("NAME" => "',$self->{NAME},'", "DL_FUNCS" => ',
1002 neatvalue($funcs), ', "FUNCLIST" => ', neatvalue($funclist),
1003 ', "DL_VARS" => ', neatvalue($vars), ');\'
1011 Defines the dynamic target.
1016 # --- Dynamic Loading Sections ---
1020 ## $(INST_PM) has been moved to the all: target.
1021 ## It remains here for awhile to allow for old usage: "make dynamic"
1022 #dynamic :: '.$self->{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
1023 dynamic :: '.$self->{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT)
1024 '.$self->{NOECHO}.'$(NOOP)
1028 =item dynamic_bs (o)
1030 Defines targets for bootstrap files.
1035 my($self, %attribs) = @_;
1038 ' unless $self->has_link_code();
1041 BOOTSTRAP = '."$self->{BASEEXT}.bs".'
1043 # As Mkbootstrap might not write a file (if none is required)
1044 # we use touch to prevent make continually trying to remake it.
1045 # The DynaLoader only reads a non-empty file.
1046 $(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)/.exists
1047 '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
1048 '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
1049 -MExtUtils::Mkbootstrap \
1050 -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
1051 '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
1052 $(CHMOD) $(PERM_RW) $@
1054 $(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
1055 '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
1056 -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
1057 $(CHMOD) $(PERM_RW) $@
1061 =item dynamic_lib (o)
1063 Defines how to produce the *.so (or equivalent) files.
1068 my($self, %attribs) = @_;
1069 return '' unless $self->needs_linking(); #might be because of a subdir
1071 return '' unless $self->has_link_code;
1073 my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
1074 my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
1075 my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
1076 my($ldfrom) = '$(LDFROM)';
1077 $armaybe = 'ar' if ($^O eq 'dec_osf' and $armaybe eq ':');
1079 my $ld_opt = $Is_OS2 ? '$(OPTIMIZE) ' : ''; # Useful on other systems too?
1081 # This section creates the dynamically loadable $(INST_DYNAMIC)
1082 # from $(OBJECT) and possibly $(MYEXTLIB).
1083 ARMAYBE = '.$armaybe.'
1084 OTHERLDFLAGS = '.$ld_opt.$otherldflags.'
1085 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
1087 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
1089 if ($armaybe ne ':'){
1090 $ldfrom = 'tmp$(LIB_EXT)';
1091 push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
1092 push(@m,' $(RANLIB) '."$ldfrom\n");
1094 $ldfrom = "-all $ldfrom -none" if ($^O eq 'dec_osf');
1096 # The IRIX linker doesn't use LD_RUN_PATH
1097 my $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"}
1098 if ($^O eq 'irix' && $self->{LD_RUN_PATH});
1100 # For example in AIX the shared objects/libraries from previous builds
1101 # linger quite a while in the shared dynalinker cache even when nobody
1102 # is using them. This is painful if one for instance tries to restart
1103 # a failed build because the link command will fail unnecessarily 'cos
1104 # the shared object/library is 'busy'.
1105 push(@m,' $(RM_F) $@
1108 push(@m,' LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) '.$ldrun.' $(LDDLFLAGS) '.$ldfrom.
1109 ' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST)');
1111 $(CHMOD) $(PERM_RWX) $@
1114 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
1120 Deprecated method. Use libscan instead.
1125 my($self,$path) = @_;
1131 Called by init_others, and calls ext ExtUtils::Liblist. See
1132 L<ExtUtils::Liblist> for details.
1137 my($self,$libs) = @_;
1138 require ExtUtils::Liblist;
1139 $self->ext($libs, $Verbose);
1142 =item file_name_is_absolute
1144 Takes as argument a path and returns true, if it is an absolute path.
1148 sub file_name_is_absolute {
1149 my($self,$file) = @_;
1151 $file =~ m{^([a-z]:)?[\\/]}is ;
1160 Finds the executables PERL and FULLPERL
1165 my($self, $ver, $names, $dirs, $trace) = @_;
1168 print "Looking for perl $ver by these names:
1174 foreach $name (@$names){
1175 foreach $dir (@$dirs){
1176 next unless defined $dir; # $self->{PERL_SRC} may be undefined
1178 if ($self->file_name_is_absolute($name)) { # /foo/bar
1180 } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
1181 $abs = $self->catfile($dir, $name);
1183 $abs = $self->canonpath($self->catfile($self->curdir, $name));
1185 print "Checking $abs\n" if ($trace >= 2);
1186 next unless $self->maybe_command($abs);
1187 print "Executing $abs\n" if ($trace >= 2);
1188 $val = `$abs -e 'require $ver; print "VER_OK\n" ' 2>&1`;
1189 if ($val =~ /VER_OK/) {
1190 print "Using PERL=$abs\n" if $trace;
1192 } elsif ($trace >= 2) {
1193 print "Result: `$val'\n";
1197 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
1198 0; # false and not empty
1203 =head2 Methods to actually produce chunks of text for the Makefile
1205 The methods here are called for each MakeMaker object in the order
1206 specified by @ExtUtils::MakeMaker::MM_Sections.
1212 Inserts the sharpbang or equivalent magic number to a script
1216 sub fixin { # stolen from the pink Camel book, more or less
1217 my($self,@files) = @_;
1218 my($does_shbang) = $Config::Config{'sharpbang'} =~ /^\s*\#\!/;
1219 my($file,$interpreter);
1220 for $file (@files) {
1223 open(FIXIN, $file) or Carp::croak "Can't process '$file': $!";
1225 chomp(my $line = <FIXIN>);
1226 next unless $line =~ s/^\s*\#!\s*//; # Not a shbang file.
1227 # Now figure out the interpreter name.
1228 my($cmd,$arg) = split ' ', $line, 2;
1231 # Now look (in reverse) for interpreter in absolute PATH (unless perl).
1232 if ($cmd eq "perl") {
1233 if ($Config{startperl} =~ m,^\#!.*/perl,) {
1234 $interpreter = $Config{startperl};
1235 $interpreter =~ s,^\#!,,;
1237 $interpreter = $Config{perlpath};
1240 my(@absdirs) = reverse grep {$self->file_name_is_absolute} $self->path;
1243 foreach $dir (@absdirs) {
1244 if ($self->maybe_command($cmd)) {
1245 warn "Ignoring $interpreter in $file\n" if $Verbose && $interpreter;
1246 $interpreter = $self->catfile($dir,$cmd);
1250 # Figure out how to invoke interpreter on this machine.
1254 print STDOUT "Changing sharpbang in $file to $interpreter" if $Verbose;
1255 # this is probably value-free on DOSISH platforms
1257 $shb .= "$Config{'sharpbang'}$interpreter";
1258 $shb .= ' ' . $arg if defined $arg;
1262 eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
1263 if 0; # not running under some shell
1264 } unless $Is_Win32; # this won't work on win32, so don't
1266 warn "Can't find $cmd in PATH, $file unchanged"
1271 unless ( open(FIXOUT,">$file.new") ) {
1272 warn "Can't create new $file: $!\n";
1275 my($dev,$ino,$mode) = stat FIXIN;
1277 # Print out the new #! line (or equivalent).
1280 print FIXOUT $shb, <FIXIN>;
1284 # can't rename/chmod open files on some DOSISH platforms
1286 # If they override perm_rwx, we won't notice it during fixin,
1287 # because fixin is run through a new instance of MakeMaker.
1288 # That is why we must run another CHMOD later.
1289 $mode = oct($self->perm_rwx) unless $dev;
1292 unless ( rename($file, "$file.bak") ) {
1293 warn "Can't rename $file to $file.bak: $!";
1296 unless ( rename("$file.new", $file) ) {
1297 warn "Can't rename $file.new to $file: $!";
1298 unless ( rename("$file.bak", $file) ) {
1299 warn "Can't rename $file.bak back to $file either: $!";
1300 warn "Leaving $file renamed as $file.bak\n";
1306 close(FIXIN) if fileno(FIXIN);
1307 chmod oct($self->perm_rwx), $file or
1308 die "Can't reset permissions for $file: $!\n";
1309 system("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';;
1321 '# Phony target to force checking subdirectories.
1323 '.$self->{NOECHO}.'$(NOOP)
1329 Guess the name of this package by examining the working directory's
1330 name. MakeMaker calls this only if the developer has not supplied a
1340 my $name = basename(cwd());
1341 $name =~ s|[\-_][\d\.\-]+\z||; # this is new with MM 5.00, we
1342 # strip minus or underline
1343 # followed by a float or some such
1344 print "Warning: Guessing NAME [$name] from current directory name.\n";
1350 Returns true if C, XS, MYEXTLIB or similar objects exist within this
1351 object that need a compiler. Does not descend into subdirectories as
1352 needs_linking() does.
1358 return $self->{HAS_LINK_CODE} if defined $self->{HAS_LINK_CODE};
1359 if ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB}){
1360 $self->{HAS_LINK_CODE} = 1;
1363 return $self->{HAS_LINK_CODE} = 0;
1366 =item htmlifypods (o)
1368 Defines targets and routines to translate the pods into HTML manpages
1369 and put them into the INST_HTMLLIBDIR and INST_HTMLSCRIPTDIR
1375 my($self, %attribs) = @_;
1376 return "\nhtmlifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
1377 %{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}};
1380 if (defined $self->{PERL_SRC}) {
1381 $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
1383 $pod2html_exe = $self->catfile($Config{scriptdirexp},'pod2html');
1385 unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
1386 # No pod2html but some HTMLxxxPODS to be installed
1389 Warning: I could not locate your pod2html program. Please make sure,
1390 your pod2html program is in your PATH before you execute 'make'
1393 $pod2html_exe = "-S pod2html";
1397 qq[POD2HTML_EXE = $pod2html_exe\n],
1398 qq[POD2HTML = \$(PERL) -we 'use File::Basename; use File::Path qw(mkpath); %m=\@ARGV;for (keys %m){' \\\n],
1399 q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
1400 $self->{MAKEFILE}, q[";' \\
1401 -e 'print "Htmlifying $$m{$$_}\n";' \\
1402 -e '$$dir = dirname($$m{$$_}); mkpath($$dir) unless -d $$dir;' \\
1403 -e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2HTML_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
1404 -e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
1406 push @m, "\nhtmlifypods : pure_all ";
1407 push @m, join " \\\n\t", keys %{$self->{HTMLLIBPODS}}, keys %{$self->{HTMLSCRIPTPODS}};
1410 if (%{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}}) {
1411 push @m, "\t$self->{NOECHO}\$(POD2HTML) \\\n\t";
1412 push @m, join " \\\n\t", %{$self->{HTMLLIBPODS}}, %{$self->{HTMLSCRIPTPODS}};
1419 Initializes DIR, XS, PM, C, O_FILES, H, PL_FILES, HTML*PODS, MAN*PODS, EXE_FILES.
1423 sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
1425 my($name, %dir, %xs, %c, %h, %ignore, %pl_files, %manifypods);
1426 local(%pm); #the sub in find() has to see this hash
1427 @ignore{qw(Makefile.PL test.pl)} = (1,1);
1428 $ignore{'makefile.pl'} = 1 if $Is_VMS;
1429 foreach $name ($self->lsdir($self->curdir)){
1430 next if $name =~ /\#/;
1431 next if $name eq $self->curdir or $name eq $self->updir or $ignore{$name};
1432 next unless $self->libscan($name);
1434 next if -l $name; # We do not support symlinks at all
1435 $dir{$name} = $name if (-f $self->catfile($name,"Makefile.PL"));
1436 } elsif ($name =~ /\.xs\z/){
1437 my($c); ($c = $name) =~ s/\.xs\z/.c/;
1440 } elsif ($name =~ /\.c(pp|xx|c)?\z/i){ # .c .C .cpp .cxx .cc
1442 unless $name =~ m/perlmain\.c/; # See MAP_TARGET
1443 } elsif ($name =~ /\.h\z/i){
1445 } elsif ($name =~ /\.PL\z/) {
1446 ($pl_files{$name} = $name) =~ s/\.PL\z// ;
1447 } elsif (($Is_VMS || $Is_Dos) && $name =~ /[._]pl$/i) {
1448 # case-insensitive filesystem, one dot per name, so foo.h.PL
1449 # under Unix appears as foo.h_pl under VMS or fooh.pl on Dos
1450 local($/); open(PL,$name); my $txt = <PL>; close PL;
1451 if ($txt =~ /Extracting \S+ \(with variable substitutions/) {
1452 ($pl_files{$name} = $name) =~ s/[._]pl\z//i ;
1454 else { $pm{$name} = $self->catfile('$(INST_LIBDIR)',$name); }
1455 } elsif ($name =~ /\.(p[ml]|pod)\z/){
1456 $pm{$name} = $self->catfile('$(INST_LIBDIR)',$name);
1460 # Some larger extensions often wish to install a number of *.pm/pl
1461 # files into the library in various locations.
1463 # The attribute PMLIBDIRS holds an array reference which lists
1464 # subdirectories which we should search for library files to
1465 # install. PMLIBDIRS defaults to [ 'lib', $self->{BASEEXT} ]. We
1466 # recursively search through the named directories (skipping any
1467 # which don't exist or contain Makefile.PL files).
1469 # For each *.pm or *.pl file found $self->libscan() is called with
1470 # the default installation path in $_[1]. The return value of
1471 # libscan defines the actual installation location. The default
1472 # libscan function simply returns the path. The file is skipped
1473 # if libscan returns false.
1475 # The default installation location passed to libscan in $_[1] is:
1477 # ./*.pm => $(INST_LIBDIR)/*.pm
1478 # ./xyz/... => $(INST_LIBDIR)/xyz/...
1479 # ./lib/... => $(INST_LIB)/...
1481 # In this way the 'lib' directory is seen as the root of the actual
1482 # perl library whereas the others are relative to INST_LIBDIR
1483 # (which includes PARENT_NAME). This is a subtle distinction but one
1484 # that's important for nested modules.
1486 $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}]
1487 unless $self->{PMLIBDIRS};
1489 #only existing directories that aren't in $dir are allowed
1491 # Avoid $_ wherever possible:
1492 # @{$self->{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$self->{PMLIBDIRS}};
1493 my (@pmlibdirs) = @{$self->{PMLIBDIRS}};
1495 @{$self->{PMLIBDIRS}} = ();
1496 foreach $pmlibdir (@pmlibdirs) {
1497 -d $pmlibdir && !$dir{$pmlibdir} && push @{$self->{PMLIBDIRS}}, $pmlibdir;
1500 if (@{$self->{PMLIBDIRS}}){
1501 print "Searching PMLIBDIRS: @{$self->{PMLIBDIRS}}\n"
1504 File::Find::find(sub {
1506 if ($_ eq "CVS" || $_ eq "RCS"){
1507 $File::Find::prune = 1;
1512 my($path, $prefix) = ($File::Find::name, '$(INST_LIBDIR)');
1513 my($striplibpath,$striplibname);
1514 $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^(\W*)lib\W:$1:i);
1515 ($striplibname,$striplibpath) = fileparse($striplibpath);
1516 my($inst) = $self->catfile($prefix,$striplibpath,$striplibname);
1517 local($_) = $inst; # for backwards compatibility
1518 $inst = $self->libscan($inst);
1519 print "libscan($path) => '$inst'\n" if ($Verbose >= 2);
1520 return unless $inst;
1522 }, @{$self->{PMLIBDIRS}});
1525 $self->{DIR} = [sort keys %dir] unless $self->{DIR};
1526 $self->{XS} = \%xs unless $self->{XS};
1527 $self->{PM} = \%pm unless $self->{PM};
1528 $self->{C} = [sort keys %c] unless $self->{C};
1529 my(@o_files) = @{$self->{C}};
1530 $self->{O_FILES} = [grep s/\.c(pp|xx|c)?\z/$self->{OBJ_EXT}/i, @o_files] ;
1531 $self->{H} = [sort keys %h] unless $self->{H};
1532 $self->{PL_FILES} = \%pl_files unless $self->{PL_FILES};
1534 # Set up names of manual pages to generate from pods
1536 foreach my $man (qw(MAN1 MAN3 HTMLLIB HTMLSCRIPT)) {
1537 unless ($self->{"${man}PODS"}) {
1538 $self->{"${man}PODS"} = {};
1539 $pods{$man} = 1 unless $self->{"INST_${man}DIR"} =~ /^(none|\s*)$/;
1543 if ($pods{MAN1} || $pods{HTMLSCRIPT}) {
1544 if ( exists $self->{EXE_FILES} ) {
1545 foreach $name (@{$self->{EXE_FILES}}) {
1548 if (open(FH,"<$name")) {
1550 if (/^=head1\s+\w+/) {
1557 # If it doesn't exist yet, we assume, it has pods in it
1561 if ($pods{HTMLSCRIPT}) {
1562 $self->{HTMLSCRIPTPODS}->{$name} =
1563 $self->catfile("\$(INST_HTMLSCRIPTDIR)", basename($name).".\$(HTMLEXT)");
1566 $self->{MAN1PODS}->{$name} =
1567 $self->catfile("\$(INST_MAN1DIR)", basename($name).".\$(MAN1EXT)");
1572 if ($pods{MAN3} || $pods{HTMLLIB}) {
1573 my %manifypods = (); # we collect the keys first, i.e. the files
1574 # we have to convert to pod
1575 foreach $name (keys %{$self->{PM}}) {
1576 if ($name =~ /\.pod\z/ ) {
1577 $manifypods{$name} = $self->{PM}{$name};
1578 } elsif ($name =~ /\.p[ml]\z/ ) {
1581 if (open(FH,"<$name")) {
1583 if (/^=head1\s+\w+/) {
1593 $manifypods{$name} = $self->{PM}{$name};
1598 # Remove "Configure.pm" and similar, if it's not the only pod listed
1599 # To force inclusion, just name it "Configure.pod", or override MAN3PODS
1600 foreach $name (keys %manifypods) {
1601 if ($name =~ /(config|setup).*\.pm/is) {
1602 delete $manifypods{$name};
1605 my($manpagename) = $name;
1606 $manpagename =~ s/\.p(od|m|l)\z//;
1607 if ($pods{HTMLLIB}) {
1608 $self->{HTMLLIBPODS}->{$name} =
1609 $self->catfile("\$(INST_HTMLLIBDIR)", "$manpagename.\$(HTMLEXT)");
1611 unless ($manpagename =~ s!^\W*lib\W+!!s) { # everything below lib is ok
1612 $manpagename = $self->catfile(split(/::/,$self->{PARENT_NAME}),$manpagename);
1615 $manpagename = $self->replace_manpage_separator($manpagename);
1616 $self->{MAN3PODS}->{$name} =
1617 $self->catfile("\$(INST_MAN3DIR)", "$manpagename.\$(MAN3EXT)");
1625 Initializes NAME, FULLEXT, BASEEXT, PARENT_NAME, DLBASE, PERL_SRC,
1626 PERL_LIB, PERL_ARCHLIB, PERL_INC, INSTALLDIRS, INST_*, INSTALL*,
1627 PREFIX, CONFIG, AR, AR_STATIC_ARGS, LD, OBJ_EXT, LIB_EXT, EXE_EXT, MAP_TARGET,
1628 LIBPERL_A, VERSION_FROM, VERSION, DISTNAME, VERSION_SYM.
1635 # --- Initialize Module Name and Paths
1637 # NAME = Foo::Bar::Oracle
1638 # FULLEXT = Foo/Bar/Oracle
1640 # ROOTEXT = Directory part of FULLEXT with leading /. !!! Deprecated from MM 5.32 !!!
1641 # PARENT_NAME = Foo::Bar
1643 ### ($self->{FULLEXT} =
1644 ### $self->{NAME}) =~ s!::!/!g ; #eg. BSD/Foo/Socket
1645 $self->{FULLEXT} = $self->catdir(split /::/, $self->{NAME});
1648 # Copied from DynaLoader:
1650 my(@modparts) = split(/::/,$self->{NAME});
1651 my($modfname) = $modparts[-1];
1653 # Some systems have restrictions on files names for DLL's etc.
1654 # mod2fname returns appropriate file base name (typically truncated)
1655 # It may also edit @modparts if required.
1656 if (defined &DynaLoader::mod2fname) {
1657 $modfname = &DynaLoader::mod2fname(\@modparts);
1660 ($self->{PARENT_NAME}, $self->{BASEEXT}) = $self->{NAME} =~ m!(?:([\w:]+)::)?(\w+)\z! ;
1662 if (defined &DynaLoader::mod2fname) {
1663 # As of 5.001m, dl_os2 appends '_'
1664 $self->{DLBASE} = $modfname;
1666 $self->{DLBASE} = '$(BASEEXT)';
1670 ### ROOTEXT deprecated from MM 5.32
1671 ### ($self->{ROOTEXT} =
1672 ### $self->{FULLEXT}) =~ s#/?\Q$self->{BASEEXT}\E$## ; #eg. /BSD/Foo
1673 ### $self->{ROOTEXT} = ($Is_VMS ? '' : '/') . $self->{ROOTEXT} if $self->{ROOTEXT};
1676 # --- Initialize PERL_LIB, INST_LIB, PERL_SRC
1678 # *Real* information: where did we get these two from? ...
1679 my $inc_config_dir = dirname($INC{'Config.pm'});
1680 my $inc_carp_dir = dirname($INC{'Carp.pm'});
1682 unless ($self->{PERL_SRC}){
1684 foreach $dir ($self->updir(),$self->catdir($self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir(),$self->updir())){
1686 -f $self->catfile($dir,"config.sh")
1688 -f $self->catfile($dir,"perl.h")
1690 -f $self->catfile($dir,"lib","Exporter.pm")
1692 $self->{PERL_SRC}=$dir ;
1697 if ($self->{PERL_SRC}){
1698 $self->{PERL_LIB} ||= $self->catdir("$self->{PERL_SRC}","lib");
1699 $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
1700 $self->{PERL_INC} = ($Is_Win32) ? $self->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
1702 # catch a situation that has occurred a few times in the past:
1704 -s $self->catfile($self->{PERL_SRC},'cflags')
1708 -s $self->catfile($self->{PERL_SRC},'perlshr_attr.opt')
1715 You cannot build extensions below the perl source tree after executing
1716 a 'make clean' in the perl source tree.
1718 To rebuild extensions distributed with the perl source you should
1719 simply Configure (to include those extensions) and then build perl as
1720 normal. After installing perl the source tree can be deleted. It is
1721 not needed for building extensions by running 'perl Makefile.PL'
1722 usually without extra arguments.
1724 It is recommended that you unpack and build additional extensions away
1725 from the perl source tree.
1729 # we should also consider $ENV{PERL5LIB} here
1730 my $old = $self->{PERL_LIB} || $self->{PERL_ARCHLIB} || $self->{PERL_INC};
1731 $self->{PERL_LIB} ||= $Config::Config{privlibexp};
1732 $self->{PERL_ARCHLIB} ||= $Config::Config{archlibexp};
1733 $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
1736 no warnings 'uninitialized' ;
1737 if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))
1739 # Maybe somebody tries to build an extension with an
1740 # uninstalled Perl outside of Perl build tree
1742 for my $dir (@INC) {
1743 $found = $dir, last if -e $self->catdir($dir, "Config.pm");
1746 my $inc = dirname $found;
1747 if (-e $self->catdir($inc, "perl.h")) {
1748 $self->{PERL_LIB} = $found;
1749 $self->{PERL_ARCHLIB} = $found;
1750 $self->{PERL_INC} = $inc;
1751 $self->{UNINSTALLED_PERL} = 1;
1753 ... Detected uninstalled Perl. Trying to continue.
1759 unless (-f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))){
1761 Error: Unable to locate installed Perl libraries or Perl source code.
1763 It is recommended that you install perl in a standard location before
1764 building extensions. Some precompiled versions of perl do not contain
1765 these header files, so you cannot build extensions. In such a case,
1766 please build and install your perl from a fresh perl distribution. It
1767 usually solves this kind of problem.
1769 \(You get this message, because MakeMaker could not find "$perl_h"\)
1772 # print STDOUT "Using header files found in $self->{PERL_INC}\n"
1773 # if $Verbose && $self->needs_linking();
1777 # We get SITELIBEXP and SITEARCHEXP directly via
1778 # Get_from_Config. When we are running standard modules, these
1779 # won't matter, we will set INSTALLDIRS to "perl". Otherwise we
1780 # set it to "site". I prefer that INSTALLDIRS be set from outside
1782 $self->{INSTALLDIRS} ||= "site";
1784 # INST_LIB typically pre-set if building an extension after
1785 # perl has been built and installed. Setting INST_LIB allows
1786 # you to build directly into, say $Config::Config{privlibexp}.
1787 unless ($self->{INST_LIB}){
1790 ##### XXXXX We have to change this nonsense
1792 if (defined $self->{PERL_SRC} and $self->{INSTALLDIRS} eq "perl") {
1793 $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
1795 $self->{INST_LIB} = $self->catdir($self->curdir,"blib","lib");
1798 $self->{INST_ARCHLIB} ||= $self->catdir($self->curdir,"blib","arch");
1799 $self->{INST_BIN} ||= $self->catdir($self->curdir,'blib','bin');
1801 # We need to set up INST_LIBDIR before init_libscan() for VMS
1802 my @parentdir = split(/::/, $self->{PARENT_NAME});
1803 $self->{INST_LIBDIR} = $self->catdir('$(INST_LIB)',@parentdir);
1804 $self->{INST_ARCHLIBDIR} = $self->catdir('$(INST_ARCHLIB)',@parentdir);
1805 $self->{INST_AUTODIR} = $self->catdir('$(INST_LIB)','auto','$(FULLEXT)');
1806 $self->{INST_ARCHAUTODIR} = $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)');
1808 # INST_EXE is deprecated, should go away March '97
1809 $self->{INST_EXE} ||= $self->catdir($self->curdir,'blib','script');
1810 $self->{INST_SCRIPT} ||= $self->catdir($self->curdir,'blib','script');
1812 # The user who requests an installation directory explicitly
1813 # should not have to tell us a architecture installation directory
1814 # as well. We look if a directory exists that is named after the
1815 # architecture. If not we take it as a sign that it should be the
1816 # same as the requested installation directory. Otherwise we take
1818 # We do the same thing twice: for privlib/archlib and for sitelib/sitearch
1820 for $libpair ({l=>"privlib", a=>"archlib"}, {l=>"sitelib", a=>"sitearch"}) {
1821 my $lib = "install$libpair->{l}";
1823 my $Arch = uc "install$libpair->{a}";
1824 if( $self->{$Lib} && ! $self->{$Arch} ){
1825 my($ilib) = $Config{$lib};
1826 $ilib = VMS::Filespec::unixify($ilib) if $Is_VMS;
1828 $self->prefixify($Arch,$ilib,$self->{$Lib});
1830 unless (-d $self->{$Arch}) {
1831 print STDOUT "Directory $self->{$Arch} not found, thusly\n" if $Verbose;
1832 $self->{$Arch} = $self->{$Lib};
1834 print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose;
1838 # we have to look at the relation between $Config{prefix} and the
1839 # requested values. We're going to set the $Config{prefix} part of
1840 # all the installation path variables to literally $(PREFIX), so
1841 # the user can still say make PREFIX=foo
1842 my($configure_prefix) = $Config{'prefix'};
1843 $configure_prefix = VMS::Filespec::unixify($configure_prefix) if $Is_VMS;
1844 $self->{PREFIX} ||= $configure_prefix;
1847 my($install_variable,$search_prefix,$replace_prefix);
1849 # If the prefix contains perl, Configure shapes the tree as follows:
1850 # perlprefix/lib/ INSTALLPRIVLIB
1851 # perlprefix/lib/pod/
1852 # perlprefix/lib/site_perl/ INSTALLSITELIB
1853 # perlprefix/bin/ INSTALLBIN
1854 # perlprefix/man/ INSTALLMAN1DIR
1856 # prefix/lib/perl5/ INSTALLPRIVLIB
1857 # prefix/lib/perl5/pod/
1858 # prefix/lib/perl5/site_perl/ INSTALLSITELIB
1859 # prefix/bin/ INSTALLBIN
1860 # prefix/lib/perl5/man/ INSTALLMAN1DIR
1862 # The above results in various kinds of breakage on various
1863 # platforms, so we cope with it as follows: if prefix/lib/perl5
1864 # or prefix/lib/perl5/man exist, we'll replace those instead
1865 # of /prefix/{lib,man}
1867 $replace_prefix = qq[\$\(PREFIX\)];
1868 for $install_variable (qw/
1872 $self->prefixify($install_variable,$configure_prefix,$replace_prefix);
1874 my $funkylibdir = $self->catdir($configure_prefix,"lib","perl5");
1875 $funkylibdir = '' unless -d $funkylibdir;
1876 $search_prefix = $funkylibdir || $self->catdir($configure_prefix,"lib");
1878 $self->{INSTALLPRIVLIB} = $self->{INSTALLSITELIB} = $self->{LIB};
1879 $self->{INSTALLARCHLIB} = $self->{INSTALLSITEARCH} =
1880 $self->catdir($self->{LIB},$Config{'archname'});
1883 if (-d $self->catdir($self->{PREFIX},"lib","perl5")) {
1884 $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5");
1887 $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib");
1889 for $install_variable (qw/
1896 $self->prefixify($install_variable,$search_prefix,$replace_prefix);
1899 my $funkymandir = $self->catdir($configure_prefix,"lib","perl5","man");
1900 $funkymandir = '' unless -d $funkymandir;
1901 $search_prefix = $funkymandir || $self->catdir($configure_prefix,"man");
1902 if (-d $self->catdir($self->{PREFIX},"lib","perl5", "man")) {
1903 $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man");
1906 $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"man");
1908 for $install_variable (qw/
1913 $self->prefixify($install_variable,$search_prefix,$replace_prefix);
1916 # Now we head at the manpages. Maybe they DO NOT want manpages
1918 $self->{INSTALLMAN1DIR} = $Config::Config{installman1dir}
1919 unless defined $self->{INSTALLMAN1DIR};
1920 unless (defined $self->{INST_MAN1DIR}){
1921 if ($self->{INSTALLMAN1DIR} =~ /^(none|\s*)$/){
1922 $self->{INST_MAN1DIR} = $self->{INSTALLMAN1DIR};
1924 $self->{INST_MAN1DIR} = $self->catdir($self->curdir,'blib','man1');
1927 $self->{MAN1EXT} ||= $Config::Config{man1ext};
1929 $self->{INSTALLMAN3DIR} = $Config::Config{installman3dir}
1930 unless defined $self->{INSTALLMAN3DIR};
1931 unless (defined $self->{INST_MAN3DIR}){
1932 if ($self->{INSTALLMAN3DIR} =~ /^(none|\s*)$/){
1933 $self->{INST_MAN3DIR} = $self->{INSTALLMAN3DIR};
1935 $self->{INST_MAN3DIR} = $self->catdir($self->curdir,'blib','man3');
1938 $self->{MAN3EXT} ||= $Config::Config{man3ext};
1940 $self->{INSTALLHTMLPRIVLIBDIR} = $Config::Config{installhtmlprivlibdir}
1941 unless defined $self->{INSTALLHTMLPRIVLIBDIR};
1942 $self->{INSTALLHTMLSITELIBDIR} = $Config::Config{installhtmlsitelibdir}
1943 unless defined $self->{INSTALLHTMLSITELIBDIR};
1945 unless (defined $self->{INST_HTMLLIBDIR}){
1946 if ($self->{INSTALLHTMLSITELIBDIR} =~ /^(none|\s*)$/){
1947 $self->{INST_HTMLLIBDIR} = $self->{INSTALLHTMLSITELIBDIR};
1949 $self->{INST_HTMLLIBDIR} = $self->catdir($self->curdir,'blib','html','lib');
1953 $self->{INSTALLHTMLSCRIPTDIR} = $Config::Config{installhtmlscriptdir}
1954 unless defined $self->{INSTALLHTMLSCRIPTDIR};
1955 unless (defined $self->{INST_HTMLSCRIPTDIR}){
1956 if ($self->{INSTALLHTMLSCRIPTDIR} =~ /^(none|\s*)$/){
1957 $self->{INST_HTMLSCRIPTDIR} = $self->{INSTALLHTMLSCRIPTDIR};
1959 $self->{INST_HTMLSCRIPTDIR} = $self->catdir($self->curdir,'blib','html','bin');
1962 $self->{HTMLEXT} ||= $Config::Config{htmlext} || 'html';
1965 # Get some stuff out of %Config if we haven't yet done so
1966 print STDOUT "CONFIG must be an array ref\n"
1967 if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY');
1968 $self->{CONFIG} = [] unless (ref $self->{CONFIG});
1969 push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config);
1970 push(@{$self->{CONFIG}}, 'shellflags') if $Config::Config{shellflags};
1972 foreach $m (@{$self->{CONFIG}}){
1973 next if $once_only{$m};
1974 print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
1975 unless exists $Config::Config{$m};
1976 $self->{uc $m} ||= $Config::Config{$m};
1980 # This is too dangerous:
1981 # if ($^O eq "next") {
1982 # $self->{AR} = "libtool";
1983 # $self->{AR_STATIC_ARGS} = "-o";
1985 # But I leave it as a placeholder
1987 $self->{AR_STATIC_ARGS} ||= "cr";
1989 # These should never be needed
1990 $self->{LD} ||= 'ld';
1991 $self->{OBJ_EXT} ||= '.o';
1992 $self->{LIB_EXT} ||= '.a';
1994 $self->{MAP_TARGET} ||= "perl";
1996 $self->{LIBPERL_A} ||= "libperl$self->{LIB_EXT}";
1998 # make a simple check if we find Exporter
1999 warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory
2000 (Exporter.pm not found)"
2001 unless -f $self->catfile("$self->{PERL_LIB}","Exporter.pm") ||
2002 $self->{NAME} eq "ExtUtils::MakeMaker";
2004 # Determine VERSION and VERSION_FROM
2005 ($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME};
2006 if ($self->{VERSION_FROM}){
2007 $self->{VERSION} = $self->parse_version($self->{VERSION_FROM}) or
2008 Carp::carp "WARNING: Setting VERSION via file '$self->{VERSION_FROM}' failed\n"
2012 if ($self->{VERSION}) {
2013 $self->{VERSION} =~ s/^\s+//;
2014 $self->{VERSION} =~ s/\s+$//;
2017 $self->{VERSION} ||= "0.10";
2018 ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g;
2021 # Graham Barr and Paul Marquess had some ideas how to ensure
2022 # version compatibility between the *.pm file and the
2023 # corresponding *.xs file. The bottomline was, that we need an
2024 # XS_VERSION macro that defaults to VERSION:
2025 $self->{XS_VERSION} ||= $self->{VERSION};
2027 # --- Initialize Perl Binary Locations
2029 # Find Perl 5. The only contract here is that both 'PERL' and 'FULLPERL'
2030 # will be working versions of perl 5. miniperl has priority over perl
2031 # for PERL to ensure that $(PERL) is usable while building ./ext/*
2032 my ($component,@defpath);
2033 foreach $component ($self->{PERL_SRC}, $self->path(), $Config::Config{binexp}) {
2034 push @defpath, $component if defined $component;
2037 $self->find_perl(5.0, [ $self->canonpath($^X), 'miniperl',
2038 'perl','perl5',"perl$Config{version}" ],
2039 \@defpath, $Verbose );
2040 # don't check if perl is executable, maybe they have decided to
2041 # supply switches with perl
2043 # Define 'FULLPERL' to be a non-miniperl (used in test: target)
2044 ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i
2045 unless ($self->{FULLPERL});
2050 Initializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH,
2051 OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, NOOP, FIRST_MAKEFILE,
2052 MAKEFILE, NOECHO, RM_F, RM_RF, TEST_F, TOUCH, CP, MV, CHMOD, UMASK_NULL
2056 sub init_others { # --- Initialize Other Attributes
2059 # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $self->{LIBS}
2060 # Lets look at $self->{LIBS} carefully: It may be an anon array, a string or
2061 # undefined. In any case we turn it into an anon array:
2063 # May check $Config{libs} too, thus not empty.
2064 $self->{LIBS}=[''] unless $self->{LIBS};
2066 $self->{LIBS}=[$self->{LIBS}] if ref \$self->{LIBS} eq 'SCALAR';
2067 $self->{LD_RUN_PATH} = "";
2069 foreach $libs ( @{$self->{LIBS}} ){
2070 $libs =~ s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace
2071 my(@libs) = $self->extliblist($libs);
2072 if ($libs[0] or $libs[1] or $libs[2]){
2073 # LD_RUN_PATH now computed by ExtUtils::Liblist
2074 ($self->{EXTRALIBS}, $self->{BSLOADLIBS}, $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs;
2079 if ( $self->{OBJECT} ) {
2080 $self->{OBJECT} =~ s!\.o(bj)?\b!\$(OBJ_EXT)!g;
2082 # init_dirscan should have found out, if we have C files
2083 $self->{OBJECT} = "";
2084 $self->{OBJECT} = '$(BASEEXT)$(OBJ_EXT)' if @{$self->{C}||[]};
2086 $self->{OBJECT} =~ s/\n+/ \\\n\t/g;
2087 $self->{BOOTDEP} = (-f "$self->{BASEEXT}_BS") ? "$self->{BASEEXT}_BS" : "";
2088 $self->{PERLMAINCC} ||= '$(CC)';
2089 $self->{LDFROM} = '$(OBJECT)' unless $self->{LDFROM};
2091 # Sanity check: don't define LINKTYPE = dynamic if we're skipping
2092 # the 'dynamic' section of MM. We don't have this problem with
2093 # 'static', since we either must use it (%Config says we can't
2094 # use dynamic loading) or the caller asked for it explicitly.
2095 if (!$self->{LINKTYPE}) {
2096 $self->{LINKTYPE} = $self->{SKIPHASH}{'dynamic'}
2098 : ($Config::Config{usedl} ? 'dynamic' : 'static');
2101 # These get overridden for VMS and maybe some other systems
2102 $self->{NOOP} ||= '$(SHELL) -c true';
2103 $self->{FIRST_MAKEFILE} ||= "Makefile";
2104 $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE};
2105 $self->{MAKE_APERL_FILE} ||= "Makefile.aperl";
2106 $self->{NOECHO} = '@' unless defined $self->{NOECHO};
2107 $self->{RM_F} ||= "rm -f";
2108 $self->{RM_RF} ||= "rm -rf";
2109 $self->{TOUCH} ||= "touch";
2110 $self->{TEST_F} ||= "test -f";
2111 $self->{CP} ||= "cp";
2112 $self->{MV} ||= "mv";
2113 $self->{CHMOD} ||= "chmod";
2114 $self->{UMASK_NULL} ||= "umask 0";
2115 $self->{DEV_NULL} ||= "> /dev/null 2>&1";
2120 Defines the install target.
2125 my($self, %attribs) = @_;
2129 install :: all pure_install doc_install
2131 install_perl :: all pure_perl_install doc_perl_install
2133 install_site :: all pure_site_install doc_site_install
2135 install_ :: install_site
2136 @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
2138 pure_install :: pure_$(INSTALLDIRS)_install
2140 doc_install :: doc_$(INSTALLDIRS)_install
2141 }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
2143 pure__install : pure_site_install
2144 @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
2146 doc__install : doc_site_install
2147 @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
2149 pure_perl_install ::
2150 }.$self->{NOECHO}.q{$(MOD_INSTALL) \
2151 read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
2152 write }.$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
2153 $(INST_LIB) $(INSTALLPRIVLIB) \
2154 $(INST_ARCHLIB) $(INSTALLARCHLIB) \
2155 $(INST_BIN) $(INSTALLBIN) \
2156 $(INST_SCRIPT) $(INSTALLSCRIPT) \
2157 $(INST_HTMLLIBDIR) $(INSTALLHTMLPRIVLIBDIR) \
2158 $(INST_HTMLSCRIPTDIR) $(INSTALLHTMLSCRIPTDIR) \
2159 $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
2160 $(INST_MAN3DIR) $(INSTALLMAN3DIR)
2161 }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
2162 }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
2165 pure_site_install ::
2166 }.$self->{NOECHO}.q{$(MOD_INSTALL) \
2167 read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
2168 write }.$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
2169 $(INST_LIB) $(INSTALLSITELIB) \
2170 $(INST_ARCHLIB) $(INSTALLSITEARCH) \
2171 $(INST_BIN) $(INSTALLBIN) \
2172 $(INST_SCRIPT) $(INSTALLSCRIPT) \
2173 $(INST_HTMLLIBDIR) $(INSTALLHTMLSITELIBDIR) \
2174 $(INST_HTMLSCRIPTDIR) $(INSTALLHTMLSCRIPTDIR) \
2175 $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
2176 $(INST_MAN3DIR) $(INSTALLMAN3DIR)
2177 }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
2178 }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
2181 -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
2182 -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
2183 "Module" "$(NAME)" \
2184 "installed into" "$(INSTALLPRIVLIB)" \
2185 LINKTYPE "$(LINKTYPE)" \
2186 VERSION "$(VERSION)" \
2187 EXE_FILES "$(EXE_FILES)" \
2188 >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
2191 -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
2192 -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
2193 "Module" "$(NAME)" \
2194 "installed into" "$(INSTALLSITELIB)" \
2195 LINKTYPE "$(LINKTYPE)" \
2196 VERSION "$(VERSION)" \
2197 EXE_FILES "$(EXE_FILES)" \
2198 >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
2203 uninstall :: uninstall_from_$(INSTALLDIRS)dirs
2205 uninstall_from_perldirs ::
2207 q{$(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
2209 uninstall_from_sitedirs ::
2211 q{$(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
2217 =item installbin (o)
2219 Defines targets to make and to install EXE_FILES.
2225 return "" unless $self->{EXE_FILES} && ref $self->{EXE_FILES} eq "ARRAY";
2226 return "" unless @{$self->{EXE_FILES}};
2227 my(@m, $from, $to, %fromto, @to);
2228 push @m, $self->dir_target(qw[$(INST_SCRIPT)]);
2229 for $from (@{$self->{EXE_FILES}}) {
2230 my($path)= $self->catfile('$(INST_SCRIPT)', basename($from));
2231 local($_) = $path; # for backwards compatibility
2232 $to = $self->libscan($path);
2233 print "libscan($from) => '$to'\n" if ($Verbose >=2);
2236 @to = values %fromto;
2238 EXE_FILES = @{$self->{EXE_FILES}}
2241 ? q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
2242 -e "system qq[pl2bat.bat ].shift"
2243 } : q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::MakeMaker \
2244 -e "MY->fixin(shift)"
2247 $self->{NOECHO}\$(NOOP)
2253 while (($from,$to) = each %fromto) {
2254 last unless defined $from;
2255 my $todir = dirname($to);
2257 $to: $from $self->{MAKEFILE} " . $self->catdir($todir,'.exists') . "
2258 $self->{NOECHO}$self->{RM_F} $to
2259 $self->{CP} $from $to
2261 -$self->{NOECHO}\$(CHMOD) \$(PERM_RWX) $to
2269 Takes a path to a file that is found by init_dirscan and returns false
2270 if we don't want to include this file in the library. Mainly used to
2271 exclude RCS, CVS, and SCCS directories from installation.
2278 my($self,$path) = @_;
2279 return '' if $path =~ m:\b(RCS|CVS|SCCS)\b: ;
2285 Defines the linkext target which in turn defines the LINKTYPE.
2290 my($self, %attribs) = @_;
2291 # LINKTYPE => static or dynamic or ''
2292 my($linktype) = defined $attribs{LINKTYPE} ?
2293 $attribs{LINKTYPE} : '$(LINKTYPE)';
2295 linkext :: $linktype
2296 $self->{NOECHO}\$(NOOP)
2302 Takes as arguments a directory name and a regular expression. Returns
2303 all entries in the directory that match the regular expression.
2309 my($dir, $regex) = @_;
2311 my $dh = new DirHandle;
2312 $dh->open($dir || ".") or return ();
2315 @ls = grep(/$regex/, @ls) if $regex;
2321 Simple subroutine to insert the macros defined by the macro attribute
2327 my($self,%attribs) = @_;
2329 while (($key,$val) = each %attribs){
2330 last unless defined $key;
2331 push @m, "$key = $val\n";
2338 Called by staticmake. Defines how to write the Makefile to produce a
2341 By default the Makefile produced includes all the static extensions in
2342 the perl library. (Purified versions of library files, e.g.,
2343 DynaLoader_pure_p1_c0_032.a are automatically ignored to avoid link errors.)
2348 my($self, %attribs) = @_;
2349 my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
2350 @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
2353 # --- MakeMaker makeaperl section ---
2354 MAP_TARGET = $target
2355 FULLPERL = $self->{FULLPERL}
2357 return join '', @m if $self->{PARENT};
2359 my($dir) = join ":", @{$self->{DIR}};
2361 unless ($self->{MAKEAPERL}) {
2363 $(MAP_TARGET) :: static $(MAKE_APERL_FILE)
2364 $(MAKE) -f $(MAKE_APERL_FILE) $@
2366 $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
2367 }.$self->{NOECHO}.q{echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
2368 }.$self->{NOECHO}.q{$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
2369 Makefile.PL DIR=}, $dir, q{ \
2370 MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
2371 MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
2377 push @m, " \\\n\t\t$_";
2379 # push @m, map( " \\\n\t\t$_", @ARGV );
2387 my($cccmd, $linkcmd, $lperl);
2390 $cccmd = $self->const_cccmd($libperl);
2391 $cccmd =~ s/^CCCMD\s*=\s*//;
2392 $cccmd =~ s/\$\(INC\)/ -I$self->{PERL_INC} /;
2393 $cccmd .= " $Config::Config{cccdlflags}"
2394 if ($Config::Config{useshrplib} eq 'true');
2395 $cccmd =~ s/\(CC\)/\(PERLMAINCC\)/;
2397 # The front matter of the linkcommand...
2398 $linkcmd = join ' ', "\$(CC)",
2399 grep($_, @Config{qw(ldflags ccdlflags)});
2400 $linkcmd =~ s/\s+/ /g;
2401 $linkcmd =~ s,(perl\.exp),\$(PERL_INC)/$1,;
2403 # Which *.a files could we make use of...
2406 File::Find::find(sub {
2407 return unless m/\Q$self->{LIB_EXT}\E$/;
2408 return if m/^libperl/;
2409 # Skip purified versions of libraries (e.g., DynaLoader_pure_p1_c0_032.a)
2410 return if m/_pure_\w+_\w+_\w+\.\w+$/ and -f "$File::Find::dir/.pure";
2412 if( exists $self->{INCLUDE_EXT} ){
2417 ($xx = $File::Find::name) =~ s,.*?/auto/,,s;
2421 # Throw away anything not explicitly marked for inclusion.
2422 # DynaLoader is implied.
2423 foreach $incl ((@{$self->{INCLUDE_EXT}},'DynaLoader')){
2429 return unless $found;
2431 elsif( exists $self->{EXCLUDE_EXT} ){
2435 ($xx = $File::Find::name) =~ s,.*?/auto/,,s;
2439 # Throw away anything explicitly marked for exclusion
2440 foreach $excl (@{$self->{EXCLUDE_EXT}}){
2441 return if( $xx eq $excl );
2445 # don't include the installed version of this extension. I
2446 # leave this line here, although it is not necessary anymore:
2447 # I patched minimod.PL instead, so that Miniperl.pm won't
2448 # enclude duplicates
2450 # Once the patch to minimod.PL is in the distribution, I can
2452 return if $File::Find::name =~ m:auto/$self->{FULLEXT}/$self->{BASEEXT}$self->{LIB_EXT}\z:;
2454 $static{cwd() . "/" . $_}++;
2455 }, grep( -d $_, @{$searchdirs || []}) );
2457 # We trust that what has been handed in as argument, will be buildable
2458 $static = [] unless $static;
2459 @static{@{$static}} = (1) x @{$static};
2461 $extra = [] unless $extra && ref $extra eq 'ARRAY';
2462 for (sort keys %static) {
2463 next unless /\Q$self->{LIB_EXT}\E\z/;
2464 $_ = dirname($_) . "/extralibs.ld";
2468 grep(s/^/-I/, @{$perlinc || []});
2470 $target = "perl" unless $target;
2471 $tmp = "." unless $tmp;
2473 # MAP_STATIC doesn't look into subdirs yet. Once "all" is made and we
2474 # regenerate the Makefiles, MAP_STATIC and the dependencies for
2475 # extralibs.all are computed correctly
2477 MAP_LINKCMD = $linkcmd
2478 MAP_PERLINC = @{$perlinc || []}
2480 join(" \\\n\t", reverse sort keys %static), "
2482 MAP_PRELIBS = $Config::Config{perllibs} $Config::Config{cryptlib}
2485 if (defined $libperl) {
2486 ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
2488 unless ($libperl && -f $lperl) { # Ilya's code...
2489 my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
2490 $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};
2491 $libperl ||= "libperl$self->{LIB_EXT}";
2492 $libperl = "$dir/$libperl";
2493 $lperl ||= "libperl$self->{LIB_EXT}";
2494 $lperl = "$dir/$lperl";
2496 if (! -f $libperl and ! -f $lperl) {
2497 # We did not find a static libperl. Maybe there is a shared one?
2498 if ($^O eq 'solaris' or $^O eq 'sunos') {
2499 $lperl = $libperl = "$dir/$Config::Config{libperl}";
2500 # SUNOS ld does not take the full path to a shared library
2501 $libperl = '' if $^O eq 'sunos';
2505 print STDOUT "Warning: $libperl not found
2506 If you're going to build a static perl binary, make sure perl is installed
2507 otherwise ignore this warning\n"
2508 unless (-f $lperl || defined($self->{PERL_SRC}));
2512 MAP_LIBPERL = $libperl
2516 \$(INST_ARCHAUTODIR)/extralibs.all: \$(INST_ARCHAUTODIR)/.exists ".join(" \\\n\t", @$extra)."
2517 $self->{NOECHO}$self->{RM_F} \$\@
2518 $self->{NOECHO}\$(TOUCH) \$\@
2522 foreach $catfile (@$extra){
2523 push @m, "\tcat $catfile >> \$\@\n";
2525 # SUNOS ld does not take the full path to a shared library
2526 my $llibperl = ($libperl)?'$(MAP_LIBPERL)':'-lperl';
2529 \$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
2530 \$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) $llibperl `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
2531 $self->{NOECHO}echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
2532 $self->{NOECHO}echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
2533 $self->{NOECHO}echo 'To remove the intermediate files say'
2534 $self->{NOECHO}echo ' make -f $makefilename map_clean'
2536 $tmp/perlmain\$(OBJ_EXT): $tmp/perlmain.c
2538 push @m, "\tcd $tmp && $cccmd -I\$(PERL_INC) perlmain.c\n";
2541 $tmp/perlmain.c: $makefilename}, q{
2542 }.$self->{NOECHO}.q{echo Writing $@
2543 }.$self->{NOECHO}.q{$(PERL) $(MAP_PERLINC) -MExtUtils::Miniperl \\
2544 -e "writemain(grep s#.*/auto/##s, split(q| |, q|$(MAP_STATIC)|))" > $@t && $(MV) $@t $@
2547 push @m, "\t",$self->{NOECHO}.q{$(PERL) $(INSTALLSCRIPT)/fixpmain
2548 } if (defined (&Dos::UseLFN) && Dos::UseLFN()==0);
2553 }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
2554 -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
2555 -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
2556 "Perl binary" "$(MAP_TARGET)" \
2557 MAP_STATIC "$(MAP_STATIC)" \
2558 MAP_EXTRA "`cat $(INST_ARCHAUTODIR)/extralibs.all`" \
2559 MAP_LIBPERL "$(MAP_LIBPERL)" \
2560 >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
2565 inst_perl: pure_inst_perl doc_inst_perl
2567 pure_inst_perl: $(MAP_TARGET)
2568 }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(INSTALLBIN)','$(MAP_TARGET)').q{
2573 }.$self->{RM_F}.qq{ $tmp/perlmain\$(OBJ_EXT) $tmp/perlmain.c \$(MAP_TARGET) $makefilename \$(INST_ARCHAUTODIR)/extralibs.all
2581 Defines how to rewrite the Makefile.
2588 # We do not know what target was originally specified so we
2589 # must force a manual rerun to be sure. But as it should only
2590 # happen very rarely it is not a significant problem.
2592 $(OBJECT) : $(FIRST_MAKEFILE)
2593 ' if $self->{OBJECT};
2596 # We take a very conservative approach here, but it\'s worth it.
2597 # We move Makefile to Makefile.old here to avoid gnu make looping.
2598 }.$self->{MAKEFILE}.q{ : Makefile.PL $(CONFIGDEP)
2599 }.$self->{NOECHO}.q{echo "Makefile out-of-date with respect to $?"
2600 }.$self->{NOECHO}.q{echo "Cleaning current config before rebuilding Makefile..."
2601 -}.$self->{NOECHO}.q{$(RM_F) }."$self->{MAKEFILE}.old".q{
2602 -}.$self->{NOECHO}.q{$(MV) }."$self->{MAKEFILE} $self->{MAKEFILE}.old".q{
2603 -$(MAKE) -f }.$self->{MAKEFILE}.q{.old clean $(DEV_NULL) || $(NOOP)
2604 $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL }.join(" ",map(qq["$_"],@ARGV)).q{
2605 }.$self->{NOECHO}.q{echo "==> Your Makefile has been rebuilt. <=="
2606 }.$self->{NOECHO}.q{echo "==> Please rerun the make command. <=="
2609 # To change behavior to :: would be nice, but would break Tk b9.02
2610 # so you find such a warning below the dist target.
2611 #}.$self->{MAKEFILE}.q{ :: $(VERSION_FROM)
2612 # }.$self->{NOECHO}.q{echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
2618 =item manifypods (o)
2620 Defines targets and routines to translate the pods into manpages and
2621 put them into the INST_* directories.
2626 my($self, %attribs) = @_;
2627 return "\nmanifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
2628 %{$self->{MAN3PODS}} or %{$self->{MAN1PODS}};
2631 if (defined $self->{PERL_SRC}) {
2632 $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
2634 $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
2636 unless ($pod2man_exe = $self->perl_script($pod2man_exe)) {
2637 # Maybe a build by uninstalled Perl?
2638 $pod2man_exe = $self->catfile($self->{PERL_INC}, "pod", "pod2man");
2640 unless ($pod2man_exe = $self->perl_script($pod2man_exe)) {
2641 # No pod2man but some MAN3PODS to be installed
2644 Warning: I could not locate your pod2man program. Please make sure,
2645 your pod2man program is in your PATH before you execute 'make'
2648 $pod2man_exe = "-S pod2man";
2652 qq[POD2MAN_EXE = $pod2man_exe\n],
2653 qq[POD2MAN = \$(PERL) -we '%m=\@ARGV;for (keys %m){' \\\n],
2654 q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
2655 $self->{MAKEFILE}, q[";' \\
2656 -e 'print "Manifying $$m{$$_}\n";' \\
2657 -e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
2658 -e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
2660 push @m, "\nmanifypods : pure_all ";
2661 push @m, join " \\\n\t", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}};
2664 if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
2665 push @m, "\t$self->{NOECHO}\$(POD2MAN) \\\n\t";
2666 push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};
2673 Returns true, if the argument is likely to be a command.
2678 my($self,$file) = @_;
2679 return $file if -x $file && ! -d $file;
2683 =item maybe_command_in_dirs
2685 method under development. Not yet used. Ask Ilya :-)
2689 sub maybe_command_in_dirs { # $ver is optional argument if looking for perl
2690 # Ilya's suggestion. Not yet used, want to understand it first, but at least the code is here
2691 my($self, $names, $dirs, $trace, $ver) = @_;
2693 foreach $dir (@$dirs){
2694 next unless defined $dir; # $self->{PERL_SRC} may be undefined
2695 foreach $name (@$names){
2697 if ($self->file_name_is_absolute($name)) { # /foo/bar
2699 } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # bar
2700 $abs = $self->catfile($dir, $name);
2702 $abs = $self->catfile($self->curdir, $name);
2704 print "Checking $abs for $name\n" if ($trace >= 2);
2705 next unless $tryabs = $self->maybe_command($abs);
2706 print "Substituting $tryabs instead of $abs\n"
2707 if ($trace >= 2 and $tryabs ne $abs);
2710 print "Executing $abs\n" if ($trace >= 2);
2711 if (`$abs -e 'require $ver; print "VER_OK\n" ' 2>&1` =~ /VER_OK/) {
2712 print "Using PERL=$abs\n" if $trace;
2715 } else { # Do not look for perl
2722 =item needs_linking (o)
2724 Does this module need linking? Looks into subdirectory objects (see
2725 also has_link_code())
2732 $caller = (caller(0))[3];
2733 Carp::confess("Needs_linking called too early") if $caller =~ /^ExtUtils::MakeMaker::/;
2734 return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING};
2735 if ($self->has_link_code or $self->{MAKEAPERL}){
2736 $self->{NEEDS_LINKING} = 1;
2739 foreach $child (keys %{$self->{CHILDREN}}) {
2740 if ($self->{CHILDREN}->{$child}->needs_linking) {
2741 $self->{NEEDS_LINKING} = 1;
2745 return $self->{NEEDS_LINKING} = 0;
2750 misnamed method (will have to be changed). The MM_Unix method just
2751 returns the argument without further processing.
2753 On VMS used to insure that colons marking targets are preceded by
2754 space - most Unix Makes don't need this, but it's necessary under VMS
2755 to distinguish the target delimiter from a colon appearing as part of
2761 my($self,$text) = @_;
2767 parse a file and return what you think is $VERSION in this file set to.
2768 It will return the string "undef" if it can't figure out what $VERSION
2774 my($self,$parsefile) = @_;
2778 open(FH,$parsefile) or die "Could not open '$parsefile': $!";
2781 $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
2784 # next unless /\$(([\w\:\']*)\bVERSION)\b.*\=/;
2785 next unless /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/;
2787 package ExtUtils::MakeMaker::_version;
2796 $result = eval($eval);
2797 warn "Could not eval '$eval' in $parsefile: $@" if $@;
2798 $result = "undef" unless defined $result;
2805 =item parse_abstract
2807 parse a file and return what you think is the ABSTRACT
2811 sub parse_abstract {
2812 my($self,$parsefile) = @_;
2816 open(FH,$parsefile) or die "Could not open '$parsefile': $!";
2818 my $package = $self->{DISTNAME};
2819 $package =~ s/-/::/g;
2821 $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
2824 next unless /^($package\s-\s)(.*)/;
2834 Defines the string that is passed to recursive make calls in
2844 my($sep) = $Is_VMS ? ',' : '';
2847 foreach $key (qw(LIB LIBPERL_A LINKTYPE PREFIX OPTIMIZE)){
2848 push @pasthru, "$key=\"\$($key)\"";
2851 push @m, "\nPASTHRU = ", join ($sep, @pasthru), "\n";
2857 Takes no argument, returns the environment variable PATH as an array.
2863 my $path_sep = ($Is_OS2 || $Is_Dos) ? ";" : ":";
2864 my $path = $ENV{PATH};
2865 $path =~ s:\\:/:g if $Is_OS2;
2866 my @path = split $path_sep, $path;
2867 foreach(@path) { $_ = '.' if $_ eq '' }
2873 Takes one argument, a file name, and returns the file name, if the
2874 argument is likely to be a perl script. On MM_Unix this is true for
2875 any ordinary, readable file.
2880 my($self,$file) = @_;
2881 return $file if -r $file && -f _;
2885 =item perldepend (o)
2887 Defines the dependency from all *.h files that come with the perl
2896 # Check for unpropogated config.sh changes. Should never happen.
2897 # We do NOT just update config.h because that is not sufficient.
2898 # An out of date config.h is not fatal but complains loudly!
2899 $(PERL_INC)/config.h: $(PERL_SRC)/config.sh
2900 -}.$self->{NOECHO}.q{echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
2902 $(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
2903 }.$self->{NOECHO}.q{echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
2904 cd $(PERL_SRC) && $(MAKE) lib/Config.pm
2905 } if $self->{PERL_SRC};
2907 return join "", @m unless $self->needs_linking;
2911 $(PERL_INC)/EXTERN.h \
2912 $(PERL_INC)/INTERN.h \
2913 $(PERL_INC)/XSUB.h \
2915 $(PERL_INC)/cc_runtime.h \
2916 $(PERL_INC)/config.h \
2919 $(PERL_INC)/dosish.h \
2920 $(PERL_INC)/embed.h \
2921 $(PERL_INC)/embedvar.h \
2922 $(PERL_INC)/fakethr.h \
2923 $(PERL_INC)/form.h \
2925 $(PERL_INC)/handy.h \
2927 $(PERL_INC)/intrpvar.h \
2928 $(PERL_INC)/iperlsys.h \
2929 $(PERL_INC)/keywords.h \
2931 $(PERL_INC)/nostdio.h \
2932 $(PERL_INC)/objXSUB.h \
2934 $(PERL_INC)/opcode.h \
2935 $(PERL_INC)/opnames.h \
2936 $(PERL_INC)/patchlevel.h \
2937 $(PERL_INC)/perl.h \
2938 $(PERL_INC)/perlapi.h \
2939 $(PERL_INC)/perlio.h \
2940 $(PERL_INC)/perlsdio.h \
2941 $(PERL_INC)/perlsfio.h \
2942 $(PERL_INC)/perlvars.h \
2943 $(PERL_INC)/perly.h \
2945 $(PERL_INC)/pp_proto.h \
2946 $(PERL_INC)/proto.h \
2947 $(PERL_INC)/regcomp.h \
2948 $(PERL_INC)/regexp.h \
2949 $(PERL_INC)/regnodes.h \
2950 $(PERL_INC)/scope.h \
2952 $(PERL_INC)/thrdvar.h \
2953 $(PERL_INC)/thread.h \
2954 $(PERL_INC)/unixish.h \
2955 $(PERL_INC)/utf8.h \
2956 $(PERL_INC)/util.h \
2957 $(PERL_INC)/warnings.h
2959 $(OBJECT) : $(PERL_HDRS)
2960 } if $self->{OBJECT};
2962 push @m, join(" ", values %{$self->{XS}})." : \$(XSUBPPDEPS)\n" if %{$self->{XS}};
2969 Defines target that creates a PPD (Perl Package Description) file
2970 for a binary distribution.
2977 if ($self->{ABSTRACT_FROM}){
2978 $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or
2979 Carp::carp "WARNING: Setting ABSTRACT via file '$self->{ABSTRACT_FROM}' failed\n";
2981 my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0) x 4) [0 .. 3];
2982 push(@m, "# Creates a PPD (Perl Package Description) for a binary distribution.\n");
2984 push(@m, "\t\@\$(PERL) -e \"print qq{<SOFTPKG NAME=\\\"$self->{DISTNAME}\\\" VERSION=\\\"$pack_ver\\\">\\n}");
2985 push(@m, ". qq{\\t<TITLE>$self->{DISTNAME}</TITLE>\\n}");
2986 my $abstract = $self->{ABSTRACT};
2987 $abstract =~ s/\n/\\n/sg;
2988 $abstract =~ s/</</g;
2989 $abstract =~ s/>/>/g;
2990 push(@m, ". qq{\\t<ABSTRACT>$abstract</ABSTRACT>\\n}");
2991 my ($author) = $self->{AUTHOR};
2992 $author =~ s/</</g;
2993 $author =~ s/>/>/g;
2994 $author =~ s/@/\\@/g;
2995 push(@m, ". qq{\\t<AUTHOR>$author</AUTHOR>\\n}");
2996 push(@m, ". qq{\\t<IMPLEMENTATION>\\n}");
2998 foreach $prereq (sort keys %{$self->{PREREQ_PM}}) {
2999 my $pre_req = $prereq;
3000 $pre_req =~ s/::/-/g;
3001 my ($dep_ver) = join ",", (split (/\./, $self->{PREREQ_PM}{$prereq}), (0) x 4) [0 .. 3];
3002 push(@m, ". qq{\\t\\t<DEPENDENCY NAME=\\\"$pre_req\\\" VERSION=\\\"$dep_ver\\\" />\\n}");
3004 push(@m, ". qq{\\t\\t<OS NAME=\\\"\$(OSNAME)\\\" />\\n}");
3005 push(@m, ". qq{\\t\\t<ARCHITECTURE NAME=\\\"$Config{'archname'}\\\" />\\n}");
3006 my ($bin_location) = $self->{BINARY_LOCATION};
3007 $bin_location =~ s/\\/\\\\/g;
3008 if ($self->{PPM_INSTALL_SCRIPT}) {
3009 if ($self->{PPM_INSTALL_EXEC}) {
3010 push(@m, " . qq{\\t\\t<INSTALL EXEC=\\\"$self->{PPM_INSTALL_EXEC}\\\">$self->{PPM_INSTALL_SCRIPT}</INSTALL>\\n}");
3013 push(@m, " . qq{\\t\\t<INSTALL>$self->{PPM_INSTALL_SCRIPT}</INSTALL>\\n}");
3016 push(@m, ". qq{\\t\\t<CODEBASE HREF=\\\"$bin_location\\\" />\\n}");
3017 push(@m, ". qq{\\t</IMPLEMENTATION>\\n}");
3018 push(@m, ". qq{</SOFTPKG>\\n}\" > $self->{DISTNAME}.ppd");
3025 Returns the attribute C<PERM_RW> or the string C<644>.
3026 Used as the string that is passed
3027 to the C<chmod> command to set the permissions for read/writeable files.
3028 MakeMaker chooses C<644> because it has turned out in the past that
3029 relying on the umask provokes hard-to-track bug reports.
3030 When the return value is used by the perl function C<chmod>, it is
3031 interpreted as an octal value.
3036 shift->{PERM_RW} || "644";
3041 Returns the attribute C<PERM_RWX> or the string C<755>,
3042 i.e. the string that is passed
3043 to the C<chmod> command to set the permissions for executable files.
3049 shift->{PERM_RWX} || "755";
3054 Defines target that copies all files in the hash PM to their
3055 destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
3061 my($autodir) = $self->catdir('$(INST_LIB)','auto');
3063 pm_to_blib: $(TO_INST_PM)
3064 }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
3065 "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
3066 -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'}.$autodir.q{','$(PM_FILTER)')"
3067 }.$self->{NOECHO}.q{$(TOUCH) $@
3071 =item post_constants (o)
3073 Returns an empty string per default. Dedicated to overrides from
3074 within Makefile.PL after all constants have been defined.
3083 =item post_initialize (o)
3085 Returns an empty string per default. Used in Makefile.PLs to add some
3086 chunk of text to the Makefile after the object is initialized.
3090 sub post_initialize {
3097 Returns an empty string. Can be used in Makefile.PLs to write some
3098 text to the Makefile at the end.
3109 Check a path variable in $self from %Config, if it contains a prefix,
3110 and replace it with another one.
3112 Takes as arguments an attribute name, a search prefix and a
3113 replacement prefix. Changes the attribute in the object.
3118 my($self,$var,$sprefix,$rprefix) = @_;
3119 $self->{uc $var} ||= $Config{lc $var};
3120 $self->{uc $var} = VMS::Filespec::unixpath($self->{uc $var}) if $Is_VMS;
3121 $self->{uc $var} =~ s,^\Q$sprefix\E(?=/|\z),$rprefix,s;
3126 Defines targets to run *.PL files.
3132 return "" unless $self->{PL_FILES};
3134 foreach $plfile (sort keys %{$self->{PL_FILES}}) {
3135 my $list = ref($self->{PL_FILES}->{$plfile})
3136 ? $self->{PL_FILES}->{$plfile}
3137 : [$self->{PL_FILES}->{$plfile}];
3139 foreach $target (@$list) {
3142 $self->{NOECHO}\$(NOOP)
3145 \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile $target
3154 Defines the realclean target.
3159 my($self, %attribs) = @_;
3162 # Delete temporary files (via clean) and also delete installed files
3163 realclean purge :: clean
3165 # realclean subdirectories first (already cleaned)
3166 my $sub = ($Is_Win32 && Win32::IsWin95()) ?
3167 "\tcd %s\n\t\$(TEST_F) %s\n\t\$(MAKE) %s realclean\n\tcd ..\n" :
3168 "\t-cd %s && \$(TEST_F) %s && \$(MAKE) %s realclean\n";
3169 foreach(@{$self->{DIR}}){
3170 push(@m, sprintf($sub,$_,"$self->{MAKEFILE}.old","-f $self->{MAKEFILE}.old"));
3171 push(@m, sprintf($sub,$_,"$self->{MAKEFILE}",''));
3173 push(@m, " $self->{RM_RF} \$(INST_AUTODIR) \$(INST_ARCHAUTODIR)\n");
3174 if( $self->has_link_code ){
3175 push(@m, " $self->{RM_F} \$(INST_DYNAMIC) \$(INST_BOOT)\n");
3176 push(@m, " $self->{RM_F} \$(INST_STATIC)\n");
3178 # Issue a several little RM_F commands rather than risk creating a
3179 # very long command line (useful for extensions such as Encode
3180 # that have many files).
3181 if (keys %{$self->{PM}}) {
3183 foreach (values %{$self->{PM}}) {
3184 if (length($line) + length($_) > 80) {
3185 push @m, "\t$self->{RM_F} $line\n";
3192 push @m, "\t$self->{RM_F} $line\n" if $line;
3194 my(@otherfiles) = ($self->{MAKEFILE},
3195 "$self->{MAKEFILE}.old"); # Makefiles last
3196 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
3197 push(@m, " $self->{RM_RF} @otherfiles\n") if @otherfiles;
3198 push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
3202 =item replace_manpage_separator
3204 Takes the name of a package, which may be a nested package, in the
3205 form Foo/Bar and replaces the slash with C<::>. Returns the replacement.
3209 sub replace_manpage_separator {
3210 my($self,$man) = @_;
3211 if ($^O eq 'uwin') {
3223 Defines the static target.
3228 # --- Static Loading Sections ---
3232 ## $(INST_PM) has been moved to the all: target.
3233 ## It remains here for awhile to allow for old usage: "make static"
3234 #static :: '.$self->{MAKEFILE}.' $(INST_STATIC) $(INST_PM)
3235 static :: '.$self->{MAKEFILE}.' $(INST_STATIC)
3236 '.$self->{NOECHO}.'$(NOOP)
3240 =item static_lib (o)
3242 Defines how to produce the *.a (or equivalent) files.
3248 # Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
3249 # return '' unless $self->needs_linking(); #might be because of a subdir
3251 return '' unless $self->has_link_code;
3255 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists
3258 # If this extension has its own library (eg SDBM_File)
3259 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
3260 push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
3263 if (exists $self->{FULL_AR} && -x $self->{FULL_AR}) {
3264 # Prefer the absolute pathed ar if available so that PATH
3265 # doesn't confuse us. Perl itself is built with the full_ar.
3271 "\t\$($ar) ".'$(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@'."\n";
3273 q{ $(CHMOD) $(PERM_RWX) $@
3274 }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
3276 # Old mechanism - still available:
3278 "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
3279 } if $self->{PERL_SRC} && $self->{EXTRALIBS};
3282 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
3286 =item staticmake (o)
3293 my($self, %attribs) = @_;
3296 my(@searchdirs)=($self->{PERL_ARCHLIB}, $self->{SITEARCHEXP}, $self->{INST_ARCHLIB});
3298 # And as it's not yet built, we add the current extension
3299 # but only if it has some C code (or XS code, which implies C code)
3300 if (@{$self->{C}}) {
3301 @static = $self->catfile($self->{INST_ARCHLIB},
3304 "$self->{BASEEXT}$self->{LIB_EXT}"
3308 # Either we determine now, which libraries we will produce in the
3309 # subdirectories or we do it at runtime of the make.
3311 # We could ask all subdir objects, but I cannot imagine, why it
3312 # would be necessary.
3314 # Instead we determine all libraries for the new perl at
3316 my(@perlinc) = ($self->{INST_ARCHLIB}, $self->{INST_LIB}, $self->{PERL_ARCHLIB}, $self->{PERL_LIB});
3318 $self->makeaperl(MAKE => $self->{MAKEFILE},
3319 DIRS => \@searchdirs,
3322 TARGET => $self->{MAP_TARGET},
3324 LIBPERL => $self->{LIBPERL_A}
3330 Helper subroutine for subdirs
3335 my($self, $subdir) = @_;
3337 if ($Is_Win32 && Win32::IsWin95()) {
3338 if ($Config{'make'} =~ /dmake/i) {
3344 \$(MAKE) all \$(PASTHRU)
3348 } elsif ($Config{'make'} =~ /nmake/i) {
3353 \$(MAKE) all \$(PASTHRU)
3361 $self->{NOECHO}cd $subdir && \$(MAKE) all \$(PASTHRU)
3369 Defines targets to process subdirectories.
3374 # --- Sub-directory Sections ---
3377 # This method provides a mechanism to automatically deal with
3378 # subdirectories containing further Makefile.PL scripts.
3379 # It calls the subdir_x() method for each subdirectory.
3380 foreach $dir (@{$self->{DIR}}){
3381 push(@m, $self->subdir_x($dir));
3382 #### print "Including $dir subdirectory\n";
3386 # The default clean, realclean and test targets in this Makefile
3387 # have automatically been given entries for each subdir.
3391 push(@m, "\n# none")
3398 Defines the test targets.
3403 # --- Test and Installation Sections ---
3405 my($self, %attribs) = @_;
3406 my $tests = $attribs{TESTS};
3407 if (!$tests && -d 't') {
3408 $tests = $Is_Win32 ? join(' ', <t\\*.t>) : 't/*.t';
3410 # note: 'test.pl' name is also hardcoded in init_dirscan()
3414 TEST_TYPE=test_\$(LINKTYPE)
3419 testdb :: testdb_\$(LINKTYPE)
3421 test :: \$(TEST_TYPE)
3423 push(@m, map("\t$self->{NOECHO}cd $_ && \$(TEST_F) $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n",
3425 push(@m, "\t$self->{NOECHO}echo 'No tests defined for \$(NAME) extension.'\n")
3426 unless $tests or -f "test.pl" or @{$self->{DIR}};
3429 push(@m, "test_dynamic :: pure_all\n");
3430 push(@m, $self->test_via_harness('$(FULLPERL)', '$(TEST_FILES)')) if $tests;
3431 push(@m, $self->test_via_script('$(FULLPERL)', '$(TEST_FILE)')) if -f "test.pl";
3434 push(@m, "testdb_dynamic :: pure_all\n");
3435 push(@m, $self->test_via_script('$(FULLPERL) $(TESTDB_SW)', '$(TEST_FILE)'));
3438 # Occasionally we may face this degenerate target:
3439 push @m, "test_ : test_dynamic\n\n";
3441 if ($self->needs_linking()) {
3442 push(@m, "test_static :: pure_all \$(MAP_TARGET)\n");
3443 push(@m, $self->test_via_harness('./$(MAP_TARGET)', '$(TEST_FILES)')) if $tests;
3444 push(@m, $self->test_via_script('./$(MAP_TARGET)', '$(TEST_FILE)')) if -f "test.pl";
3446 push(@m, "testdb_static :: pure_all \$(MAP_TARGET)\n");
3447 push(@m, $self->test_via_script('./$(MAP_TARGET) $(TESTDB_SW)', '$(TEST_FILE)'));
3450 push @m, "test_static :: test_dynamic\n";
3451 push @m, "testdb_static :: testdb_dynamic\n";
3456 =item test_via_harness (o)
3458 Helper method to write the test targets
3462 sub test_via_harness {
3463 my($self, $perl, $tests) = @_;
3464 $perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
3465 "\t$perl".q! -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' !."$tests\n";
3468 =item test_via_script (o)
3470 Other helper method for test.
3474 sub test_via_script {
3475 my($self, $perl, $script) = @_;
3476 $perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
3477 qq{\t$perl}.q{ -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) }.qq{$script
3481 =item tool_autosplit (o)
3483 Defines a simple perl call that runs autosplit. May be deprecated by
3488 sub tool_autosplit {
3489 # --- Tool Sections ---
3491 my($self, %attribs) = @_;
3493 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
3495 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
3496 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
3500 =item tools_other (o)
3502 Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
3503 the Makefile. Also defines the perl programs MKPATH,
3504 WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
3511 my $bin_sh = $Config{sh} || '/bin/sh';
3516 for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
3517 push @m, "$_ = $self->{$_}\n";
3521 # The following is a portable way to say mkdir -p
3522 # To see which directories are created, change the if 0 to if 1
3523 MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
3525 # This helps us to minimize the effect of the .exists files A yet
3526 # better solution would be to have a stable file in the perl
3527 # distribution with a timestamp of zero. But this solution doesn't
3528 # need any changes to the core distribution and works with older perls
3529 EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
3533 return join "", @m if $self->{PARENT};
3536 # Here we warn users that an old packlist file was found somewhere,
3537 # and that they should call some uninstall routine
3538 WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \\
3539 -e 'print "WARNING: I have found an old package in\n";' \\
3540 -e 'print "\t$$ARGV[0].\n";' \\
3541 -e 'print "Please make sure the two installations are not conflicting\n";'
3546 MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
3547 -e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
3549 DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
3550 -e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", $$arg=shift, "|", $$arg, ">";' \
3551 -e 'print "=over 4";' \
3552 -e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
3555 UNINSTALL = $(PERL) -MExtUtils::Install \
3556 -e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
3557 -e 'print " packlist above carefully.\n There may be errors. Remove the";' \
3558 -e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
3564 =item tool_xsubpp (o)
3566 Determines typemaps, xsubpp version, prototype behaviour.
3572 return "" unless $self->needs_linking;
3573 my($xsdir) = $self->catdir($self->{PERL_LIB},"ExtUtils");
3574 my(@tmdeps) = $self->catdir('$(XSUBPPDIR)','typemap');
3575 if( $self->{TYPEMAPS} ){
3577 foreach $typemap (@{$self->{TYPEMAPS}}){
3578 if( ! -f $typemap ){
3579 warn "Typemap $typemap not found.\n";
3582 push(@tmdeps, $typemap);
3586 push(@tmdeps, "typemap") if -f "typemap";
3587 my(@tmargs) = map("-typemap $_", @tmdeps);
3588 if( exists $self->{XSOPT} ){
3589 unshift( @tmargs, $self->{XSOPT} );
3593 my $xsubpp_version = $self->xsubpp_version($self->catfile($xsdir,"xsubpp"));
3595 # What are the correct thresholds for version 1 && 2 Paul?
3596 if ( $xsubpp_version > 1.923 ){
3597 $self->{XSPROTOARG} = "" unless defined $self->{XSPROTOARG};
3599 if (defined $self->{XSPROTOARG} && $self->{XSPROTOARG} =~ /\-prototypes/) {
3600 print STDOUT qq{Warning: This extension wants to pass the switch "-prototypes" to xsubpp.
3601 Your version of xsubpp is $xsubpp_version and cannot handle this.
3602 Please upgrade to a more recent version of xsubpp.
3605 $self->{XSPROTOARG} = "";
3609 my $xsubpp = "xsubpp";
3613 XSUBPP = \$(XSUBPPDIR)/$xsubpp
3614 XSPROTOARG = $self->{XSPROTOARG}
3615 XSUBPPDEPS = @tmdeps \$(XSUBPP)
3616 XSUBPPARGS = @tmargs
3623 my($self,$xsubpp) = @_;
3624 return $Xsubpp_Version if defined $Xsubpp_Version; # global variable
3628 # try to figure out the version number of the xsubpp on the system
3630 # first try the -v flag, introduced in 1.921 & 2.000a2
3632 return "" unless $self->needs_linking;
3634 my $command = "$self->{PERL} -I$self->{PERL_LIB} $xsubpp -v 2>&1";
3635 print "Running $command\n" if $Verbose >= 2;
3636 $version = `$command` ;
3637 warn "Running '$command' exits with status " . ($?>>8) if $?;
3640 return $Xsubpp_Version = $1 if $version =~ /^xsubpp version (.*)/ ;
3642 # nope, then try something else
3644 my $counter = '000';
3645 my ($file) = 'temp' ;
3646 $counter++ while -e "$file$counter"; # don't overwrite anything
3649 open(F, ">$file") or die "Cannot open file '$file': $!\n" ;
3651 MODULE = fred PACKAGE = fred
3660 $command = "$self->{PERL} $xsubpp $file 2>&1";
3661 print "Running $command\n" if $Verbose >= 2;
3662 my $text = `$command` ;
3663 warn "Running '$command' exits with status " . ($?>>8) if $?;
3666 # gets 1.2 -> 1.92 and 2.000a1
3667 return $Xsubpp_Version = $1 if $text =~ /automatically by xsubpp version ([\S]+)\s*/ ;
3669 # it is either 1.0 or 1.1
3670 return $Xsubpp_Version = 1.1 if $text =~ /^Warning: ignored semicolon/ ;
3672 # none of the above, so 1.0
3673 return $Xsubpp_Version = "1.0" ;
3676 =item top_targets (o)
3678 Defines the targets all, subdirs, config, and O_FILES
3683 # --- Target Sections ---
3688 #all :: config $(INST_PM) subdirs linkext manifypods
3692 all :: pure_all htmlifypods manifypods
3693 '.$self->{NOECHO}.'$(NOOP)
3695 unless $self->{SKIPHASH}{'all'};
3698 pure_all :: config pm_to_blib subdirs linkext
3699 '.$self->{NOECHO}.'$(NOOP)
3701 subdirs :: $(MYEXTLIB)
3702 '.$self->{NOECHO}.'$(NOOP)
3704 config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)/.exists
3705 '.$self->{NOECHO}.'$(NOOP)
3707 config :: $(INST_ARCHAUTODIR)/.exists
3708 '.$self->{NOECHO}.'$(NOOP)
3710 config :: $(INST_AUTODIR)/.exists
3711 '.$self->{NOECHO}.'$(NOOP)
3714 push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
3716 if (%{$self->{HTMLLIBPODS}}) {
3718 config :: \$(INST_HTMLLIBDIR)/.exists
3719 $self->{NOECHO}\$(NOOP)
3722 push @m, $self->dir_target(qw[$(INST_HTMLLIBDIR)]);
3725 if (%{$self->{HTMLSCRIPTPODS}}) {
3727 config :: \$(INST_HTMLSCRIPTDIR)/.exists
3728 $self->{NOECHO}\$(NOOP)
3731 push @m, $self->dir_target(qw[$(INST_HTMLSCRIPTDIR)]);
3734 if (%{$self->{MAN1PODS}}) {
3736 config :: \$(INST_MAN1DIR)/.exists
3737 $self->{NOECHO}\$(NOOP)
3740 push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
3742 if (%{$self->{MAN3PODS}}) {
3744 config :: \$(INST_MAN3DIR)/.exists
3745 $self->{NOECHO}\$(NOOP)
3748 push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
3752 $(O_FILES): $(H_FILES)
3753 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
3757 perldoc ExtUtils::MakeMaker
3762 }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
3763 -MExtUtils::MakeMaker=Version_check \
3764 -e "Version_check('$(MM_VERSION)')"
3772 Obsolete, deprecated method. Not used since Version 5.21.
3777 # --- perllocal.pod section ---
3778 my($self,$what,$name,@attribs)=@_;
3779 my $time = localtime;
3780 print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
3781 print join "\n\n=item *\n\n", map("C<$_>",@attribs);
3782 print "\n\n=back\n\n";
3787 Defines the suffix rules to compile XS files to C.
3793 return '' unless $self->needs_linking();
3796 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
3802 Defines the suffix rules to compile XS files to C++.
3808 return '' unless $self->needs_linking();
3811 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
3817 Defines suffix rules to go from XS to object files directly. This is
3818 only intended for broken make implementations.
3822 sub xs_o { # many makes are too dumb to use xs_c then c_o
3824 return '' unless $self->needs_linking();
3827 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
3828 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
3834 This is internal method that returns path to libperl.a equivalent
3835 to be linked to dynamic extensions. UNIX does not have one but OS2
3842 return '$(PERL_INC)' . "/$Config{libperl}" if $^O eq "beos";
3846 =item perl_archive_after
3848 This is an internal method that returns path to a library which
3849 should be put on the linker command line I<after> the external libraries
3850 to be linked to dynamic extensions. This may be needed if the linker
3851 is one-pass, and Perl includes some overrides for C RTL functions,
3856 sub perl_archive_after
3863 This is internal method that returns name of a file that is
3864 passed to linker to define symbols to be exported.
3865 UNIX does not have one but OS2 and Win32 do.
3881 L<ExtUtils::MakeMaker>