1 package ExtUtils::MakeMaker::TieAtt;
2 # this package will go away again, when we don't have modules around
3 # anymore that import %att It ties an empty %att and records in which
4 # object this %att was tied. FETCH and STORE return/store-to the
5 # appropriate value from %$self
7 # the warndirectuse method warns if somebody calls MM->something. It
8 # has nothing to do with the tie'd %att.
13 bless { SECRETHASH => $_[1]};
17 print "Warning (non-fatal): Importing of %att is deprecated [$_[1]]
18 use \$self instead\n" unless ++$Enough>$Enough_limit;
19 print "Further ExtUtils::MakeMaker::TieAtt warnings suppressed\n" if $Enough==$Enough_limit;
20 $_[0]->{SECRETHASH}->{$_[1]};
24 print "Warning (non-fatal): Importing of %att is deprecated [$_[1]][$_[2]]
25 use \$self instead\n" unless ++$Enough>$Enough_limit;
26 print "Further ExtUtils::MakeMaker::TieAtt warnings suppressed\n" if $Enough==$Enough_limit;
27 $_[0]->{SECRETHASH}->{$_[1]} = $_[2];
31 print "Warning (non-fatal): Importing of %att is deprecated [FIRSTKEY]
32 use \$self instead\n" unless ++$Enough>$Enough_limit;
33 print "Further ExtUtils::MakeMaker::TieAtt warnings suppressed\n" if $Enough==$Enough_limit;
34 each %{$_[0]->{SECRETHASH}};
38 each %{$_[0]->{SECRETHASH}};
46 return if $Enough>$Enough_limit;
47 print STDOUT "Warning (non-fatal): Direct use of class methods deprecated; use\n";
48 my($method) = $caller =~ /.*:(\w+)$/;
51 $self->MM::', $method, "();
53 print "Further ExtUtils::MakeMaker::TieAtt warnings suppressed\n"
54 if ++$Enough==$Enough_limit;
57 package ExtUtils::MakeMaker;
59 # Last edited $Date: 1995/11/24 21:01:25 $ by Andreas Koenig
60 # $Id: MakeMaker.pm,v 1.114 1995/11/24 21:01:25 k Exp $
62 $Version = $VERSION = "5.10";
64 $ExtUtils::MakeMaker::Version_OK = 4.13; # Makefiles older than $Version_OK will die
65 # (Will be checked from MakeMaker version 4.13 onwards)
71 require ExtUtils::Manifest;
72 require ExtUtils::Liblist;
75 eval {require DynaLoader;}; # Get mod2fname, if defined. Will fail
78 # print join "**\n**", "", %INC, "";
84 @EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt);
85 @EXPORT_OK = qw($Version $VERSION &Version_check
86 &help &neatvalue &mkbootstrap &mksymlists
87 %att ## Import of %att is deprecated, please use OO features!
90 $Is_VMS = $Config::Config{osname} eq 'VMS';
91 require ExtUtils::MM_VMS if $Is_VMS;
92 $Is_OS2 = $Config::Config{osname} =~ m|^os/?2$|i ;
93 $ENV{EMXSHELL} = 'sh' if $Is_OS2; # to run `commands`
95 $ExtUtils::MakeMaker::Verbose = 0 unless defined $ExtUtils::MakeMaker::Verbose;
97 #$SIG{__DIE__} = sub { print @_, Carp::longmess(); die; };
98 ####$SIG{__WARN__} = sub { print Carp::longmess(); warn @_; };
99 $SIG{__WARN__} = sub {
100 $_[0] =~ /^Use of uninitialized value/ && return;
101 $_[0] =~ /used only once/ && return;
102 $_[0] =~ /^Subroutine\s+[\w:]+\s+redefined/ && return;
106 # Setup dummy package:
107 # MY exists for overriding methods to be defined within
108 unshift(@MY::ISA, qw(MM));
110 # Dummy package MM inherits actual methods from OS-specific
111 # default packages. We use this intermediate package so
112 # MY::XYZ->func() can call MM->func() and get the proper
113 # default routine without having to know under what OS
116 @MM::ISA = qw[MM_Unix ExtUtils::MakeMaker];
117 unshift @MM::ISA, 'ExtUtils::MM_VMS' if $Is_VMS;
118 unshift @MM::ISA, 'ExtUtils::MM_OS2' if $Is_OS2;
121 @ExtUtils::MakeMaker::MM_Sections_spec = (
122 post_initialize => {},
125 const_loadlibs => {},
126 const_cccmd => {}, # the last but one addition here (CONST_CCCMD)
127 tool_autosplit => {},
132 post_constants => {},
137 top_targets => {}, # currently the last section that adds a key to $self (DIR_TARGET)
161 staticmake => {}, # Sadly this defines more macros
163 postamble => {}, # should always be last the user has hands on
164 selfdocument => {}, # well, he may override it, but he won't do it
166 # looses section ordering
167 %ExtUtils::MakeMaker::MM_Sections = @ExtUtils::MakeMaker::MM_Sections_spec;
169 @ExtUtils::MakeMaker::MM_Sections = grep(!ref, @ExtUtils::MakeMaker::MM_Sections_spec);
171 %ExtUtils::MakeMaker::Recognized_Att_Keys = %ExtUtils::MakeMaker::MM_Sections; # All sections are valid keys.
173 @ExtUtils::MakeMaker::Get_from_Config = qw(
191 foreach $item (split(/\n/,attrib_help())){
192 next unless $item =~ m/^=item\s+(\w+)\s*$/;
193 $ExtUtils::MakeMaker::Recognized_Att_Keys{$1} = $2;
194 print "Attribute '$1' => '$2'\n" if ($ExtUtils::MakeMaker::Verbose >= 2);
196 foreach $item (@ExtUtils::MakeMaker::Get_from_Config) {
197 next unless $Config::Config{$item};
198 $ExtUtils::MakeMaker::Recognized_Att_Keys{uc $item} = $Config::Config{$item};
199 print "Attribute '\U$item\E' => '$Config::Config{$item}'\n"
200 if ($ExtUtils::MakeMaker::Verbose >= 2);
203 %ExtUtils::MakeMaker::Prepend_dot_dot = qw(
204 INST_LIB 1 INST_ARCHLIB 1 INST_EXE 1 MAP_TARGET 1 INST_MAN1DIR 1 INST_MAN3DIR 1
205 PERL_SRC 1 PERL 1 FULLPERL 1
207 $PACKNAME = "PACK000";
212 The extension you are trying to build apparently is rather old and
213 most probably outdated. We detect that from the fact, that a
214 subroutine "writeMakefile" is called, and this subroutine is not
215 supported anymore since about October 1994.
217 Please contact the author or look into CPAN (details about CPAN can be
218 found in the FAQ and at http:/www.perl.com) for a more recent version
219 of the extension. If you're really desperate, you can try to change
220 the subroutine name from writeMakefile to WriteMakefile and rerun
221 'perl Makefile.PL', but you're most probably left alone, when you do
230 Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
232 MM->new(\%att)->flush;
236 my($class,$self) = @_;
239 print STDOUT "MakeMaker (v$ExtUtils::MakeMaker::VERSION)\n" if $ExtUtils::MakeMaker::Verbose;
240 if (-f "MANIFEST" && ! -f "Makefile"){
244 $self = {} unless (defined $self);
248 my(%initial_att) = %$self; # record initial attributes
250 if (defined $self->{CONFIGURE}) {
251 if (ref $self->{CONFIGURE} eq 'CODE') {
252 $self = { %$self, %{&{$self->{CONFIGURE}}}};
254 croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
258 # This is for old Makefiles written pre 5.00, will go away
259 if ( Carp::longmess("") =~ /runsubdirpl/s ){
260 $self->{Correct_relativ_directories}++;
262 $self->{Correct_relativ_directories}=0;
265 my $class = ++$PACKNAME;
268 print "Blessing Object into class [$class]\n" if $ExtUtils::MakeMaker::Verbose;
269 mv_all_methods("MY",$class);
271 ######## tie %::att, ExtUtils::MakeMaker::TieAtt, $self;
272 push @ExtUtils::MakeMaker::Parent, $self;
273 @{"$class\:\:ISA"} = 'MM';
276 if (defined $ExtUtils::MakeMaker::Parent[-2]){
277 $self->{PARENT} = $ExtUtils::MakeMaker::Parent[-2];
279 for $key (keys %ExtUtils::MakeMaker::Prepend_dot_dot) {
280 next unless defined $self->{PARENT}{$key};
281 $self->{$key} = $self->{PARENT}{$key};
282 $self->{$key} = $self->catdir("..",$self->{$key})
283 unless $self->{$key} =~ m!^/!;
285 $self->{PARENT}->{CHILDREN}->{$class} = $self if $self->{PARENT};
287 parse_args($self,@ARGV);
290 $self->{NAME} ||= $self->guess_name;
292 ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;
296 if (! $self->{PERL_SRC} &&
297 $INC{'Config.pm'} ne $self->catdir($Config::Config{archlibexp},'Config.pm')){
298 (my $pthinks = $INC{'Config.pm'}) =~ s!/Config\.pm$!!;
301 Your perl and your Config.pm seem to have different ideas about the architecture
303 Perl thinks: [$pthinks]
304 Config says: [$Config::Config{archname}]
305 This may or may not cause problems. Please check your installation of perl if you
306 have problems building this extension.
310 $self->init_dirscan();
311 $self->init_others();
313 push @{$self->{RESULT}}, <<END;
314 # This Makefile is for the $self->{NAME} extension to perl.
316 # It was generated automatically by MakeMaker version $ExtUtils::MakeMaker::VERSION from the contents
317 # of Makefile.PL. Don't edit this file, edit Makefile.PL instead.
319 # ANY CHANGES MADE HERE WILL BE LOST!
321 # MakeMaker Parameters:
324 foreach $key (sort keys %initial_att){
325 my($v) = neatvalue($initial_att{$key});
326 $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
328 push @{$self->{RESULT}}, "# $key => $v";
331 # turn the SKIP array into a SKIPHASH hash
333 for $skip (@{$self->{SKIP} || []}) {
334 $self->{SKIPHASH}{$skip} = 1;
337 # We run all the subdirectories now. They don't have much to query
338 # from the parent, but the parent has to query them: if they need linking!
340 unless ($self->{NORECURS}) {
341 foreach $dir (@{$self->{DIR}}){
345 open FH, "Makefile.PL";
352 tie %::att, ExtUtils::MakeMaker::TieAtt, $self;
354 foreach $section ( @ExtUtils::MakeMaker::MM_Sections ){
355 print "Processing Makefile '$section' section\n" if ($ExtUtils::MakeMaker::Verbose >= 2);
356 my($skipit) = $self->skipcheck($section);
358 push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";
359 } else { # MEMO: b 329 print "$self->{NAME}**$section**\n" and $section eq 'postamble'
360 my(%a) = %{$self->{$section} || {}};
361 push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
362 push @{$self->{RESULT}}, "# " . join ", ", %a if $ExtUtils::MakeMaker::Verbose && %a;
363 push @{$self->{RESULT}}, $self->nicetext($self->$section( %a ));
367 push @{$self->{RESULT}}, "\n# End.";
368 ######## untie %::att;
369 pop @ExtUtils::MakeMaker::Parent;
375 eval {require ExtUtils::Manifest};
377 print STDOUT "Warning: you have not installed the ExtUtils::Manifest
378 module -- skipping check of the MANIFEST file\n";
380 print STDOUT "Checking if your kit is complete...\n";
381 $ExtUtils::Manifest::Quiet=$ExtUtils::Manifest::Quiet=1; #avoid warning
382 my(@missed)=ExtUtils::Manifest::manicheck();
384 print STDOUT "Warning: the following files are missing in your kit:\n";
385 print "\t", join "\n\t", @missed;
387 print STDOUT "Please inform the author.\n";
389 print STDOUT "Looks good\n";
395 my($self, @args) = @_;
397 unless (m/(.*?)=(.*)/){
398 help(),exit 1 if m/^help$/;
399 ++$ExtUtils::MakeMaker::Verbose if m/^verb/;
402 my($name, $value) = ($1, $2);
403 if ($value =~ m/^~(\w+)?/){ # tilde with optional username
404 $value =~ s [^~(\w*)]
406 ((getpwnam($1))[7] || "~$1") :
410 # This may go away, in mid 1996
411 if ($self->{Correct_relativ_directories}){
412 $value = $self->catdir("..",$value)
413 if $ExtUtils::MakeMaker::Prepend_dot_dot{$name} && ! $value =~ m!^/!;
415 $self->{$name} = $value;
417 # This may go away, in mid 1996
418 delete $self->{Correct_relativ_directories};
420 # catch old-style 'potential_libs' and inform user how to 'upgrade'
421 if (defined $self->{potential_libs}){
422 my($msg)="'potential_libs' => '$self->{potential_libs}' should be";
423 if ($self->{potential_libs}){
424 print STDOUT "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n";
426 print STDOUT "$msg deleted.\n";
428 $self->{LIBS} = [$self->{potential_libs}];
429 delete $self->{potential_libs};
431 # catch old-style 'ARMAYBE' and inform user how to 'upgrade'
432 if (defined $self->{ARMAYBE}){
433 my($armaybe) = $self->{ARMAYBE};
434 print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",
435 "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";
436 my(%dl) = %{$self->{dynamic_lib} || {}};
437 $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe};
438 delete $self->{ARMAYBE};
440 if (defined $self->{LDTARGET}){
441 print STDOUT "LDTARGET should be changed to LDFROM\n";
442 $self->{LDFROM} = $self->{LDTARGET};
443 delete $self->{LDTARGET};
445 # Turn a DIR argument on the command line into an array
446 if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') {
447 # So they can choose from the command line, which extensions they want
448 # the grep enables them to have some colons too much in case they
449 # have to build a list with the shell
450 $self->{DIR} = [grep $_, split ":", $self->{DIR}];
453 foreach $mmkey (sort keys %$self){
454 print STDOUT " $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $ExtUtils::MakeMaker::Verbose;
455 print STDOUT "'$mmkey' is not a known MakeMaker parameter name.\n"
456 unless exists $ExtUtils::MakeMaker::Recognized_Att_Keys{$mmkey};
462 # We allow extension-specific hints files.
464 return unless -d "hints";
466 # First we look for the best hintsfile we have
468 my($hint)="$Config::Config{osname}_$Config::Config{osvers}";
473 # Also try without trailing minor version numbers.
475 last if -f "hints/$hint.pl"; # found
477 last unless $hint =~ s/_[^_]*$//; # nothing to cut off
479 return unless -f "hints/$hint.pl"; # really there
481 # execute the hintsfile:
483 open HINTS, "hints/$hint.pl";
484 @goodhints = <HINTS>;
486 print STDOUT "Processing hints file hints/$hint.pl\n";
487 eval join('',@goodhints);
488 print STDOUT $@ if $@;
496 # Here you see the *current* list of methods that are overridable
497 # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm
498 # still trying to reduce the list to some reasonable minimum --
499 # because I want to make it easier for the user. A.K.
501 foreach $method (@ExtUtils::MakeMaker::MM_Sections, qw[ dir_target
502 exescan fileparse fileparse_set_fstype installpm_x libscan makeaperl
503 mksymlists needs_linking runsubdirpl subdir_x test_via_harness
504 test_via_script writedoc ]) {
506 # We cannot say "next" here. Nick might call MY->makeaperl
507 # which isn't defined right now
509 # next unless defined &{"${from}::$method"};
511 *{"${to}::$method"} = \&{"${from}::$method"};
512 my $symtab = \%{"${from}::"};
514 # delete would do, if we were sure, nobody ever called
515 # MY->makeaperl directly
517 # delete $symtab->{$method};
519 # If we delete a method, then it will be undefined and cannot
520 # be called. But as long as we have Makefile.PLs that rely on
521 # %MY:: being intact, we have to fill the hole with an
524 eval "package MY; sub $method {local *$method; shift->MY::$method(\@_); }";
528 # We have to clean out %INC also, because the current directory is
529 # changed frequently and Graham Barr prefers to get his version
530 # out of a History.pl file which is "required" so woudn't get
531 # loaded again in another extension requiring a History.pl
534 foreach $inc (keys %INC) {
535 next if $ExtUtils::MakeMaker::NORMAL_INC{$inc};
536 #warn "***$inc*** deleted";
544 BEGIN { my $ISA_TTY = -t STDIN && -t STDOUT }
545 Carp::confess("prompt function called without an argument") unless defined $mess;
546 $def = "" unless defined $def;
547 my $dispdef = "[$def] ";
551 print "$mess $dispdef";
552 chop($ans = <STDIN>);
554 return $ans if defined $ans;
559 return $Attrib_Help if $Attrib_Help;
564 #### local $/ = ""; # bug in 5.001m
565 open POD, $INC{"ExtUtils/MakeMaker.pm"}
566 or die "Open $INC{'ExtUtils/MakeMaker.pm'}: $!";
567 while ($line = <POD>) {
568 $switch ||= $line =~ /^=item C\s*$/;
570 last if $line =~ /^=cut/;
574 $Attrib_Help = $help;
577 sub help {print &attrib_help, "\n";}
582 if ($section eq 'dynamic') {
583 print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
584 "in skipped section 'dynamic_bs'\n"
585 if $self->{SKIPHASH}{dynamic_bs} && $ExtUtils::MakeMaker::Verbose;
586 print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
587 "in skipped section 'dynamic_lib'\n"
588 if $self->{SKIPHASH}{dynamic_lib} && $ExtUtils::MakeMaker::Verbose;
590 if ($section eq 'dynamic_lib') {
591 print STDOUT "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on ",
592 "targets in skipped section 'dynamic_bs'\n"
593 if $self->{SKIPHASH}{dynamic_bs} && $ExtUtils::MakeMaker::Verbose;
595 if ($section eq 'static') {
596 print STDOUT "Warning (non-fatal): Target 'static' depends on targets ",
597 "in skipped section 'static_lib'\n"
598 if $self->{SKIPHASH}{static_lib} && $ExtUtils::MakeMaker::Verbose;
600 return 'skipped' if $self->{SKIPHASH}{$section};
608 print STDOUT "Writing $self->{MAKEFILE} for $self->{NAME}\n";
610 unlink($self->{MAKEFILE}, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : '');
611 open MAKE, ">MakeMaker.tmp" or die "Unable to open MakeMaker.tmp: $!";
613 for $chunk (@{$self->{RESULT}}) {
614 print MAKE "$chunk\n";
618 my($finalname) = $Is_VMS ? "Descrip.MMS" : $self->{MAKEFILE};
619 rename("MakeMaker.tmp", $finalname);
620 chmod 0644, $finalname;
621 system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
625 my($checkversion) = @_;
626 die "Your Makefile was built with ExtUtils::MakeMaker v $checkversion.
627 Current Version is $ExtUtils::MakeMaker::VERSION. There have been considerable
628 changes in the meantime.
629 Please rerun 'perl Makefile.PL' to regenerate the Makefile.\n"
630 if $checkversion < $ExtUtils::MakeMaker::Version_OK;
631 printf STDOUT "%s %s %s %s.\n", "Makefile built with ExtUtils::MakeMaker v",
632 $checkversion, "Current Version is", $ExtUtils::MakeMaker::VERSION
633 unless $checkversion == $ExtUtils::MakeMaker::VERSION;
640 tie %att, ExtUtils::MakeMaker::TieAtt, $self;
641 $self->parse_args(@ARGV);
642 $self->mksymlists(@_);
645 # The following mkbootstrap() is only for installations that are calling
646 # the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker
647 # writes Makefiles, that use ExtUtils::Mkbootstrap directly.
650 !!! Your Makefile has been built such a long time ago, !!!
651 !!! that is unlikely to work with current MakeMaker. !!!
652 !!! Please rebuild your Makefile !!!
658 return "undef" unless defined $v;
660 return "'$v'" unless $t;
662 my(@m, $elem, @neat);
664 foreach $elem (@$v) {
665 push @neat, "'$elem'";
667 push @m, join ", ", @neat;
671 return "$v" unless $t eq 'HASH';
673 push(@m,"$key=>".neatvalue($val)) while (($key,$val) = each %$v);
674 return "{ ".join(', ',@m)." }";
680 if ($ExtUtils::MakeMaker::Verbose){
681 push @m, "\n# Full list of MakeMaker attribute values:";
682 foreach $key (sort keys %$self){
683 next if $key eq 'RESULT' || $key =~ /^[A-Z][a-z]/;
684 my($v) = neatvalue($self->{$key});
685 $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
687 push @m, "# $key => $v";
695 ## ## ## ## # # # # # # #
696 # # # # # # # # # # ## # # # #
697 # # # # # # # # # # # # ##
698 # # # # # # # # # # ##
699 # # # # # # # ## # # #
700 # # # # ####### ##### # # # # #
709 Exporter::import('ExtUtils::MakeMaker',
712 # These attributes cannot be overridden externally
713 @Other_Att_Keys{qw(EXTRALIBS BSLOADLIBS LDLOADLIBS)} = (1) x 3;
715 if ($Is_VMS = $Config::Config{osname} eq 'VMS') {
716 require VMS::Filespec;
717 import VMS::Filespec 'vmsify';
720 $Is_OS2 = $ExtUtils::MakeMaker::Is_OS2;
722 sub guess_name { # Charles! That's something for MM_VMS
724 my $name = fastcwd();
726 $name =~ s:.*?([^.\]]+)\]:$1: unless ($name =~ s:.*[.\[]ext\.(.*)\]:$1:i);
727 $name =~ s#[.\]]#::#g;
729 $name =~ s:.*/:: unless ($name =~ s:^.*/ext/::);
731 $name =~ s#\-\d+\.\d+$##; # this is new with MM 5.00
739 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
740 $self = $ExtUtils::MakeMaker::Parent[-1];
743 # --- Initialize Module Name and Paths
745 # NAME = The perl module name for this extension (eg DBD::Oracle).
746 # FULLEXT = Pathname for extension directory (eg DBD/Oracle).
747 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
748 # ROOTEXT = Directory part of FULLEXT with leading /.
750 $self->{NAME}) =~ s!::!/!g ; #eg. BSD/Foo/Socket
752 # Copied from DynaLoader:
754 my(@modparts) = split(/::/,$self->{NAME});
755 my($modfname) = $modparts[-1];
757 # Some systems have restrictions on files names for DLL's etc.
758 # mod2fname returns appropriate file base name (typically truncated)
759 # It may also edit @modparts if required.
760 if (defined &DynaLoader::mod2fname) {
761 $modfname = &DynaLoader::mod2fname(\@modparts);
762 } elsif ($Is_OS2) { # Need manual correction if run with miniperl:-(
763 $modfname = substr($modfname, 0, 7) . '_';
768 $self->{NAME}) =~ s!.*::!! ; #eg. Socket
770 if (defined &DynaLoader::mod2fname or $Is_OS2) {
771 # As of 5.001m, dl_os2 appends '_'
772 $self->{DLBASE} = $modfname; #eg. Socket_
774 $self->{DLBASE} = '$(BASEEXT)';
778 $self->{FULLEXT}) =~ s#/?\Q$self->{BASEEXT}\E$## ; #eg. /BSD/Foo
780 $self->{ROOTEXT} = ($Is_VMS ? '' : '/') . $self->{ROOTEXT} if $self->{ROOTEXT};
783 # --- Initialize PERL_LIB, INST_LIB, PERL_SRC
785 # *Real* information: where did we get these two from? ...
786 my $inc_config_dir = dirname($INC{'Config.pm'});
787 my $inc_carp_dir = dirname($INC{'Carp.pm'});
789 # Typically PERL_* and INST_* will be identical but that need
790 # not be the case (e.g., installing into project libraries etc).
792 # Perl Macro: With source No source
793 # PERL_SRC ../.. (undefined)
794 # PERL_LIB PERL_SRC/lib /usr/local/lib/perl5
795 # PERL_ARCHLIB PERL_SRC/lib /usr/local/lib/perl5/sun4-sunos
797 # INST Macro: For standard for any other
799 # INST_LIB PERL_SRC/lib ./blib
800 # INST_ARCHLIB PERL_SRC/lib ./blib/<archname>
802 unless ($self->{PERL_SRC}){
804 foreach $dir (qw(.. ../.. ../../..)){
805 if ( -f "$dir/config.sh"
807 && -f "$dir/lib/Exporter.pm") {
808 $self->{PERL_SRC}=$dir ;
813 if ($self->{PERL_SRC}){
814 $self->{PERL_LIB} ||= $self->catdir("$self->{PERL_SRC}","lib");
815 $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
816 $self->{PERL_INC} = $self->{PERL_SRC};
817 # catch an situation that has occurred a few times in the past:
818 warn <<EOM unless -s "$self->{PERL_SRC}/cflags";
819 You cannot build extensions below the perl source tree after executing
820 a 'make clean' in the perl source tree.
822 To rebuild extensions distributed with the perl source you should
823 simply Configure (to include those extensions) and then build perl as
824 normal. After installing perl the source tree can be deleted. It is not
825 needed for building extensions.
827 It is recommended that you unpack and build additional extensions away
828 from the perl source tree.
831 # we should also consider $ENV{PERL5LIB} here
832 $self->{PERL_LIB} = $Config::Config{privlibexp} unless $self->{PERL_LIB};
833 $self->{PERL_ARCHLIB} = $Config::Config{archlibexp} unless $self->{PERL_ARCHLIB};
834 $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
836 die <<EOM unless (-f ($perl_h = $self->catfile("$self->{PERL_INC}","perl.h")));
837 Error: Unable to locate installed Perl libraries or Perl source code.
839 It is recommended that you install perl in a standard location before
840 building extensions. You can say:
842 $^X Makefile.PL PERL_SRC=/path/to/perl/source/directory
844 if you have not yet installed perl but still want to build this
846 (You get this message, because MakeMaker could not find "$perl_h")
849 # print STDOUT "Using header files found in $self->{PERL_INC}\n"
850 # if $Verbose && $self->needs_linking();
854 # INST_LIB typically pre-set if building an extension after
855 # perl has been built and installed. Setting INST_LIB allows
856 # you to build directly into, say $Config::Config{privlibexp}.
857 unless ($self->{INST_LIB}){
860 ##### XXXXX We have to change this nonsense
862 if (defined $self->{PERL_SRC}) {
863 $self->{INST_LIB} = $self->{PERL_LIB};
865 $self->{INST_LIB} = $self->catdir(".","blib");
868 # Try to work out what INST_ARCHLIB should be if not set:
869 unless ($self->{INST_ARCHLIB}){
871 # our private build lib
872 $self->catdir(".","blib") =>
873 $self->catdir(".","blib",$Config::Config{archname}),
874 $self->{PERL_LIB} => $self->{PERL_ARCHLIB},
875 $Config::Config{privlibexp} => $Config::Config{archlibexp},
876 $inc_carp_dir => $inc_config_dir,
878 $self->{INST_ARCHLIB} = $archmap{$self->{INST_LIB}};
879 unless($self->{INST_ARCHLIB}){
880 # Oh dear, we'll have to default it and warn the user
881 my($archname) = $Config::Config{archname};
882 if (-d "$self->{INST_LIB}/$archname"){
883 $self->{INST_ARCHLIB} = $self->catdir("$self->{INST_LIB}","$archname");
884 print STDOUT "Defaulting INST_ARCHLIB to $self->{INST_ARCHLIB}\n";
886 $self->{INST_ARCHLIB} = $self->{INST_LIB};
890 $self->{INST_EXE} ||= $self->catdir('.','blib',$Config::Config{archname});
892 if ($self->{PREFIX}){
893 $self->{INSTALLPRIVLIB} = $self->catdir($self->{PREFIX},"lib","perl5");
894 $self->{INSTALLBIN} = $self->catdir($self->{PREFIX},"bin");
895 $self->{INSTALLMAN3DIR} = $self->catdir($self->{PREFIX},"perl5","man","man3")
896 unless defined $self->{INSTALLMAN3DIR};
899 if( $self->{INSTALLPRIVLIB} && ! $self->{INSTALLARCHLIB} ){
900 my($archname) = $Config::Config{archname};
901 if (-d $self->catdir($self->{INSTALLPRIVLIB},$archname)){
902 $self->{INSTALLARCHLIB} = $self->catdir($self->{INSTALLPRIVLIB},$archname);
903 print STDOUT "Defaulting INSTALLARCHLIB to $self->{INSTALLARCHLIB}\n";
905 $self->{INSTALLARCHLIB} = $self->{INSTALLPRIVLIB};
908 $self->{INSTALLPRIVLIB} ||= $Config::Config{installprivlib};
909 $self->{INSTALLARCHLIB} ||= $Config::Config{installarchlib};
910 $self->{INSTALLBIN} ||= $Config::Config{installbin};
912 $self->{INSTALLMAN1DIR} = $Config::Config{installman1dir}
913 unless defined $self->{INSTALLMAN1DIR};
914 unless (defined $self->{INST_MAN1DIR}){
915 if ($self->{INSTALLMAN1DIR} =~ /^(none|\s*)$/){
916 $self->{INST_MAN1DIR} = $self->{INSTALLMAN1DIR};
918 $self->{INST_MAN1DIR} = $self->catdir('.','blib','man','man1');
921 $self->{MAN1EXT} ||= $Config::Config{man1ext};
923 $self->{INSTALLMAN3DIR} = $Config::Config{installman3dir}
924 unless defined $self->{INSTALLMAN3DIR};
925 unless (defined $self->{INST_MAN3DIR}){
926 if ($self->{INSTALLMAN3DIR} =~ /^(none|\s*)$/){
927 $self->{INST_MAN3DIR} = $self->{INSTALLMAN3DIR};
929 $self->{INST_MAN3DIR} = $self->catdir('.','blib','man','man3');
932 $self->{MAN3EXT} ||= $Config::Config{man3ext};
934 print STDOUT "CONFIG must be an array ref\n"
935 if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY');
936 $self->{CONFIG} = [] unless (ref $self->{CONFIG});
937 push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config);
938 push(@{$self->{CONFIG}}, 'shellflags') if $Config::Config{shellflags};
940 foreach $m (@{$self->{CONFIG}}){
941 next if $once_only{$m};
942 print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
943 unless exists $Config::Config{$m};
944 $self->{uc $m} ||= $Config::Config{$m};
948 # These should never be needed
949 $self->{LD} ||= 'ld';
950 $self->{OBJ_EXT} ||= '.o';
951 $self->{LIB_EXT} ||= '.a';
953 $self->{MAP_TARGET} ||= "perl";
955 unless ($self->{LIBPERL_A}){
957 $self->{LIBPERL_A} = 'libperl.olb';
959 $self->{LIBPERL_A} = "libperl$self->{LIB_EXT}";
963 # make a few simple checks
964 warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory
965 (Exporter.pm not found)"
966 unless (-f $self->catfile("$self->{PERL_LIB}","Exporter.pm"));
968 ($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME};
969 $self->{VERSION} = "0.10" unless $self->{VERSION};
970 ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g;
973 # --- Initialize Perl Binary Locations
975 # Find Perl 5. The only contract here is that both 'PERL' and 'FULLPERL'
976 # will be working versions of perl 5. miniperl has priority over perl
977 # for PERL to ensure that $(PERL) is usable while building ./ext/*
978 my $path_sep = $Is_OS2 ? ";" : $Is_VMS ? "/" : ":";
979 my $path = $ENV{PATH};
980 $path =~ s:\\:/:g if $Is_OS2;
981 my @path = split $path_sep, $path;
982 my ($component,@defpath);
983 foreach $component ($self->{PERL_SRC}, @path, $Config::Config{binexp}) {
984 push @defpath, $component if defined $component;
987 $self->find_perl(5.0, [ $^X, 'miniperl','perl','perl5',"perl$]" ],
988 \@defpath, $ExtUtils::MakeMaker::Verbose ) unless ($self->{PERL});
989 # don't check, if perl is executable, maybe they
990 # have decided to supply switches with perl
992 # Define 'FULLPERL' to be a non-miniperl (used in test: target)
993 ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i
994 unless ($self->{FULLPERL});
997 sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
1000 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1001 $self = $ExtUtils::MakeMaker::Parent[-1];
1003 my($name, %dir, %xs, %c, %h, %ignore, %pl_files, %manifypods);
1004 local(%pm); #the sub in find() has to see this hash
1005 $ignore{'test.pl'} = 1;
1006 $ignore{'makefile.pl'} = 1 if $Is_VMS;
1007 foreach $name ($self->lsdir(".")){
1008 next if ($name =~ /^\./ or $ignore{$name});
1010 $dir{$name} = $name if (-f "$name/Makefile.PL");
1011 } elsif ($name =~ /\.xs$/){
1012 my($c); ($c = $name) =~ s/\.xs$/.c/;
1015 } elsif ($name =~ /\.c$/i){
1017 unless $name =~ m/perlmain\.c/; # See MAP_TARGET
1018 } elsif ($name =~ /\.h$/i){
1020 } elsif ($name =~ /\.(p[ml]|pod)$/){
1021 $pm{$name} = $self->catfile('$(INST_LIBDIR)',"$name");
1022 } elsif ($name =~ /\.PL$/ && $name ne "Makefile.PL") {
1023 ($pl_files{$name} = $name) =~ s/\.PL$// ;
1027 # Some larger extensions often wish to install a number of *.pm/pl
1028 # files into the library in various locations.
1030 # The attribute PMLIBDIRS holds an array reference which lists
1031 # subdirectories which we should search for library files to
1032 # install. PMLIBDIRS defaults to [ 'lib', $self->{BASEEXT} ]. We
1033 # recursively search through the named directories (skipping any
1034 # which don't exist or contain Makefile.PL files).
1036 # For each *.pm or *.pl file found $self->libscan() is called with
1037 # the default installation path in $_[1]. The return value of
1038 # libscan defines the actual installation location. The default
1039 # libscan function simply returns the path. The file is skipped
1040 # if libscan returns false.
1042 # The default installation location passed to libscan in $_[1] is:
1044 # ./*.pm => $(INST_LIBDIR)/*.pm
1045 # ./xyz/... => $(INST_LIBDIR)/xyz/...
1046 # ./lib/... => $(INST_LIB)/...
1048 # In this way the 'lib' directory is seen as the root of the actual
1049 # perl library whereas the others are relative to INST_LIBDIR
1050 # (which includes ROOTEXT). This is a subtle distinction but one
1051 # that's important for nested modules.
1053 $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}]
1054 unless $self->{PMLIBDIRS};
1056 #only existing directories that aren't in $dir are allowed
1058 # Avoid $_ wherever possible:
1059 # @{$self->{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$self->{PMLIBDIRS}};
1060 my (@pmlibdirs) = @{$self->{PMLIBDIRS}};
1062 @{$self->{PMLIBDIRS}} = ();
1063 foreach $pmlibdir (@pmlibdirs) {
1064 -d $pmlibdir && !$dir{$pmlibdir} && push @{$self->{PMLIBDIRS}}, $pmlibdir;
1067 if (@{$self->{PMLIBDIRS}}){
1068 print "Searching PMLIBDIRS: @{$self->{PMLIBDIRS}}\n"
1069 if ($ExtUtils::MakeMaker::Verbose >= 2);
1070 use File::Find; # try changing to require !
1071 File::Find::find(sub {
1073 if ($_ eq "CVS" || $_ eq "RCS"){
1074 $File::Find::prune = 1;
1078 my($path, $prefix) = ($File::Find::name, '$(INST_LIBDIR)');
1080 $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^lib/::);
1081 my($inst) = $self->catdir($prefix,$striplibpath);
1082 local($_) = $inst; # for backwards compatibility
1083 $inst = $self->libscan($inst);
1084 print "libscan($path) => '$inst'\n" if ($ExtUtils::MakeMaker::Verbose >= 2);
1085 return unless $inst;
1087 }, @{$self->{PMLIBDIRS}});
1090 $self->{DIR} = [sort keys %dir] unless $self->{DIR};
1091 $self->{XS} = \%xs unless $self->{XS};
1092 $self->{PM} = \%pm unless $self->{PM};
1093 $self->{C} = [sort keys %c] unless $self->{C};
1094 my(@o_files) = @{$self->{C}};
1095 $self->{O_FILES} = [grep s/\.c$/$self->{OBJ_EXT}/i, @o_files] ;
1096 $self->{H} = [sort keys %h] unless $self->{H};
1097 $self->{PL_FILES} = \%pl_files unless $self->{PL_FILES};
1099 # Set up names of manual pages to generate from pods
1100 if ($self->{MAN1PODS}) {
1101 } elsif ( $self->{INST_MAN1DIR} =~ /^(none|\s*)$/ ) {
1102 $self->{MAN1PODS} = {};
1104 my %manifypods = ();
1105 foreach $name (@{$self->{EXE_FILES}}) {
1108 if (open(TESTPOD,"<$name")) {
1110 while ($testpodline = <TESTPOD>) {
1111 if($testpodline =~ /^=head/) {
1118 # If it doesn't exist yet, we assume, it has pods in it
1122 $manifypods{$name} = '$(INST_MAN1DIR)'.basename($name).'$(MAN1EXT)';
1126 $self->{MAN1PODS} = \%manifypods;
1128 if ($self->{MAN3PODS}) {
1129 } elsif ( $self->{INST_MAN3DIR} =~ /^(none|\s*)$/ ) {
1130 $self->{MAN3PODS} = {};
1132 my %manifypods = (); # we collect the keys first, i.e. the files
1133 # we have to convert to pod
1134 foreach $name (keys %{$self->{PM}}) {
1135 if ($name =~ /\.pod$/ ) {
1136 $manifypods{$name} = $self->{PM}{$name};
1137 } elsif ($name =~ /\.p[ml]$/ ) {
1140 open(TESTPOD,"<$name");
1142 while ($testpodline = <TESTPOD>) {
1143 if($testpodline =~ /^=head/) {
1147 #Speculation on the future (K.A., not A.K. :)
1148 #if(/^=don't\S+install/) { $ispod=0; last}
1153 $manifypods{$name} = $self->{PM}{$name};
1158 # Remove "Configure.pm" and similar, if it's not the only pod listed
1159 # To force inclusion, just name it "Configure.pod", or override MAN3PODS
1160 foreach $name (keys %manifypods) {
1161 if ($name =~ /(config|install|setup).*\.pm/i) {
1162 delete $manifypods{$name};
1165 my($manpagename) = $name;
1166 unless ($manpagename =~ s!^lib/!!) {
1167 $manpagename = join("/",$self->{ROOTEXT},$manpagename);
1169 $manpagename =~ s/\.p(od|m|l)$//;
1170 # Strip leading slashes
1171 $manpagename =~ s!^/+!!;
1172 # Turn other slashes into colons
1173 # $manpagename =~ s,/+,::,g;
1174 $manpagename = $self->replace_manpage_seperator($manpagename);
1175 $manifypods{$name} = "\$(INST_MAN3DIR)/$manpagename.\$(MAN3EXT)";
1177 $self->{MAN3PODS} = \%manifypods;
1183 my($dir, $regex) = @_;
1185 opendir(DIR, $dir || ".") or return ();
1188 @ls = grep(/$regex/, @ls) if $regex;
1192 sub replace_manpage_seperator {
1193 my($self,$man) = @_;
1199 my($self,$path) = @_;
1200 return '' if $path =~ m:/RCS/: ;
1204 sub init_others { # --- Initialize Other Attributes
1207 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1208 $self = $ExtUtils::MakeMaker::Parent[-1];
1211 # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $self->{LIBS}
1212 # Lets look at $self->{LIBS} carefully: It may be an anon array, a string or
1213 # undefined. In any case we turn it into an anon array:
1214 $self->{LIBS}=[] unless $self->{LIBS};
1215 $self->{LIBS}=[$self->{LIBS}] if ref \$self->{LIBS} eq SCALAR;
1216 $self->{LD_RUN_PATH} = "";
1218 foreach $libs ( @{$self->{LIBS}} ){
1219 $libs =~ s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace
1220 my(@libs) = $self->extliblist($libs);
1221 if ($libs[0] or $libs[1] or $libs[2]){
1222 # LD_RUN_PATH now computed by ExtUtils::Liblist
1223 ($self->{EXTRALIBS}, $self->{BSLOADLIBS}, $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs;
1228 unless ( $self->{OBJECT} ){
1229 # init_dirscan should have found out, if we have C files
1230 $self->{OBJECT} = '$(BASEEXT)$(OBJ_EXT)' if @{$self->{C}||[]};
1232 $self->{OBJECT} =~ s/\n+/ \\\n\t/g;
1233 $self->{BOOTDEP} = (-f "$self->{BASEEXT}_BS") ? "$self->{BASEEXT}_BS" : "";
1234 $self->{PERLMAINCC} ||= '$(CC)';
1235 $self->{LDFROM} = '$(OBJECT)' unless $self->{LDFROM};
1237 # Sanity check: don't define LINKTYPE = dynamic if we're skipping
1238 # the 'dynamic' section of MM. We don't have this problem with
1239 # 'static', since we either must use it (%Config says we can't
1240 # use dynamic loading) or the caller asked for it explicitly.
1241 if (!$self->{LINKTYPE}) {
1242 $self->{LINKTYPE} = grep(/dynamic/,@{$self->{SKIP} || []})
1244 : ($Config::Config{usedl} ? 'dynamic' : 'static');
1247 # These get overridden for VMS and maybe some other systems
1249 $self->{FIRST_MAKEFILE} ||= "Makefile";
1250 $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE};
1251 $self->{MAKE_APERL_FILE} ||= "Makefile.aperl";
1252 $self->{RM_F} = "rm -f";
1253 $self->{RM_RF} = "rm -rf";
1254 $self->{TOUCH} = "touch";
1257 $self->{CHMOD} = "chmod";
1258 $self->{UMASK_NULL} = "umask 0";
1262 my($self, $ver, $names, $dirs, $trace) = @_;
1264 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1265 $self = $ExtUtils::MakeMaker::Parent[-1];
1269 print "Looking for perl $ver by these names:
1275 foreach $dir (@$dirs){
1276 next unless defined $dir; # $self->{PERL_SRC} may be undefined
1277 foreach $name (@$names){
1279 if ($name =~ m|^/|) {
1281 } elsif ($name =~ m|/|) {
1282 $abs = $self->catfile(".", $name); # not absolute
1284 $abs = $self->catfile($dir, $name);
1286 print "Checking $abs\n" if ($trace >= 2);
1287 next unless $self->maybe_command($abs);
1288 print "Executing $abs\n" if ($trace >= 2);
1289 if (`$abs -e 'require $ver; print "VER_OK\n" ' 2>&1` =~ /VER_OK/) {
1290 print "Using PERL=$abs\n" if $trace;
1295 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
1296 0; # false and not empty
1300 my($self,$file) = @_;
1301 return 1 if -x $file && ! -d $file;
1305 sub post_initialize {
1308 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1309 $self = $ExtUtils::MakeMaker::Parent[-1];
1314 # --- Constants Sections ---
1319 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1320 $self = $ExtUtils::MakeMaker::Parent[-1];
1323 push(@m,"\n# These definitions are from config.sh (via $INC{'Config.pm'})\n");
1324 push(@m,"\n# They may have been overridden via Makefile.PL or on the command line\n");
1326 foreach $m (@{$self->{CONFIG}}){
1327 next if $once_only{$m};
1328 push @m, "\U$m\E = ".$self->{uc $m}."\n";
1337 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1338 $self = $ExtUtils::MakeMaker::Parent[-1];
1341 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1342 $self = $ExtUtils::MakeMaker::Parent[-1];
1347 NAME = $self->{NAME}
1348 DISTNAME = $self->{DISTNAME}
1349 NAME_SYM = $self->{NAME_SYM}
1350 VERSION = $self->{VERSION}
1351 VERSION_SYM = $self->{VERSION_SYM}
1352 VERSION_MACRO = VERSION
1353 DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
1355 # In which directory should we put this extension during 'make'?
1356 # This is typically ./blib.
1357 # (also see INST_LIBDIR and relationship to ROOTEXT)
1358 INST_LIB = $self->{INST_LIB}
1359 INST_ARCHLIB = $self->{INST_ARCHLIB}
1360 INST_EXE = $self->{INST_EXE}
1362 # AFS users will want to set the installation directories for
1363 # the final 'make install' early without setting INST_LIB,
1364 # INST_ARCHLIB, and INST_EXE for the testing phase
1365 INSTALLPRIVLIB = $self->{INSTALLPRIVLIB}
1366 INSTALLARCHLIB = $self->{INSTALLARCHLIB}
1367 INSTALLBIN = $self->{INSTALLBIN}
1369 # Perl library to use when building the extension
1370 PERL_LIB = $self->{PERL_LIB}
1371 PERL_ARCHLIB = $self->{PERL_ARCHLIB}
1372 LIBPERL_A = $self->{LIBPERL_A}
1374 MAKEMAKER = \$(PERL_LIB)/ExtUtils/MakeMaker.pm
1375 MM_VERSION = $ExtUtils::MakeMaker::VERSION
1376 FIRST_MAKEFILE = $self->{FIRST_MAKEFILE}
1377 MAKE_APERL_FILE = $self->{MAKE_APERL_FILE}
1379 PERLMAINCC = $self->{PERLMAINCC}
1383 # Where is the perl source code located?
1384 PERL_SRC = $self->{PERL_SRC}\n" if $self->{PERL_SRC};
1387 # Perl header files (will eventually be under PERL_LIB)
1388 PERL_INC = $self->{PERL_INC}
1390 PERL = $self->{PERL}
1391 FULLPERL = $self->{FULLPERL}
1394 # FULLEXT = Pathname for extension directory (eg DBD/Oracle).
1395 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
1396 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD)
1397 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
1398 FULLEXT = $self->{FULLEXT}
1399 BASEEXT = $self->{BASEEXT}
1400 ROOTEXT = $self->{ROOTEXT}
1401 DLBASE = $self->{DLBASE}
1405 DEFINE = $self->{DEFINE}
1406 OBJECT = $self->{OBJECT}
1407 LDFROM = $self->{LDFROM}
1408 LINKTYPE = $self->{LINKTYPE}
1410 # Handy lists of source code files:
1411 XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
1412 C_FILES = ".join(" \\\n\t", @{$self->{C}})."
1413 O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
1414 H_FILES = ".join(" \\\n\t", @{$self->{H}})."
1415 MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
1416 MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
1418 # Man installation stuff:
1419 INST_MAN1DIR = $self->{INST_MAN1DIR}
1420 INSTALLMAN1DIR = $self->{INSTALLMAN1DIR}
1421 MAN1EXT = $self->{MAN1EXT}
1423 INST_MAN3DIR = $self->{INST_MAN3DIR}
1424 INSTALLMAN3DIR = $self->{INSTALLMAN3DIR}
1425 MAN3EXT = $self->{MAN3EXT}
1428 # work around a famous dec-osf make(1) feature(?):
1431 .SUFFIXES: .xs .c .C \$(OBJ_EXT)
1433 # .PRECIOUS: Makefile # seems to be not necessary anymore
1435 .PHONY: all config static dynamic test linkext
1437 # This extension may link to it's own library (see SDBM_File)
1438 MYEXTLIB = $self->{MYEXTLIB}
1440 # Where is the Config information that we are using/depend on
1441 CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
1445 # Where to put things:
1446 INST_LIBDIR = $(INST_LIB)$(ROOTEXT)
1447 INST_ARCHLIBDIR = $(INST_ARCHLIB)$(ROOTEXT)
1449 INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
1450 INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
1453 if ($self->has_link_code()) {
1455 INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT)$(LIB_EXT)
1456 INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(DLBASE).$(DLEXT)
1457 INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
1468 $tmp = "$self->{BASEEXT}.def";
1477 $tmp = "\$(PERL_INC)/libperl.lib";
1486 INST_PM = '.join(" \\\n\t", sort values %{$self->{PM}}).'
1492 sub const_loadlibs {
1495 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1496 $self = $ExtUtils::MakeMaker::Parent[-1];
1498 return "" unless $self->needs_linking;
1499 # This description can be deleted after ExtUtils::Liblist is in
1500 # the perl dist with pods
1502 # $self->{NAME} might depend on some other libraries:
1503 # (These comments may need revising:)
1505 # Dependent libraries can be linked in one of three ways:
1507 # 1. (For static extensions) by the ld command when the perl binary
1508 # is linked with the extension library. See EXTRALIBS below.
1510 # 2. (For dynamic extensions) by the ld command when the shared
1511 # object is built/linked. See LDLOADLIBS below.
1513 # 3. (For dynamic extensions) by the DynaLoader when the shared
1514 # object is loaded. See BSLOADLIBS below.
1516 # EXTRALIBS = List of libraries that need to be linked with when
1517 # linking a perl binary which includes this extension
1518 # Only those libraries that actually exist are included.
1519 # These are written to a file and used when linking perl.
1521 # LDLOADLIBS = List of those libraries which can or must be linked into
1522 # the shared library when created using ld. These may be
1523 # static or dynamic libraries.
1524 # LD_RUN_PATH is a colon separated list of the directories
1525 # in LDLOADLIBS. It is passed as an environment variable to
1526 # the process that links the shared library.
1528 # BSLOADLIBS = List of those libraries that are needed but can be
1529 # linked in dynamically at run time on this platform.
1530 # SunOS/Solaris does not need this because ld records
1531 # the information (from LDLOADLIBS) into the object file.
1532 # This list is used to create a .bs (bootstrap) file.
1534 EXTRALIBS = $self->{EXTRALIBS}
1535 LDLOADLIBS = $self->{LDLOADLIBS}
1536 BSLOADLIBS = $self->{BSLOADLIBS}
1537 LD_RUN_PATH= $self->{LD_RUN_PATH}
1542 my($self,$libperl)=@_;
1544 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1545 $self = $ExtUtils::MakeMaker::Parent[-1];
1547 return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
1548 return '' unless $self->needs_linking();
1549 $libperl or $libperl = $self->{LIBPERL_A} || "libperl$self->{LIB_EXT}" ;
1550 $libperl =~ s/\.\$\(A\)$/$self->{LIB_EXT}/;
1551 # This is implemented in the same manner as extliblist,
1552 # e.g., do both and compare results during the transition period.
1553 my($cc,$ccflags,$optimize,$large,$split, $shflags)
1554 = @Config{qw(cc ccflags optimize large split shellflags)};
1557 $shflags = '' unless $shflags;
1558 my($prog, $uc, $perltype);
1563 DE => '-DDEBUGGING -DEMBED',
1564 M => '-DEMBED -DMULTIPLICITY',
1565 DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
1568 if ($libperl =~ /libperl(\w*)\Q$self->{LIB_EXT}/){
1571 $uc = ""; # avoid warning
1573 $perltype = $map{$uc} ? $map{$uc} : "";
1581 ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
1582 if ($prog = $Config::Config{$name}) {
1583 # Expand hints for this extension via the shell
1584 print STDOUT "Processing $name hint:\n" if $ExtUtils::MakeMaker::Verbose;
1586 ccflags=\"$ccflags\"
1587 optimize=\"$optimize\"
1588 perltype=\"$perltype\"
1589 optdebug=\"$optdebug\"
1594 echo ccflags=\$ccflags
1595 echo optimize=\$optimize
1596 echo perltype=\$perltype
1597 echo optdebug=\$optdebug
1604 if ($line =~ /(.*?)=\s*(.*)\s*$/){
1606 print STDOUT " $1 = $2\n" if $ExtUtils::MakeMaker::Verbose;
1608 print STDOUT "Unrecognised result from hint: '$line'\n";
1611 ( $cc,$ccflags,$perltype,$optdebug,$optimize,$large,$split )=@cflags{
1612 qw( cc ccflags perltype optdebug optimize large split)};
1616 $optimize = $optdebug;
1619 my($new) = "$cc -c \$(INC) $ccflags $optimize $perltype $large $split";
1620 $new =~ s/^\s+//; $new =~ s/\s+/ /g; $new =~ s/\s+$//;
1623 $cccmd =~ s/^\s*\Q$Config::Config{cc}\E\s/\$(CC) /;
1624 $cccmd .= " \$(DEFINE_VERSION)";
1625 $self->{CONST_CCCMD} = "CCCMD = $cccmd\n";
1628 # --- Tool Sections ---
1630 sub tool_autosplit {
1631 my($self, %attribs) = @_;
1633 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1634 $self = $ExtUtils::MakeMaker::Parent[-1];
1637 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
1639 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
1640 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
1647 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1648 $self = $ExtUtils::MakeMaker::Parent[-1];
1650 my($xsdir) = "$self->{PERL_LIB}/ExtUtils";
1651 # drop back to old location if xsubpp is not in new location yet
1652 $xsdir = "$self->{PERL_SRC}/ext" unless (-f "$self->{PERL_LIB}/ExtUtils/xsubpp");
1653 my(@tmdeps) = ('$(XSUBPPDIR)/typemap');
1654 if( $self->{TYPEMAPS} ){
1656 foreach $typemap (@{$self->{TYPEMAPS}}){
1657 if( ! -f $typemap ){
1658 warn "Typemap $typemap not found.\n";
1661 push(@tmdeps, $typemap);
1665 push(@tmdeps, "typemap") if -f "typemap";
1666 my(@tmargs) = map("-typemap $_", @tmdeps);
1667 if( exists $self->{XSOPT} ){
1668 unshift( @tmargs, $self->{XSOPT} );
1671 my $xsubpp_version = $self->xsubpp_version("$xsdir/xsubpp");
1673 # What are the correct thresholds for version 1 && 2 Paul?
1674 if ( $xsubpp_version > 1.923 ){
1675 $self->{XSPROTOARG} = "-noprototypes" unless defined $self->{XSPROTOARG};
1677 if (defined $self->{XSPROTOARG} && $self->{XSPROTOARG} =~ /\-prototypes/) {
1678 print STDOUT qq{Warning: This extension wants to pass the switch "-prototypes" to xsubpp.
1679 Your version of xsubpp is $xsubpp_version and cannot handle this.
1680 Please upgrade to a more recent version of xsubpp.
1683 $self->{XSPROTOARG} = "";
1689 XSUBPP = \$(XSUBPPDIR)/xsubpp
1690 XSPROTOARG = $self->{XSPROTOARG}
1691 XSUBPPDEPS = @tmdeps
1692 XSUBPPARGS = @tmargs
1698 my($self,$xsubpp) = @_;
1701 # try to figure out the version number of the xsubpp on the system
1703 # first try the -v flag, introduced in 1.921 & 2.000a2
1705 my $command = "$self->{PERL} $xsubpp -v 2>&1";
1706 print "Running: $command\n" if $Verbose;
1707 $version = `$command` ;
1708 warn "Running '$command' exits with status " . $?>>8 if $?;
1711 return $1 if $version =~ /^xsubpp version (.*)/ ;
1713 # nope, then try something else
1715 my $counter = '000';
1716 my ($file) = 'temp' ;
1717 $counter++ while -e "$file$counter"; # don't overwrite anything
1720 open(F, ">$file") or die "Cannot open file '$file': $!\n" ;
1722 MODULE = fred PACKAGE = fred
1731 $command = "$self->{PERL} $xsubpp $file 2>&1";
1732 print "Running: $command\n" if $Verbose;
1733 my $text = `$command` ;
1734 warn "Running '$command' exits with status " . $?>>8 if $?;
1737 # gets 1.2 -> 1.92 and 2.000a1
1738 return $1 if $text =~ /automatically by xsubpp version ([\S]+)\s*/ ;
1740 # it is either 1.0 or 1.1
1741 return 1.1 if $text =~ /^Warning: ignored semicolon/ ;
1743 # none of the above, so 1.0
1750 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1751 $self = $ExtUtils::MakeMaker::Parent[-1];
1756 TOUCH = $self->{TOUCH}
1759 RM_F = $self->{RM_F}
1760 RM_RF = $self->{RM_RF}
1761 CHMOD = $self->{CHMOD}
1762 UMASK_NULL = $self->{UMASK_NULL}
1764 # The following is a portable way to say mkdir -p
1765 # To see which directories are created, change the if 0 to if 1
1766 MKPATH = $(PERL) -wle '$$"="/"; foreach $$p (@ARGV){' \\
1767 -e 'next if -d $$p; my(@p); foreach(split(/\//,$$p)){' \\
1768 -e 'push(@p,$$_); next if -d "@p/"; print "mkdir @p" if 0;' \\
1769 -e 'mkdir("@p",0777)||die $$! } } exit 0;'
1774 my($self, %attribs) = @_;
1776 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1777 $self = $ExtUtils::MakeMaker::Parent[-1];
1780 # VERSION should be sanitised before use as a file name
1781 my($name) = $attribs{NAME} || '$(DISTVNAME)';
1782 my($tar) = $attribs{TAR} || 'tar'; # eg /usr/bin/gnutar
1783 my($tarflags) = $attribs{TARFLAGS} || 'cvf';
1784 my($compress) = $attribs{COMPRESS} || 'compress'; # eg gzip
1785 my($suffix) = $attribs{SUFFIX} || 'Z'; # eg gz
1786 my($shar) = $attribs{SHAR} || 'shar'; # eg "shar --gzip"
1787 my($preop) = $attribs{PREOP} || '@ true'; # eg update MANIFEST
1788 my($postop) = $attribs{POSTOP} || '@ true'; # eg remove the distdir
1789 my($ci) = $attribs{CI} || 'ci -u';
1790 my($rcs_label)= $attribs{RCS_LABEL}|| 'rcs -Nv$(VERSION_SYM): -q';
1791 my($dist_cp) = $attribs{DIST_CP} || 'best';
1792 my($dist_default) = $attribs{DIST_DEFAULT} || 'tardist';
1795 DISTVNAME = \$(DISTNAME)-\$(VERSION)
1797 TARFLAGS = $tarflags
1798 COMPRESS = $compress
1804 RCS_LABEL = $rcs_label
1806 DIST_DEFAULT = $dist_default
1812 my($self,%attribs) = @_;
1814 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1815 $self = $ExtUtils::MakeMaker::Parent[-1];
1818 while (($key,$val) = each %attribs){
1819 push @m, "$key = $val\n";
1827 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1828 $self = $ExtUtils::MakeMaker::Parent[-1];
1836 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1837 $self = $ExtUtils::MakeMaker::Parent[-1];
1843 foreach $key (qw(INSTALLPRIVLIB INSTALLARCHLIB INSTALLBIN
1844 INSTALLMAN1DIR INSTALLMAN3DIR LIBPERL_A
1846 push @pasthru, "$key=\"\$($key)\"";
1849 push @m, "\nPASTHRU = ", join ("\\\n\t", @pasthru), "\n";
1853 # --- Translation Sections ---
1858 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1859 $self = $ExtUtils::MakeMaker::Parent[-1];
1861 return '' unless $self->needs_linking();
1865 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
1868 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.C
1876 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1877 $self = $ExtUtils::MakeMaker::Parent[-1];
1879 return '' unless $self->needs_linking();
1882 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >$*.tc && mv $*.tc $@
1886 sub xs_o { # many makes are too dumb to use xs_c then c_o
1889 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1890 $self = $ExtUtils::MakeMaker::Parent[-1];
1892 return '' unless $self->needs_linking();
1895 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >xstmp.c && mv xstmp.c $*.c
1896 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
1900 # --- Target Sections ---
1905 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1906 $self = $ExtUtils::MakeMaker::Parent[-1];
1909 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1910 $self = $ExtUtils::MakeMaker::Parent[-1];
1914 all :: config $(INST_PM) subdirs linkext manifypods
1916 subdirs :: $(MYEXTLIB)
1920 config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)/.exists
1922 config :: $(INST_ARCHAUTODIR)/.exists Version_check
1924 config :: $(INST_AUTODIR)/.exists
1927 push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
1929 if (%{$self->{MAN1PODS}}) {
1931 config :: $(INST_MAN1DIR)/.exists
1934 push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
1936 if (%{$self->{MAN3PODS}}) {
1938 config :: $(INST_MAN3DIR)/.exists
1941 push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
1945 $(O_FILES): $(H_FILES)
1946 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
1950 perldoc ExtUtils::MakeMaker
1955 @$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
1956 -e 'use ExtUtils::MakeMaker qw($$Version &Version_check);' \
1957 -e '&Version_check("$(MM_VERSION)")'
1964 my($self, %attribs) = @_;
1966 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1967 $self = $ExtUtils::MakeMaker::Parent[-1];
1969 # LINKTYPE => static or dynamic or ''
1970 my($linktype) = defined $attribs{LINKTYPE} ?
1971 $attribs{LINKTYPE} : '$(LINKTYPE)';
1973 linkext :: $linktype
1979 my($self,%attribs) = @_;
1981 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
1982 $self = $ExtUtils::MakeMaker::Parent[-1];
1985 return '' if ($Config::Config{osname} ne 'aix');
1987 my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
1988 my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
1992 dynamic :: $self->{BASEEXT}.exp
1994 ") unless $self->{SKIPHASH}{dynamic};
1997 static :: $self->{BASEEXT}.exp
1999 ") unless $self->{SKIPHASH}{static};
2002 $self->{BASEEXT}.exp: Makefile.PL
2003 ",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::MakeMaker qw(&mksymlists); \\
2004 MM->new()->mksymlists({DL_FUNCS => ',
2005 %$funcs ? neatvalue($funcs) : '""',', DL_VARS => ',
2006 @$vars ? neatvalue($vars) : '""', ", NAME => \"$self->{NAME}\"})'
2012 # --- Dynamic Loading Sections ---
2017 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2018 $self = $ExtUtils::MakeMaker::Parent[-1];
2021 # $(INST_PM) has been moved to the all: target.
2022 # It remains here for awhile to allow for old usage: "make dynamic"
2023 dynamic :: '.$self->{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
2029 my($self, %attribs) = @_;
2031 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2032 $self = $ExtUtils::MakeMaker::Parent[-1];
2034 return '' unless $self->needs_linking();
2036 BOOTSTRAP = '."$self->{BASEEXT}.bs".'
2038 # As Mkbootstrap might not write a file (if none is required)
2039 # we use touch to prevent make continually trying to remake it.
2040 # The DynaLoader only reads a non-empty file.
2041 $(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".'
2042 @ echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
2043 @ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
2044 -e \'use ExtUtils::Mkbootstrap;\' \
2045 -e \'Mkbootstrap("$(BASEEXT)","$(BSLOADLIBS)");\'
2046 @ $(TOUCH) $(BOOTSTRAP)
2048 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
2050 $(INST_BOOT): $(BOOTSTRAP)
2051 @ '.$self->{RM_RF}.' $(INST_BOOT)
2052 -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
2054 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
2059 my($self, %attribs) = @_;
2061 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2062 $self = $ExtUtils::MakeMaker::Parent[-1];
2064 return '' unless $self->needs_linking(); #might be because of a subdir
2068 ' unless ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB});
2070 my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
2071 my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
2072 my($ldfrom) = '$(LDFROM)';
2073 my($osname) = $Config::Config{osname};
2074 $armaybe = 'ar' if ($osname eq 'dec_osf' and $armaybe eq ':');
2077 # This section creates the dynamically loadable $(INST_DYNAMIC)
2078 # from $(OBJECT) and possibly $(MYEXTLIB).
2079 ARMAYBE = '.$armaybe.'
2080 OTHERLDFLAGS = '.$otherldflags.'
2082 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE)
2084 if ($armaybe ne ':'){
2085 $ldfrom = 'tmp$(LIB_EXT)';
2086 push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
2087 push(@m,' $(RANLIB) '."$ldfrom\n");
2089 $ldfrom = "-all $ldfrom -none" if ($osname eq 'dec_osf');
2090 push(@m,' LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) -o $@ $(LDDLFLAGS) '.$ldfrom.
2091 ' $(OTHERLDFLAGS) $(MYEXTLIB) $(LDLOADLIBS) $(EXPORT_LIST) $(PERL_ARCHIVE)');
2094 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
2097 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
2101 # --- Static Loading Sections ---
2106 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2107 $self = $ExtUtils::MakeMaker::Parent[-1];
2110 # $(INST_PM) has been moved to the all: target.
2111 # It remains here for awhile to allow for old usage: "make static"
2112 static :: '.$self->{MAKEFILE}.' $(INST_STATIC) $(INST_PM)
2120 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2121 $self = $ExtUtils::MakeMaker::Parent[-1];
2123 return '' unless $self->needs_linking(); #might be because of a subdir
2127 ' unless ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB});
2131 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists
2133 # If this extension has it's own library (eg SDBM_File)
2134 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
2135 push(@m, " $self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
2138 $(AR) cr $@ $(OBJECT) && $(RANLIB) $@
2139 @echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
2141 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
2144 # Old mechanism - still available:
2146 push(@m, <<'END') if $self->{PERL_SRC};
2147 @ echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
2150 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
2155 my($self, %attribs) = @_;
2157 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2158 $self = $ExtUtils::MakeMaker::Parent[-1];
2160 # By default .pm files are split into the architecture independent
2161 # library. This is a good thing. If a specific module requires that
2162 # it's .pm files are split into the architecture specific library
2163 # then it should use: installpm => {SPLITLIB=>'$(INST_ARCHLIB)'}
2164 # Note that installperl currently interferes with this (Config.pm)
2165 # User can disable split by saying: installpm => {SPLITLIB=>''}
2166 my($splitlib) = '$(INST_LIB)'; # NOT arch specific by default
2167 $splitlib = $attribs{SPLITLIB} if exists $attribs{SPLITLIB};
2169 push @m, "inst_pm :: \$(INST_PM)\n\n";
2170 foreach $dist (sort keys %{$self->{PM}}){
2171 my($inst) = $self->{PM}->{$dist};
2172 push(@m, "\n# installpm: $dist => $inst, splitlib=$splitlib\n");
2173 push(@m, $self->installpm_x($dist, $inst, $splitlib));
2179 sub installpm_x { # called by installpm per file
2180 my($self, $dist, $inst, $splitlib) = @_;
2182 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2183 $self = $ExtUtils::MakeMaker::Parent[-1];
2185 warn "Warning: Most probably 'make' will have problems processing this file: $inst\n"
2186 if $inst =~ m![:#]!;
2187 my($instdir) = $inst =~ m|(.*)/|;
2190 $inst: $dist $self->{MAKEFILE} $instdir/.exists
2191 ".' @ '.$self->{RM_F}.' $@
2192 $(UMASK_NULL) && '."$self->{CP} $dist".' $@
2193 @ echo $@ >> $(INST_ARCHAUTODIR)/.packlist
2195 push(@m, "\t\@\$(AUTOSPLITFILE) \$@ $splitlib/auto\n")
2196 if ($splitlib and $inst =~ m/\.pm$/);
2198 push @m, $self->dir_target($instdir);
2203 my($self, %attribs) = @_;
2205 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2206 $self = $ExtUtils::MakeMaker::Parent[-1];
2208 return "\nmanifypods :\n" unless %{$self->{MAN3PODS}};
2211 if (defined $self->{PERL_SRC}) {
2212 $pod2man_exe = "$self->{PERL_SRC}/pod/pod2man";
2214 $pod2man_exe = "$Config{bin}/pod2man";
2216 unless ($self->maybe_command($pod2man_exe)) {
2217 # No pod2man but some MAN3PODS to be installed
2220 Warning: I could not locate your pod2man program. Please make sure,
2221 your pod2man program is in your PATH before you execute 'make'
2224 $pod2man_exe = "-S pod2man";
2228 qq[POD2MAN_EXE = $pod2man_exe\n],
2229 q[POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \\
2230 -e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "].$self->{MAKEFILE}.q[";' \\
2231 -e 'print "Installing $$m{$$_}\n";' \\
2232 -e 'system("$(PERL) $(POD2MAN_EXE) $$_>$$m{$$_}")==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
2233 -e 'chmod 0644, $$m{$$_} or warn "chmod 644 $$m{$$_}: $$!\n";}'
2235 push @m, "\nmanifypods :";
2238 if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
2239 push @m, "\t\@\$(POD2MAN) \\\n\t";
2240 push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};
2248 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2249 $self = $ExtUtils::MakeMaker::Parent[-1];
2251 return "" unless $self->{PL_FILES};
2253 foreach $plfile (sort keys %{$self->{PL_FILES}}) {
2255 all :: $self->{PL_FILES}->{$plfile}
2257 $self->{PL_FILES}->{$plfile} :: $plfile
2258 \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile
2266 return "" unless $self->{EXE_FILES} && ref $self->{EXE_FILES} eq "ARRAY";
2267 my(@m, $from, $to, %fromto, @to);
2268 push @m, $self->dir_target(qw[$(INST_EXE)]);
2269 for $from (@{$self->{EXE_FILES}}) {
2270 my($path)= '$(INST_EXE)/' . basename($from);
2271 local($_) = $path; # for backwards compatibility
2272 $to = $self->exescan($path);
2273 print "exescan($from) => '$to'\n" if ($ExtUtils::MakeMaker::Verbose >=2);
2276 @to = values %fromto;
2278 EXE_FILES = @{$self->{EXE_FILES}}
2286 while (($from,$to) = each %fromto) {
2287 my $todir = dirname($to);
2289 $to: $from $self->{MAKEFILE} $todir/.exists
2290 $self->{CP} $from $to
2297 my($self,$path) = @_;
2300 # --- Sub-directory Sections ---
2305 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2306 $self = $ExtUtils::MakeMaker::Parent[-1];
2309 # This method provides a mechanism to automatically deal with
2310 # subdirectories containing further Makefile.PL scripts.
2311 # It calls the subdir_x() method for each subdirectory.
2312 foreach $dir (@{$self->{DIR}}){
2313 push(@m, $self->subdir_x($dir));
2314 #### print "Including $dir subdirectory\n";
2318 # The default clean, realclean and test targets in this Makefile
2319 # have automatically been given entries for each subdir.
2323 push(@m, "\n# none")
2328 sub runsubdirpl{ # Experimental! See subdir_x section
2329 my($self,$subdir) = @_;
2331 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2332 $self = $ExtUtils::MakeMaker::Parent[-1];
2334 chdir($subdir) or die "chdir($subdir): $!";
2336 require "Makefile.PL";
2340 my($self, $subdir) = @_;
2342 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2343 $self = $ExtUtils::MakeMaker::Parent[-1];
2349 \@-cd $subdir && \$(MAKE) all \$(PASTHRU)
2354 # --- Cleanup and Distribution Sections ---
2357 my($self, %attribs) = @_;
2359 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2360 $self = $ExtUtils::MakeMaker::Parent[-1];
2364 # Delete temporary files but do not touch installed files. We don\'t delete
2365 # the Makefile here so a later make realclean still has a makefile to use.
2369 # clean subdirectories first
2370 for $dir (@{$self->{DIR}}) {
2371 push @m, "\t-cd $dir && test -f $self->{MAKEFILE} && \$(MAKE) clean\n";
2374 my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
2375 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
2376 push(@otherfiles, qw[./blib Makeaperlfile $(INST_ARCHAUTODIR)/extralibs.all
2377 perlmain.c mon.out core so_locations
2379 *$(OBJ_EXT) *$(LIB_EXT)
2380 perl.exe $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def $(BASEEXT).exp
2382 push @m, "\t-$self->{RM_RF} @otherfiles\n";
2383 # See realclean and ext/utils/make_ext for usage of Makefile.old
2385 "\t-$self->{MV} $self->{MAKEFILE} $self->{MAKEFILE}.old 2>/dev/null\n");
2387 "\t$attribs{POSTOP}\n") if $attribs{POSTOP};
2392 my($self, %attribs) = @_;
2394 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2395 $self = $ExtUtils::MakeMaker::Parent[-1];
2399 # Delete temporary files (via clean) and also delete installed files
2400 realclean purge :: clean
2402 # realclean subdirectories first (already cleaned)
2403 my $sub = "\t-cd %s && test -f %s && \$(MAKE) %s realclean\n";
2404 foreach(@{$self->{DIR}}){
2405 push(@m, sprintf($sub,$_,"$self->{MAKEFILE}.old","-f $self->{MAKEFILE}.old"));
2406 push(@m, sprintf($sub,$_,"$self->{MAKEFILE}",''));
2408 push(@m, " $self->{RM_RF} \$(INST_AUTODIR) \$(INST_ARCHAUTODIR)\n");
2409 push(@m, " $self->{RM_F} \$(INST_DYNAMIC) \$(INST_BOOT)\n");
2410 push(@m, " $self->{RM_F} \$(INST_STATIC) \$(INST_PM)\n");
2411 my(@otherfiles) = ($self->{MAKEFILE},
2412 "$self->{MAKEFILE}.old"); # Makefiles last
2413 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
2414 push(@m, " $self->{RM_RF} @otherfiles\n") if @otherfiles;
2415 push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
2422 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2423 $self = $ExtUtils::MakeMaker::Parent[-1];
2427 distclean :: realclean distcheck
2432 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&fullcheck";' \\
2438 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&skipcheck";' \\
2444 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&mkmanifest";' \\
2453 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2454 $self = $ExtUtils::MakeMaker::Parent[-1];
2458 dist : $(DIST_DEFAULT)
2460 tardist : $(DISTVNAME).tar.$(SUFFIX)
2462 $(DISTVNAME).tar.$(SUFFIX) : distdir
2464 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
2465 $(RM_RF) $(DISTVNAME)
2466 $(COMPRESS) $(DISTVNAME).tar
2469 uutardist : $(DISTVNAME).tar.$(SUFFIX)
2470 uuencode $(DISTVNAME).tar.$(SUFFIX) \\
2471 $(DISTVNAME).tar.$(SUFFIX) > \\
2472 $(DISTVNAME).tar.$(SUFFIX).uu
2476 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
2477 $(RM_RF) $(DISTVNAME)
2486 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2487 $self = $ExtUtils::MakeMaker::Parent[-1];
2492 $(RM_RF) $(DISTVNAME)
2493 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "/mani/";' \\
2494 -e 'manicopy(maniread(),"$(DISTVNAME)", "$(DIST_CP)");'
2502 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2503 $self = $ExtUtils::MakeMaker::Parent[-1];
2508 cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
2509 cd $(DISTVNAME) && $(MAKE)
2510 cd $(DISTVNAME) && $(MAKE) test
2518 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2519 $self = $ExtUtils::MakeMaker::Parent[-1];
2524 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&maniread";' \\
2525 -e '@all = keys %{ maniread() };' \\
2526 -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \\
2527 -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
2533 my($self, %attribs) = @_;
2535 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2536 $self = $ExtUtils::MakeMaker::Parent[-1];
2541 @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
2542 @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \\
2543 -e "use ExtUtils::MakeMaker; MY->new({})->writedoc('Module', '$(NAME)', \\
2544 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', \\
2545 'EXE_FILES=$(EXE_FILES)')" >> $(INSTALLARCHLIB)/perllocal.pod
2549 install :: pure_install doc_install
2553 # install subdirectories first
2554 push(@m, map("\tcd $_ && test -f $self->{MAKEFILE} && \$(MAKE) install\n",
2557 push(@m, "\t\@\$(PERL) \"-I\$(PERL_ARCHLIB)\" \"-I\$(PERL_LIB)\" -e 'require File::Path;' \\
2558 -e '\$\$message = q[ You do not have permissions to install into];' \\
2559 -e 'File::Path::mkpath(\@ARGV);' \\
2560 -e 'foreach (\@ARGV){ die qq{ \$\$message \$\$_\\n} unless -w \$\$_}' \\
2561 \$(INSTALLPRIVLIB) \$(INSTALLARCHLIB)
2562 \$(MAKE) INST_LIB=\$(INSTALLPRIVLIB) INST_ARCHLIB=\$(INSTALLARCHLIB) INST_EXE=\$(INSTALLBIN) INST_MAN1DIR=\$(INSTALLMAN1DIR) INST_MAN3DIR=\$(INSTALLMAN3DIR) all
2563 \@\$(PERL) -i.bak -lne 'print unless \$\$seen{ \$\$_ }++' \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/.packlist
2567 #### UNINSTALL IS STILL EXPERIMENTAL ####
2571 push(@m, map("\tcd $_ && test -f $self->{MAKEFILE} && \$(MAKE) uninstall\n",
2573 push @m, "\t".'$(RM_RF) `cat $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist`
2583 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2584 $self = $ExtUtils::MakeMaker::Parent[-1];
2586 '# Phony target to force checking subdirectories.
2595 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2596 $self = $ExtUtils::MakeMaker::Parent[-1];
2600 PERL_HDRS = $(PERL_INC)/EXTERN.h $(PERL_INC)/INTERN.h \
2601 $(PERL_INC)/XSUB.h $(PERL_INC)/av.h $(PERL_INC)/cop.h \
2602 $(PERL_INC)/cv.h $(PERL_INC)/dosish.h $(PERL_INC)/embed.h \
2603 $(PERL_INC)/form.h $(PERL_INC)/gv.h $(PERL_INC)/handy.h \
2604 $(PERL_INC)/hv.h $(PERL_INC)/keywords.h $(PERL_INC)/mg.h \
2605 $(PERL_INC)/op.h $(PERL_INC)/opcode.h $(PERL_INC)/patchlevel.h \
2606 $(PERL_INC)/perl.h $(PERL_INC)/perly.h $(PERL_INC)/pp.h \
2607 $(PERL_INC)/proto.h $(PERL_INC)/regcomp.h $(PERL_INC)/regexp.h \
2608 $(PERL_INC)/scope.h $(PERL_INC)/sv.h $(PERL_INC)/unixish.h \
2609 $(PERL_INC)/util.h $(PERL_INC)/config.h
2614 $(OBJECT) : $(PERL_HDRS)
2615 ' if $self->{OBJECT};
2618 # Check for unpropogated config.sh changes. Should never happen.
2619 # We do NOT just update config.h because that is not sufficient.
2620 # An out of date config.h is not fatal but complains loudly!
2621 $(PERL_INC)/config.h: $(PERL_SRC)/config.sh
2622 -@echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
2624 $(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
2625 @echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
2626 cd $(PERL_SRC) && $(MAKE) lib/Config.pm
2627 ') if $self->{PERL_SRC};
2629 push(@m, join(" ", values %{$self->{XS}})." : \$(XSUBPPDEPS)\n")
2637 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2638 $self = $ExtUtils::MakeMaker::Parent[-1];
2641 # We do not know what target was originally specified so we
2642 # must force a manual rerun to be sure. But as it should only
2643 # happen very rarely it is not a significant problem.
2645 $(OBJECT) : $(FIRST_MAKEFILE)
2646 ' if $self->{OBJECT};
2649 # We take a very conservative approach here, but it\'s worth it.
2650 # We move Makefile to Makefile.old here to avoid gnu make looping.
2651 '.$self->{MAKEFILE}.' : Makefile.PL $(CONFIGDEP)
2652 @echo "Makefile out-of-date with respect to $?"
2653 @echo "Cleaning current config before rebuilding Makefile..."
2654 -@mv '."$self->{MAKEFILE} $self->{MAKEFILE}.old".'
2655 -$(MAKE) -f '.$self->{MAKEFILE}.'.old clean >/dev/null 2>&1 || true
2656 $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL '."@ARGV".'
2657 @echo ">>> Your Makefile has been rebuilt. <<<"
2658 @echo ">>> Please rerun the make command. <<<"; false
2665 my($self, %attribs) = @_;
2667 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2668 $self = $ExtUtils::MakeMaker::Parent[-1];
2672 my(%searchdirs)=($self->{PERL_ARCHLIB} => 1, $self->{INST_ARCHLIB} => 1);
2673 my(@searchdirs)=keys %searchdirs;
2675 # And as it's not yet built, we add the current extension
2676 # but only if it has some C code (or XS code, which implies C code)
2677 if (@{$self->{C}}) {
2678 @static="$self->{INST_ARCHLIB}/auto/$self->{FULLEXT}/$self->{BASEEXT}$self->{LIB_EXT}";
2681 # Either we determine now, which libraries we will produce in the
2682 # subdirectories or we do it at runtime of the make.
2684 # We could ask all subdir objects, but I cannot imagine, why it
2685 # would be necessary.
2687 # Instead we determine all libraries for the new perl at
2689 my(@perlinc) = ($self->{INST_ARCHLIB}, $self->{INST_LIB}, $self->{PERL_ARCHLIB}, $self->{PERL_LIB});
2691 $self->makeaperl(MAKE => $self->{MAKEFILE},
2692 DIRS => \@searchdirs,
2695 TARGET => $self->{MAP_TARGET},
2697 LIBPERL => $self->{LIBPERL_A}
2701 # --- Test and Installation Sections ---
2704 my($self, %attribs) = @_;
2706 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2707 $self = $ExtUtils::MakeMaker::Parent[-1];
2709 my($tests) = $attribs{TESTS} || (-d "t" ? "t/*.t" : "");
2713 TEST_TYPE=test_\$(LINKTYPE)
2715 test :: \$(TEST_TYPE)
2717 push(@m, map("\t\@cd $_ && test -f $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n",
2719 push(@m, "\t\@echo 'No tests defined for \$(NAME) extension.'\n")
2720 unless $tests or -f "test.pl" or @{$self->{DIR}};
2723 push(@m, "test_dynamic :: all\n");
2724 push(@m, $self->test_via_harness('$(FULLPERL)', $tests)) if $tests;
2725 push(@m, $self->test_via_script('$(FULLPERL)', 'test.pl')) if -f "test.pl";
2728 # Occasionally we may face this degenerated target:
2729 push @m, "test_ : test_dynamic\n\n";
2731 if ($self->needs_linking()) {
2732 push(@m, "test_static :: all \$(MAP_TARGET)\n");
2733 push(@m, $self->test_via_harness('./$(MAP_TARGET)', $tests)) if $tests;
2734 push(@m, $self->test_via_script('./$(MAP_TARGET)', 'test.pl')) if -f "test.pl";
2737 push @m, "test_static :: test_dynamic\n";
2742 sub test_via_harness {
2743 my($self, $perl, $tests) = @_;
2745 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2746 $self = $ExtUtils::MakeMaker::Parent[-1];
2748 "\tPERL_DL_NONLAZY=1 $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";
2751 sub test_via_script {
2752 my($self, $perl, $script) = @_;
2754 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2755 $self = $ExtUtils::MakeMaker::Parent[-1];
2757 "\tPERL_DL_NONLAZY=1 $perl".' -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) test.pl
2765 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2766 $self = $ExtUtils::MakeMaker::Parent[-1];
2772 my($self, %attribs) = @_;
2774 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2775 $self = $ExtUtils::MakeMaker::Parent[-1];
2777 my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
2778 @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
2781 # --- MakeMaker makeaperl section ---
2782 MAP_TARGET = $target
2783 FULLPERL = $self->{FULLPERL}
2785 return join '', @m if $self->{PARENT};
2787 my($dir) = join ":", @{$self->{DIR}};
2789 unless ($self->{MAKEAPERL}) {
2791 $(MAP_TARGET) :: $(MAKE_APERL_FILE)
2792 $(MAKE) -f Makefile.aperl static $@
2794 $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
2795 @ echo Writing \"Makefile.aperl\" for this $(MAP_TARGET)
2796 @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
2797 Makefile.PL DIR=}, $dir, q{ \
2798 MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
2799 MAKEAPERL=1 NORECURS=1};
2801 push @m, map( " \\\n\t\t$_", @ARGV );
2809 my($cccmd, $linkcmd, $lperl);
2812 $cccmd = $self->const_cccmd($libperl);
2813 $cccmd =~ s/^CCCMD\s*=\s*//;
2814 $cccmd =~ s/\$\(INC\)/ -I$self->{PERL_INC} /;
2815 $cccmd .= " $Config::Config{cccdlflags}" if ($Config::Config{d_shrplib});
2816 $cccmd =~ s/\n/ /g; # yes I've seen "\n", don't ask me where it came from. A.K.
2817 $cccmd =~ s/\(CC\)/\(PERLMAINCC\)/;
2819 # The front matter of the linkcommand...
2820 $linkcmd = join ' ', "\$(CC)",
2821 grep($_, @Config{qw(large split ldflags ccdlflags)});
2822 $linkcmd =~ s/\s+/ /g;
2824 # Which *.a files could we make use of...
2826 File::Find::find(sub {
2827 return unless m/\Q$self->{LIB_EXT}$/;
2828 return if m/^libperl/;
2829 # don't include the installed version of this extension. I
2830 # leave this line here, although it is not necessary anymore:
2831 # I patched minimod.PL instead, so that Miniperl.pm won't
2832 # enclude duplicates
2834 # Once the patch to minimod.PL is in the distribution, I can
2836 return if $File::Find::name =~ m:auto/$self->{FULLEXT}/$self->{BASEEXT}$self->{LIB_EXT}$:;
2837 $static{fastcwd() . "/" . $_}++;
2838 }, grep( -d $_, @{$searchdirs || []}) );
2840 # We trust that what has been handed in as argument, will be buildable
2841 $static = [] unless $static;
2842 @static{@{$static}} = (1) x @{$static};
2844 $extra = [] unless $extra && ref $extra eq 'ARRAY';
2845 for (sort keys %static) {
2846 next unless /\Q$self->{LIB_EXT}$/;
2847 $_ = dirname($_) . "/extralibs.ld";
2851 grep(s/^/-I/, @{$perlinc || []});
2853 $target = "perl" unless $target;
2854 $tmp = "." unless $tmp;
2856 # MAP_STATIC doesn't look into subdirs yet. Once "all" is made and we
2857 # regenerate the Makefiles, MAP_STATIC and the dependencies for
2858 # extralibs.all are computed correctly
2860 MAP_LINKCMD = $linkcmd
2861 MAP_PERLINC = @{$perlinc || []}
2863 join(" \\\n\t", reverse sort keys %static), "
2865 MAP_PRELIBS = $Config::Config{libs} $Config::Config{cryptlib}
2868 if (defined $libperl) {
2869 ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
2871 unless ($libperl && -f $lperl) { # Could quite follow your idea her, Ilya
2872 my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
2873 $libperl ||= "libperl$self->{LIB_EXT}";
2874 $libperl = "$dir/$libperl";
2875 $lperl ||= "libperl$self->{LIB_EXT}";
2876 $lperl = "$dir/$lperl";
2877 print STDOUT "Warning: $libperl not found
2878 If you're going to build a static perl binary, make sure perl is installed
2879 otherwise ignore this warning\n"
2880 unless (-f $lperl || defined($self->{PERL_SRC}));
2884 MAP_LIBPERL = $libperl
2888 \$(INST_ARCHAUTODIR)/extralibs.all: \$(INST_ARCHAUTODIR)/.exists ".join(" \\\n\t", @$extra)."
2889 \@ $self->{RM_F} \$\@
2894 foreach $catfile (@$extra){
2895 push @m, "\tcat $catfile >> \$\@\n";
2899 \$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
2900 \$(MAP_LINKCMD) -o \$\@ $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
2901 @ echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
2902 @ echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
2903 @ echo 'To remove the intermediate files say'
2904 @ echo ' make -f $makefilename map_clean'
2906 $tmp/perlmain\$(OBJ_EXT): $tmp/perlmain.c
2908 push @m, "\tcd $tmp && $cccmd -I\$(PERL_INC) perlmain.c\n";
2911 $tmp/perlmain.c: $makefilename}, q{
2913 @ $(PERL) $(MAP_PERLINC) -e 'use ExtUtils::Miniperl; \\
2914 writemain(grep s#.*/auto/##, qw|$(MAP_STATIC)|)' > $@.tmp && mv $@.tmp $@
2918 # We write EXTRA outside the perl program to have it eval'd by the shell
2921 @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
2922 @ $(FULLPERL) -e 'use ExtUtils::MakeMaker; MY->new->writedoc("Perl binary",' \\
2923 -e '"$(MAP_TARGET)", "MAP_STATIC=$(MAP_STATIC)",' \\
2924 -e '"MAP_EXTRA=@ARGV", "MAP_LIBPERL=$(MAP_LIBPERL)")' \\
2925 -- `cat $(INST_ARCHAUTODIR)/extralibs.all` >> $(INSTALLARCHLIB)/perllocal.pod
2929 inst_perl: pure_inst_perl doc_inst_perl
2931 pure_inst_perl: \$(MAP_TARGET)
2932 $self->{CP} \$(MAP_TARGET) \$(INSTALLBIN)/\$(MAP_TARGET)
2937 $self->{RM_F} $tmp/perlmain\$(OBJ_EXT) $tmp/perlmain.c \$(MAP_TARGET) $makefilename \$(INST_ARCHAUTODIR)/extralibs.all
2944 my($self,$libs) = @_;
2946 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2947 $self = $ExtUtils::MakeMaker::Parent[-1];
2949 require ExtUtils::Liblist;
2950 ExtUtils::Liblist::ext($libs, $ExtUtils::MakeMaker::Verbose);
2956 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2957 $self = $ExtUtils::MakeMaker::Parent[-1];
2961 # only AIX requires a symbol list at this point
2962 # (so does VMS, but that's handled by the MM_VMS package)
2963 return '' unless $Config::Config{osname} eq 'aix';
2965 $self->init_main(@ARGV) unless defined $self->{BASEEXT};
2966 if (! $self->{DL_FUNCS}) {
2968 ($bootfunc = $self->{NAME}) =~ s/\W/_/g;
2969 $self->{DL_FUNCS} = {$self->{BASEEXT} => ["boot_$bootfunc"]};
2971 rename "$self->{BASEEXT}.exp", "$self->{BASEEXT}.exp_old";
2973 open(EXP,">$self->{BASEEXT}.exp") or die $!;
2974 print EXP join("\n",@{$self->{DL_VARS}}, "\n") if $self->{DL_VARS};
2975 foreach $pkg (keys %{$self->{DL_FUNCS}}) {
2976 (my($prefix) = $pkg) =~ s/\W/_/g;
2978 foreach $func (@{$self->{DL_FUNCS}->{$pkg}}) {
2979 $func = "XS_${prefix}_$func" unless $func =~ /^boot_/;
2980 print EXP "$func\n";
2986 # --- Make-Directories section (internal method) ---
2987 # dir_target(@array) returns a Makefile entry for the file .exists in each
2988 # named directory. Returns nothing, if the entry has already been processed.
2989 # We're helpless though, if the same directory comes as $(FOO) _and_ as "bar".
2990 # Both of them get an entry, that's why we use "::". I chose '$(PERL)' as the
2991 # prerequisite, because there has to be one, something that doesn't change
2995 my($self,@dirs) = @_;
2997 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
2998 $self = $ExtUtils::MakeMaker::Parent[-1];
3001 foreach $dir (@dirs) {
3002 next if $self->{DIR_TARGET}{$self}{$dir}++;
3004 $dir/.exists :: \$(PERL)
3006 \@ \$(TOUCH) $dir/.exists
3007 \@-\$(CHMOD) 755 $dir
3013 # --- Output postprocessing section ---
3014 # nicetext is included to make VMS support easier
3015 sub nicetext { # Just return the input - no action needed
3016 my($self,$text) = @_;
3018 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
3019 $self = $ExtUtils::MakeMaker::Parent[-1];
3024 sub needs_linking { # Does this module need linking? Looks into
3025 # subdirectory objects (see also has_link_code()
3028 $caller = (caller(0))[3];
3030 ExtUtils::MakeMaker::TieAtt::warndirectuse($caller);
3031 $self = $ExtUtils::MakeMaker::Parent[-1];
3033 Carp::confess("Needs_linking called too early") if $caller =~ /^ExtUtils::MakeMaker::/;
3034 return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING};
3036 # print Carp::longmess();
3037 # print "EO_DEBUG\n";
3038 if ($self->has_link_code or $self->{MAKEAPERL}){
3039 $self->{NEEDS_LINKING} = 1;
3042 foreach $child (keys %{$self->{CHILDREN}}) {
3043 if ($self->{CHILDREN}->{$child}->needs_linking) {
3044 $self->{NEEDS_LINKING} = 1;
3048 return $self->{NEEDS_LINKING} = 0;
3053 return $self->{HAS_LINK_CODE} if defined $self->{HAS_LINK_CODE};
3054 if ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB}){
3055 $self->{HAS_LINK_CODE} = 1;
3058 return $self->{HAS_LINK_CODE} = 0;
3061 # --- perllocal.pod section ---
3063 my($self,$what,$name,@attribs)=@_;
3065 ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
3066 $self = $ExtUtils::MakeMaker::Parent[-1];
3070 chop($time = ctime(time));
3071 print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
3072 print join "\n\n=item *\n\n", map("C<$_>",@attribs);
3073 print "\n\n=back\n\n";
3076 sub catdir { shift; join('/',@_); }
3077 sub catfile { shift; join('/',@_); }
3079 package ExtUtils::MM_OS2;
3083 #use File::Basename;
3086 Exporter::import('ExtUtils::MakeMaker',
3090 my($self,%attribs) = @_;
3092 my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
3093 my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
3095 (my $boot = $self->{NAME}) =~ s/:/_/g;
3097 if (not $self->{SKIPHASH}{'dynamic'}) {
3099 $self->{BASEEXT}.def: Makefile.PL"
3101 echo "LIBRARY ' . "'$self->{DLBASE}'" . ' INITINSTANCE TERMINSTANCE" > $@ ; \\
3102 echo "CODE LOADONCALL" >> $@ ; \\
3103 echo "DATA LOADONCALL NONSHARED MULTIPLE" >> $@ ; \\
3104 echo "EXPORTS" >> $@ ; \\
3105 echo " ' . "boot_$boot" . '" >> $@');
3106 foreach $sym (keys %$funcs, @$vars) {
3108 echo \" $sym\" >> \$@");
3116 sub replace_manpage_seperator {
3117 my($self,$man) = @_;
3123 my($self,$file) = @_;
3124 return 1 if -x $file && ! -d _;
3125 return 1 if -x "$file.exe" && ! -d _;
3129 # the following keeps AutoSplit happy
3130 package ExtUtils::MakeMaker;
3137 ExtUtils::MakeMaker - create an extension Makefile
3141 C<use ExtUtils::MakeMaker;>
3143 C<WriteMakefile( ATTRIBUTE =E<gt> VALUE [, ...] );>
3147 C<MM-E<gt>new(\%att)-E<gt>flush;>
3151 This utility is designed to write a Makefile for an extension module
3152 from a Makefile.PL. It is based on the Makefile.SH model provided by
3153 Andy Dougherty and the perl5-porters.
3155 It splits the task of generating the Makefile into several subroutines
3156 that can be individually overridden. Each subroutine returns the text
3157 it wishes to have written to the Makefile.
3159 =head2 Hintsfile support
3161 MakeMaker.pm uses the architecture specific information from
3162 Config.pm. In addition it evaluates architecture specific hints files
3163 in a C<hints/> directory. The hints files are expected to be named
3164 like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
3165 name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
3166 MakeMaker within the WriteMakefile() subroutine, and can be used to
3167 execute commands as well as to include special variables. The rules
3168 which hintsfile is chosen are the same as in Configure.
3170 The hintsfile is eval()ed immediately after the arguments given to
3171 WriteMakefile are stuffed into a hash reference $self but before this
3172 reference becomes blessed. So if you want to do the equivalent to
3173 override or create an attribute you would say something like
3175 $self->{LIBS} = ['-ldbm -lucb -lc'];
3177 =head2 What's new in version 5 of MakeMaker
3179 MakeMaker 5 is pure object oriented. This allows us to write an
3180 unlimited number of Makefiles with a single perl process. 'perl
3181 Makefile.PL' with MakeMaker 5 goes through all subdirectories
3182 immediately and evaluates any Makefile.PL found in the next level
3183 subdirectories. The benefit of this approach comes in useful for both
3184 single and multi directories extensions.
3186 Multi directory extensions have an immediately visible speed
3187 advantage, because there's no startup penalty for any single
3188 subdirectory Makefile.
3190 Single directory packages benefit from the much improved
3191 needs_linking() method. As the main Makefile knows everything about
3192 the subdirectories, a needs_linking() method can now query all
3193 subdirectories if there is any linking involved down in the tree. The
3194 speedup for PM-only Makefiles seems to be around 1 second on my
3197 =head2 Incompatibilities between MakeMaker 5.00 and 4.23
3199 There are no incompatibilities in the short term, as all changes are
3200 accompanied by short-term workarounds that guarantee full backwards
3203 You are likely to face a few warnings that expose deprecations which
3204 will result in incompatibilities in the long run:
3206 You should not use %att directly anymore. Instead any subroutine you
3207 override in the MY package will be called by the object method, so you
3208 can access all object attributes directly via the object in $_[0].
3210 You should not call the class methos MM->something anymore. Instead
3211 you should call the superclass. Something like
3215 $self->MM::constants();
3218 Especially the libscan() and exescan() methods should be altered
3219 towards OO programming, that means do not expect that $_ to contain
3220 the path but rather $_[1].
3222 You should program with more care. Watch out for any MakeMaker
3223 variables. Do not try to alter them, somebody else might depend on
3224 them. E.g. do not overwrite the ExtUtils::MakeMaker::VERSION variable
3225 (this happens if you import it and then set it to the version number
3226 of your package), do not expect that the INST_LIB variable will be
3227 ./blib (do not 'unshift @INC, "./blib" and do not use
3228 "blib/FindBin.pm"). Do not croak in your Makefile.PL, let it fail with
3231 Try to build several extensions simultanously to debug your
3232 Makefile.PL. You can unpack a bunch of distributed packages, so your
3233 directory looks like
3235 Alias-1.00/ Net-FTP-1.01a/ Set-Scalar-0.001/
3236 ExtUtils-Peek-0.4/ Net-Ping-1.00/ SetDualVar-1.0/
3237 Filter-1.06/ NetTools-1.01a/ Storable-0.1/
3238 GD-1.00/ Religion-1.04/ Sys-Domain-1.05/
3239 MailTools-1.03/ SNMP-1.5b/ Term-ReadLine-0.7/
3241 and write a dummy Makefile.PL that contains nothing but
3243 use ExtUtils::MakeMaker;
3246 That's actually fun to watch :)
3248 Final suggestion: Try to delete all of your MY:: subroutines and
3249 watch, if you really still need them. MakeMaker might already do what
3250 you want without them. That's all about it.
3253 =head2 Default Makefile Behaviour
3255 The automatically generated Makefile enables the user of the extension
3258 perl Makefile.PL # optionally "perl Makefile.PL verbose"
3260 make test # optionally set TEST_VERBOSE=1
3261 make install # See below
3263 The Makefile to be produced may be altered by adding arguments of the
3264 form C<KEY=VALUE>. If the user wants to work with a different perl
3265 than the default, this can be achieved with
3267 perl Makefile.PL PERL=/tmp/myperl5
3269 Other interesting targets in the generated Makefile are
3271 make config # to check if the Makefile is up-to-date
3272 make clean # delete local temp files (Makefile gets renamed)
3273 make realclean # delete derived files (including ./blib)
3274 make dist # see below the Distribution Support section
3276 =head2 Special case make install
3278 make alone puts all relevant files into directories that are named by
3279 the macros INST_LIB, INST_ARCHLIB, INST_EXE, INST_MAN1DIR, and
3280 INST_MAN3DIR. All these default to ./blib or something below blib if
3281 you are I<not> building below the perl source directory. If you I<are>
3282 building below the perl source, INST_LIB and INST_ARCHLIB default to
3283 ../../lib, and INST_EXE is not defined.
3285 The I<install> target of the generated Makefile is a recursive call to
3288 INST_LIB to INSTALLPRIVLIB
3289 INST_ARCHLIB to INSTALLARCHLIB
3290 INST_EXE to INSTALLBIN
3291 INST_MAN1DIR to INSTALLMAN1DIR
3292 INST_MAN3DIR to INSTALLMAN3DIR
3294 The INSTALL... macros in turn default to their %Config
3295 ($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
3297 The recommended way to proceed is to set only the INSTALL* macros, not
3298 the INST_* targets. In doing so, you give room to the compilation
3299 process without affecting important directories. Usually a make
3300 test will succeed after the make, and a make install can finish
3303 MakeMaker gives you much more freedom than needed to configure
3304 internal variables and get different results. It is worth to mention,
3305 that make(1) also lets you configure most of the variables that are
3306 used in the Makefile. But in the majority of situations this will not
3307 be necessary, and should only be done, if the author of a package
3310 The usual relationship between INSTALLPRIVLIB and INSTALLARCHLIB is
3311 that the latter is a subdirectory of the former with the name
3312 C<$Config{archname}>, MakeMaker supports the user who sets
3313 INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not, then
3314 MakeMaker defaults the latter to be INSTALLPRIVLIB/ARCHNAME if that
3315 directory exists, otherwise it defaults to INSTALLPRIVLIB.
3318 =head2 PREFIX attribute
3320 The PREFIX attribute can be used to set the INSTALL* attributes
3321 (except INSTALLMAN1DIR) in one go. The quickest way to install a
3322 module in a non-standard place
3324 perl Makefile.PL PREFIX=~
3328 perl Makefile.PL INSTALLPRIVLIB=~/perl5/lib INSTALLBIN=~/bin \
3329 INSTALLMAN3DIR=~/perl5/man/man3
3331 Note, that the tilde expansion is done by MakeMaker, not by perl by
3332 default, nor by make.
3334 It is important to know, that the INSTALL* macros should be absolute
3335 paths, never relativ ones. Packages with multiple Makefile.PLs in
3336 different directories get the contents of the INSTALL* macros
3337 propagated verbatim. (The INST_* macros will be corrected, if they are
3338 relativ paths, but not the INSTALL* macros.)
3340 If the user has superuser privileges, and is not working on AFS
3341 (Andrew File System) or relatives, then the defaults for
3342 INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLBIN, etc. will be appropriate,
3343 and this incantation will be the best:
3345 perl Makefile.PL; make; make test
3348 make install per default writes some documentation of what has been
3349 done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This is
3350 an experimental feature. It can be bypassed by calling make
3355 will have to specify the installation directories as these most
3356 probably have changed since perl itself has been installed. They will
3357 have to do this by calling
3359 perl Makefile.PL INSTALLPRIVLIB=/afs/here/today \
3360 INSTALLBIN=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
3363 In nested extensions with many subdirectories, the INSTALL* arguments
3364 will get propagated to the subdirectories. Be careful to repeat this
3365 procedure every time you recompile an extension, unless you are sure
3366 the AFS istallation directories are still valid.
3370 =head2 Static Linking of a new Perl Binary
3372 An extension that is built with the above steps is ready to use on
3373 systems supporting dynamic loading. On systems that do not support
3374 dynamic loading, any newly created extension has to be linked together
3375 with the available resources. MakeMaker supports the linking process
3376 by creating appropriate targets in the Makefile whenever an extension
3377 is built. You can invoke the corresponding section of the makefile with
3381 That produces a new perl binary in the current directory with all
3382 extensions linked in that can be found in INST_ARCHLIB (which usually
3383 is C<./blib>) and PERL_ARCHLIB. To do that, MakeMaker writes a new
3384 Makefile, on UNIX, this is called Makefile.aperl (may be system
3385 dependent). If you want to force the creation of a new perl, it is
3386 recommended, that you delete this Makefile.aperl, so INST_ARCHLIB and
3387 PERL_ARCHLIB are searched-through for linkable libraries again.
3389 The binary can be installed into the directory where perl normally
3390 resides on your machine with
3394 To produce a perl binary with a different name than C<perl>, either say
3396 perl Makefile.PL MAP_TARGET=myperl
3403 make myperl MAP_TARGET=myperl
3404 make inst_perl MAP_TARGET=myperl
3406 In any case you will be prompted with the correct invocation of the
3407 C<inst_perl> target that installs the new binary into INSTALLBIN.
3409 Note, that there is a C<makeaperl> scipt in the perl distribution,
3410 that supports the linking of a new perl binary in a similar fashion,
3411 but with more options.
3413 make inst_perl per default writes some documentation of what has been
3414 done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This
3415 can be bypassed by calling make pure_inst_perl.
3417 Warning: the inst_perl: target is rather mighty and will probably
3418 overwrite your existing perl binary. Use with care!
3420 Sometimes you might want to build a statically linked perl although
3421 your system supports dynamic loading. In this case you may explicitly
3422 set the linktype with the invocation of the Makefile.PL or make:
3424 perl Makefile.PL LINKTYPE=static # recommended
3428 make LINKTYPE=static # works on most systems
3430 =head2 Determination of Perl Library and Installation Locations
3432 MakeMaker needs to know, or to guess, where certain things are
3433 located. Especially INST_LIB and INST_ARCHLIB (where to install files
3434 into), PERL_LIB and PERL_ARCHLIB (where to read existing modules
3435 from), and PERL_INC (header files and C<libperl*.*>).
3437 Extensions may be built either using the contents of the perl source
3438 directory tree or from an installed copy of the perl library. The
3439 recommended way is to build extensions after you have run 'make
3440 install' on perl itself. Do that in a directory that is not below the
3441 perl source tree. The support for extensions below the ext directory
3442 of the perl distribution is only good for the standard extensions that
3445 If an extension is being built below the C<ext/> directory of the perl
3446 source then MakeMaker will set PERL_SRC automatically (e.g., C<../..>).
3447 If PERL_SRC is defined then other variables default to the following:
3450 PERL_LIB = PERL_SRC/lib
3451 PERL_ARCHLIB = PERL_SRC/lib
3453 INST_ARCHLIB = PERL_ARCHLIB
3455 If an extension is being built away from the perl source then MakeMaker
3456 will leave PERL_SRC undefined and default to using the installed copy
3457 of the perl library. The other variables default to the following:
3459 PERL_INC = $archlib/CORE
3461 PERL_ARCHLIB = $archlib
3463 INST_ARCHLIB = ./blib/<archname>
3465 If perl has not yet been installed then PERL_SRC can be defined on the
3466 command line as shown in the previous section.
3468 =head2 Useful Default Makefile Macros
3470 FULLEXT = Pathname for extension directory (eg DBD/Oracle).
3472 BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
3474 ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD)
3476 INST_LIBDIR = C<$(INST_LIB)$(ROOTEXT)>
3478 INST_AUTODIR = C<$(INST_LIB)/auto/$(FULLEXT)>
3480 INST_ARCHAUTODIR = C<$(INST_ARCHLIB)/auto/$(FULLEXT)>
3482 =head2 Using Attributes (and Parameters)
3484 The following attributes can be specified as arguments to WriteMakefile()
3485 or as NAME=VALUE pairs on the command line:
3489 # The following "=item C" is used by the attrib_help routine
3490 # likewise the "=back" below. So be careful when changing it!
3496 Ref to array of *.c file names. Initialised from a directory scan
3497 and the values portion of the XS attribute hash. This is not
3498 currently used by MakeMaker but may be handy in Makefile.PLs.
3502 Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
3503 config.sh. MakeMaker will add to CONFIG the following values anyway:
3521 CODE reference. Extension writers are requested to do all their
3522 initializing within that subroutine. The subroutine
3523 should return a hash reference. The hash may contain
3524 further attributes, e.g. {LIBS => ...}, that have to
3525 be determined by some evaluation method.
3529 Something like C<"-DHAVE_UNISTD_H">
3533 Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm'
3538 Your name for distributing the package (by tar file) This defaults to
3543 Hashref of symbol names for routines to be made available as
3544 universal symbols. Each key/value pair consists of the package name
3545 and an array of routine names in that package. Used only under AIX
3546 (export lists) and VMS (linker options) at present. The routine
3547 names supplied will be expanded in the same way as XSUB names are
3548 expanded by the XS() macro. Defaults to
3550 {"$(NAME)" => ["boot_$(NAME)" ] }
3554 {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
3555 "NetconfigPtr" => [ 'DESTROY'] }
3559 Array of symbol names for variables to be made available as
3560 universal symbols. Used only under AIX (export lists) and VMS
3561 (linker options) at present. Defaults to []. (e.g. [ qw(
3562 Foo_version Foo_numstreams Foo_tree ) ])
3566 Ref to array of executable files. The files will be copied to the
3567 INST_EXE directory. Make realclean will delete them from there
3570 =item FIRST_MAKEFILE
3572 The name of the Makefile to be produced. Defaults to the contents of
3573 MAKEFILE, but can be overridden. This is used for the second Makefile
3574 that will be produced for the MAP_TARGET.
3578 Perl binary able to run this extension.
3582 Ref to array of *.h file names. Similar to C.
3586 Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
3588 =item INSTALLARCHLIB
3590 Used by 'make install', which sets INST_ARCHLIB to this value.
3594 Used by 'make install' which sets INST_EXE to this value.
3596 =item INSTALLMAN1DIR
3598 This directory gets the man pages at 'make install' time. Defaults to
3599 $Config{installman1dir}.
3601 =item INSTALLMAN3DIR
3603 This directory gets the man pages at 'make install' time. Defaults to
3604 $Config{installman3dir}.
3606 =item INSTALLPRIVLIB
3608 Used by 'make install', which sets INST_LIB to this value.
3612 Same as INST_LIB for architecture dependent files.
3616 Directory, where executable scripts should be installed during
3617 'make'. Defaults to "./blib/ARCHNAME", just to have a dummy
3618 location during testing. make install will set
3619 INST_EXE to INSTALLBIN.
3623 Directory where we put library files of this extension while building
3628 Directory to hold the man pages at 'make' time
3632 Directory to hold the man pages at 'make' time
3636 defaults to "$(OBJECT)" and is used in the ld command to specify
3637 what files to link/load from (also see dynamic_lib below for how to
3642 The filename of the perllibrary that will be used together with this
3643 extension. Defaults to libperl.a.
3647 An anonymous array of alternative library
3648 specifications to be searched for (in order) until
3649 at least one library is found. E.g.
3651 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
3653 Mind, that any element of the array
3654 contains a complete set of arguments for the ld
3655 command. So do not specify
3657 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
3659 See ODBM_File/Makefile.PL for an example, where an array is needed. If
3660 you specify a scalar as in
3662 'LIBS' => "-ltcl -ltk -lX11"
3664 MakeMaker will turn it into an array with one element.
3668 'static' or 'dynamic' (default unless usedl=undef in config.sh) Should
3669 only be used to force static linking (also see
3674 Boolean which tells MakeMaker, that it should include the rules to
3675 make a perl. This is handled automatically as a switch by
3676 MakeMaker. The user normally does not need it.
3680 The name of the Makefile to be produced.
3684 Hashref of pod-containing files. MakeMaker will default this to all
3685 EXE_FILES files that include POD directives. The files listed
3686 here will be converted to man pages and installed as was requested
3691 Hashref of .pm and .pod files. MakeMaker will default this to all
3692 .pod and any .pm files that include POD directives. The files listed
3693 here will be converted to man pages and installed as was requested
3698 If it is intended, that a new perl binary be produced, this variable
3699 may hold a name for that binary. Defaults to perl
3703 If the extension links to a library that it builds set this to the
3704 name of the library (see SDBM_File)
3708 Perl module name for this extension (DBD::Oracle). This will default
3709 to the directory name but should be explicitly defined in the
3714 MakeMaker will figure out, if an extension contains linkable code
3715 anywhere down the directory tree, and will set this variable
3716 accordingly, but you can speed it up a very little bit, if you define
3717 this boolean variable yourself.
3721 Boolean. Experimental attribute to inhibit descending into
3726 List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
3727 string containing all object files, e.g. "tkpBind.o
3728 tkpButton.o tkpCanvas.o"
3732 Perl binary for tasks that can be done by miniperl
3736 The call to the program that is able to compile perlmain.c. Defaults
3741 Same as above for architecture dependent files
3745 Directory containing the Perl library to use.
3749 Directory containing the Perl source code (use of this should be
3750 avoided, it may be undefined)
3754 Ref to hash of files to be processed as perl programs. MakeMaker
3755 will default to any found *.PL file (except Makefile.PL) being keys
3756 and the basename of the file being the value. E.g.
3758 {'foobar.PL' => 'foobar'}
3760 The *.PL files are expected to produce output to the target files
3765 Hashref of .pm files and *.pl files to be installed. e.g.
3767 {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
3769 By default this will include *.pm and *.pl. If a lib directory
3770 exists and is not listed in DIR (above) then any *.pm and *.pl files
3771 it contains will also be included by default. Defining PM in the
3772 Makefile.PL will override PMLIBDIRS.
3776 Ref to array of subdirectories containing library files. Defaults to
3777 [ 'lib', $(BASEEXT) ]. The directories will be scanned and any files
3778 they contain will be installed in the corresponding location in the
3779 library. A libscan() method can be used to alter the behaviour.
3780 Defining PM in the Makefile.PL will override PMLIBDIRS.
3784 Can be used to set the three INSTALL* attributes in one go (except for
3785 INSTALLMAN1DIR). They will have PREFIX as a common directory node and
3786 will branch from that node into lib/, lib/ARCHNAME, and bin/ unless
3787 you override one of them.
3791 Placeholder, not yet implemented. Will eventually be a hashref: Names
3792 of modules that need to be available to run this extension (e.g. Fcntl
3793 for SDBM_File) are the keys of the hash and the desired version is the
3794 value. Needs further evaluation, should probably allow to define
3795 prerequisites among header files, libraries, perl version, etc.
3799 Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
3804 Ref to array of typemap file names. Use this when the typemaps are
3805 in some directory other than the current directory or when they are
3806 not named B<typemap>. The last typemap in the list takes
3807 precedence. A typemap in the current directory has highest
3808 precedence, even if it isn't listed in TYPEMAPS. The default system
3809 typemap has lowest precedence.
3813 Your version number for distributing the package. This defaults to
3818 Hashref of .xs files. MakeMaker will default this. e.g.
3820 {'name_of_file.xs' => 'name_of_file.c'}
3822 The .c files will automatically be included in the list of files
3823 deleted by a make clean.
3827 String of options to pass to xsubpp. This might include C<-C++> or
3828 C<-extern>. Do not include typemaps here; the TYPEMAP parameter exists for
3833 May be set to an empty string, C<-prototypes>, or
3834 C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
3835 defaults to the empty string for older versions of xsubpp and to
3836 C<-noprototypes> for more recent ones. The default will change to
3837 C<-prototypes> really soon now. So do not rely on the default when
3838 writing extensions. Better armour your extension with prototype
3839 support from the start.
3843 =head2 Additional lowercase attributes
3845 can be used to pass parameters to the methods which implement that
3846 part of the Makefile. These are not normally required:
3852 {FILES => "*.xyz foo"}
3856 {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => 'gz',
3857 SHAR => 'shar -m', DIST_CP => 'ln'}
3859 If you specify COMPRESS, then SUFFIX should also be altered, as it is
3860 needed to tell make the target file of the compression. Setting
3861 DIST_CP to ln can be useful, if you need to preserve the timestamps on
3862 your files. DIST_CP can take the values 'cp', which copies the file,
3863 'ln', which links the file, and 'best' which copies symbolic links and
3864 links the rest. Default is 'best'.
3868 {ARMAYBE => 'ar', OTHERLDFLAGS => '...'}
3872 {SPLITLIB => '$(INST_LIB)' (default) or '$(INST_ARCHLIB)'}
3876 {LINKTYPE => 'static', 'dynamic' or ''}
3878 NB: Extensions that have nothing but *.pm files had to say
3882 with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
3883 can be deleted safely. MakeMaker recognizes, when there's nothing to
3888 {ANY_MACRO => ANY_VALUE, ...}
3892 {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
3894 =item tool_autosplit
3902 # bug in pod2html, so leave the =back
3904 # Don't delete this cut, MM depends on it!
3906 =head2 Overriding MakeMaker Methods
3908 If you cannot achieve the desired Makefile behaviour by specifying
3909 attributes you may define private subroutines in the Makefile.PL.
3910 Each subroutines returns the text it wishes to have written to
3911 the Makefile. To override a section of the Makefile you can
3914 sub MY::c_o { "new literal text" }
3916 or you can edit the default by saying something like:
3922 s/old text/new text/;
3926 Both methods above are available for backwards compatibility with
3929 If you still need a different solution, try to develop another
3930 subroutine, that fits your needs and submit the diffs to
3931 F<perl5-porters@nicoh.com> or F<comp.lang.perl.misc> as appropriate.
3933 =head2 Distribution Support
3935 For authors of extensions MakeMaker provides several Makefile
3936 targets. Most of the support comes from the ExtUtils::Manifest module,
3937 where additional documentation can be found.
3941 =item make distcheck
3943 reports which files are below the build directory but not in the
3944 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
3947 =item make skipcheck
3949 reports which files are skipped due to the entries in the
3950 C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
3953 =item make distclean
3955 does a realclean first and then the distcheck. Note that this is not
3956 needed to build a new distribution as long as you are sure, that the
3957 MANIFEST file is ok.
3961 rewrites the MANIFEST file, adding all remaining files found (See
3962 ExtUtils::Manifest::mkmanifest() for details)
3966 Copies all the files that are in the MANIFEST file to a newly created
3967 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
3968 exists, it will be removed first.
3972 Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
3973 a make test in that directory.
3977 First does a command $(PREOP) which defaults to a null command. Does a
3978 distdir next and runs C<tar> on that directory into a tarfile. Then
3979 deletes the distdir. Finishes with a command $(POSTOP) which defaults
3984 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
3986 =item make uutardist
3988 Runs a tardist first and uuencodes the tarfile.
3992 First does a command $(PREOP) which defaults to a null command. Does a
3993 distdir next and runs C<shar> on that directory into a sharfile. Then
3994 deletes the distdir. Finishes with a command $(POSTOP) which defaults
3995 to a null command. Note: For shdist to work properly a C<shar>
3996 program that can handle directories is mandatory.
4000 Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
4004 Customization of the dist targets can be done by specifying a hash
4005 reference to the dist attribute of the WriteMakefile call. The
4006 following parameters are recognized:
4009 COMPRESS ('compress')
4012 RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
4020 WriteMakefile( 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" })
4025 Andy Dougherty F<E<lt>doughera@lafcol.lafayette.eduE<gt>>, Andreas
4026 KE<ouml>nig F<E<lt>A.Koenig@franz.ww.TU-Berlin.DEE<gt>>, Tim Bunce
4027 F<E<lt>Tim.Bunce@ig.co.ukE<gt>>. VMS support by Charles Bailey
4028 F<E<lt>bailey@HMIVAX.HUMGEN.UPENN.EDUE<gt>>. Contact the makemaker
4029 mailing list C<mailto:makemaker@franz.ww.tu-berlin.de>, if you have any
4032 =head1 MODIFICATION HISTORY
4034 For a more complete documentation see the file Changes in the
4035 MakeMaker distribution package.
4039 See the file Todo in the MakeMaker distribution package.