1 package ExtUtils::MM_Unix;
3 require 5.005_03; # Maybe further back, dunno
8 use ExtUtils::MakeMaker::Config;
9 use File::Basename qw(basename dirname);
12 use vars qw($VERSION @ISA
13 $Is_OS2 $Is_VMS $Is_Win32 $Is_Dos
14 $Is_OSF $Is_IRIX $Is_NetBSD $Is_BSD
15 $Is_SunOS4 $Is_Solaris $Is_SunOS $Is_Interix
19 use ExtUtils::MakeMaker qw($Verbose neatvalue);
23 require ExtUtils::MM_Any;
24 @ISA = qw(ExtUtils::MM_Any);
27 $Is_OS2 = $^O eq 'os2';
28 $Is_Win32 = $^O eq 'MSWin32' || $Config{osname} eq 'NetWare';
29 $Is_Dos = $^O eq 'dos';
30 $Is_VMS = $^O eq 'VMS';
31 $Is_OSF = $^O eq 'dec_osf';
32 $Is_IRIX = $^O eq 'irix';
33 $Is_NetBSD = $^O eq 'netbsd';
34 $Is_Interix = $^O eq 'interix';
35 $Is_SunOS4 = $^O eq 'sunos';
36 $Is_Solaris = $^O eq 'solaris';
37 $Is_SunOS = $Is_SunOS4 || $Is_Solaris;
38 $Is_BSD = ($^O =~ /^(?:free|net|open)bsd$/ or
39 grep( $^O eq $_, qw(bsdos interix dragonfly) )
45 # For things like vmsify()
46 require VMS::Filespec;
47 VMS::Filespec->import;
54 ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
58 C<require ExtUtils::MM_Unix;>
62 The methods provided by this package are designed to be used in
63 conjunction with ExtUtils::MakeMaker. When MakeMaker writes a
64 Makefile, it creates one or more objects that inherit their methods
65 from a package C<MM>. MM itself doesn't provide any methods, but it
66 ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
67 specific packages take the responsibility for all the methods provided
68 by MM_Unix. We are trying to reduce the number of the necessary
69 overrides by defining rather primitive operations within
72 If you are going to write a platform specific MM package, please try
73 to limit the necessary overrides to primitive methods, and if it is not
74 possible to do so, let's work out how to achieve that gain.
76 If you are overriding any of these methods in your Makefile.PL (in the
77 MY class), please report that to the makemaker mailing list. We are
78 trying to minimize the necessary method overrides and switch to data
79 driven Makefile.PLs wherever possible. In the long run less methods
80 will be overridable via the MY class.
84 The following description of methods is still under
85 development. Please refer to the code for not suitably documented
86 sections and complain loudly to the makemaker@perl.org mailing list.
87 Better yet, provide a patch.
89 Not all of the methods below are overridable in a
90 Makefile.PL. Overridable methods are marked as (o). All methods are
91 overridable by a platform specific MM_*.pm file.
93 Cross-platform methods are being moved into MM_Any. If you can't find
94 something that used to be in here, look in MM_Any.
98 # So we don't have to keep calling the methods over and over again,
99 # we have these globals to cache the values. Faster and shrtr.
100 my $Curdir = __PACKAGE__->curdir;
101 my $Rootdir = __PACKAGE__->rootdir;
102 my $Updir = __PACKAGE__->updir;
111 Simply says that we're Unix.
122 Defines the suffix rules to compile different flavors of C files to
128 # --- Translation Sections ---
131 return '' unless $self->needs_linking();
134 my $command = '$(CCCMD)';
135 my $flags = '$(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE)';
137 if (my $cpp = $Config{cpprun}) {
138 my $cpp_cmd = $self->const_cccmd;
139 $cpp_cmd =~ s/^CCCMD\s*=\s*\$\(CC\)/$cpp/;
142 $cpp_cmd $flags \$*.c > \$*.i
148 $command -S $flags \$*.c
151 $command $flags \$*.c
154 $command $flags \$*.cpp
157 $command $flags \$*.cxx
160 $command $flags \$*.cc
166 } if !$Is_OS2 and !$Is_Win32 and !$Is_Dos; #Case-specific
173 Does very much the same as the cflags script in the perl
174 distribution. It doesn't return the whole compiler command line, but
175 initializes all of its parts. The const_cccmd method then actually
176 returns the definition of the CCCMD macro which uses these parts.
183 my($self,$libperl)=@_;
184 return $self->{CFLAGS} if $self->{CFLAGS};
185 return '' unless $self->needs_linking();
187 my($prog, $uc, $perltype, %cflags);
188 $libperl ||= $self->{LIBPERL_A} || "libperl$self->{LIB_EXT}" ;
189 $libperl =~ s/\.\$\(A\)$/$self->{LIB_EXT}/;
191 @cflags{qw(cc ccflags optimize shellflags)}
192 = @Config{qw(cc ccflags optimize shellflags)};
195 $cflags{shellflags} ||= '';
200 DE => '-DDEBUGGING -DEMBED',
201 M => '-DEMBED -DMULTIPLICITY',
202 DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
205 if ($libperl =~ /libperl(\w*)\Q$self->{LIB_EXT}/){
208 $uc = ""; # avoid warning
210 $perltype = $map{$uc} ? $map{$uc} : "";
218 ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
219 if ($prog = $Config{$name}) {
220 # Expand hints for this extension via the shell
221 print STDOUT "Processing $name hint:\n" if $Verbose;
222 my(@o)=`cc=\"$cflags{cc}\"
223 ccflags=\"$cflags{ccflags}\"
224 optimize=\"$cflags{optimize}\"
225 perltype=\"$cflags{perltype}\"
226 optdebug=\"$cflags{optdebug}\"
229 echo ccflags=\$ccflags
230 echo optimize=\$optimize
231 echo perltype=\$perltype
232 echo optdebug=\$optdebug
237 if ($line =~ /(.*?)=\s*(.*)\s*$/){
239 print STDOUT " $1 = $2\n" if $Verbose;
241 print STDOUT "Unrecognised result from hint: '$line'\n";
247 $cflags{optimize} = $optdebug;
250 for (qw(ccflags optimize perltype)) {
252 $cflags{$_} =~ s/^\s+//;
253 $cflags{$_} =~ s/\s+/ /g;
254 $cflags{$_} =~ s/\s+$//;
255 $self->{uc $_} ||= $cflags{$_};
258 if ($self->{POLLUTE}) {
259 $self->{CCFLAGS} .= ' -DPERL_POLLUTE ';
263 if ($Config{usemymalloc} and not $Config{bincompat5005}
264 and not $Config{ccflags} =~ /-DPERL_POLLUTE_MALLOC\b/
265 and $self->{PERL_MALLOC_OK}) {
266 $pollute = '$(PERL_MALLOC_DEF)';
269 $self->{CCFLAGS} = quote_paren($self->{CCFLAGS});
270 $self->{OPTIMIZE} = quote_paren($self->{OPTIMIZE});
272 return $self->{CFLAGS} = qq{
273 CCFLAGS = $self->{CCFLAGS}
274 OPTIMIZE = $self->{OPTIMIZE}
275 PERLTYPE = $self->{PERLTYPE}
282 =item const_cccmd (o)
284 Returns the full compiler call for C programs and stores the
285 definition in CONST_CCCMD.
290 my($self,$libperl)=@_;
291 return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
292 return '' unless $self->needs_linking();
293 return $self->{CONST_CCCMD} =
294 q{CCCMD = $(CC) -c $(PASTHRU_INC) $(INC) \\
295 $(CCFLAGS) $(OPTIMIZE) \\
296 $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \\
297 $(XS_DEFINE_VERSION)};
300 =item const_config (o)
302 Defines a couple of constants in the Makefile that are imported from
308 # --- Constants Sections ---
312 push(@m,"\n# These definitions are from config.sh (via $INC{'Config.pm'})\n");
313 push(@m,"\n# They may have been overridden via Makefile.PL or on the command line\n");
315 foreach $m (@{$self->{CONFIG}}){
316 # SITE*EXP macros are defined in &constants; avoid duplicates here
317 next if $once_only{$m};
318 $self->{uc $m} = quote_paren($self->{uc $m});
319 push @m, uc($m) , ' = ' , $self->{uc $m}, "\n";
325 =item const_loadlibs (o)
327 Defines EXTRALIBS, LDLOADLIBS, BSLOADLIBS, LD_RUN_PATH. See
328 L<ExtUtils::Liblist> for details.
334 return "" unless $self->needs_linking;
337 # $self->{NAME} might depend on some other libraries:
338 # See ExtUtils::Liblist for details
343 EXTRALIBS LDLOADLIBS BSLOADLIBS
345 next unless defined $self->{$tmp};
346 push @m, "$tmp = $self->{$tmp}\n";
348 # don't set LD_RUN_PATH if empty
352 next unless $self->{$tmp};
353 push @m, "$tmp = $self->{$tmp}\n";
360 my $make_frag = $mm->constants;
362 Prints out macros for lots of constants.
370 $self->{DFSEP} = '$(DIRFILESEP)'; # alias for internal use
374 AR_STATIC_ARGS DIRFILESEP DFSEP
376 VERSION VERSION_MACRO VERSION_SYM DEFINE_VERSION
377 XS_VERSION XS_VERSION_MACRO XS_DEFINE_VERSION
378 INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB
379 INST_MAN1DIR INST_MAN3DIR
381 INSTALLDIRS INSTALL_BASE DESTDIR PREFIX
382 PERLPREFIX SITEPREFIX VENDORPREFIX
384 (map { ("INSTALL".$_,
386 } $self->installvars),
391 FIRST_MAKEFILE MAKEFILE_OLD MAKE_APERL_FILE
392 PERLMAINCC PERL_SRC PERL_INC
393 PERL FULLPERL ABSPERL
394 PERLRUN FULLPERLRUN ABSPERLRUN
395 PERLRUNINST FULLPERLRUNINST ABSPERLRUNINST
401 next unless defined $self->{$macro};
403 # pathnames can have sharp signs in them; escape them so
404 # make doesn't think it is a comment-start character.
405 $self->{$macro} =~ s/#/\\#/g;
406 push @m, "$macro = $self->{$macro}\n";
410 MAKEMAKER = $self->{MAKEMAKER}
411 MM_VERSION = $self->{MM_VERSION}
412 MM_REVISION = $self->{MM_REVISION}
416 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
417 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
418 # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
419 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
424 FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
425 LDFROM LINKTYPE BOOTDEP
428 next unless defined $self->{$macro};
429 push @m, "$macro = $self->{$macro}\n";
433 # Handy lists of source code files:
434 XS_FILES = ".$self->wraplist(sort keys %{$self->{XS}})."
435 C_FILES = ".$self->wraplist(@{$self->{C}})."
436 O_FILES = ".$self->wraplist(@{$self->{O_FILES}})."
437 H_FILES = ".$self->wraplist(@{$self->{H}})."
438 MAN1PODS = ".$self->wraplist(sort keys %{$self->{MAN1PODS}})."
439 MAN3PODS = ".$self->wraplist(sort keys %{$self->{MAN3PODS}})."
444 # Where is the Config information that we are using/depend on
445 CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
450 # Where to build things
451 INST_LIBDIR = $self->{INST_LIBDIR}
452 INST_ARCHLIBDIR = $self->{INST_ARCHLIBDIR}
454 INST_AUTODIR = $self->{INST_AUTODIR}
455 INST_ARCHAUTODIR = $self->{INST_ARCHAUTODIR}
457 INST_STATIC = $self->{INST_STATIC}
458 INST_DYNAMIC = $self->{INST_DYNAMIC}
459 INST_BOOT = $self->{INST_BOOT}
465 EXPORT_LIST = $self->{EXPORT_LIST}
466 PERL_ARCHIVE = $self->{PERL_ARCHIVE}
467 PERL_ARCHIVE_AFTER = $self->{PERL_ARCHIVE_AFTER}
472 TO_INST_PM = ".$self->wraplist(sort keys %{$self->{PM}})."
474 PM_TO_BLIB = ".$self->wraplist(%{$self->{PM}})."
483 Same as macro for the depend attribute.
488 my($self,%attribs) = @_;
490 while (($key,$val) = each %attribs){
491 last unless defined $key;
492 push @m, "$key : $val\n";
502 Defines the DESTDIR and DEST* variables paralleling the INSTALL*.
510 $self->{DESTDIR} ||= '';
512 # Make DEST variables.
513 foreach my $var ($self->installvars) {
514 my $destvar = 'DESTINSTALL'.$var;
515 $self->{$destvar} ||= '$(DESTDIR)$(INSTALL'.$var.')';
524 Defines a lot of macros for distribution support.
526 macro description default
528 TAR tar command to use tar
529 TARFLAGS flags to pass to TAR cvf
531 ZIP zip command to use zip
532 ZIPFLAGS flags to pass to ZIP -r
534 COMPRESS compression command to gzip --best
536 SUFFIX suffix to put on .gz
539 SHAR shar command to use shar
541 PREOP extra commands to run before
543 POSTOP extra commands to run after
546 TO_UNIX a command to convert linefeeds
547 to Unix style in your archive
549 CI command to checkin your ci -u
550 sources to version control
551 RCS_LABEL command to label your sources rcs -Nv$(VERSION_SYM): -q
554 DIST_CP $how argument to manicopy() best
555 when the distdir is created
557 DIST_DEFAULT default target to use to tardist
558 create a distribution
560 DISTVNAME name of the resulting archive $(DISTNAME)-$(VERSION)
568 $self->{TAR} ||= 'tar';
569 $self->{TARFLAGS} ||= 'cvf';
570 $self->{ZIP} ||= 'zip';
571 $self->{ZIPFLAGS} ||= '-r';
572 $self->{COMPRESS} ||= 'gzip --best';
573 $self->{SUFFIX} ||= '.gz';
574 $self->{SHAR} ||= 'shar';
575 $self->{PREOP} ||= '$(NOECHO) $(NOOP)'; # eg update MANIFEST
576 $self->{POSTOP} ||= '$(NOECHO) $(NOOP)'; # eg remove the distdir
577 $self->{TO_UNIX} ||= '$(NOECHO) $(NOOP)';
579 $self->{CI} ||= 'ci -u';
580 $self->{RCS_LABEL}||= 'rcs -Nv$(VERSION_SYM): -q';
581 $self->{DIST_CP} ||= 'best';
582 $self->{DIST_DEFAULT} ||= 'tardist';
584 ($self->{DISTNAME} = $self->{NAME}) =~ s{::}{-}g unless $self->{DISTNAME};
585 $self->{DISTVNAME} ||= $self->{DISTNAME}.'-'.$self->{VERSION};
591 my $dist_macros = $mm->dist(%overrides);
593 Generates a make fragment defining all the macros initialized in
596 %overrides can be used to override any of the above.
601 my($self, %attribs) = @_;
605 TAR TARFLAGS ZIP ZIPFLAGS COMPRESS SUFFIX SHAR
607 CI RCS_LABEL DIST_CP DIST_DEFAULT
611 my $value = $attribs{$key} || $self->{$key};
612 $make .= "$key = $value\n";
618 =item dist_basics (o)
620 Defines the targets distclean, distcheck, skipcheck, manifest, veryclean.
627 return <<'MAKE_FRAG';
628 distclean :: realclean distcheck
632 $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
635 $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
638 $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
640 veryclean : realclean
641 $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old
649 Defines a check in target for RCS.
657 $(PERLRUN) "-MExtUtils::Manifest=maniread" \\
658 -e "@all = keys %{ maniread() };" \\
659 -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \\
660 -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
666 my $dist_make_fragment = $MM->dist_core;
668 Puts the targets necessary for 'make dist' together into one make
677 foreach my $target (qw(dist tardist uutardist tarfile zipdist zipfile
680 my $method = $target.'_target';
682 $make_frag .= $self->$method();
691 my $make_frag = $MM->dist_target;
693 Returns the 'dist' target to make an archive for distribution. This
694 target simply checks to make sure the Makefile is up-to-date and
695 depends on $(DIST_DEFAULT).
702 my $date_check = $self->oneliner(<<'CODE', ['-l']);
703 print 'Warning: Makefile possibly out of date with $(VERSION_FROM)'
704 if -e '$(VERSION_FROM)' and -M '$(VERSION_FROM)' < -M '$(FIRST_MAKEFILE)';
707 return sprintf <<'MAKE_FRAG', $date_check;
708 dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
713 =item B<tardist_target>
715 my $make_frag = $MM->tardist_target;
717 Returns the 'tardist' target which is simply so 'make tardist' works.
718 The real work is done by the dynamically named tardistfile_target()
719 method, tardist should have that as a dependency.
726 return <<'MAKE_FRAG';
727 tardist : $(DISTVNAME).tar$(SUFFIX)
732 =item B<zipdist_target>
734 my $make_frag = $MM->zipdist_target;
736 Returns the 'zipdist' target which is simply so 'make zipdist' works.
737 The real work is done by the dynamically named zipdistfile_target()
738 method, zipdist should have that as a dependency.
745 return <<'MAKE_FRAG';
746 zipdist : $(DISTVNAME).zip
751 =item B<tarfile_target>
753 my $make_frag = $MM->tarfile_target;
755 The name of this target is the name of the tarball generated by
756 tardist. This target does the actual work of turning the distdir into
764 return <<'MAKE_FRAG';
765 $(DISTVNAME).tar$(SUFFIX) : distdir
768 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
769 $(RM_RF) $(DISTVNAME)
770 $(COMPRESS) $(DISTVNAME).tar
777 my $make_frag = $MM->zipfile_target;
779 The name of this target is the name of the zip file generated by
780 zipdist. This target does the actual work of turning the distdir into
788 return <<'MAKE_FRAG';
789 $(DISTVNAME).zip : distdir
791 $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
792 $(RM_RF) $(DISTVNAME)
797 =item uutardist_target
799 my $make_frag = $MM->uutardist_target;
801 Converts the tarfile into a uuencoded file
805 sub uutardist_target {
808 return <<'MAKE_FRAG';
809 uutardist : $(DISTVNAME).tar$(SUFFIX)
810 uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
817 my $make_frag = $MM->shdist_target;
819 Converts the distdir into a shell archive.
826 return <<'MAKE_FRAG';
829 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
830 $(RM_RF) $(DISTVNAME)
838 Used by some OS' to define DL_FUNCS and DL_VARS and write the *.exp files.
840 Normally just returns an empty string.
851 Defines targets for bootstrap files.
856 my($self, %attribs) = @_;
859 ' unless $self->has_link_code();
861 my $target = $Is_VMS ? '$(MMS$TARGET)' : '$@';
863 return sprintf <<'MAKE_FRAG', ($target) x 5;
864 BOOTSTRAP = $(BASEEXT).bs
866 # As Mkbootstrap might not write a file (if none is required)
867 # we use touch to prevent make continually trying to remake it.
868 # The DynaLoader only reads a non-empty file.
869 $(BOOTSTRAP) : $(FIRST_MAKEFILE) $(BOOTDEP) $(INST_ARCHAUTODIR)$(DFSEP).exists
870 $(NOECHO) $(ECHO) "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
871 $(NOECHO) $(PERLRUN) \
872 "-MExtUtils::Mkbootstrap" \
873 -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');"
874 $(NOECHO) $(TOUCH) %s
875 $(CHMOD) $(PERM_RW) %s
877 $(INST_BOOT) : $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists
878 $(NOECHO) $(RM_RF) %s
879 - $(CP) $(BOOTSTRAP) %s
880 $(CHMOD) $(PERM_RW) %s
884 =item dynamic_lib (o)
886 Defines how to produce the *.so (or equivalent) files.
891 my($self, %attribs) = @_;
892 return '' unless $self->needs_linking(); #might be because of a subdir
894 return '' unless $self->has_link_code;
896 my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
897 my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
898 my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
899 my($ldfrom) = '$(LDFROM)';
900 $armaybe = 'ar' if ($Is_OSF and $armaybe eq ':');
902 my $ld_opt = $Is_OS2 ? '$(OPTIMIZE) ' : ''; # Useful on other systems too?
903 my $ld_fix = $Is_OS2 ? '|| ( $(RM_F) $@ && sh -c false )' : '';
905 # This section creates the dynamically loadable $(INST_DYNAMIC)
906 # from $(OBJECT) and possibly $(MYEXTLIB).
907 ARMAYBE = '.$armaybe.'
908 OTHERLDFLAGS = '.$ld_opt.$otherldflags.'
909 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
910 INST_DYNAMIC_FIX = '.$ld_fix.'
912 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
914 if ($armaybe ne ':'){
915 $ldfrom = 'tmp$(LIB_EXT)';
916 push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
917 push(@m,' $(RANLIB) '."$ldfrom\n");
919 $ldfrom = "-all $ldfrom -none" if $Is_OSF;
921 # The IRIX linker doesn't use LD_RUN_PATH
922 my $ldrun = $Is_IRIX && $self->{LD_RUN_PATH} ?
923 qq{-rpath "$self->{LD_RUN_PATH}"} : '';
925 # For example in AIX the shared objects/libraries from previous builds
926 # linger quite a while in the shared dynalinker cache even when nobody
927 # is using them. This is painful if one for instance tries to restart
928 # a failed build because the link command will fail unnecessarily 'cos
929 # the shared object/library is 'busy'.
933 my $libs = '$(LDLOADLIBS)';
935 if (($Is_NetBSD || $Is_Interix) && $Config{'useshrplib'} eq 'true') {
936 # Use nothing on static perl platforms, and to the flags needed
937 # to link against the shared libperl library on shared perl
938 # platforms. We peek at lddlflags to see if we need -Wl,-R
939 # or -R to add paths to the run-time library search path.
940 if ($Config{'lddlflags'} =~ /-Wl,-R/) {
941 $libs .= ' -L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -Wl,-R$(PERL_ARCHLIB)/CORE -lperl';
942 } elsif ($Config{'lddlflags'} =~ /-R/) {
943 $libs .= ' -L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -R$(PERL_ARCHLIB)/CORE -lperl';
947 my $ld_run_path_shell = "";
948 if ($self->{LD_RUN_PATH} ne "") {
949 $ld_run_path_shell = 'LD_RUN_PATH="$(LD_RUN_PATH)" ';
952 push @m, sprintf <<'MAKE', $ld_run_path_shell, $ldrun, $ldfrom, $libs;
953 %s$(LD) %s $(LDDLFLAGS) %s $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) \
954 $(PERL_ARCHIVE) %s $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST) \
959 $(CHMOD) $(PERM_RWX) $@
967 Deprecated method. Use libscan instead.
972 my($self,$path) = @_;
978 Called by init_others, and calls ext ExtUtils::Liblist. See
979 L<ExtUtils::Liblist> for details.
984 my($self,$libs) = @_;
985 require ExtUtils::Liblist;
986 $self->ext($libs, $Verbose);
991 Finds the executables PERL and FULLPERL
996 my($self, $ver, $names, $dirs, $trace) = @_;
999 print "Looking for perl $ver by these names:
1006 my $stderr_duped = 0;
1009 if( open(STDERR_COPY, '>&STDERR') ) {
1014 find_perl() can't dup STDERR: $!
1015 You might see some garbage while we search for Perl
1020 foreach $name (@$names){
1021 foreach $dir (@$dirs){
1022 next unless defined $dir; # $self->{PERL_SRC} may be undefined
1024 if ($self->file_name_is_absolute($name)) { # /foo/bar
1026 } elsif ($self->canonpath($name) eq
1027 $self->canonpath(basename($name))) { # foo
1028 $abs = $self->catfile($dir, $name);
1030 $abs = $self->catfile($Curdir, $name);
1032 print "Checking $abs\n" if ($trace >= 2);
1033 next unless $self->maybe_command($abs);
1034 print "Executing $abs\n" if ($trace >= 2);
1036 my $version_check = qq{$abs -le "require $ver; print qq{VER_OK}"};
1037 $version_check = "$Config{run} $version_check"
1038 if defined $Config{run} and length $Config{run};
1040 # To avoid using the unportable 2>&1 to suppress STDERR,
1041 # we close it before running the command.
1042 # However, thanks to a thread library bug in many BSDs
1043 # ( http://www.freebsd.org/cgi/query-pr.cgi?pr=51535 )
1044 # we cannot use the fancier more portable way in here
1045 # but instead need to use the traditional 2>&1 construct.
1047 $val = `$version_check 2>&1`;
1049 close STDERR if $stderr_duped;
1050 $val = `$version_check`;
1051 open STDERR, '>&STDERR_COPY' if $stderr_duped;
1054 if ($val =~ /^VER_OK/m) {
1055 print "Using PERL=$abs\n" if $trace;
1057 } elsif ($trace >= 2) {
1058 print "Result: '$val' ".($? >> 8)."\n";
1062 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
1063 0; # false and not empty
1071 Inserts the sharpbang or equivalent magic number to a set of @files.
1075 sub fixin { # stolen from the pink Camel book, more or less
1076 my ( $self, @files ) = @_;
1078 my ($does_shbang) = $Config{'sharpbang'} =~ /^\s*\#\!/;
1079 for my $file (@files) {
1080 my $file_new = "$file.new";
1081 my $file_bak = "$file.bak";
1085 open( FIXIN, $file ) or croak "Can't process '$file': $!";
1087 chomp( my $line = <FIXIN> );
1088 next unless $line =~ s/^\s*\#!\s*//; # Not a shbang file.
1089 # Now figure out the interpreter name.
1090 my ( $cmd, $arg ) = split ' ', $line, 2;
1093 # Now look (in reverse) for interpreter in absolute PATH (unless perl).
1095 if ( $cmd eq "perl" ) {
1096 if ( $Config{startperl} =~ m,^\#!.*/perl, ) {
1097 $interpreter = $Config{startperl};
1098 $interpreter =~ s,^\#!,,;
1101 $interpreter = $Config{perlpath};
1106 = reverse grep { $self->file_name_is_absolute } $self->path;
1109 foreach $dir (@absdirs) {
1110 if ( $self->maybe_command($cmd) ) {
1111 warn "Ignoring $interpreter in $file\n"
1112 if $Verbose && $interpreter;
1113 $interpreter = $self->catfile( $dir, $cmd );
1118 # Figure out how to invoke interpreter on this machine.
1122 print STDOUT "Changing sharpbang in $file to $interpreter"
1125 # this is probably value-free on DOSISH platforms
1127 $shb .= "$Config{'sharpbang'}$interpreter";
1128 $shb .= ' ' . $arg if defined $arg;
1132 eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
1133 if 0; # not running under some shell
1134 } unless $Is_Win32; # this won't work on win32, so don't
1137 warn "Can't find $cmd in PATH, $file unchanged"
1142 unless ( open( FIXOUT, ">$file_new" ) ) {
1143 warn "Can't create new $file: $!\n";
1147 # Print out the new #! line (or equivalent).
1150 print FIXOUT $shb, <FIXIN>;
1154 chmod 0666, $file_bak;
1156 unless ( _rename( $file, $file_bak ) ) {
1157 warn "Can't rename $file to $file_bak: $!";
1160 unless ( _rename( $file_new, $file ) ) {
1161 warn "Can't rename $file_new to $file: $!";
1162 unless ( _rename( $file_bak, $file ) ) {
1163 warn "Can't rename $file_bak back to $file either: $!";
1164 warn "Leaving $file renamed as $file_bak\n";
1171 close(FIXIN) if fileno(FIXIN);
1172 system("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
1178 my($old, $new) = @_;
1180 foreach my $file ($old, $new) {
1181 if( $Is_VMS and basename($file) !~ /\./ ) {
1182 # rename() in 5.8.0 on VMS will not rename a file if it
1183 # does not contain a dot yet it returns success.
1188 return rename($old, $new);
1194 Writes an empty FORCE: target.
1200 '# Phony target to force checking subdirectories.
1208 Guess the name of this package by examining the working directory's
1209 name. MakeMaker calls this only if the developer has not supplied a
1219 my $name = basename(cwd());
1220 $name =~ s|[\-_][\d\.\-]+\z||; # this is new with MM 5.00, we
1221 # strip minus or underline
1222 # followed by a float or some such
1223 print "Warning: Guessing NAME [$name] from current directory name.\n";
1229 Returns true if C, XS, MYEXTLIB or similar objects exist within this
1230 object that need a compiler. Does not descend into subdirectories as
1231 needs_linking() does.
1237 return $self->{HAS_LINK_CODE} if defined $self->{HAS_LINK_CODE};
1238 if ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB}){
1239 $self->{HAS_LINK_CODE} = 1;
1242 return $self->{HAS_LINK_CODE} = 0;
1248 Scans the directory structure and initializes DIR, XS, XS_FILES,
1249 C, C_FILES, O_FILES, H, H_FILES, PL_FILES, EXE_FILES.
1251 Called by init_main.
1255 sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
1257 my($name, %dir, %xs, %c, %h, %pl_files, %pm);
1259 my %ignore = map {( $_ => 1 )} qw(Makefile.PL Build.PL test.pl t);
1261 # ignore the distdir
1262 $Is_VMS ? $ignore{"$self->{DISTVNAME}.dir"} = 1
1263 : $ignore{$self->{DISTVNAME}} = 1;
1265 @ignore{map lc, keys %ignore} = values %ignore if $Is_VMS;
1267 foreach $name ($self->lsdir($Curdir)){
1268 next if $name =~ /\#/;
1269 next if $name eq $Curdir or $name eq $Updir or $ignore{$name};
1270 next unless $self->libscan($name);
1272 next if -l $name; # We do not support symlinks at all
1273 next if $self->{NORECURS};
1274 $dir{$name} = $name if (-f $self->catfile($name,"Makefile.PL"));
1275 } elsif ($name =~ /\.xs\z/){
1276 my($c); ($c = $name) =~ s/\.xs\z/.c/;
1279 } elsif ($name =~ /\.c(pp|xx|c)?\z/i){ # .c .C .cpp .cxx .cc
1281 unless $name =~ m/perlmain\.c/; # See MAP_TARGET
1282 } elsif ($name =~ /\.h\z/i){
1284 } elsif ($name =~ /\.PL\z/) {
1285 ($pl_files{$name} = $name) =~ s/\.PL\z// ;
1286 } elsif (($Is_VMS || $Is_Dos) && $name =~ /[._]pl$/i) {
1287 # case-insensitive filesystem, one dot per name, so foo.h.PL
1288 # under Unix appears as foo.h_pl under VMS or fooh.pl on Dos
1289 local($/); open(PL,$name); my $txt = <PL>; close PL;
1290 if ($txt =~ /Extracting \S+ \(with variable substitutions/) {
1291 ($pl_files{$name} = $name) =~ s/[._]pl\z//i ;
1294 $pm{$name} = $self->catfile($self->{INST_LIBDIR},$name);
1296 } elsif ($name =~ /\.(p[ml]|pod)\z/){
1297 $pm{$name} = $self->catfile($self->{INST_LIBDIR},$name);
1301 $self->{PL_FILES} ||= \%pl_files;
1302 $self->{DIR} ||= [sort keys %dir];
1303 $self->{XS} ||= \%xs;
1304 $self->{C} ||= [sort keys %c];
1305 $self->{H} ||= [sort keys %h];
1306 $self->{PM} ||= \%pm;
1308 my @o_files = @{$self->{C}};
1309 $self->{O_FILES} = [grep s/\.c(pp|xx|c)?\z/$self->{OBJ_EXT}/i, @o_files];
1315 Determines if man pages should be generated and initializes MAN1PODS
1316 and MAN3PODS as appropriate.
1323 # Set up names of manual pages to generate from pods
1324 foreach my $man (qw(MAN1 MAN3)) {
1325 if ( $self->{"${man}PODS"}
1326 or $self->{"INSTALL${man}DIR"} =~ /^(none|\s*)$/
1328 $self->{"${man}PODS"} ||= {};
1331 my $init_method = "init_${man}PODS";
1332 $self->$init_method();
1339 my($self, $file) = @_;
1343 if (open(FH,"<$file")) {
1345 if (/^=(?:head\d+|item|pod)\b/) {
1352 # If it doesn't exist yet, we assume, it has pods in it
1362 Initializes MAN1PODS from the list of EXE_FILES.
1369 if ( exists $self->{EXE_FILES} ) {
1370 foreach my $name (@{$self->{EXE_FILES}}) {
1371 next unless $self->_has_pod($name);
1373 $self->{MAN1PODS}->{$name} =
1374 $self->catfile("\$(INST_MAN1DIR)",
1375 basename($name).".\$(MAN1EXT)");
1383 Initializes MAN3PODS from the list of PM files.
1390 my %manifypods = (); # we collect the keys first, i.e. the files
1391 # we have to convert to pod
1393 foreach my $name (keys %{$self->{PM}}) {
1394 if ($name =~ /\.pod\z/ ) {
1395 $manifypods{$name} = $self->{PM}{$name};
1396 } elsif ($name =~ /\.p[ml]\z/ ) {
1397 if( $self->_has_pod($name) ) {
1398 $manifypods{$name} = $self->{PM}{$name};
1403 my $parentlibs_re = join '|', @{$self->{PMLIBPARENTDIRS}};
1405 # Remove "Configure.pm" and similar, if it's not the only pod listed
1406 # To force inclusion, just name it "Configure.pod", or override
1408 foreach my $name (keys %manifypods) {
1409 if ($self->{PERL_CORE} and $name =~ /(config|setup).*\.pm/is) {
1410 delete $manifypods{$name};
1413 my($manpagename) = $name;
1414 $manpagename =~ s/\.p(od|m|l)\z//;
1415 # everything below lib is ok
1416 unless($manpagename =~ s!^\W*($parentlibs_re)\W+!!s) {
1417 $manpagename = $self->catfile(
1418 split(/::/,$self->{PARENT_NAME}),$manpagename
1421 $manpagename = $self->replace_manpage_separator($manpagename);
1422 $self->{MAN3PODS}->{$name} =
1423 $self->catfile("\$(INST_MAN3DIR)", "$manpagename.\$(MAN3EXT)");
1430 Initializes PMLIBDIRS and PM from PMLIBDIRS.
1437 # Some larger extensions often wish to install a number of *.pm/pl
1438 # files into the library in various locations.
1440 # The attribute PMLIBDIRS holds an array reference which lists
1441 # subdirectories which we should search for library files to
1442 # install. PMLIBDIRS defaults to [ 'lib', $self->{BASEEXT} ]. We
1443 # recursively search through the named directories (skipping any
1444 # which don't exist or contain Makefile.PL files).
1446 # For each *.pm or *.pl file found $self->libscan() is called with
1447 # the default installation path in $_[1]. The return value of
1448 # libscan defines the actual installation location. The default
1449 # libscan function simply returns the path. The file is skipped
1450 # if libscan returns false.
1452 # The default installation location passed to libscan in $_[1] is:
1454 # ./*.pm => $(INST_LIBDIR)/*.pm
1455 # ./xyz/... => $(INST_LIBDIR)/xyz/...
1456 # ./lib/... => $(INST_LIB)/...
1458 # In this way the 'lib' directory is seen as the root of the actual
1459 # perl library whereas the others are relative to INST_LIBDIR
1460 # (which includes PARENT_NAME). This is a subtle distinction but one
1461 # that's important for nested modules.
1463 unless( $self->{PMLIBDIRS} ) {
1465 # Avoid logical name vs directory collisions
1466 $self->{PMLIBDIRS} = ['./lib', "./$self->{BASEEXT}"];
1469 $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}];
1473 #only existing directories that aren't in $dir are allowed
1475 # Avoid $_ wherever possible:
1476 # @{$self->{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$self->{PMLIBDIRS}};
1477 my (@pmlibdirs) = @{$self->{PMLIBDIRS}};
1478 @{$self->{PMLIBDIRS}} = ();
1479 my %dir = map { ($_ => $_) } @{$self->{DIR}};
1480 foreach my $pmlibdir (@pmlibdirs) {
1481 -d $pmlibdir && !$dir{$pmlibdir} && push @{$self->{PMLIBDIRS}}, $pmlibdir;
1484 unless( $self->{PMLIBPARENTDIRS} ) {
1485 @{$self->{PMLIBPARENTDIRS}} = ('lib');
1488 return if $self->{PM} and $self->{ARGS}{PM};
1490 if (@{$self->{PMLIBDIRS}}){
1491 print "Searching PMLIBDIRS: @{$self->{PMLIBDIRS}}\n"
1494 File::Find::find(sub {
1496 unless ($self->libscan($_)){
1497 $File::Find::prune = 1;
1502 return if /~$/; # emacs temp files
1503 return if /,v$/; # RCS files
1505 my $path = $File::Find::name;
1506 my $prefix = $self->{INST_LIBDIR};
1509 my $parentlibs_re = join '|', @{$self->{PMLIBPARENTDIRS}};
1510 $prefix = $self->{INST_LIB}
1511 if ($striplibpath = $path) =~ s{^(\W*)($parentlibs_re)\W}
1514 my($inst) = $self->catfile($prefix,$striplibpath);
1515 local($_) = $inst; # for backwards compatibility
1516 $inst = $self->libscan($inst);
1517 print "libscan($path) => '$inst'\n" if ($Verbose >= 2);
1518 return unless $inst;
1519 $self->{PM}{$path} = $inst;
1520 }, @{$self->{PMLIBDIRS}});
1525 =item init_DIRFILESEP
1527 Using / for Unix. Called by init_main.
1531 sub init_DIRFILESEP {
1534 $self->{DIRFILESEP} = '/';
1540 Initializes AR, AR_STATIC_ARGS, BASEEXT, CONFIG, DISTNAME, DLBASE,
1541 EXE_EXT, FULLEXT, FULLPERL, FULLPERLRUN, FULLPERLRUNINST, INST_*,
1542 INSTALL*, INSTALLDIRS, LIB_EXT, LIBPERL_A, MAP_TARGET, NAME,
1543 OBJ_EXT, PARENT_NAME, PERL, PERL_ARCHLIB, PERL_INC, PERL_LIB,
1544 PERL_SRC, PERLRUN, PERLRUNINST, PREFIX, VERSION,
1545 VERSION_SYM, XS_VERSION.
1552 # --- Initialize Module Name and Paths
1554 # NAME = Foo::Bar::Oracle
1555 # FULLEXT = Foo/Bar/Oracle
1557 # PARENT_NAME = Foo::Bar
1559 ### ($self->{FULLEXT} =
1560 ### $self->{NAME}) =~ s!::!/!g ; #eg. BSD/Foo/Socket
1561 $self->{FULLEXT} = $self->catdir(split /::/, $self->{NAME});
1564 # Copied from DynaLoader:
1566 my(@modparts) = split(/::/,$self->{NAME});
1567 my($modfname) = $modparts[-1];
1569 # Some systems have restrictions on files names for DLL's etc.
1570 # mod2fname returns appropriate file base name (typically truncated)
1571 # It may also edit @modparts if required.
1572 if (defined &DynaLoader::mod2fname) {
1573 $modfname = &DynaLoader::mod2fname(\@modparts);
1576 ($self->{PARENT_NAME}, $self->{BASEEXT}) = $self->{NAME} =~ m!(?:([\w:]+)::)?(\w+)\z! ;
1577 $self->{PARENT_NAME} ||= '';
1579 if (defined &DynaLoader::mod2fname) {
1580 # As of 5.001m, dl_os2 appends '_'
1581 $self->{DLBASE} = $modfname;
1583 $self->{DLBASE} = '$(BASEEXT)';
1587 # --- Initialize PERL_LIB, PERL_SRC
1589 # *Real* information: where did we get these two from? ...
1590 my $inc_config_dir = dirname($INC{'Config.pm'});
1591 my $inc_carp_dir = dirname($INC{'Carp.pm'});
1593 unless ($self->{PERL_SRC}){
1594 foreach my $dir_count (1..8) { # 8 is the VMS limit for nesting
1595 my $dir = $self->catdir(($Updir) x $dir_count);
1597 if (-f $self->catfile($dir,"config_h.SH") &&
1598 -f $self->catfile($dir,"perl.h") &&
1599 -f $self->catfile($dir,"lib","Exporter.pm")
1601 $self->{PERL_SRC}=$dir ;
1607 warn "PERL_CORE is set but I can't find your PERL_SRC!\n" if
1608 $self->{PERL_CORE} and !$self->{PERL_SRC};
1610 if ($self->{PERL_SRC}){
1611 $self->{PERL_LIB} ||= $self->catdir("$self->{PERL_SRC}","lib");
1613 if (defined $Cross::platform) {
1614 $self->{PERL_ARCHLIB} =
1615 $self->catdir("$self->{PERL_SRC}","xlib",$Cross::platform);
1617 $self->catdir("$self->{PERL_SRC}","xlib",$Cross::platform,
1618 $Is_Win32?("CORE"):());
1621 $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
1622 $self->{PERL_INC} = ($Is_Win32) ?
1623 $self->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
1626 # catch a situation that has occurred a few times in the past:
1628 -s $self->catfile($self->{PERL_SRC},'cflags')
1632 -s $self->catfile($self->{PERL_SRC},'perlshr_attr.opt')
1637 You cannot build extensions below the perl source tree after executing
1638 a 'make clean' in the perl source tree.
1640 To rebuild extensions distributed with the perl source you should
1641 simply Configure (to include those extensions) and then build perl as
1642 normal. After installing perl the source tree can be deleted. It is
1643 not needed for building extensions by running 'perl Makefile.PL'
1644 usually without extra arguments.
1646 It is recommended that you unpack and build additional extensions away
1647 from the perl source tree.
1651 # we should also consider $ENV{PERL5LIB} here
1652 my $old = $self->{PERL_LIB} || $self->{PERL_ARCHLIB} || $self->{PERL_INC};
1653 $self->{PERL_LIB} ||= $Config{privlibexp};
1654 $self->{PERL_ARCHLIB} ||= $Config{archlibexp};
1655 $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
1658 if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))
1660 # Maybe somebody tries to build an extension with an
1661 # uninstalled Perl outside of Perl build tree
1663 for my $dir (@INC) {
1664 $lib = $dir, last if -e $self->catdir($dir, "Config.pm");
1667 # Win32 puts its header files in /perl/src/lib/CORE.
1668 # Unix leaves them in /perl/src.
1669 my $inc = $Is_Win32 ? $self->catdir($lib, "CORE" )
1671 if (-e $self->catdir($inc, "perl.h")) {
1672 $self->{PERL_LIB} = $lib;
1673 $self->{PERL_ARCHLIB} = $lib;
1674 $self->{PERL_INC} = $inc;
1675 $self->{UNINSTALLED_PERL} = 1;
1677 ... Detected uninstalled Perl. Trying to continue.
1684 # We get SITELIBEXP and SITEARCHEXP directly via
1685 # Get_from_Config. When we are running standard modules, these
1686 # won't matter, we will set INSTALLDIRS to "perl". Otherwise we
1687 # set it to "site". I prefer that INSTALLDIRS be set from outside
1689 $self->{INSTALLDIRS} ||= "site";
1691 $self->{MAN1EXT} ||= $Config{man1ext};
1692 $self->{MAN3EXT} ||= $Config{man3ext};
1694 # Get some stuff out of %Config if we haven't yet done so
1695 print STDOUT "CONFIG must be an array ref\n"
1696 if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY');
1697 $self->{CONFIG} = [] unless (ref $self->{CONFIG});
1698 push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config);
1699 push(@{$self->{CONFIG}}, 'shellflags') if $Config{shellflags};
1701 foreach my $m (@{$self->{CONFIG}}){
1702 next if $once_only{$m};
1703 print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
1704 unless exists $Config{$m};
1705 $self->{uc $m} ||= $Config{$m};
1709 # This is too dangerous:
1710 # if ($^O eq "next") {
1711 # $self->{AR} = "libtool";
1712 # $self->{AR_STATIC_ARGS} = "-o";
1714 # But I leave it as a placeholder
1716 $self->{AR_STATIC_ARGS} ||= "cr";
1718 # These should never be needed
1719 $self->{OBJ_EXT} ||= '.o';
1720 $self->{LIB_EXT} ||= '.a';
1722 $self->{MAP_TARGET} ||= "perl";
1724 $self->{LIBPERL_A} ||= "libperl$self->{LIB_EXT}";
1726 # make a simple check if we find Exporter
1727 warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory
1728 (Exporter.pm not found)"
1729 unless -f $self->catfile("$self->{PERL_LIB}","Exporter.pm") ||
1730 $self->{NAME} eq "ExtUtils::MakeMaker";
1735 Initializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH, LD,
1736 OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, SHELL, NOOP,
1737 FIRST_MAKEFILE, MAKEFILE_OLD, NOECHO, RM_F, RM_RF, TEST_F,
1738 TOUCH, CP, MV, CHMOD, UMASK_NULL, ECHO, ECHO_N
1742 sub init_others { # --- Initialize Other Attributes
1745 $self->{LD} ||= 'ld';
1747 # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $self->{LIBS}
1748 # Lets look at $self->{LIBS} carefully: It may be an anon array, a string or
1749 # undefined. In any case we turn it into an anon array:
1751 # May check $Config{libs} too, thus not empty.
1752 $self->{LIBS} = [$self->{LIBS}] unless ref $self->{LIBS};
1754 $self->{LIBS} = [''] unless @{$self->{LIBS}} && defined $self->{LIBS}[0];
1755 $self->{LD_RUN_PATH} = "";
1757 foreach $libs ( @{$self->{LIBS}} ){
1758 $libs =~ s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace
1759 my(@libs) = $self->extliblist($libs);
1760 if ($libs[0] or $libs[1] or $libs[2]){
1761 # LD_RUN_PATH now computed by ExtUtils::Liblist
1762 ($self->{EXTRALIBS}, $self->{BSLOADLIBS},
1763 $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs;
1768 if ( $self->{OBJECT} ) {
1769 $self->{OBJECT} =~ s!\.o(bj)?\b!\$(OBJ_EXT)!g;
1771 # init_dirscan should have found out, if we have C files
1772 $self->{OBJECT} = "";
1773 $self->{OBJECT} = '$(BASEEXT)$(OBJ_EXT)' if @{$self->{C}||[]};
1775 $self->{OBJECT} =~ s/\n+/ \\\n\t/g;
1776 $self->{BOOTDEP} = (-f "$self->{BASEEXT}_BS") ? "$self->{BASEEXT}_BS" : "";
1777 $self->{PERLMAINCC} ||= '$(CC)';
1778 $self->{LDFROM} = '$(OBJECT)' unless $self->{LDFROM};
1780 # Sanity check: don't define LINKTYPE = dynamic if we're skipping
1781 # the 'dynamic' section of MM. We don't have this problem with
1782 # 'static', since we either must use it (%Config says we can't
1783 # use dynamic loading) or the caller asked for it explicitly.
1784 if (!$self->{LINKTYPE}) {
1785 $self->{LINKTYPE} = $self->{SKIPHASH}{'dynamic'}
1787 : ($Config{usedl} ? 'dynamic' : 'static');
1790 $self->{NOOP} ||= '$(SHELL) -c true';
1791 $self->{NOECHO} = '@' unless defined $self->{NOECHO};
1793 $self->{FIRST_MAKEFILE} ||= $self->{MAKEFILE} || 'Makefile';
1794 $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE};
1795 $self->{MAKEFILE_OLD} ||= $self->{MAKEFILE}.'.old';
1796 $self->{MAKE_APERL_FILE} ||= $self->{MAKEFILE}.'.aperl';
1798 # Some makes require a wrapper around macros passed in on the command
1800 $self->{MACROSTART} ||= '';
1801 $self->{MACROEND} ||= '';
1803 # Not everybody uses -f to indicate "use this Makefile instead"
1804 $self->{USEMAKEFILE} ||= '-f';
1806 $self->{SHELL} ||= $Config{sh} || '/bin/sh';
1808 $self->{ECHO} ||= 'echo';
1809 $self->{ECHO_N} ||= 'echo -n';
1810 $self->{RM_F} ||= "rm -f";
1811 $self->{RM_RF} ||= "rm -rf";
1812 $self->{TOUCH} ||= "touch";
1813 $self->{TEST_F} ||= "test -f";
1814 $self->{CP} ||= "cp";
1815 $self->{MV} ||= "mv";
1816 $self->{CHMOD} ||= "chmod";
1817 $self->{MKPATH} ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e mkpath';
1818 $self->{EQUALIZE_TIMESTAMP} ||=
1819 '$(ABSPERLRUN) "-MExtUtils::Command" -e eqtime';
1821 $self->{UNINST} ||= 0;
1822 $self->{VERBINST} ||= 0;
1823 $self->{MOD_INSTALL} ||=
1824 $self->oneliner(<<'CODE', ['-MExtUtils::Install']);
1825 install({@ARGV}, '$(VERBINST)', 0, '$(UNINST)');
1827 $self->{DOC_INSTALL} ||=
1828 '$(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install';
1829 $self->{UNINSTALL} ||=
1830 '$(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall';
1831 $self->{WARN_IF_OLD_PACKLIST} ||=
1832 '$(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist';
1834 q{$(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)"};
1836 $self->{UMASK_NULL} ||= "umask 0";
1837 $self->{DEV_NULL} ||= "> /dev/null 2>&1";
1845 Unix has no need of special linker flags.
1851 $self->{PERL_ARCHIVE} ||= '';
1852 $self->{PERL_ARCHIVE_AFTER} ||= '';
1853 $self->{EXPORT_LIST} ||= '';
1870 # The user who requests an installation directory explicitly
1871 # should not have to tell us an architecture installation directory
1872 # as well. We look if a directory exists that is named after the
1873 # architecture. If not we take it as a sign that it should be the
1874 # same as the requested installation directory. Otherwise we take
1876 for my $libpair ({l=>"privlib", a=>"archlib"},
1877 {l=>"sitelib", a=>"sitearch"},
1878 {l=>"vendorlib", a=>"vendorarch"},
1881 my $lib = "install$libpair->{l}";
1883 my $Arch = uc "install$libpair->{a}";
1884 if( $self->{$Lib} && ! $self->{$Arch} ){
1885 my($ilib) = $Config{$lib};
1887 $self->prefixify($Arch,$ilib,$self->{$Lib});
1889 unless (-d $self->{$Arch}) {
1890 print STDOUT "Directory $self->{$Arch} not found\n"
1892 $self->{$Arch} = $self->{$Lib};
1894 print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose;
1904 Called by init_main. Sets up ABSPERL, PERL, FULLPERL and all the
1905 *PERLRUN* permutations.
1907 PERL is allowed to be miniperl
1908 FULLPERL must be a complete perl
1910 ABSPERL is PERL converted to an absolute path
1912 *PERLRUN contains everything necessary to run perl, find it's
1915 *PERLRUNINST is *PERLRUN + everything necessary to find the
1916 modules being built.
1924 foreach my $component ($self->{PERL_SRC}, $self->path(),
1927 push @defpath, $component if defined $component;
1930 # Build up a set of file names (not command names).
1931 my $thisperl = $self->canonpath($^X);
1932 $thisperl .= $Config{exe_ext} unless
1933 # VMS might have a file version # at the end
1934 $Is_VMS ? $thisperl =~ m/$Config{exe_ext}(;\d+)?$/i
1935 : $thisperl =~ m/$Config{exe_ext}$/i;
1937 # We need a relative path to perl when in the core.
1938 $thisperl = $self->abs2rel($thisperl) if $self->{PERL_CORE};
1940 my @perls = ($thisperl);
1941 push @perls, map { "$_$Config{exe_ext}" }
1942 ('perl', 'perl5', "perl$Config{version}");
1944 # miniperl has priority over all but the cannonical perl when in the
1945 # core. Otherwise its a last resort.
1946 my $miniperl = "miniperl$Config{exe_ext}";
1947 if( $self->{PERL_CORE} ) {
1948 splice @perls, 1, 0, $miniperl;
1951 push @perls, $miniperl;
1955 $self->find_perl(5.0, \@perls, \@defpath, $Verbose );
1956 # don't check if perl is executable, maybe they have decided to
1957 # supply switches with perl
1959 # When built for debugging, VMS doesn't create perl.exe but ndbgperl.exe.
1960 my $perl_name = 'perl';
1961 $perl_name = 'ndbgperl' if $Is_VMS &&
1962 defined $Config{usevmsdebug} && $Config{usevmsdebug} eq 'define';
1964 # XXX This logic is flawed. If "miniperl" is anywhere in the path
1965 # it will get confused. It should be fixed to work only on the filename.
1966 # Define 'FULLPERL' to be a non-miniperl (used in test: target)
1967 ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/$perl_name/i
1968 unless $self->{FULLPERL};
1970 # Little hack to get around VMS's find_perl putting "MCR" in front
1972 $self->{ABSPERL} = $self->{PERL};
1973 my $has_mcr = $self->{ABSPERL} =~ s/^MCR\s*//;
1974 if( $self->file_name_is_absolute($self->{ABSPERL}) ) {
1975 $self->{ABSPERL} = '$(PERL)';
1978 $self->{ABSPERL} = $self->rel2abs($self->{ABSPERL});
1979 $self->{ABSPERL} = 'MCR '.$self->{ABSPERL} if $has_mcr;
1982 # Are we building the core?
1983 $self->{PERL_CORE} = $ENV{PERL_CORE} unless exists $self->{PERL_CORE};
1984 $self->{PERL_CORE} = 0 unless defined $self->{PERL_CORE};
1986 # How do we run perl?
1987 foreach my $perl (qw(PERL FULLPERL ABSPERL)) {
1988 my $run = $perl.'RUN';
1990 $self->{$run} = "\$($perl)";
1992 # Make sure perl can find itself before it's installed.
1993 $self->{$run} .= q{ "-I$(PERL_LIB)" "-I$(PERL_ARCHLIB)"}
1994 if $self->{UNINSTALLED_PERL} || $self->{PERL_CORE};
1996 $self->{$perl.'RUNINST'} =
1997 sprintf q{$(%sRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"}, $perl;
2006 =item platform_constants
2008 Add MM_Unix_VERSION.
2015 $self->{MM_Unix_VERSION} = $VERSION;
2016 $self->{PERL_MALLOC_DEF} = '-DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc '.
2017 '-Dfree=Perl_mfree -Drealloc=Perl_realloc '.
2018 '-Dcalloc=Perl_calloc';
2022 sub platform_constants {
2026 foreach my $macro (qw(MM_Unix_VERSION PERL_MALLOC_DEF))
2028 next unless defined $self->{$macro};
2029 $make_frag .= "$macro = $self->{$macro}\n";
2040 Called by init_main. Initializes PERL_*
2047 $self->{PERM_RW} = 644 unless defined $self->{PERM_RW};
2048 $self->{PERM_RWX} = 755 unless defined $self->{PERM_RWX};
2058 Sets up macros having to do with XS code. Currently just INST_STATIC,
2059 INST_DYNAMIC and INST_BOOT.
2066 if ($self->has_link_code()) {
2067 $self->{INST_STATIC} =
2068 $self->catfile('$(INST_ARCHAUTODIR)', '$(BASEEXT)$(LIB_EXT)');
2069 $self->{INST_DYNAMIC} =
2070 $self->catfile('$(INST_ARCHAUTODIR)', '$(DLBASE).$(DLEXT)');
2071 $self->{INST_BOOT} =
2072 $self->catfile('$(INST_ARCHAUTODIR)', '$(BASEEXT).bs');
2074 $self->{INST_STATIC} = '';
2075 $self->{INST_DYNAMIC} = '';
2076 $self->{INST_BOOT} = '';
2082 Defines the install target.
2087 my($self, %attribs) = @_;
2091 install :: all pure_install doc_install
2094 install_perl :: all pure_perl_install doc_perl_install
2097 install_site :: all pure_site_install doc_site_install
2100 install_vendor :: all pure_vendor_install doc_vendor_install
2103 pure_install :: pure_$(INSTALLDIRS)_install
2106 doc_install :: doc_$(INSTALLDIRS)_install
2109 pure__install : pure_site_install
2110 $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
2112 doc__install : doc_site_install
2113 $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
2115 pure_perl_install ::
2116 $(NOECHO) $(MOD_INSTALL) \
2117 read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
2118 write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
2119 $(INST_LIB) $(DESTINSTALLPRIVLIB) \
2120 $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
2121 $(INST_BIN) $(DESTINSTALLBIN) \
2122 $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
2123 $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
2124 $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
2125 $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
2126 }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
2129 pure_site_install ::
2130 $(NOECHO) $(MOD_INSTALL) \
2131 read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
2132 write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
2133 $(INST_LIB) $(DESTINSTALLSITELIB) \
2134 $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
2135 $(INST_BIN) $(DESTINSTALLSITEBIN) \
2136 $(INST_SCRIPT) $(DESTINSTALLSITESCRIPT) \
2137 $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
2138 $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
2139 $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
2140 }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
2142 pure_vendor_install ::
2143 $(NOECHO) $(MOD_INSTALL) \
2144 read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
2145 write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
2146 $(INST_LIB) $(DESTINSTALLVENDORLIB) \
2147 $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
2148 $(INST_BIN) $(DESTINSTALLVENDORBIN) \
2149 $(INST_SCRIPT) $(DESTINSTALLVENDORSCRIPT) \
2150 $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
2151 $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
2154 $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
2155 -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
2156 -$(NOECHO) $(DOC_INSTALL) \
2157 "Module" "$(NAME)" \
2158 "installed into" "$(INSTALLPRIVLIB)" \
2159 LINKTYPE "$(LINKTYPE)" \
2160 VERSION "$(VERSION)" \
2161 EXE_FILES "$(EXE_FILES)" \
2162 >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
2165 $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
2166 -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
2167 -$(NOECHO) $(DOC_INSTALL) \
2168 "Module" "$(NAME)" \
2169 "installed into" "$(INSTALLSITELIB)" \
2170 LINKTYPE "$(LINKTYPE)" \
2171 VERSION "$(VERSION)" \
2172 EXE_FILES "$(EXE_FILES)" \
2173 >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
2175 doc_vendor_install ::
2176 $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
2177 -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
2178 -$(NOECHO) $(DOC_INSTALL) \
2179 "Module" "$(NAME)" \
2180 "installed into" "$(INSTALLVENDORLIB)" \
2181 LINKTYPE "$(LINKTYPE)" \
2182 VERSION "$(VERSION)" \
2183 EXE_FILES "$(EXE_FILES)" \
2184 >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
2189 uninstall :: uninstall_from_$(INSTALLDIRS)dirs
2192 uninstall_from_perldirs ::
2193 $(NOECHO) $(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
2195 uninstall_from_sitedirs ::
2196 $(NOECHO) $(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
2198 uninstall_from_vendordirs ::
2199 $(NOECHO) $(UNINSTALL) }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{
2205 =item installbin (o)
2207 Defines targets to make and to install EXE_FILES.
2214 return "" unless $self->{EXE_FILES} && ref $self->{EXE_FILES} eq "ARRAY";
2215 my @exefiles = @{$self->{EXE_FILES}};
2216 return "" unless @exefiles;
2218 @exefiles = map vmsify($_), @exefiles if $Is_VMS;
2221 for my $from (@exefiles) {
2222 my($path)= $self->catfile('$(INST_SCRIPT)', basename($from));
2224 local($_) = $path; # for backwards compatibility
2225 my $to = $self->libscan($path);
2226 print "libscan($from) => '$to'\n" if ($Verbose >=2);
2228 $to = vmsify($to) if $Is_VMS;
2229 $fromto{$from} = $to;
2231 my @to = values %fromto;
2235 EXE_FILES = @exefiles
2243 # realclean can get rather large.
2244 push @m, map "\t$_\n", $self->split_command('$(RM_F)', @to);
2248 # A target for each exe file.
2249 while (my($from,$to) = each %fromto) {
2250 last unless defined $from;
2252 push @m, sprintf <<'MAKE', $to, $from, $to, $from, $to, $to, $to;
2253 %s : %s $(FIRST_MAKEFILE) $(INST_SCRIPT)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists
2254 $(NOECHO) $(RM_F) %s
2257 -$(NOECHO) $(CHMOD) $(PERM_RWX) %s
2269 Defines the linkext target which in turn defines the LINKTYPE.
2274 my($self, %attribs) = @_;
2275 # LINKTYPE => static or dynamic or ''
2276 my($linktype) = defined $attribs{LINKTYPE} ?
2277 $attribs{LINKTYPE} : '$(LINKTYPE)';
2279 linkext :: $linktype
2286 Takes as arguments a directory name and a regular expression. Returns
2287 all entries in the directory that match the regular expression.
2293 my($dir, $regex) = @_;
2295 my $dh = new DirHandle;
2296 $dh->open($dir || ".") or return ();
2299 @ls = grep(/$regex/, @ls) if $regex;
2305 Simple subroutine to insert the macros defined by the macro attribute
2311 my($self,%attribs) = @_;
2313 while (($key,$val) = each %attribs){
2314 last unless defined $key;
2315 push @m, "$key = $val\n";
2322 Called by staticmake. Defines how to write the Makefile to produce a
2325 By default the Makefile produced includes all the static extensions in
2326 the perl library. (Purified versions of library files, e.g.,
2327 DynaLoader_pure_p1_c0_032.a are automatically ignored to avoid link errors.)
2332 my($self, %attribs) = @_;
2333 my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
2334 @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
2337 # --- MakeMaker makeaperl section ---
2338 MAP_TARGET = $target
2339 FULLPERL = $self->{FULLPERL}
2341 return join '', @m if $self->{PARENT};
2343 my($dir) = join ":", @{$self->{DIR}};
2345 unless ($self->{MAKEAPERL}) {
2347 $(MAP_TARGET) :: static $(MAKE_APERL_FILE)
2348 $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
2350 $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
2351 $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
2352 $(NOECHO) $(PERLRUNINST) \
2353 Makefile.PL DIR=}, $dir, q{ \
2354 MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
2355 MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
2361 push @m, " \\\n\t\t$_";
2363 # push @m, map( " \\\n\t\t$_", @ARGV );
2371 my($cccmd, $linkcmd, $lperl);
2374 $cccmd = $self->const_cccmd($libperl);
2375 $cccmd =~ s/^CCCMD\s*=\s*//;
2376 $cccmd =~ s/\$\(INC\)/ "-I$self->{PERL_INC}" /;
2377 $cccmd .= " $Config{cccdlflags}"
2378 if ($Config{useshrplib} eq 'true');
2379 $cccmd =~ s/\(CC\)/\(PERLMAINCC\)/;
2381 # The front matter of the linkcommand...
2382 $linkcmd = join ' ', "\$(CC)",
2383 grep($_, @Config{qw(ldflags ccdlflags)});
2384 $linkcmd =~ s/\s+/ /g;
2385 $linkcmd =~ s,(perl\.exp),\$(PERL_INC)/$1,;
2387 # Which *.a files could we make use of...
2390 File::Find::find(sub {
2391 return unless m/\Q$self->{LIB_EXT}\E$/;
2393 # Skip perl's libraries.
2394 return if m/^libperl/ or m/^perl\Q$self->{LIB_EXT}\E$/;
2396 # Skip purified versions of libraries
2397 # (e.g., DynaLoader_pure_p1_c0_032.a)
2398 return if m/_pure_\w+_\w+_\w+\.\w+$/ and -f "$File::Find::dir/.pure";
2400 if( exists $self->{INCLUDE_EXT} ){
2405 ($xx = $File::Find::name) =~ s,.*?/auto/,,s;
2409 # Throw away anything not explicitly marked for inclusion.
2410 # DynaLoader is implied.
2411 foreach $incl ((@{$self->{INCLUDE_EXT}},'DynaLoader')){
2417 return unless $found;
2419 elsif( exists $self->{EXCLUDE_EXT} ){
2423 ($xx = $File::Find::name) =~ s,.*?/auto/,,s;
2427 # Throw away anything explicitly marked for exclusion
2428 foreach $excl (@{$self->{EXCLUDE_EXT}}){
2429 return if( $xx eq $excl );
2433 # don't include the installed version of this extension. I
2434 # leave this line here, although it is not necessary anymore:
2435 # I patched minimod.PL instead, so that Miniperl.pm won't
2436 # enclude duplicates
2438 # Once the patch to minimod.PL is in the distribution, I can
2440 return if $File::Find::name =~ m:auto/$self->{FULLEXT}/$self->{BASEEXT}$self->{LIB_EXT}\z:;
2442 $static{cwd() . "/" . $_}++;
2443 }, grep( -d $_, @{$searchdirs || []}) );
2445 # We trust that what has been handed in as argument, will be buildable
2446 $static = [] unless $static;
2447 @static{@{$static}} = (1) x @{$static};
2449 $extra = [] unless $extra && ref $extra eq 'ARRAY';
2450 for (sort keys %static) {
2451 next unless /\Q$self->{LIB_EXT}\E\z/;
2452 $_ = dirname($_) . "/extralibs.ld";
2456 map(s/^(.*)/"-I$1"/, @{$perlinc || []});
2461 # MAP_STATIC doesn't look into subdirs yet. Once "all" is made and we
2462 # regenerate the Makefiles, MAP_STATIC and the dependencies for
2463 # extralibs.all are computed correctly
2465 MAP_LINKCMD = $linkcmd
2466 MAP_PERLINC = @{$perlinc || []}
2468 join(" \\\n\t", reverse sort keys %static), "
2470 MAP_PRELIBS = $Config{perllibs} $Config{cryptlib}
2473 if (defined $libperl) {
2474 ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
2476 unless ($libperl && -f $lperl) { # Ilya's code...
2477 my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
2478 $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};
2479 $libperl ||= "libperl$self->{LIB_EXT}";
2480 $libperl = "$dir/$libperl";
2481 $lperl ||= "libperl$self->{LIB_EXT}";
2482 $lperl = "$dir/$lperl";
2484 if (! -f $libperl and ! -f $lperl) {
2485 # We did not find a static libperl. Maybe there is a shared one?
2487 $lperl = $libperl = "$dir/$Config{libperl}";
2488 # SUNOS ld does not take the full path to a shared library
2489 $libperl = '' if $Is_SunOS4;
2493 print STDOUT "Warning: $libperl not found
2494 If you're going to build a static perl binary, make sure perl is installed
2495 otherwise ignore this warning\n"
2496 unless (-f $lperl || defined($self->{PERL_SRC}));
2499 # SUNOS ld does not take the full path to a shared library
2500 my $llibperl = $libperl ? '$(MAP_LIBPERL)' : '-lperl';
2503 MAP_LIBPERL = $libperl
2504 LLIBPERL = $llibperl
2508 $(INST_ARCHAUTODIR)/extralibs.all : $(INST_ARCHAUTODIR)$(DFSEP).exists '.join(" \\\n\t", @$extra).'
2509 $(NOECHO) $(RM_F) $@
2510 $(NOECHO) $(TOUCH) $@
2514 foreach $catfile (@$extra){
2515 push @m, "\tcat $catfile >> \$\@\n";
2519 \$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
2520 \$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) \$(LLIBPERL) `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
2521 \$(NOECHO) \$(ECHO) 'To install the new \"\$(MAP_TARGET)\" binary, call'
2522 \$(NOECHO) \$(ECHO) ' \$(MAKE) \$(USEMAKEFILE) $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
2523 \$(NOECHO) \$(ECHO) 'To remove the intermediate files say'
2524 \$(NOECHO) \$(ECHO) ' \$(MAKE) \$(USEMAKEFILE) $makefilename map_clean'
2526 $tmp/perlmain\$(OBJ_EXT): $tmp/perlmain.c
2528 push @m, "\t".$self->cd($tmp, qq[$cccmd "-I\$(PERL_INC)" perlmain.c])."\n";
2531 $tmp/perlmain.c: $makefilename}, q{
2532 $(NOECHO) $(ECHO) Writing $@
2533 $(NOECHO) $(PERL) $(MAP_PERLINC) "-MExtUtils::Miniperl" \\
2534 -e "writemain(grep s#.*/auto/##s, split(q| |, q|$(MAP_STATIC)|))" > $@t && $(MV) $@t $@
2537 push @m, "\t", q{$(NOECHO) $(PERL) $(INSTALLSCRIPT)/fixpmain
2538 } if (defined (&Dos::UseLFN) && Dos::UseLFN()==0);
2543 $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
2544 -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
2545 -$(NOECHO) $(DOC_INSTALL) \
2546 "Perl binary" "$(MAP_TARGET)" \
2547 MAP_STATIC "$(MAP_STATIC)" \
2548 MAP_EXTRA "`cat $(INST_ARCHAUTODIR)/extralibs.all`" \
2549 MAP_LIBPERL "$(MAP_LIBPERL)" \
2550 >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
2555 inst_perl : pure_inst_perl doc_inst_perl
2557 pure_inst_perl : $(MAP_TARGET)
2558 }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(DESTINSTALLBIN)','$(MAP_TARGET)').q{
2563 }.$self->{RM_F}.qq{ $tmp/perlmain\$(OBJ_EXT) $tmp/perlmain.c \$(MAP_TARGET) $makefilename \$(INST_ARCHAUTODIR)/extralibs.all
2571 Defines how to rewrite the Makefile.
2578 # We do not know what target was originally specified so we
2579 # must force a manual rerun to be sure. But as it should only
2580 # happen very rarely it is not a significant problem.
2582 $(OBJECT) : $(FIRST_MAKEFILE)
2584 ' if $self->{OBJECT};
2586 my $newer_than_target = $Is_VMS ? '$(MMS$SOURCE_LIST)' : '$?';
2587 my $mpl_args = join " ", map qq["$_"], @ARGV;
2589 $m .= sprintf <<'MAKE_FRAG', $newer_than_target, $mpl_args;
2590 # We take a very conservative approach here, but it's worth it.
2591 # We move Makefile to Makefile.old here to avoid gnu make looping.
2592 $(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
2593 $(NOECHO) $(ECHO) "Makefile out-of-date with respect to %s"
2594 $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
2595 -$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
2596 -$(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
2597 - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
2598 $(PERLRUN) Makefile.PL %s
2599 $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
2600 $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
2611 Returns true, if the argument is likely to be a command.
2616 my($self,$file) = @_;
2617 return $file if -x $file && ! -d $file;
2622 =item needs_linking (o)
2624 Does this module need linking? Looks into subdirectory objects (see
2625 also has_link_code())
2632 $caller = (caller(0))[3];
2633 confess("needs_linking called too early") if
2634 $caller =~ /^ExtUtils::MakeMaker::/;
2635 return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING};
2636 if ($self->has_link_code or $self->{MAKEAPERL}){
2637 $self->{NEEDS_LINKING} = 1;
2640 foreach $child (keys %{$self->{CHILDREN}}) {
2641 if ($self->{CHILDREN}->{$child}->needs_linking) {
2642 $self->{NEEDS_LINKING} = 1;
2646 return $self->{NEEDS_LINKING} = 0;
2650 =item parse_abstract
2652 parse a file and return what you think is the ABSTRACT
2656 sub parse_abstract {
2657 my($self,$parsefile) = @_;
2661 open(FH,$parsefile) or die "Could not open '$parsefile': $!";
2663 my $package = $self->{DISTNAME};
2664 $package =~ s/-/::/g;
2666 $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
2669 next unless /^($package\s-\s)(.*)/;
2679 my $version = MM->parse_version($file);
2681 Parse a $file and return what $VERSION is set to by the first assignment.
2682 It will return the string "undef" if it can't figure out what $VERSION
2683 is. $VERSION should be for all to see, so C<our $VERSION> or plain $VERSION
2684 are okay, but C<my $VERSION> is not.
2686 parse_version() will try to C<use version> before checking for C<$VERSION> so the following will work.
2688 $VERSION = qv(1.2.3);
2693 my($self,$parsefile) = @_;
2698 open(FH,$parsefile) or die "Could not open '$parsefile': $!";
2701 $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
2702 next if $inpod || /^\s*#/;
2704 next unless /(?<!\\)([\$*])(([\w\:\']*)\bVERSION)\b.*\=/;
2706 package ExtUtils::MakeMaker::_version;
2709 # Ensure any version() routine which might have leaked
2710 # into this package has been deleted. Interferes with
2724 $result = eval($eval);
2725 warn "Could not eval '$eval' in $parsefile: $@" if $@;
2730 $result = "undef" unless defined $result;
2737 Defines the string that is passed to recursive make calls in
2747 my($sep) = $Is_VMS ? ',' : '';
2750 foreach $key (qw(LIB LIBPERL_A LINKTYPE OPTIMIZE
2751 PREFIX INSTALL_BASE)
2754 next unless defined $self->{$key};
2755 push @pasthru, "$key=\"\$($key)\"";
2758 foreach $key (qw(DEFINE INC)) {
2759 next unless defined $self->{$key};
2760 push @pasthru, "PASTHRU_$key=\"\$(PASTHRU_$key)\"";
2763 push @m, "\nPASTHRU = ", join ($sep, @pasthru), "\n";
2769 Takes one argument, a file name, and returns the file name, if the
2770 argument is likely to be a perl script. On MM_Unix this is true for
2771 any ordinary, readable file.
2776 my($self,$file) = @_;
2777 return $file if -r $file && -f _;
2781 =item perldepend (o)
2783 Defines the dependency from all *.h files that come with the perl
2792 my $make_config = $self->cd('$(PERL_SRC)', '$(MAKE) lib/Config.pm');
2794 push @m, sprintf <<'MAKE_FRAG', $make_config if $self->{PERL_SRC};
2795 # Check for unpropogated config.sh changes. Should never happen.
2796 # We do NOT just update config.h because that is not sufficient.
2797 # An out of date config.h is not fatal but complains loudly!
2798 $(PERL_INC)/config.h: $(PERL_SRC)/config.sh
2799 -$(NOECHO) $(ECHO) "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
2801 $(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
2802 $(NOECHO) $(ECHO) "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
2806 return join "", @m unless $self->needs_linking;
2810 $(PERL_INC)/EXTERN.h \
2811 $(PERL_INC)/INTERN.h \
2812 $(PERL_INC)/XSUB.h \
2814 $(PERL_INC)/cc_runtime.h \
2815 $(PERL_INC)/config.h \
2818 $(PERL_INC)/dosish.h \
2819 $(PERL_INC)/embed.h \
2820 $(PERL_INC)/embedvar.h \
2821 $(PERL_INC)/fakethr.h \
2822 $(PERL_INC)/form.h \
2824 $(PERL_INC)/handy.h \
2826 $(PERL_INC)/intrpvar.h \
2827 $(PERL_INC)/iperlsys.h \
2828 $(PERL_INC)/keywords.h \
2830 $(PERL_INC)/nostdio.h \
2832 $(PERL_INC)/opcode.h \
2833 $(PERL_INC)/patchlevel.h \
2834 $(PERL_INC)/perl.h \
2835 $(PERL_INC)/perlio.h \
2836 $(PERL_INC)/perlsdio.h \
2837 $(PERL_INC)/perlsfio.h \
2838 $(PERL_INC)/perlvars.h \
2839 $(PERL_INC)/perly.h \
2841 $(PERL_INC)/pp_proto.h \
2842 $(PERL_INC)/proto.h \
2843 $(PERL_INC)/regcomp.h \
2844 $(PERL_INC)/regexp.h \
2845 $(PERL_INC)/regnodes.h \
2846 $(PERL_INC)/scope.h \
2848 $(PERL_INC)/thread.h \
2849 $(PERL_INC)/unixish.h \
2852 $(OBJECT) : $(PERL_HDRS)
2853 } if $self->{OBJECT};
2855 push @m, join(" ", values %{$self->{XS}})." : \$(XSUBPPDEPS)\n" if %{$self->{XS}};
2863 Returns the attribute C<PERM_RW> or the string C<644>.
2864 Used as the string that is passed
2865 to the C<chmod> command to set the permissions for read/writeable files.
2866 MakeMaker chooses C<644> because it has turned out in the past that
2867 relying on the umask provokes hard-to-track bug reports.
2868 When the return value is used by the perl function C<chmod>, it is
2869 interpreted as an octal value.
2874 return shift->{PERM_RW};
2879 Returns the attribute C<PERM_RWX> or the string C<755>,
2880 i.e. the string that is passed
2881 to the C<chmod> command to set the permissions for executable files.
2887 return shift->{PERM_RWX};
2892 Defines target that copies all files in the hash PM to their
2893 destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
2899 my($autodir) = $self->catdir('$(INST_LIB)','auto');
2901 pm_to_blib : $(TO_INST_PM)
2904 my $pm_to_blib = $self->oneliner(<<CODE, ['-MExtUtils::Install']);
2905 pm_to_blib({\@ARGV}, '$autodir', '\$(PM_FILTER)')
2908 my @cmds = $self->split_command($pm_to_blib, %{$self->{PM}});
2910 $r .= join '', map { "\t\$(NOECHO) $_\n" } @cmds;
2911 $r .= qq{\t\$(NOECHO) \$(TOUCH) pm_to_blib\n};
2916 =item post_constants (o)
2918 Returns an empty string per default. Dedicated to overrides from
2919 within Makefile.PL after all constants have been defined.
2927 =item post_initialize (o)
2929 Returns an empty string per default. Used in Makefile.PLs to add some
2930 chunk of text to the Makefile after the object is initialized.
2934 sub post_initialize {
2940 Returns an empty string. Can be used in Makefile.PLs to write some
2941 text to the Makefile at the end.
2951 Defines target that creates a PPD (Perl Package Description) file
2952 for a binary distribution.
2959 my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0)x4)[0..3];
2961 my $abstract = $self->{ABSTRACT} || '';
2962 $abstract =~ s/\n/\\n/sg;
2963 $abstract =~ s/</</g;
2964 $abstract =~ s/>/>/g;
2966 my $author = $self->{AUTHOR} || '';
2967 $author =~ s/</</g;
2968 $author =~ s/>/>/g;
2970 my $ppd_xml = sprintf <<'PPD_HTML', $pack_ver, $abstract, $author;
2971 <SOFTPKG NAME="$(DISTNAME)" VERSION="%s">
2972 <TITLE>$(DISTNAME)</TITLE>
2973 <ABSTRACT>%s</ABSTRACT>
2977 $ppd_xml .= " <IMPLEMENTATION>\n";
2978 foreach my $prereq (sort keys %{$self->{PREREQ_PM}}) {
2979 my $pre_req = $prereq;
2980 $pre_req =~ s/::/-/g;
2981 my ($dep_ver) = join ",", (split (/\./, $self->{PREREQ_PM}{$prereq}),
2983 $ppd_xml .= sprintf <<'PPD_OUT', $pre_req, $dep_ver;
2984 <DEPENDENCY NAME="%s" VERSION="%s" />
2989 my $archname = $Config{archname};
2991 # archname did not change from 5.6 to 5.8, but those versions may
2992 # not be not binary compatible so now we append the part of the
2993 # version that changes when binary compatibility may change
2994 $archname .= "-". substr($Config{version},0,3);
2996 $ppd_xml .= sprintf <<'PPD_OUT', $archname;
2997 <OS NAME="$(OSNAME)" />
2998 <ARCHITECTURE NAME="%s" />
3001 if ($self->{PPM_INSTALL_SCRIPT}) {
3002 if ($self->{PPM_INSTALL_EXEC}) {
3003 $ppd_xml .= sprintf qq{ <INSTALL EXEC="%s">%s</INSTALL>\n},
3004 $self->{PPM_INSTALL_EXEC}, $self->{PPM_INSTALL_SCRIPT};
3007 $ppd_xml .= sprintf qq{ <INSTALL>%s</INSTALL>\n},
3008 $self->{PPM_INSTALL_SCRIPT};
3012 my ($bin_location) = $self->{BINARY_LOCATION} || '';
3013 $bin_location =~ s/\\/\\\\/g;
3015 $ppd_xml .= sprintf <<'PPD_XML', $bin_location;
3016 <CODEBASE HREF="%s" />
3021 my @ppd_cmds = $self->echo($ppd_xml, '$(DISTNAME).ppd');
3023 return sprintf <<'PPD_OUT', join "\n\t", @ppd_cmds;
3024 # Creates a PPD (Perl Package Description) for a binary distribution.
3033 $MM->prefixify($var, $prefix, $new_prefix, $default);
3035 Using either $MM->{uc $var} || $Config{lc $var}, it will attempt to
3036 replace it's $prefix with a $new_prefix.
3038 Should the $prefix fail to match I<AND> a PREFIX was given as an
3039 argument to WriteMakefile() it will set it to the $new_prefix +
3040 $default. This is for systems whose file layouts don't neatly fit into
3041 our ideas of prefixes.
3043 This is for heuristics which attempt to create directory structures
3044 that mirror those of the installed perl.
3048 $MM->prefixify('installman1dir', '/usr', '/home/foo', 'man/man1');
3050 this will attempt to remove '/usr' from the front of the
3051 $MM->{INSTALLMAN1DIR} path (initializing it to $Config{installman1dir}
3052 if necessary) and replace it with '/home/foo'. If this fails it will
3053 simply use '/home/foo/man/man1'.
3058 my($self,$var,$sprefix,$rprefix,$default) = @_;
3060 my $path = $self->{uc $var} ||
3061 $Config_Override{lc $var} || $Config{lc $var} || '';
3063 $rprefix .= '/' if $sprefix =~ m|/$|;
3065 print STDERR " prefixify $var => $path\n" if $Verbose >= 2;
3066 print STDERR " from $sprefix to $rprefix\n" if $Verbose >= 2;
3068 if( $self->{ARGS}{PREFIX} && $self->file_name_is_absolute($path) &&
3069 $path !~ s{^\Q$sprefix\E\b}{$rprefix}s )
3072 print STDERR " cannot prefix, using default.\n" if $Verbose >= 2;
3073 print STDERR " no default!\n" if !$default && $Verbose >= 2;
3075 $path = $self->catdir($rprefix, $default) if $default;
3078 print " now $path\n" if $Verbose >= 2;
3079 return $self->{uc $var} = $path;
3085 Defines targets to run *.PL files.
3091 my $pl_files = $self->{PL_FILES};
3093 return "" unless $pl_files;
3096 foreach my $plfile (sort keys %$pl_files) {
3097 my $list = ref($pl_files->{$plfile})
3098 ? $pl_files->{$plfile}
3099 : [$pl_files->{$plfile}];
3101 foreach my $target (@$list) {
3103 $plfile = vmsify($self->eliminate_macros($plfile));
3104 $target = vmsify($self->eliminate_macros($target));
3107 # Normally a .PL file runs AFTER pm_to_blib so it can have
3108 # blib in its @INC and load the just built modules. BUT if
3109 # the generated module is something in $(TO_INST_PM) which
3110 # pm_to_blib depends on then it can't depend on pm_to_blib
3111 # else we have a dependency loop.
3114 if( defined $self->{PM}{$target} ) {
3116 $perlrun = 'PERLRUN';
3119 $pm_dep = 'pm_to_blib';
3120 $perlrun = 'PERLRUNINST';
3128 $target :: $plfile $pm_dep
3129 \$($perlrun) $plfile $target
3140 Backslashes parentheses C<()> in command line arguments.
3141 Doesn't handle recursive Makefile C<$(...)> constructs,
3142 but handles simple ones.
3148 $arg =~ s{\$\((.+?)\)}{\$\\\\($1\\\\)}g; # protect $(...)
3149 $arg =~ s{(?<!\\)([()])}{\\$1}g; # quote unprotected
3150 $arg =~ s{\$\\\\\((.+?)\\\\\)}{\$($1)}g; # unprotect $(...)
3154 =item replace_manpage_separator
3156 my $man_name = $MM->replace_manpage_separator($file_path);
3158 Takes the name of a package, which may be a nested package, in the
3159 form 'Foo/Bar.pm' and replaces the slash with C<::> or something else
3160 safe for a man page file name. Returns the replacement.
3164 sub replace_manpage_separator {
3165 my($self,$man) = @_;
3177 my($self, $dir, @cmds) = @_;
3179 # No leading tab and no trailing newline makes for easier embedding
3180 my $make_frag = join "\n\t", map { "cd $dir && $_" } @cmds;
3190 my($self, $cmd, $switches) = @_;
3191 $switches = [] unless defined $switches;
3193 # Strip leading and trailing newlines
3197 my @cmds = split /\n/, $cmd;
3198 $cmd = join " \n\t -e ", map $self->quote_literal($_), @cmds;
3199 $cmd = $self->escape_newlines($cmd);
3201 $switches = join ' ', @$switches;
3203 return qq{\$(ABSPERLRUN) $switches -e $cmd --};
3212 my($self, $text) = @_;
3214 # I think all we have to quote is single quotes and I think
3215 # this is a safe way to do it.
3216 $text =~ s{'}{'\\''}g;
3222 =item escape_newlines
3226 sub escape_newlines {
3227 my($self, $text) = @_;
3229 $text =~ s{\n}{\\\n}g;
3237 Using POSIX::ARG_MAX. Otherwise falling back to 4096.
3244 if (!defined $self->{_MAX_EXEC_LEN}) {
3245 if (my $arg_max = eval { require POSIX; &POSIX::ARG_MAX }) {
3246 $self->{_MAX_EXEC_LEN} = $arg_max;
3248 else { # POSIX minimum exec size
3249 $self->{_MAX_EXEC_LEN} = 4096;
3253 return $self->{_MAX_EXEC_LEN};
3259 Defines the static target.
3264 # --- Static Loading Sections ---
3268 ## $(INST_PM) has been moved to the all: target.
3269 ## It remains here for awhile to allow for old usage: "make static"
3270 static :: $(FIRST_MAKEFILE) $(INST_STATIC)
3275 =item static_lib (o)
3277 Defines how to produce the *.a (or equivalent) files.
3283 return '' unless $self->has_link_code;
3288 $(INST_STATIC) : $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists
3292 # If this extension has its own library (eg SDBM_File)
3293 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
3294 push(@m, <<'MAKE_FRAG') if $self->{MYEXTLIB};
3295 $(CP) $(MYEXTLIB) $@
3299 if (exists $self->{FULL_AR} && -x $self->{FULL_AR}) {
3300 # Prefer the absolute pathed ar if available so that PATH
3301 # doesn't confuse us. Perl itself is built with the full_ar.
3306 push @m, sprintf <<'MAKE_FRAG', $ar;
3307 $(%s) $(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@
3308 $(CHMOD) $(PERM_RWX) $@
3309 $(NOECHO) $(ECHO) "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
3312 # Old mechanism - still available:
3313 push @m, <<'MAKE_FRAG' if $self->{PERL_SRC} && $self->{EXTRALIBS};
3314 $(NOECHO) $(ECHO) "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
3320 =item staticmake (o)
3327 my($self, %attribs) = @_;
3330 my(@searchdirs)=($self->{PERL_ARCHLIB}, $self->{SITEARCHEXP}, $self->{INST_ARCHLIB});
3332 # And as it's not yet built, we add the current extension
3333 # but only if it has some C code (or XS code, which implies C code)
3334 if (@{$self->{C}}) {
3335 @static = $self->catfile($self->{INST_ARCHLIB},
3338 "$self->{BASEEXT}$self->{LIB_EXT}"
3342 # Either we determine now, which libraries we will produce in the
3343 # subdirectories or we do it at runtime of the make.
3345 # We could ask all subdir objects, but I cannot imagine, why it
3346 # would be necessary.
3348 # Instead we determine all libraries for the new perl at
3350 my(@perlinc) = ($self->{INST_ARCHLIB}, $self->{INST_LIB}, $self->{PERL_ARCHLIB}, $self->{PERL_LIB});
3352 $self->makeaperl(MAKE => $self->{MAKEFILE},
3353 DIRS => \@searchdirs,
3356 TARGET => $self->{MAP_TARGET},
3358 LIBPERL => $self->{LIBPERL_A}
3364 Helper subroutine for subdirs
3369 my($self, $subdir) = @_;
3371 my $subdir_cmd = $self->cd($subdir,
3372 '$(MAKE) $(USEMAKEFILE) $(FIRST_MAKEFILE) all $(PASTHRU)'
3374 return sprintf <<'EOT', $subdir_cmd;
3384 Defines targets to process subdirectories.
3389 # --- Sub-directory Sections ---
3392 # This method provides a mechanism to automatically deal with
3393 # subdirectories containing further Makefile.PL scripts.
3394 # It calls the subdir_x() method for each subdirectory.
3395 foreach $dir (@{$self->{DIR}}){
3396 push(@m, $self->subdir_x($dir));
3397 #### print "Including $dir subdirectory\n";
3401 # The default clean, realclean and test targets in this Makefile
3402 # have automatically been given entries for each subdir.
3406 push(@m, "\n# none")
3413 Defines the test targets.
3418 # --- Test and Installation Sections ---
3420 my($self, %attribs) = @_;
3421 my $tests = $attribs{TESTS} || '';
3422 if (!$tests && -d 't') {
3423 $tests = $self->find_tests;
3425 # note: 'test.pl' name is also hardcoded in init_dirscan()
3429 TEST_TYPE=test_\$(LINKTYPE)
3434 testdb :: testdb_\$(LINKTYPE)
3436 test :: \$(TEST_TYPE) subdirs-test
3443 foreach my $dir (@{ $self->{DIR} }) {
3444 my $test = $self->cd($dir, '$(MAKE) test $(PASTHRU)');
3453 push(@m, "\t\$(NOECHO) \$(ECHO) 'No tests defined for \$(NAME) extension.'\n")
3454 unless $tests or -f "test.pl" or @{$self->{DIR}};
3457 push(@m, "test_dynamic :: pure_all\n");
3458 push(@m, $self->test_via_harness('$(FULLPERLRUN)', '$(TEST_FILES)'))
3460 push(@m, $self->test_via_script('$(FULLPERLRUN)', '$(TEST_FILE)'))
3464 push(@m, "testdb_dynamic :: pure_all\n");
3465 push(@m, $self->test_via_script('$(FULLPERLRUN) $(TESTDB_SW)',
3469 # Occasionally we may face this degenerate target:
3470 push @m, "test_ : test_dynamic\n\n";
3472 if ($self->needs_linking()) {
3473 push(@m, "test_static :: pure_all \$(MAP_TARGET)\n");
3474 push(@m, $self->test_via_harness('./$(MAP_TARGET)', '$(TEST_FILES)')) if $tests;
3475 push(@m, $self->test_via_script('./$(MAP_TARGET)', '$(TEST_FILE)')) if -f "test.pl";
3477 push(@m, "testdb_static :: pure_all \$(MAP_TARGET)\n");
3478 push(@m, $self->test_via_script('./$(MAP_TARGET) $(TESTDB_SW)', '$(TEST_FILE)'));
3481 push @m, "test_static :: test_dynamic\n";
3482 push @m, "testdb_static :: testdb_dynamic\n";
3487 =item test_via_harness (override)
3489 For some reason which I forget, Unix machines like to have
3490 PERL_DL_NONLAZY set for tests.
3494 sub test_via_harness {
3495 my($self, $perl, $tests) = @_;
3496 return $self->SUPER::test_via_harness("PERL_DL_NONLAZY=1 $perl", $tests);
3499 =item test_via_script (override)
3501 Again, the PERL_DL_NONLAZY thing.
3505 sub test_via_script {
3506 my($self, $perl, $script) = @_;
3507 return $self->SUPER::test_via_script("PERL_DL_NONLAZY=1 $perl", $script);
3511 =item tools_other (o)
3513 my $make_frag = $MM->tools_other;
3515 Returns a make fragment containing definitions for the macros init_others()
3524 # We set PM_FILTER as late as possible so it can see all the earlier
3525 # on macro-order sensitive makes such as nmake.
3526 for my $tool (qw{ SHELL CHMOD CP MV NOOP NOECHO RM_F RM_RF TEST_F TOUCH
3527 UMASK_NULL DEV_NULL MKPATH EQUALIZE_TIMESTAMP
3530 MOD_INSTALL DOC_INSTALL UNINSTALL
3531 WARN_IF_OLD_PACKLIST
3538 next unless defined $self->{$tool};
3539 push @m, "$tool = $self->{$tool}\n";
3545 =item tool_xsubpp (o)
3547 Determines typemaps, xsubpp version, prototype behaviour.
3553 return "" unless $self->needs_linking;
3556 my @xsubpp_dirs = @INC;
3558 # Make sure we pick up the new xsubpp if we're building perl.
3559 unshift @xsubpp_dirs, $self->{PERL_LIB} if $self->{PERL_CORE};
3561 foreach my $dir (@xsubpp_dirs) {
3562 $xsdir = $self->catdir($dir, 'ExtUtils');
3563 if( -r $self->catfile($xsdir, "xsubpp") ) {
3568 my $tmdir = File::Spec->catdir($self->{PERL_LIB},"ExtUtils");
3569 my(@tmdeps) = $self->catfile($tmdir,'typemap');
3570 if( $self->{TYPEMAPS} ){
3572 foreach $typemap (@{$self->{TYPEMAPS}}){
3573 if( ! -f $typemap ){
3574 warn "Typemap $typemap not found.\n";
3577 push(@tmdeps, $typemap);
3581 push(@tmdeps, "typemap") if -f "typemap";
3582 my(@tmargs) = map("-typemap $_", @tmdeps);
3583 if( exists $self->{XSOPT} ){
3584 unshift( @tmargs, $self->{XSOPT} );
3588 $Config{'ldflags'} &&
3589 $Config{'ldflags'} =~ m!/Debug!i &&
3590 (!exists($self->{XSOPT}) || $self->{XSOPT} !~ /linenumbers/)
3593 unshift(@tmargs,'-nolinenumbers');
3597 $self->{XSPROTOARG} = "" unless defined $self->{XSPROTOARG};
3601 XSUBPP = \$(XSUBPPDIR)\$(DFSEP)xsubpp
3602 XSUBPPRUN = \$(PERLRUN) \$(XSUBPP)
3603 XSPROTOARG = $self->{XSPROTOARG}
3604 XSUBPPDEPS = @tmdeps \$(XSUBPP)
3605 XSUBPPARGS = @tmargs
3613 Build man pages, too
3620 return <<'MAKE_EXT';
3621 all :: pure_all manifypods
3626 =item top_targets (o)
3628 Defines the targets all, subdirs, config, and O_FILES
3633 # --- Target Sections ---
3638 push @m, $self->all_target, "\n" unless $self->{SKIPHASH}{'all'};
3641 pure_all :: config pm_to_blib subdirs linkext
3644 subdirs :: $(MYEXTLIB)
3647 config :: $(FIRST_MAKEFILE) blibdirs
3652 $(O_FILES): $(H_FILES)
3653 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
3657 perldoc ExtUtils::MakeMaker
3665 Obsolete, deprecated method. Not used since Version 5.21.
3670 # --- perllocal.pod section ---
3671 my($self,$what,$name,@attribs)=@_;
3672 my $time = localtime;
3673 print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
3674 print join "\n\n=item *\n\n", map("C<$_>",@attribs);
3675 print "\n\n=back\n\n";
3680 Defines the suffix rules to compile XS files to C.
3686 return '' unless $self->needs_linking();
3689 $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
3695 Defines the suffix rules to compile XS files to C++.
3701 return '' unless $self->needs_linking();
3704 $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
3710 Defines suffix rules to go from XS to object files directly. This is
3711 only intended for broken make implementations.
3715 sub xs_o { # many makes are too dumb to use xs_c then c_o
3717 return '' unless $self->needs_linking();
3720 $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
3721 $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c
3732 L<ExtUtils::MakeMaker>