1 package ExtUtils::MakeMaker;
3 $Version = 4.16; # Last edited $Date: 1995/06/18 16:04:00 $ by Tim Bunce
5 $Version_OK = 4.13; # Makefiles older than $Version_OK will die
6 # (Will be checked from MakeMaker version 4.13 onwards)
8 # $Id: MakeMaker.pm,v 1.21 1995/06/06 06:14:16 k Exp k $
16 @EXPORT = qw(&WriteMakefile $Verbose &prompt);
17 @EXPORT_OK = qw($Version &Version_check %att %skip %Recognized_Att_Keys
18 @MM_Sections %MM_Sections
19 &help &neatvalue &mkbootstrap &mksymlists);
21 $Is_VMS = $Config{'osname'} eq 'VMS';
22 require ExtUtils::MM_VMS if $Is_VMS;
26 $Version = $Version;# avoid typo warning
35 die "prompt function called without an argument" unless defined $mess;
36 $def = "" unless defined $def;
37 my $dispdef = "[$def] ";
38 print "$mess $dispdef";
39 chop(my $ans = <STDIN>);
44 # We allow extension-specific hints files.
46 # First we look for the best hintsfile we have
48 my($hint)="$Config{'osname'}_$Config{'osvers'}";
53 while (defined ($_ = readdir DIR)) {
55 next unless s/\.pl$//;
56 next unless /^$Config{'osname'}/;
57 # Don't trust a hintfile for a later OS version:
66 return unless @goodhints; # There was no hintsfile
67 # the last one in lexical ordering is our choice:
68 $hint=(sort @goodhints)[-1];
70 # execute the hintsfile:
71 open HINTS, "hints/$hint.pl";
74 print STDOUT "Processing hints file hints/$hint.pl";
75 eval join('',@goodhints);
76 print STDOUT $@ if $@;
79 # Setup dummy package:
80 # MY exists for overriding methods to be defined within
81 unshift(@MY::ISA, qw(MM));
83 # Dummy package MM inherits actual methods from OS-specific
84 # default packages. We use this intermediate package so
85 # MY->func() can call MM->func() and get the proper
86 # default routine without having to know under what OS
88 unshift(@MM::ISA, $Is_VMS ? qw(ExtUtils::MM_VMS MM_Unix) : qw(MM_Unix));
90 $Attrib_Help = <<'END';
91 NAME: Perl module name for this extension (DBD::Oracle)
92 This will default to the directory name but should
93 be explicitly defined in the Makefile.PL.
95 DISTNAME: Your name for distributing the package (by tar file)
96 This defaults to NAME above.
98 VERSION: Your version number for distributing the package.
101 INST_LIB: Perl library directory to directly install
104 INSTALLPRIVLIB:Used by 'make install', which sets INST_LIB to this value.
106 INST_ARCHLIB: Perl architecture-dependent library to directly install
109 INSTALLARCHLIB:Used by 'make install', which sets INST_ARCHLIB to this value.
111 INST_EXE: Directory, where executable scripts should be installed during
112 'make'. Defaults to "./blib", just to have a dummy location
113 during testing. C<make install> will set INST_EXE to INSTALLBIN.
115 INSTALLBIN: Used by 'make install' which sets INST_EXE to this value.
117 PERL_LIB: Directory containing the Perl library to use.
119 PERL_ARCHLIB: Architectur dependent directory containing the Perl library to use.
121 PERL_SRC: Directory containing the Perl source code
122 (use of this should be avoided, it may be undefined)
124 INC: Include file dirs eg: '-I/usr/5include -I/path/to/inc'
126 DEFINE: something like "-DHAVE_UNISTD_H"
128 OBJECT: List of object files, defaults to '$(BASEEXT).o',
129 but can be a long string containing all object files,
130 e.g. "tkpBind.o tkpButton.o tkpCanvas.o"
132 MYEXTLIB: If the extension links to a library that it builds
133 set this to the name of the library (see SDBM_File)
135 LIBS: An anonymous array of alternative library specifications
136 to be searched for (in order) until at least one library
138 'LIBS' => [ "-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs" ]
139 Mind, that any element of the array contains a complete
140 set of arguments for the ld command. So do not specify
141 'LIBS' => ["-ltcl", "-ltk", "-lX11" ], #wrong
142 See ODBM_File/Makefile.PL for an example, where an
143 array is needed. If you specify a scalar as in
144 'LIBS' => "-ltcl -ltk -lX11"
145 MakeMaker will turn it into an array with one element.
147 LDFROM: defaults to "$(OBJECT)" and is used in the ld command
148 to specify what files to link/load from
149 (also see dynamic_lib below for how to specify ld flags)
151 DIR: Ref to array of subdirectories containing Makefile.PLs
152 e.g. [ 'sdbm' ] in ext/SDBM_File
154 PMLIBDIRS: Ref to array of subdirectories containing library files.
155 Defaults to [ 'lib', $(BASEEXT) ]. The directories will
156 be scanned and any files they contain will
157 be installed in the corresponding location in the library.
158 A MY::libscan() function can be used to alter the behaviour.
159 Defining PM in the Makefile.PL will override PMLIBDIRS.
161 PM: Hashref of .pm files and *.pl files to be installed.
162 e.g. { 'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm' }
163 By default this will include *.pm and *.pl. If a lib directory
164 exists and is not listed in DIR (above) then any *.pm and
165 *.pl files it contains will also be included by default.
166 Defining PM in the Makefile.PL will override PMLIBDIRS.
168 XS: Hashref of .xs files. MakeMaker will default this.
169 e.g. { 'name_of_file.xs' => 'name_of_file.c' }
170 The .c files will automatically be included in the list
171 of files deleted by a make clean.
173 C: Ref to array of *.c file names. Initialised from a directory scan
174 and the values portion of the XS attribute hash. This is not
175 currently used by MakeMaker but may be handy in Makefile.PLs.
177 H: Ref to array of *.h file names. Similar to C: above.
179 PL_FILES: Ref to hash of files to be processed as perl programs. MakeMaker
180 will default to any found C<*.PL> file (except C<Makefile.PL>) being
181 keys and the basename of the file being the value. E.g.
182 C<{ 'foobar.PL' => 'foobar' }>. The C<*.PL> files are expected to
183 produce output to the target files themselves.
185 EXE_FILES: Ref to array of executable files. The files will be copied to
186 the INST_EXE directory. Make realclean will delete them from
189 LINKTYPE: =>'static' or 'dynamic' (default unless usedl=undef in config.sh)
190 Should only be used to force static linking (also see linkext below).
192 DL_FUNCS: Hashref of symbol names for routines to be made available as
193 universal symbols. Each key/value pair consists of the package
194 name and an array of routine names in that package. Used only
195 under AIX (export lists) and VMS (linker options) at present.
196 The routine names supplied will be expanded in the same way
197 as XSUB names are expanded by the XS() macro.
198 Defaults to { "$(NAME)" => [ "boot_$(NAME)" ] }.
199 (e.g. { "RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
200 "NetconfigPtr" => [ 'DESTROY'] } )
202 DL_VARS: Array of symbol names for variables to be made available as
203 universal symbols. Used only under AIX (export lists) and VMS
204 (linker options) at present. Defaults to [].
205 (e.g. [ qw( Foo_version Foo_numstreams Foo_tree ) ])
207 CONFIG: =>[qw(archname manext)] defines ARCHNAME & MANEXT from config.sh
209 SKIP: =>[qw(name1 name2)] skip (do not write) sections of the Makefile
211 MAP_TARGET: If it is intended, that a new perl binary be produced, this variable
212 may hold a name for that binary. Defaults to C<perl>
214 LIBPERL_A: The filename of the perllibrary that will be used together
215 with this extension. Defaults to C<libperl.a>.
220 Additional lowercase attributes can be used to pass parameters to the
221 methods which implement that part of the Makefile. These are not
224 macro: {ANY_MACRO => ANY_VALUE, ...}
225 installpm: {SPLITLIB => '$(INST_LIB)' (default) or '$(INST_ARCHLIB)'}
226 linkext: {LINKTYPE => 'static', 'dynamic' or ''}
227 dynamic_lib: {ARMAYBE => 'ar', OTHERLDFLAGS => '...'}
228 clean: {FILES => "*.xyz foo"}
229 realclean: {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
230 dist: {TARFLAGS=>'cvfF', COMPRESS=>'gzip', SUFFIX=>'gz', SHAR=>'shar -m'}
231 tool_autosplit: {MAXLEN => 8}
234 sub help {print $Attrib_Help;}
236 @MM_Sections_spec = (
237 'post_initialize' => {},
238 'const_config' => {},
240 'const_loadlibs' => {},
242 'tool_autosplit' => {},
246 'post_constants' => {},
270 'staticmake' => {}, # Sadly this defines more macros
272 'postamble' => {}, # should always be last
274 %MM_Sections = @MM_Sections_spec; # looses section ordering
275 @MM_Sections = grep(!ref, @MM_Sections_spec); # keeps order
277 %Recognized_Att_Keys = %MM_Sections; # All sections are valid keys.
278 foreach(split(/\n/,$Attrib_Help)){
280 next unless m/^\s*(\w+):\s*(.*)/;
281 $Recognized_Att_Keys{$1} = $2;
282 print "Attribute '$1' => '$2'\n" if ($Verbose >= 2);
290 if ($section eq 'dynamic') {
291 print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets "
292 . "in skipped section 'dynamic_bs'\n"
293 if $skip{'dynamic_bs'} && $Verbose;
294 print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets "
295 . "in skipped section 'dynamic_lib'\n"
296 if $skip{'dynamic_lib'} && $Verbose;
298 if ($section eq 'dynamic_lib') {
299 print STDOUT "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on "
300 . "targets in skipped section 'dynamic_bs'\n"
301 if $skip{'dynamic_bs'} && $Verbose;
303 if ($section eq 'static') {
304 print STDOUT "Warning (non-fatal): Target 'static' depends on targets "
305 . "in skipped section 'static_lib'\n"
306 if $skip{'static_lib'} && $Verbose;
308 return 'skipped' if $skip{$section};
317 print STDOUT "MakeMaker (v$Version)" if $Verbose;
319 if ( Carp::longmess("") =~ "runsubdirpl" ){
320 $Correct_relativ_directories++;
322 $Correct_relativ_directories=0;
326 eval {require ExtUtils::Manifest};
328 print STDOUT "Warning: you have not installed the ExtUtils::Manifest
329 module -- skipping check of the MANIFEST file";
331 print STDOUT "Checking if your kit is complete...";
332 $ExtUtils::Manifest::Quiet=$ExtUtils::Manifest::Quiet=1; #avoid warning
333 my(@missed)=ExtUtils::Manifest::manicheck();
335 print STDOUT "Warning: the following files are missing in your kit:";
336 print "\t", join "\n\t", @missed;
337 print STDOUT "Please inform the author.\n";
339 print STDOUT "Looks good";
344 parse_args(\%att, @ARGV);
345 my(%initial_att) = %att; # record initial attributes
353 print STDOUT "Writing Makefile for $att{NAME}";
355 if (! $att{PERL_SRC} &&
356 $INC{'Config.pm'} ne "$Config{'archlib'}/Config.pm"){
357 (my $pthinks = $INC{'Config.pm'}) =~ s!/Config\.pm$!!;
360 Your perl and your Config.pm seem to have different ideas about the architecture
362 Perl thinks: $pthinks
363 Config says: $Config{"archname"}
364 This may or may not cause problems. Please check your installation of perl if you
365 have problems building this extension.
372 unlink("Makefile", "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : '');
373 open MAKE, ">MakeMaker.tmp" or die "Unable to open MakeMaker.tmp: $!";
374 select MAKE; $|=1; select STDOUT;
376 print MAKE "# This Makefile is for the $att{NAME} extension to perl.\n#";
377 print MAKE "# It was generated automatically by MakeMaker version $Version from the contents";
378 print MAKE "# of Makefile.PL. Don't edit this file, edit Makefile.PL instead.";
379 print MAKE "#\n# ANY CHANGES MADE HERE WILL BE LOST! \n#";
380 print MAKE "# MakeMaker Parameters: ";
381 foreach $key (sort keys %initial_att){
382 my($v) = neatvalue($initial_att{$key});
384 print MAKE "# $key => $v";
387 # build hash for SKIP to make testing easy
388 %skip = map( ($_,1), @{$att{'SKIP'} || []});
391 foreach $section ( @MM_Sections ){
392 print "Processing Makefile '$section' section" if ($Verbose >= 2);
393 my($skipit) = skipcheck($section);
395 print MAKE "\n# --- MakeMaker $section section $skipit.";
397 my(%a) = %{$att{$section} || {}};
398 print MAKE "\n# --- MakeMaker $section section:";
399 print MAKE "# ", join ", ", %a if $Verbose;
400 print(MAKE MY->nicetext(MY->$section( %a )));
405 print MAKE "\n# Full list of MakeMaker attribute values:";
406 foreach $key (sort keys %att){
407 my($v) = neatvalue($att{$key});
409 print MAKE "# $key => $v";
413 print MAKE "\n# End.";
415 my($finalname) = $Is_VMS ? "Descrip.MMS" : "Makefile";
416 rename("MakeMaker.tmp", $finalname);
418 chmod 0644, $finalname;
419 system("$Config{'eunicefix'} $finalname") unless $Config{'eunicefix'} eq ":";
425 my($checkversion) = @_;
426 die "Your Makefile was built with ExtUtils::MakeMaker v $checkversion.
427 Current Version is $Version. There have been considerable changes in the meantime.
428 Please rerun 'perl Makefile.PL' to regenerate the Makefile.\n" if $checkversion < $Version_OK;
429 print STDOUT "Makefile built with ExtUtils::MakeMaker v $checkversion. Current Version is $Version." unless $checkversion == $Version;
434 parse_args(\%att, @ARGV);
438 # The following mkbootstrap() is only for installations that are calling
439 # the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker
440 # write Makefiles, that use ExtUtils::Mkbootstrap directly.
442 parse_args(\%att, @ARGV);
443 MY->init_main() unless defined $att{BASEEXT};
444 eval {require ExtUtils::Mkbootstrap};
446 # Very difficult to arrive here, I suppose
447 carp "Error: $@\nVersion mismatch: This MakeMaker (v$Version) needs the ExtUtils::Mkbootstrap package. Please check your installation.";
449 ExtUtils::Mkbootstrap::Mkbootstrap($att{BASEEXT},@_);
453 my($attr, @args) = @_;
455 unless (m/(.*?)=(.*)/){
456 help(),exit 1 if m/^help$/;
457 ++$Verbose if m/^verb/;
460 my($name, $value) = ($1, $2);
461 if ($value =~ m/^~(\w+)?/){ # tilde with optional username
462 $value =~ s [^~(\w*)]
464 ((getpwnam($1))[7] || "~$1") :
468 if ($Correct_relativ_directories){
469 # This is experimental, so we don't care for efficiency
470 my @dirs = qw(INST_LIB INST_ARCHLIB INST_EXE);
473 if ($dirs{$name} && $value !~ m!^/!){ # a relativ directory
474 $value = "../$value";
478 $$attr{$name} = $value;
480 # catch old-style 'potential_libs' and inform user how to 'upgrade'
481 if (defined $$attr{'potential_libs'}){
482 my($msg)="'potential_libs' => '$$attr{potential_libs}' should be";
483 if ($$attr{'potential_libs'}){
484 print STDOUT "$msg changed to:\n\t'LIBS' => ['$$attr{potential_libs}']\n";
486 print STDOUT "$msg deleted.\n";
488 $$attr{LIBS} = [$$attr{'potential_libs'}];
489 delete $$attr{'potential_libs'};
491 # catch old-style 'ARMAYBE' and inform user how to 'upgrade'
492 if (defined $$attr{'ARMAYBE'}){
493 my($armaybe) = $$attr{'ARMAYBE'};
494 print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",
495 "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";
496 my(%dl) = %{$$attr{'dynamic_lib'} || {}};
497 $$attr{'dynamic_lib'} = { %dl, ARMAYBE => $armaybe};
498 delete $$attr{'ARMAYBE'};
500 if (defined $$attr{'LDTARGET'}){
501 print STDOUT "LDTARGET should be changed to LDFROM\n";
502 $$attr{'LDFROM'} = $$attr{'LDTARGET'};
503 delete $$attr{'LDTARGET'};
505 foreach(sort keys %{$attr}){
506 print STDOUT " $_ => ".neatvalue($$attr{$_}) if ($Verbose);
507 print STDOUT "'$_' is not a known MakeMaker parameter name.\n"
508 unless exists $Recognized_Att_Keys{$_};
515 return "undef" unless defined $v;
517 return "'$v'" unless $t;
518 return "[ ".join(', ',map("'$_'",@$v))." ]" if ($t eq 'ARRAY');
519 return "$v" unless $t eq 'HASH';
521 push(@m,"$key=>".neatvalue($val)) while (($key,$val) = each %$v);
522 return "{ ".join(', ',@m)." }";
525 # ------ Define the MakeMaker default methods in package MM_Unix ------
534 Exporter::import('ExtUtils::MakeMaker',
535 qw(%att %skip %Recognized_Att_Keys $Verbose));
537 # These attributes cannot be overridden externally
538 @Other_Att_Keys{qw(EXTRALIBS BSLOADLIBS LDLOADLIBS)} = (1) x 3;
540 if ($Is_VMS = $Config{'osname'} eq 'VMS') {
541 require VMS::Filespec;
542 import VMS::Filespec 'vmsify';
549 # Find out directory name. This may contain the extension name.
550 my($pwd) = fastcwd(); # from Cwd.pm
551 # --- Initialize Module Name and Paths
553 # NAME = The perl module name for this extension (eg DBD::Oracle).
554 # FULLEXT = Pathname for extension directory (eg DBD/Oracle).
555 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
556 # ROOTEXT = Directory part of FULLEXT with leading /.
557 unless($att{NAME}){ # we have to guess our name
560 $name =~ s:.*?([^.\]]+)\]:$1: unless ($name =~ s:.*[.\[]ext\.(.*)\]:$1:i);
561 ($att{NAME}=$name) =~ s#[.\]]#::#g;
563 $name =~ s:.*/:: unless ($name =~ s:^.*/ext/::);
564 ($att{NAME} =$name) =~ s#/#::#g;
567 ($att{FULLEXT} =$att{NAME}) =~ s#::#/#g ; #eg. BSD/Foo/Socket
568 ($att{BASEEXT} =$att{NAME}) =~ s#.*::##; #eg. Socket
569 ($att{ROOTEXT} =$att{FULLEXT}) =~ s#/?\Q$att{BASEEXT}\E$## ; # eg. /BSD/Foo
570 $att{ROOTEXT} = ($Is_VMS ? '' : '/') . $att{ROOTEXT} if $att{ROOTEXT};
573 # --- Initialize PERL_LIB, INST_LIB, PERL_SRC
575 # *Real* information: where did we get these two from? ...
576 my $inc_config_dir = dirname($INC{'Config.pm'});
577 my $inc_carp_dir = dirname($INC{'Carp.pm'});
579 # Typically PERL_* and INST_* will be identical but that need
580 # not be the case (e.g., installing into project libraries etc).
582 # Perl Macro: With source No source
583 # PERL_LIB ../../lib /usr/local/lib/perl5
584 # PERL_ARCHLIB ../../lib /usr/local/lib/perl5/sun4-sunos
585 # PERL_SRC ../.. (undefined)
587 # INST Macro: For standard for any other
589 # INST_LIB ../../lib ./blib
590 # INST_ARCHLIB ../../lib ./blib
592 unless ($att{PERL_SRC}){
593 foreach (qw(../.. ../../.. ../../../..)){
594 if ( -f "$_/config.sh"
596 && -f "$_/lib/Exporter.pm") {
602 unless ($att{PERL_SRC}){
603 # we should also consider $ENV{PERL5LIB} here
604 $att{PERL_LIB} = $Config{'privlib'} unless $att{PERL_LIB};
605 $att{PERL_ARCHLIB} = $Config{'archlib'} unless $att{PERL_ARCHLIB};
606 $att{PERL_INC} = "$att{PERL_ARCHLIB}/CORE"; # wild guess for now
607 die <<EOM unless (-f "$att{PERL_INC}/perl.h");
608 Error: Unable to locate installed Perl libraries or Perl source code.
610 It is recommended that you install perl in a standard location before
611 building extensions. You can say:
613 $^X Makefile.PL PERL_SRC=/path/to/perl/source/directory
615 if you have not yet installed perl but still want to build this
619 print STDOUT "Using header files found in $att{PERL_INC}" if $Verbose && $self->needs_linking;
621 } else { # PERL_SRC is defined here...
623 $att{PERL_LIB} = "$att{PERL_SRC}/lib" unless $att{PERL_LIB};
624 $att{PERL_ARCHLIB} = $att{PERL_LIB};
625 $att{PERL_INC} = $att{PERL_SRC};
626 # catch an situation that has occurred a few times in the past:
627 warn <<EOM unless -s "$att{PERL_SRC}/cflags";
628 You cannot build extensions below the perl source tree after executing
629 a 'make clean' in the perl source tree.
631 To rebuild extensions distributed with the perl source you should
632 simply Configure (to include those extensions) and then build perl as
633 normal. After installing perl the source tree can be deleted. It is not
634 needed for building extensions.
636 It is recommended that you unpack and build additional extensions away
637 from the perl source tree.
641 # INST_LIB typically pre-set if building an extension after
642 # perl has been built and installed. Setting INST_LIB allows
643 # you to build directly into, say $Config{'privlib'}.
644 unless ($att{INST_LIB}){
645 if (defined $att{PERL_SRC}) {
646 # require ExtUtils::Manifest;
649 # my $mani = ExtUtils::Manifest::maniread("$att{PERL_SRC}/MANIFEST");
650 # foreach $file (keys %$mani){
651 # if ($file =~ m!^ext/\Q$att{FULLEXT}!){
657 #### Temporary solution for perl5.001f:
659 #### This is just the same as was MakeMaker 4.094, but everything's prepared to
660 #### switch to a different behaviour after 5.001f
663 $att{INST_LIB} = $att{PERL_LIB};
665 $att{INST_LIB} = "./blib";
667 Warning: The $att{NAME} extension will not be installed by 'make install' in the
668 perl source directory. Please install it with 'make install' from the
674 $att{INST_LIB} = "./blib";
677 # Try to work out what INST_ARCHLIB should be if not set:
678 unless ($att{INST_ARCHLIB}){
680 "./blib" => "./blib", # our private build lib
681 $att{PERL_LIB} => $att{PERL_ARCHLIB},
682 $Config{'privlib'} => $Config{'archlib'},
683 $inc_carp_dir => $inc_config_dir,
685 $att{INST_ARCHLIB} = $archmap{$att{INST_LIB}};
686 unless($att{INST_ARCHLIB}){
687 # Oh dear, we'll have to default it and warn the user
688 my($archname) = $Config{'archname'};
689 if (-d "$att{INST_LIB}/$archname"){
690 $att{INST_ARCHLIB} = "$att{INST_LIB}/$archname";
691 print STDOUT "Defaulting INST_ARCHLIB to INST_LIB/$archname\n";
693 $att{INST_ARCHLIB} = $att{INST_LIB};
694 print STDOUT "Warning: Defaulting INST_ARCHLIB to INST_LIB ",
695 "(not architecture independent).\n";
699 $att{INST_EXE} = "./blib" unless $att{INST_EXE};
701 if( $att{INSTALLPRIVLIB} && ! $att{INSTALLARCHLIB} ){
702 my($archname) = $Config{'archname'};
703 if (-d "$att{INSTALLPRIVLIB}/$archname"){
704 $att{INSTALLARCHLIB} = "$att{INSTALLPRIVLIB}/$archname";
705 print STDOUT "Defaulting INSTALLARCHLIB to INSTALLPRIVLIB/$archname\n";
707 $att{INSTALLARCHLIB} = $att{INSTALLPRIVLIB};
708 print STDOUT "Warning: Defaulting INSTALLARCHLIB to INSTALLPRIVLIB ",
709 "(not architecture independent).\n";
712 $att{INSTALLPRIVLIB} ||= $Config{'installprivlib'};
713 $att{INSTALLARCHLIB} ||= $Config{'installarchlib'};
714 $att{INSTALLBIN} ||= $Config{'installbin'};
716 $att{MAP_TARGET} = "perl" unless $att{MAP_TARGET};
717 $att{LIBPERL_A} = $Is_VMS ? 'libperl.olb' : 'libperl.a'
718 unless $att{LIBPERL_A};
720 # make a few simple checks
721 warn "Warning: PERL_LIB ($att{PERL_LIB}) seems not to be a perl library directory
722 (Exporter.pm not found)"
723 unless (-f "$att{PERL_LIB}/Exporter.pm");
725 ($att{DISTNAME}=$att{NAME}) =~ s#(::)#-#g unless $att{DISTNAME};
726 $att{VERSION} = "0.1" unless $att{VERSION};
727 ($att{VERSION_SYM} = $att{VERSION}) =~ s/\W/_/g;
730 # --- Initialize Perl Binary Locations
732 # Find Perl 5. The only contract here is that both 'PERL' and 'FULLPERL'
733 # will be working versions of perl 5. miniperl has priority over perl
734 # for PERL to ensure that $(PERL) is usable while building ./ext/*
736 MY->find_perl(5.0, ['miniperl','perl','perl5',"perl$]" ],
737 [ grep defined $_, $att{PERL_SRC}, split(":", $ENV{PATH}),
738 $Config{'bin'} ], $Verbose )
739 unless ($att{'PERL'}); # don't check, if perl is executable, maybe they
740 # they have decided to supply switches with perl
742 # Define 'FULLPERL' to be a non-miniperl (used in test: target)
743 ($att{'FULLPERL'} = $att{'PERL'}) =~ s/miniperl/perl/
744 unless ($att{'FULLPERL'} && -x $att{'FULLPERL'});
747 $att{'PERL'} = 'MCR ' . vmsify($att{'PERL'});
748 $att{'FULLPERL'} = 'MCR ' . vmsify($att{'FULLPERL'});
753 sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
755 my($name, %dir, %xs, %c, %h, %ignore, %pl_files);
756 local(%pm); #the sub in find() has to see this hash
757 $ignore{'test.pl'} = 1;
758 $ignore{'makefile.pl'} = 1 if $Is_VMS;
759 foreach $name (lsdir(".")){
760 next if ($name =~ /^\./ or $ignore{$name});
762 $dir{$name} = $name if (-f "$name/Makefile.PL");
763 } elsif ($name =~ /\.xs$/){
764 my($c); ($c = $name) =~ s/\.xs$/.c/;
767 } elsif ($name =~ /\.c$/){
769 unless $name =~ m/perlmain\.c/; # See MAP_TARGET
770 } elsif ($name =~ /\.h$/){
772 } elsif ($name =~ /\.(p[ml]|pod)$/){
773 $pm{$name} = "\$(INST_LIBDIR)/$name";
774 } elsif ($name =~ /\.PL$/ && $name ne "Makefile.PL") {
775 ($pl_files{$name} = $name) =~ s/\.PL$// ;
779 # Some larger extensions often wish to install a number of *.pm/pl
780 # files into the library in various locations.
782 # The attribute PMLIBDIRS holds an array reference which lists
783 # subdirectories which we should search for library files to
784 # install. PMLIBDIRS defaults to [ 'lib', $att{BASEEXT} ].
785 # We recursively search through the named directories (skipping
786 # any which don't exist or contain Makefile.PL files).
788 # For each *.pm or *.pl file found MY->libscan() is called with
789 # the default installation path in $_. The return value of libscan
790 # defines the actual installation location.
791 # The default libscan function simply returns $_.
792 # The file is skipped if libscan returns false.
794 # The default installation location passed to libscan in $_ is:
796 # ./*.pm => $(INST_LIBDIR)/*.pm
797 # ./xyz/... => $(INST_LIBDIR)/xyz/...
798 # ./lib/... => $(INST_LIB)/...
800 # In this way the 'lib' directory is seen as the root of the actual
801 # perl library whereas the others are relative to INST_LIBDIR
802 # (which includes ROOTEXT). This is a subtle distinction but one
803 # that's important for nested modules.
805 $att{PMLIBDIRS} = [ 'lib', $att{BASEEXT} ] unless $att{PMLIBDIRS};
807 #only existing directories that aren't in $dir are allowed
808 @{$att{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$att{PMLIBDIRS}};
810 if (@{$att{PMLIBDIRS}}){
811 print "Searching PMLIBDIRS: @{$att{PMLIBDIRS}}"
813 use File::Find; # try changing to require !
814 File::Find::find(sub {
815 # We now allow any file in PMLIBDIRS to be installed. nTk needs that, and
816 # we should allow it.
817 # return unless m/\.p[ml]$/;
818 return if -d $_; # anything else that Can't be copied?
819 my($path, $prefix) = ($File::Find::name, '$(INST_LIBDIR)');
821 $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^lib/::);
822 local($_) = "$prefix/$striplibpath";
823 my($inst) = MY->libscan();
824 print "libscan($path) => '$inst'" if ($Verbose >= 2);
827 }, @{$att{PMLIBDIRS}});
830 $att{DIR} = [sort keys %dir] unless $att{DIRS};
831 $att{XS} = \%xs unless $att{XS};
832 $att{PM} = \%pm unless $att{PM};
833 $att{C} = [sort keys %c] unless $att{C};
834 my(@o_files) = @{$att{C}};
835 my($sufx) = $Is_VMS ? '.obj' : '.o';
836 $att{O_FILES} = [grep s/\.c$/$sufx/, @o_files] ;
837 $att{H} = [sort keys %h] unless $att{H};
838 $att{PL_FILES} = \%pl_files unless $att{PL_FILES};
843 return '' if m:/RCS/: ; # return undef triggered warnings with $Verbose>=2
847 sub init_others { # --- Initialize Other Attributes
849 for $key (keys(%Recognized_Att_Keys), keys(%Other_Att_Keys)){
850 # avoid warnings for uninitialized vars
851 next if exists $att{$key};
855 # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $att{'LIBS'}
856 # Lets look at $att{LIBS} carefully: It may be an anon array, a string or
857 # undefined. In any case we turn it into an anon array:
858 $att{LIBS}=[] unless $att{LIBS};
859 $att{LIBS}=[$att{LIBS}] if ref \$att{LIBS} eq SCALAR;
860 $att{LD_RUN_PATH} = "";
861 foreach ( @{$att{'LIBS'}} ){
862 s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace
863 my(@libs) = MY->extliblist($_);
864 if ($libs[0] or $libs[1] or $libs[2]){
865 @att{EXTRALIBS, BSLOADLIBS, LDLOADLIBS} = @libs;
867 $att{LD_RUN_PATH} = join(":",grep($_=~s/^-L//,split(" ", $libs[2])));
873 print STDOUT "CONFIG must be an array ref\n"
874 if ($att{CONFIG} and ref $att{CONFIG} ne 'ARRAY');
875 $att{CONFIG} = [] unless (ref $att{CONFIG});
876 push(@{$att{CONFIG}},
877 qw(cc libc ldflags lddlflags ccdlflags cccdlflags
878 ranlib so dlext dlsrc
880 push(@{$att{CONFIG}}, 'shellflags') if $Config{'shellflags'};
883 $att{OBJECT} = '$(BASEEXT).obj' unless $att{OBJECT};
884 $att{OBJECT} =~ s/[^,\s]\s+/, /g;
885 $att{OBJECT} =~ s/\n+/, /g;
886 $att{OBJECT} =~ s#\.o,#\.obj,#;
888 $att{OBJECT} = '$(BASEEXT).o' unless $att{OBJECT};
889 $att{OBJECT} =~ s/\n+/ \\\n\t/g;
891 $att{BOOTDEP} = (-f "$att{BASEEXT}_BS") ? "$att{BASEEXT}_BS" : "";
892 $att{LD} = ($Config{'ld'} || 'ld') unless $att{LD};
893 $att{LDFROM} = '$(OBJECT)' unless $att{LDFROM};
894 # Sanity check: don't define LINKTYPE = dynamic if we're skipping
895 # the 'dynamic' section of MM. We don't have this problem with
896 # 'static', since we either must use it (%Config says we can't
897 # use dynamic loading) or the caller asked for it explicitly.
898 if (!$att{LINKTYPE}) {
899 $att{LINKTYPE} = grep(/dynamic/,@{$att{SKIP} || []})
901 : ($Config{'usedl'} ? 'dynamic' : 'static');
904 # These get overridden for VMS and maybe some other systems
906 $att{MAKEFILE} = "Makefile";
907 $att{RM_F} = "rm -f";
908 $att{RM_RF} = "rm -rf";
909 $att{TOUCH} = "touch";
912 $att{CHMOD} = "chmod";
917 my($dir, $regex) = @_;
919 opendir(DIR, $_[0] || ".") or die "opendir: $!";
922 @ls = grep(/$regex/, @ls) if $regex;
928 my($self, $ver, $names, $dirs, $trace) = @_;
931 print "Looking for perl $ver by these names: ";
933 print "in these dirs:";
936 foreach $dir (@$dirs){
937 next unless defined $dir; # $att{PERL_SRC} may be undefined
938 foreach $name (@$names){
939 print "Checking $dir/$name " if ($trace >= 2);
941 $name .= ".exe" unless -x "$dir/$name";
943 next unless -x "$dir/$name";
944 print "Executing $dir/$name" if ($trace >= 2);
947 my($vmscmd) = 'MCR ' . vmsify("$dir/$name");
948 $out = `$vmscmd -e "require $ver; print ""VER_OK\n"""`;
950 $out = `$dir/$name -e 'require $ver; print "VER_OK\n" ' 2>&1`;
952 if ($out =~ /VER_OK/) {
953 print "Using PERL=$dir/$name" if $trace;
958 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
959 0; # false and not empty
967 sub needs_linking { # Does this module need linking?
968 return 1 if $att{OBJECT} or @{$att{C} || []} or $att{MYEXTLIB};
978 DISTNAME = $att{DISTNAME}
979 VERSION = $att{VERSION}
980 VERSION_SYM = $att{VERSION_SYM}
982 # In which directory should we put this extension during 'make'?
983 # This is typically ./blib.
984 # (also see INST_LIBDIR and relationship to ROOTEXT)
985 INST_LIB = $att{INST_LIB}
986 INST_ARCHLIB = $att{INST_ARCHLIB}
987 INST_EXE = $att{INST_EXE}
989 # AFS users will want to set the installation directories for
990 # the final 'make install' early without setting INST_LIB,
991 # INST_ARCHLIB, and INST_EXE for the testing phase
992 INSTALLPRIVLIB = $att{INSTALLPRIVLIB}
993 INSTALLARCHLIB = $att{INSTALLARCHLIB}
994 INSTALLBIN = $att{INSTALLBIN}
996 # Perl library to use when building the extension
997 PERL_LIB = $att{PERL_LIB}
998 PERL_ARCHLIB = $att{PERL_ARCHLIB}
999 LIBPERL_A = $att{LIBPERL_A}
1001 MAKEMAKER = \$(PERL_LIB)/ExtUtils/MakeMaker.pm
1002 MM_VERSION = $ExtUtils::MakeMaker::Version
1005 # Define I_PERL_LIBS to include the required -Ipaths
1006 # To be cute we only include PERL_ARCHLIB if different
1008 #### Deprecated from Version 4.11: We want to avoid different
1009 #### behavior for variables with make(1) and perl(1)
1011 # To be portable we add quotes for VMS
1012 my(@i_perl_libs) = qw{-I$(PERL_ARCHLIB) -I$(PERL_LIB)};
1013 shift(@i_perl_libs) if ($att{PERL_ARCHLIB} eq $att{PERL_LIB});
1015 push @m, "I_PERL_LIBS = \"".join('" "',@i_perl_libs)."\"\n";
1017 push @m, "I_PERL_LIBS = ".join(' ',@i_perl_libs)."\n";
1021 # Where is the perl source code located?
1022 PERL_SRC = $att{PERL_SRC}\n" if $att{PERL_SRC};
1025 # Perl header files (will eventually be under PERL_LIB)
1026 PERL_INC = $att{PERL_INC}
1029 FULLPERL = $att{'FULLPERL'}
1032 # FULLEXT = Pathname for extension directory (eg DBD/Oracle).
1033 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
1034 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD)
1035 FULLEXT = $att{FULLEXT}
1036 BASEEXT = $att{BASEEXT}
1037 ROOTEXT = $att{ROOTEXT}
1041 DEFINE = $att{DEFINE}
1042 OBJECT = $att{OBJECT}
1043 LDFROM = $att{LDFROM}
1044 LINKTYPE = $att{LINKTYPE}
1046 # Handy lists of source code files:
1047 XS_FILES= ".join(" \\\n\t", sort keys %{$att{XS}})."
1048 C_FILES = ".join(" \\\n\t", @{$att{C}})."
1049 O_FILES = ".join(" \\\n\t", @{$att{O_FILES}})."
1050 H_FILES = ".join(" \\\n\t", @{$att{H}})."
1058 .PHONY: all config static dynamic test linkext
1060 # This extension may link to it's own library (see SDBM_File)
1061 MYEXTLIB = $att{MYEXTLIB}
1063 # Where is the Config information that we are using/depend on
1064 CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
1068 # Where to put things:
1069 INST_LIBDIR = $(INST_LIB)$(ROOTEXT)
1070 INST_ARCHLIBDIR = $(INST_ARCHLIB)$(ROOTEXT)
1072 INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
1073 INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
1076 if ($self->needs_linking) {
1078 INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT).a
1079 INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(BASEEXT).$(DLEXT)
1080 INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
1091 INST_PM = '.join(" \\\n\t", sort values %{$att{PM}}).'
1097 $Const_cccmd=0; # package global
1100 my($self,$libperl)=@_;
1101 $libperl or $libperl = $att{LIBPERL_A} || "libperl.a" ;
1102 # This is implemented in the same manner as extliblist,
1103 # e.g., do both and compare results during the transition period.
1104 my($cc,$ccflags,$optimize,$large,$split, $shflags)
1105 = @Config{qw(cc ccflags optimize large split shellflags)};
1108 $shflags = '' unless $shflags;
1109 my($prog, $old, $uc, $perltype);
1111 unless ($Const_cccmd++){
1112 chop($old = `cd $att{PERL_SRC}; sh $shflags ./cflags $libperl $att{BASEEXT}.c`)
1114 $Const_cccmd++; # shut up typo warning
1120 DE => '-DDEBUGGING -DEMBED',
1121 M => '-DEMBED -DMULTIPLICITY',
1122 DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
1125 if ($libperl =~ /libperl(\w*)\.a/){
1128 $uc = ""; # avoid warning
1130 $perltype = $map{$uc} ? $map{$uc} : "";
1138 ( $name = $att{NAME} . "_cflags" ) =~ s/:/_/g ;
1139 if ($prog = $Config{$name}) {
1140 # Expand hints for this extension via the shell
1141 print STDOUT "Processing $name hint:\n" if $Verbose;
1143 ccflags=\"$ccflags\"
1144 optimize=\"$optimize\"
1145 perltype=\"$perltype\"
1146 optdebug=\"$optdebug\"
1151 echo ccflags=\$ccflags
1152 echo optimize=\$optimize
1153 echo perltype=\$perltype
1154 echo optdebug=\$optdebug
1161 if ($line =~ /(.*?)=\s*(.*)\s*$/){
1163 print STDOUT " $1 = $2" if $Verbose;
1165 print STDOUT "Unrecognised result from hint: '$line'\n";
1168 ( $cc,$ccflags,$perltype,$optdebug,$optimize,$large,$split )=@cflags{
1169 qw( cc ccflags perltype optdebug optimize large split)};
1173 $optimize = $optdebug;
1176 my($new) = "$cc -c $ccflags $optimize $perltype $large $split";
1177 $new =~ s/^\s+//; $new =~ s/\s+/ /g; $new =~ s/\s+$//;
1179 $old =~ s/^\s+//; $old =~ s/\s+/ /g; $old =~ s/\s+$//;
1181 print STDOUT "Warning (non-fatal): cflags evaluation in "
1182 ."MakeMaker ($ExtUtils::MakeMaker::Version) "
1183 ."differs from shell output\n"
1184 ." package: $att{NAME}\n"
1187 ." Using 'old' set.\n"
1188 . Config::myconfig()
1189 ."\nPlease send these details to perl5-porters\@nicoh.com\n";
1192 my($cccmd)=($old) ? $old : $new;
1193 $cccmd =~ s/^\s*\Q$Config{'cc'}\E\s/\$(CC) /;
1198 # --- Constants Sections ---
1202 push(@m,"\n# These definitions are from config.sh (via $INC{'Config.pm'})\n");
1204 foreach $m (@{$att{'CONFIG'}}){
1205 next if $once_only{$m};
1206 print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
1207 unless exists $Config{$m};
1208 push @m, "\U$m\E = $Config{$m}\n";
1217 # $att{NAME} might depend on some other libraries:
1218 # (These comments may need revising:)
1220 # Dependent libraries can be linked in one of three ways:
1222 # 1. (For static extensions) by the ld command when the perl binary
1223 # is linked with the extension library. See EXTRALIBS below.
1225 # 2. (For dynamic extensions) by the ld command when the shared
1226 # object is built/linked. See LDLOADLIBS below.
1228 # 3. (For dynamic extensions) by the DynaLoader when the shared
1229 # object is loaded. See BSLOADLIBS below.
1231 # EXTRALIBS = List of libraries that need to be linked with when
1232 # linking a perl binary which includes this extension
1233 # Only those libraries that actually exist are included.
1234 # These are written to a file and used when linking perl.
1236 # LDLOADLIBS = List of those libraries which can or must be linked into
1237 # the shared library when created using ld. These may be
1238 # static or dynamic libraries.
1239 # LD_RUN_PATH is a colon separated list of the directories
1240 # in LDLOADLIBS. It is passed as an environment variable to
1241 # the process that links the shared library.
1243 # BSLOADLIBS = List of those libraries that are needed but can be
1244 # linked in dynamically at run time on this platform.
1245 # SunOS/Solaris does not need this because ld records
1246 # the information (from LDLOADLIBS) into the object file.
1247 # This list is used to create a .bs (bootstrap) file.
1249 EXTRALIBS = $att{'EXTRALIBS'}
1250 LDLOADLIBS = $att{'LDLOADLIBS'}
1251 BSLOADLIBS = $att{'BSLOADLIBS'}
1252 LD_RUN_PATH= $att{'LD_RUN_PATH'}
1257 # --- Tool Sections ---
1260 my($self, %attribs) = @_;
1262 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
1264 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
1265 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
1271 my($xsdir) = '$(PERL_LIB)/ExtUtils';
1272 # drop back to old location if xsubpp is not in new location yet
1273 $xsdir = '$(PERL_SRC)/ext' unless (-f "$att{PERL_LIB}/ExtUtils/xsubpp");
1274 my(@tmdeps) = ('$(XSUBPPDIR)/typemap');
1275 push(@tmdeps, "typemap") if -f "typemap";
1276 my(@tmargs) = map("-typemap $_", @tmdeps);
1279 XSUBPP = \$(XSUBPPDIR)/xsubpp
1280 XSUBPPDEPS = @tmdeps
1281 XSUBPPARGS = @tmargs
1297 # The following is a portable way to say mkdir -p
1298 MKPATH = $(PERL) -wle '$$"="/"; foreach $$p (@ARGV){ next if -d $$p; my(@p); foreach(split(/\//,$$p)){ push(@p,$$_); next if -d "@p/"; print "mkdir @p"; mkdir("@p",0777)||die $$! }} exit 0;'
1308 my($self,%attribs) = @_;
1310 while (($key,$val) = each %attribs){
1311 push @m, "$key = $val\n";
1318 # It has to be considered carefully, which variables are apt
1319 # to be passed through, e.g. ALL RELATIV DIRECTORIES are
1320 # not suited for PASTHRU to subdirectories.
1321 # Moreover: No directories at all have a chance, because we
1322 # don't know yet, if the directories are absolute or relativ
1324 # PASTHRU2 is a conservative approach, that hardly changed
1325 # MakeMaker between version 4.086 and 4.09.
1327 # PASTHRU1 is a revolutionary approach :), it cares for having
1328 # a prepended "../" whenever runsubdirpl is called, but only
1329 # for the three crucial INST_* directories.
1331 my(@pasthru1,@pasthru2); # 1 for runsubdirpl, 2 for the rest
1333 foreach $key (qw(INST_LIB INST_ARCHLIB INST_EXE)){
1334 push @pasthru1, "$key=\"\$($key)\"";
1337 foreach $key (qw(INSTALLPRIVLIB INSTALLARCHLIB INSTALLBIN LIBPERL_A LINKTYPE)){
1338 push @pasthru1, "$key=\"\$($key)\"";
1339 push @pasthru2, "$key=\"\$($key)\"";
1342 push @m, "\nPASTHRU1 = ", join ("\\\n\t", @pasthru1), "\n";
1343 push @m, "\nPASTHRU2 = ", join ("\\\n\t", @pasthru2), "\n";
1347 # --- Translation Sections ---
1353 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $(INC) $*.c
1361 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSUBPPARGS) $*.xs >$*.tc && mv $*.tc $@
1365 sub xs_o { # many makes are too dumb to use xs_c then c_o
1368 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSUBPPARGS) $*.xs >xstmp.c && mv xstmp.c $*.c
1369 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $(INC) $*.c
1374 # --- Target Sections ---
1379 all :: config linkext $(INST_PM)
1382 config :: '.$att{MAKEFILE}.' $(INST_LIBDIR)/.exists $(INST_ARCHAUTODIR)/.exists Version_check
1385 push @m, MM->dir_target('$(INST_LIBDIR)', '$(INST_ARCHAUTODIR)', '$(INST_EXE)');
1388 $(O_FILES): $(H_FILES)
1389 ' if @{$att{O_FILES} || []} && @{$att{H} || []};
1393 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::MakeMaker "&help"; &help;'
1398 @$(PERL) -I$(PERL_LIB) -e 'use ExtUtils::MakeMaker qw($$Version &Version_check);' \
1399 -e '&Version_check($(MM_VERSION))'
1406 my($self, %attribs) = @_;
1407 # LINKTYPE => static or dynamic or ''
1408 my($linktype) = defined $attribs{LINKTYPE} ?
1409 $attribs{LINKTYPE} : '$(LINKTYPE)';
1411 linkext :: $linktype
1417 my($self,%attribs) = @_;
1419 return '' if ($Config{'osname'} ne 'aix');
1421 my($funcs) = $attribs{DL_FUNCS} || $att{DL_FUNCS} || {};
1422 my($vars) = $attribs{DL_VARS} || $att{DL_VARS} || [];
1426 dynamic :: $att{BASEEXT}.exp
1428 ") unless $skip{'dynamic'};
1431 static :: $att{BASEEXT}.exp
1433 ") unless $skip{'static'};
1436 $att{BASEEXT}.exp: Makefile.PL
1437 ",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::MakeMaker qw(&mksymlists); \\
1438 &mksymlists(DL_FUNCS => ',
1439 %$funcs ? neatvalue($funcs) : '""',', DL_VARS => ',
1440 @$vars ? neatvalue($vars) : '""', ", NAME => \"$att{NAME}\")'
1446 # --- Dynamic Loading Sections ---
1450 # $(INST_PM) has been moved to the all: target.
1451 # It remains here for awhile to allow for old usage: "make dynamic"
1452 dynamic :: '.$att{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
1458 my($self, %attribs) = @_;
1459 return '' unless $self->needs_linking;
1461 BOOTSTRAP = '."$att{BASEEXT}.bs".'
1463 # As Mkbootstrap might not write a file (if none is required)
1464 # we use touch to prevent make continually trying to remake it.
1465 # The DynaLoader only reads a non-empty file.
1466 $(BOOTSTRAP): '."$att{MAKEFILE} $att{BOOTDEP}".'
1467 @ echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
1468 @ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
1469 -e \'use ExtUtils::Mkbootstrap;\' \
1470 -e \'Mkbootstrap("$(BASEEXT)","$(BSLOADLIBS)");\'
1471 @ $(TOUCH) $(BOOTSTRAP)
1473 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1475 $(INST_BOOT): $(BOOTSTRAP)
1476 @ '.$att{RM_RF}.' $(INST_BOOT)
1477 -'.$att{CP}.' $(BOOTSTRAP) $(INST_BOOT)
1479 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1485 my($self, %attribs) = @_;
1486 my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
1487 my($armaybe) = $attribs{ARMAYBE} || $att{ARMAYBE} || ":";
1488 my($ldfrom) = '$(LDFROM)';
1489 return '' unless $self->needs_linking;
1490 my($osname) = $Config{'osname'};
1491 $armaybe = 'ar' if ($osname eq 'dec_osf' and $armaybe eq ':');
1494 # This section creates the dynamically loadable $(INST_DYNAMIC)
1495 # from $(OBJECT) and possibly $(MYEXTLIB).
1496 ARMAYBE = '.$armaybe.'
1497 OTHERLDFLAGS = '.$otherldflags.'
1499 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
1501 if ($armaybe ne ':'){
1503 push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
1504 push(@m,' $(RANLIB) '."$ldfrom\n");
1506 $ldfrom = "-all $ldfrom -none" if ($osname eq 'dec_osf');
1507 push(@m,' LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) -o $@ $(LDDLFLAGS) '.$ldfrom.
1508 ' $(OTHERLDFLAGS) $(MYEXTLIB) $(LDLOADLIBS)');
1511 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1514 push @m, MM->dir_target('$(INST_ARCHAUTODIR)');
1519 # --- Static Loading Sections ---
1523 # $(INST_PM) has been moved to the all: target.
1524 # It remains here for awhile to allow for old usage: "make static"
1525 static :: '.$att{MAKEFILE}.' $(INST_STATIC) $(INST_PM)
1532 return '' unless $self->needs_linking;
1535 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists
1537 # If this extension has it's own library (eg SDBM_File)
1538 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
1539 push(@m, " $att{CP} \$(MYEXTLIB) \$\@\n") if $att{MYEXTLIB};
1542 ar cr $@ $(OBJECT) && $(RANLIB) $@
1543 @echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
1545 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1548 # Old mechanism - still available:
1550 push(@m, <<'END') if $att{PERL_SRC};
1551 @ echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
1554 push @m, MM->dir_target('$(INST_ARCHAUTODIR)');
1560 my($self, %attribs) = @_;
1561 # By default .pm files are split into the architecture independent
1562 # library. This is a good thing. If a specific module requires that
1563 # it's .pm files are split into the architecture specific library
1564 # then it should use: installpm => {SPLITLIB=>'$(INST_ARCHLIB)'}
1565 # Note that installperl currently interferes with this (Config.pm)
1566 # User can disable split by saying: installpm => {SPLITLIB=>''}
1567 my($splitlib) = '$(INST_LIB)'; # NOT arch specific by default
1568 $splitlib = $attribs{SPLITLIB} if exists $attribs{SPLITLIB};
1570 foreach $dist (sort keys %{$att{PM}}){
1571 my($inst) = $att{PM}->{$dist};
1572 push(@m, "\n# installpm: $dist => $inst, splitlib=$splitlib\n");
1573 push(@m, MY->installpm_x($dist, $inst, $splitlib));
1579 sub installpm_x { # called by installpm per file
1580 my($self, $dist, $inst, $splitlib) = @_;
1581 warn "Warning: Most probably 'make' will have problems processing this file: $inst\n"
1582 if $inst =~ m![:#]!;
1583 my($instdir) = $inst =~ m|(.*)/|;
1586 $inst: $dist $att{MAKEFILE} $instdir/.exists
1587 ".' @ '.$att{RM_F}.' $@
1588 '."$att{CP} $dist".' $@
1590 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1592 push(@m, "\t\@\$(AUTOSPLITFILE) \$@ $splitlib/auto\n")
1593 if ($splitlib and $inst =~ m/\.pm$/);
1595 push @m, MM->dir_target($instdir);
1600 return "" unless $att{PL_FILES};
1602 foreach $plfile (sort keys %{$att{PL_FILES}}) {
1604 all :: $att{PL_FILES}->{$plfile}
1606 $att{PL_FILES}->{$plfile} :: $plfile
1607 \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile
1614 return "" unless $att{EXE_FILES} && ref $att{EXE_FILES} eq "ARRAY";
1615 my(@m, $from, $to, %fromto, @to);
1616 for $from (@{$att{EXE_FILES}}) {
1617 local($_)= '$(INST_EXE)/' . basename($from);
1618 $to = MY->exescan();
1619 print "exescan($from) => '$to'" if ($Verbose >=2);
1622 @to = values %fromto;
1624 EXE_FILES = @{$att{EXE_FILES}}
1632 while (($from,$to) = each %fromto) {
1633 my $todir = dirname($to);
1635 $to: $from $att{MAKEFILE} $todir/.exists
1645 # --- Sub-directory Sections ---
1649 # This method provides a mechanism to automatically deal with
1650 # subdirectories containing further Makefile.PL scripts.
1651 # It calls the subdir_x() method for each subdirectory.
1652 foreach(grep -d, &lsdir()){
1654 next unless -f "$_/Makefile\.PL" ;
1655 print "Including $_ subdirectory" if ($Verbose);
1656 push(@m, MY->subdir_x($_));
1660 # The default clean, realclean and test targets in this Makefile
1661 # have automatically been given entries for each subdir.
1666 push(@m, "\n# none")
1671 sub runsubdirpl{ # Experimental! See subdir_x section
1672 my($self,$subdir) = @_;
1673 chdir($subdir) or die "chdir($subdir): $!";
1674 ExtUtils::MakeMaker::check_hints();
1676 require "Makefile.PL";
1680 my($self, $subdir) = @_;
1682 # The intention is that the calling Makefile.PL should define the
1683 # $(SUBDIR_MAKEFILE_PL_ARGS) make macro to contain whatever
1684 # information needs to be passed down to the other Makefile.PL scripts.
1685 # If this does not suit your needs you'll need to write your own
1686 # MY::subdir_x() method to override this one.
1688 config :: $subdir/$att{MAKEFILE}
1689 cd $subdir && \$(MAKE) config \$(PASTHRU2) \$(SUBDIR_MAKEFILE_PL_ARGS)
1691 $subdir/$att{MAKEFILE}: $subdir/Makefile.PL \$(CONFIGDEP)
1692 }.' @echo "Rebuilding $@ ..."
1693 @$(PERL) -I"$(PERL_ARCHLIB)" -I"$(PERL_LIB)" \\
1694 -e "use ExtUtils::MakeMaker; MM->runsubdirpl(qw('.$subdir.'))" \\
1695 $(PASTHRU1) $(SUBDIR_MAKEFILE_PL_ARGS)
1696 @echo "Rebuild of $@ complete."
1700 cd $subdir && \$(MAKE) all \$(PASTHRU2)
1706 # --- Cleanup and Distribution Sections ---
1709 my($self, %attribs) = @_;
1712 # Delete temporary files but do not touch installed files. We don\'t delete
1713 # the Makefile here so a later make realclean still has a makefile to use.
1717 # clean subdirectories first
1718 push(@m, map("\t-cd $_ && test -f $att{MAKEFILE} && \$(MAKE) clean\n",@{$att{DIR}}));
1719 my(@otherfiles) = values %{$att{XS}}; # .c files from *.xs files
1720 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
1721 push(@otherfiles, "./blib");
1722 push(@m, " -$att{RM_RF} *~ t/*~ *.o *.a mon.out core so_locations "
1723 ."\$(BOOTSTRAP) \$(BASEEXT).bso \$(BASEEXT).exp @otherfiles\n");
1724 # See realclean and ext/utils/make_ext for usage of Makefile.old
1725 push(@m, " -$att{MV} $att{MAKEFILE} $att{MAKEFILE}.old 2>/dev/null\n");
1726 push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
1731 my($self, %attribs) = @_;
1734 # Delete temporary files (via clean) and also delete installed files
1735 realclean purge :: clean
1737 # realclean subdirectories first (already cleaned)
1738 my $sub = "\t-cd %s && test -f %s && \$(MAKE) %s realclean\n";
1739 foreach(@{$att{DIR}}){
1740 push(@m, sprintf($sub,$_,"$att{MAKEFILE}.old","-f $att{MAKEFILE}.old"));
1741 push(@m, sprintf($sub,$_,"$att{MAKEFILE}",''));
1743 push(@m, " $att{RM_RF} \$(INST_AUTODIR) \$(INST_ARCHAUTODIR)\n");
1744 push(@m, " $att{RM_F} \$(INST_DYNAMIC) \$(INST_BOOT)\n");
1745 push(@m, " $att{RM_F} \$(INST_STATIC) \$(INST_PM)\n");
1746 my(@otherfiles) = ($att{MAKEFILE},
1747 "$att{MAKEFILE}.old"); # Makefiles last
1748 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
1749 push(@m, " $att{RM_RF} @otherfiles\n") if @otherfiles;
1750 push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
1756 my($self, %attribs) = @_;
1758 # VERSION should be sanitised before use as a file name
1759 if ($attribs{TARNAME}){
1760 print STDOUT "Error (fatal): Attribute TARNAME for target dist is deprecated
1761 Please use DISTNAME and VERSION";
1763 my($name) = $attribs{NAME} || '$(DISTNAME)-$(VERSION)';
1764 my($tar) = $attribs{TAR} || 'tar'; # eg /usr/bin/gnutar
1765 my($tarflags) = $attribs{TARFLAGS} || 'cvf';
1766 my($compress) = $attribs{COMPRESS} || 'compress'; # eg gzip
1767 my($suffix) = $attribs{SUFFIX} || 'Z'; # eg gz
1768 my($shar) = $attribs{SHAR} || 'shar'; # eg "shar --gzip"
1769 my($preop) = $attribs{PREOP} || '@ :'; # eg update MANIFEST
1770 my($postop) = $attribs{POSTOP} || '@ :'; # eg remove the distdir
1771 my($ci) = $attribs{CI} || 'ci -u';
1772 my($rcs) = $attribs{RCS} || 'rcs -Nv$(VERSION_SYM):';
1773 my($dist_default) = $attribs{DIST_DEFAULT} || 'tardist';
1777 TARFLAGS = $tarflags
1778 COMPRESS = $compress
1785 DIST_DEFAULT = $dist_default
1789 distclean :: realclean distcheck
1792 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&fullcheck";' \\
1796 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&mkmanifest";' \\
1799 dist : $(DIST_DEFAULT)
1801 tardist : $(DISTNAME)-$(VERSION).tar.$(SUFFIX)
1803 $(DISTNAME)-$(VERSION).tar.$(SUFFIX) : distdir
1805 $(TAR) $(TARFLAGS) $(DISTNAME)-$(VERSION).tar $(DISTNAME)-$(VERSION)
1806 $(COMPRESS) $(DISTNAME)-$(VERSION).tar
1807 $(RM_RF) $(DISTNAME)-$(VERSION)
1810 uutardist : $(DISTNAME)-$(VERSION).tar.$(SUFFIX)
1811 uuencode $(DISTNAME)-$(VERSION).tar.$(SUFFIX) \\
1812 $(DISTNAME)-$(VERSION).tar.$(SUFFIX) > \\
1813 $(DISTNAME)-$(VERSION).tar.$(SUFFIX).uu
1817 $(SHAR) $(DISTNAME)-$(VERSION) > $(DISTNAME)-$(VERSION).shar
1818 $(RM_RF) $(DISTNAME)-$(VERSION)
1822 $(RM_RF) $(DISTNAME)-$(VERSION)
1823 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "/mani/";' \\
1824 -e 'manicopy(maniread(),"$(DISTNAME)-$(VERSION)");'
1828 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&maniread";' \\
1829 -e '@all = keys %{maniread()};' \\
1830 -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \\
1831 -e 'print("Executing $(RCS) ...\n"); system("$(RCS) @all");'
1838 # --- Test and Installation Sections ---
1841 my($self, %attribs) = @_;
1842 my($tests) = $attribs{TESTS} || (-d "t" ? "t/*.t" : "");
1846 TEST_TYPE=test_$att{LINKTYPE}
1848 test :: \$(TEST_TYPE)
1850 push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) test \$(PASTHRU2)\n",
1852 push(@m, "\t\@echo 'No tests defined for \$(NAME) extension.'\n")
1853 unless $tests or -f "test.pl" or @{$att{DIR}};
1856 push(@m, "test_dynamic :: all\n");
1857 push(@m, $self->test_via_harness('$(FULLPERL)', $tests)) if $tests;
1858 push(@m, $self->test_via_script('$(FULLPERL)', 'test.pl')) if -f "test.pl";
1861 push(@m, "test_static :: all \$(MAP_TARGET)\n");
1862 push(@m, $self->test_via_harness('./$(MAP_TARGET)', $tests)) if $tests;
1863 push(@m, $self->test_via_script('./$(MAP_TARGET)', 'test.pl')) if -f "test.pl";
1869 sub test_via_harness {
1870 my($self, $perl, $tests) = @_;
1871 "\t$perl".q! -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' !."$tests\n";
1874 sub test_via_script {
1875 my($self, $perl, $script) = @_;
1876 "\t$perl".' -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) test.pl
1882 my($self, %attribs) = @_;
1886 @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
1887 @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \\
1888 -e "use ExtUtils::MakeMaker; MM->writedoc('Module', '$(NAME)', \\
1889 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', \\
1890 'EXE_FILES=$(EXE_FILES)')" >> $(INSTALLARCHLIB)/perllocal.pod
1894 install :: pure_install doc_install
1898 # install subdirectories first
1899 push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) install\n",
1902 push(@m, "\t\@\$(PERL) -e 'foreach (\@ARGV){die qq{You do not have permissions to install into \$\$_\\n} unless -w \$\$_}' \$(INSTALLPRIVLIB) \$(INSTALLARCHLIB)
1903 : perl5.000 and MM pre 3.8 autosplit into INST_ARCHLIB, we delete these old files here
1904 $att{RM_F} \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/*.al
1905 $att{RM_F} \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/*.ix
1906 \$(MAKE) INST_LIB=\$(INSTALLPRIVLIB) INST_ARCHLIB=\$(INSTALLARCHLIB) INST_EXE=\$(INSTALLBIN)
1907 \@\$(PERL) -i.bak -lne 'print unless \$\$seen{\$\$_}++' \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/.packlist
1911 #### UNINSTALL IS STILL EXPERIMENTAL ####
1915 push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) uninstall\n",
1917 push @m, "\t".'$(RM_RF) `cat $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist`
1924 '# Phony target to force checking subdirectories.
1933 PERL_HDRS = $(PERL_INC)/EXTERN.h $(PERL_INC)/INTERN.h \
1934 $(PERL_INC)/XSUB.h $(PERL_INC)/av.h $(PERL_INC)/cop.h \
1935 $(PERL_INC)/cv.h $(PERL_INC)/dosish.h $(PERL_INC)/embed.h \
1936 $(PERL_INC)/form.h $(PERL_INC)/gv.h $(PERL_INC)/handy.h \
1937 $(PERL_INC)/hv.h $(PERL_INC)/keywords.h $(PERL_INC)/mg.h \
1938 $(PERL_INC)/op.h $(PERL_INC)/opcode.h $(PERL_INC)/patchlevel.h \
1939 $(PERL_INC)/perl.h $(PERL_INC)/perly.h $(PERL_INC)/pp.h \
1940 $(PERL_INC)/proto.h $(PERL_INC)/regcomp.h $(PERL_INC)/regexp.h \
1941 $(PERL_INC)/scope.h $(PERL_INC)/sv.h $(PERL_INC)/unixish.h \
1942 $(PERL_INC)/util.h $(PERL_INC)/config.h
1947 $(OBJECT) : $(PERL_HDRS)
1951 # Check for unpropogated config.sh changes. Should never happen.
1952 # We do NOT just update config.h because that is not sufficient.
1953 # An out of date config.h is not fatal but complains loudly!
1954 $(PERL_INC)/config.h: $(PERL_SRC)/config.sh
1955 -@echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
1957 $(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
1958 @echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
1959 cd $(PERL_SRC) && $(MAKE) lib/Config.pm
1960 ') if $att{PERL_SRC};
1962 push(@m, join(" ", values %{$att{XS}})." : \$(XSUBPPDEPS)\n")
1970 # We do not know what target was originally specified so we
1971 # must force a manual rerun to be sure. But as it should only
1972 # happen very rarely it is not a significant problem.
1974 $(OBJECT) : '.$att{MAKEFILE}.'
1976 # We take a very conservative approach here, but it\'s worth it.
1977 # We move Makefile to Makefile.old here to avoid gnu make looping.
1978 '.$att{MAKEFILE}.' : Makefile.PL $(CONFIGDEP)
1979 @echo "Makefile out-of-date with respect to $?"
1980 @echo "Cleaning current config before rebuilding Makefile..."
1981 -@mv '."$att{MAKEFILE} $att{MAKEFILE}.old".'
1982 -$(MAKE) -f '.$att{MAKEFILE}.'.old clean >/dev/null 2>&1 || true
1983 $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL '."@ARGV".'
1984 @echo "Now you must rerun make."; false
1994 # --- Make-Directories section (internal method) ---
1995 # dir_target(@array) returns a Makefile entry for the file .exists in each
1996 # named directory. Returns nothing, if the entry has already been processed.
1997 # We're helpless though, if the same directory comes as $(FOO) _and_ as "bar".
1998 # Both of them get an entry, that's why we use "::". I chose '$(PERL)' as the
1999 # prerequisite, because there has to be one, something that doesn't change
2001 %Dir_Target = (); # package global
2004 my($self,@dirs) = @_;
2006 foreach $dir (@dirs) {
2007 next if $Dir_Target{$dir};
2009 $dir/.exists :: \$(PERL)
2011 \@ \$(TOUCH) $dir/.exists
2013 $Dir_Target{$dir}++;
2018 # --- Make-A-Perl section ---
2021 my($self, %attribs) = @_;
2023 my(%searchdirs)=($att{PERL_ARCHLIB} => 1, $att{INST_ARCHLIB} => 1);
2024 my(@searchdirs)=keys %searchdirs;
2025 # And as it's not yet built, we add the current extension
2026 my(@static)="$att{INST_ARCHLIB}/auto/$att{FULLEXT}/$att{BASEEXT}.a";
2027 my(@perlinc) = ($att{INST_ARCHLIB}, $att{INST_LIB}, $att{PERL_ARCHLIB}, $att{PERL_LIB});
2028 MY->makeaperl('MAKE' => $att{MAKEFILE},
2029 'DIRS' => \@searchdirs,
2031 'INCL' => \@perlinc,
2032 'TARGET' => $att{MAP_TARGET},
2034 'LIBPERL' => $att{LIBPERL_A}
2039 my($self, %attribs) = @_;
2040 my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
2041 @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
2043 my($cccmd, $linkcmd);
2045 # This emulates cflags to get the compiler invocation...
2046 $cccmd = MY->const_cccmd($libperl);
2047 $cccmd =~ s/^CCCMD\s*=\s*//;
2049 $cccmd =~ s/\s/ -I$att{PERL_INC} /;
2050 $cccmd .= " $Config{'cccdlflags'}" if ($Config{'d_shrplib'});
2052 # The front matter of the linkcommand...
2053 $linkcmd = join ' ', "\$(CC)",
2054 grep($_, @Config{qw(large split ldflags ccdlflags)});
2055 $linkcmd =~ s/\s+/ /g;
2057 # Which *.a files could we make use of...
2059 File::Find::find(sub {
2060 return unless m/\.a$/;
2061 return if m/^libperl/;
2062 # don't include the installed version of this extension
2063 return if $File::Find::name =~ m:auto/$att{FULLEXT}/$att{BASEEXT}.a$:;
2064 $static{fastcwd() . "/" . $_}++;
2065 }, grep( -d $_, @{$searchdirs || []}) );
2067 # We trust that what has been handed in as argument, will be buildable
2068 $static = [] unless $static;
2069 @static{@{$static}} = (1) x @{$static};
2071 $extra = [] unless $extra && ref $extra eq 'ARRAY';
2072 for (sort keys %static) {
2074 $_ = dirname($_) . "/extralibs.ld";
2078 grep(s/^/-I/, @$perlinc);
2080 $target = "perl" unless $target;
2081 $tmp = "." unless $tmp;
2084 # --- MakeMaker makeaperl section ---
2085 MAP_TARGET = $target
2086 FULLPERL = $att{'FULLPERL'}
2087 MAP_LINKCMD = $linkcmd
2088 MAP_PERLINC = @{$perlinc}
2090 join(" ", sort keys %static), "
2091 MAP_PRELIBS = $Config{'libs'} $Config{'cryptlib'}
2094 unless ($libperl && -f $libperl) {
2095 my $dir = $att{PERL_SRC} || "$att{PERL_ARCHLIB}/CORE";
2096 $libperl ||= "libperl.a";
2097 $libperl = "$dir/$libperl";
2098 print STDOUT "Warning: $libperl not found"
2099 unless (-f $libperl || defined($att{PERL_SRC}));
2103 MAP_LIBPERL = $libperl
2107 extralibs.ld: @$extra
2113 push @m, "\tcat $_ >> \$\@\n";
2117 \$(MAP_TARGET): $tmp/perlmain.o \$(MAP_LIBPERL) \$(MAP_STATIC) extralibs.ld
2118 \$(MAP_LINKCMD) -o \$\@ $tmp/perlmain.o \$(MAP_LIBPERL) \$(MAP_STATIC) `cat extralibs.ld` \$(MAP_PRELIBS)
2119 @ echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
2120 @ echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
2121 @ echo 'To remove the intermediate files say'
2122 @ echo ' make -f $makefilename map_clean'
2124 $tmp/perlmain.o: $tmp/perlmain.c
2126 push @m, "\tcd $tmp && $cccmd perlmain.c\n";
2129 $tmp/perlmain.c: $makefilename}, q{
2131 @ $(FULLPERL) $(MAP_PERLINC) -e 'use ExtUtils::Miniperl; \\
2132 writemain(grep s#.*/auto/##, qw|$(MAP_STATIC)|)' > $@.tmp && mv $@.tmp $@
2136 # We write EXTRA outside the perl program to have it eval'd by the shell
2139 @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
2140 @ $(FULLPERL) -e 'use ExtUtils::MakeMaker; MM->writedoc("Perl binary",' \\
2141 -e '"$(MAP_TARGET)", "MAP_STATIC=$(MAP_STATIC)",' \\
2142 -e '"MAP_EXTRA=@ARGV", "MAP_LIBPERL=$(MAP_LIBPERL)")' \\
2143 -- `cat extralibs.ld` >> $(INSTALLARCHLIB)/perllocal.pod
2147 inst_perl: pure_inst_perl doc_inst_perl
2149 pure_inst_perl: \$(MAP_TARGET)
2150 $att{CP} \$(MAP_TARGET) \$(INSTALLBIN)/\$(MAP_TARGET)
2155 $att{RM_F} $tmp/perlmain.o $tmp/perlmain.c \$(MAP_TARGET) extralibs.ld
2162 my($self,$libs) = @_;
2163 require ExtUtils::Liblist;
2164 ExtUtils::Liblist::ext($libs, $Verbose);
2171 # only AIX requires a symbol list at this point
2172 # (so does VMS, but that's handled by the MM_VMS package)
2173 return '' unless $Config{'osname'} eq 'aix';
2175 init_main(@ARGV) unless defined $att{'BASEEXT'};
2176 if (! $att{DL_FUNCS}) {
2178 ($bootfunc = $att{NAME}) =~ s/\W/_/g;
2179 $att{DL_FUNCS} = {$att{BASEEXT} => ["boot_$bootfunc"]};
2181 rename "$att{BASEEXT}.exp", "$att{BASEEXT}.exp_old";
2183 open(EXP,">$att{BASEEXT}.exp") or die $!;
2184 print EXP join("\n",@{$att{DL_VARS}}) if $att{DL_VARS};
2185 foreach $pkg (keys %{$att{DL_FUNCS}}) {
2186 (my($prefix) = $pkg) =~ s/\W/_/g;
2188 foreach $func (@{$att{DL_FUNCS}->{$pkg}}) {
2189 $func = "XS_${prefix}_$func" unless $func =~ /^boot_/;
2190 print EXP "$func\n";
2196 # --- Output postprocessing section ---
2197 #nicetext is included to make VMS support easier
2198 sub nicetext { # Just return the input - no action needed
2199 my($self,$text) = @_;
2203 # --- perllocal.pod section ---
2205 my($self,$what,$name,@attribs)=@_;
2206 # the following would have to move to a ExtUtils::Perllocal.pm, if we want it
2207 # it's dangerous wrt AFS, and it's against the philosophy that MakeMaker
2208 # should never write to files. We write to stdout and append to the file
2209 # during make install, but we cannot rely on '-f $Config{"installarchlib"},
2210 # as there is a time window between the WriteMakefile and the make.
2211 # -w $Config{'installarchlib'} or die "No write permission to $Config{'installarchlib'}";
2212 # my($localpod) = "$Config{'installarchlib'}/perllocal.pod";
2214 # if (-f $localpod) {
2215 # print "Appending installation info to $localpod\n";
2216 # open POD, ">>$localpod" or die "Couldn't open $localpod";
2218 # print "Writing new file $localpod\n";
2219 # open POD, ">$localpod" or die "Couldn't open $localpod";
2220 # print POD "=head1 NAME
2222 #perllocal - locally installed modules and perl binaries
2223 #\n=head1 HISTORY OF LOCAL INSTALLATIONS
2228 chop($time = ctime(time));
2229 print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
2230 print join "\n\n=item *\n\n", map("C<$_>",@attribs);
2231 print "\n\n=back\n\n";
2237 # the following keeps AutoSplit happy
2238 package ExtUtils::MakeMaker;
2245 ExtUtils::MakeMaker - create an extension Makefile
2249 C<use ExtUtils::MakeMaker;>
2251 C<WriteMakefile( ATTRIBUTE =E<gt> VALUE [, ...] );>
2255 This utility is designed to write a Makefile for an extension module
2256 from a Makefile.PL. It is based on the Makefile.SH model provided by
2257 Andy Dougherty and the perl5-porters.
2259 It splits the task of generating the Makefile into several subroutines
2260 that can be individually overridden. Each subroutine returns the text
2261 it wishes to have written to the Makefile.
2263 MakeMaker.pm uses the architecture specific information from
2264 Config.pm. In addition the extension may contribute to the C<%Config>
2265 hash table of Config.pm by supplying hints files in a C<hints/>
2266 directory. The hints files are expected to be named like their
2267 counterparts in C<PERL_SRC/hints>, but with an C<.pl> file name
2268 extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by MakeMaker
2269 within the WriteMakefile() subroutine, and can be used to execute
2270 commands as well as to include special variables. If there is no
2271 hintsfile for the actual system, but for some previous releases of the
2272 same operating system, the latest one of those is used.
2274 =head2 Default Makefile Behaviour
2276 The automatically generated Makefile enables the user of the extension
2279 perl Makefile.PL # optionally "perl Makefile.PL verbose"
2281 make test # optionally set TEST_VERBOSE=1
2282 make install # See below
2284 The Makefile to be produced may be altered by adding arguments of the
2285 form C<KEY=VALUE>. If the user wants to work with a different perl
2286 than the default, this is achieved by specifying
2288 perl Makefile.PL PERL=/tmp/myperl5
2290 Other interesting targets in the generated Makefile are
2292 make config # to check if the Makefile is up-to-date
2293 make clean # delete local temporary files (Makefile gets renamed)
2294 make realclean # delete all derived files (including installed files)
2295 make dist # see below the Distribution Support section
2297 =head2 Special case C<make install>
2299 C<make> alone puts all relevant files into directories that are named
2300 by the macros INST_LIB, INST_ARCHLIB, and INST_EXE. All three default
2301 to ./blib if you are I<not> building below the perl source directory. If
2302 you I<are> building below the perl source, INST_LIB and INST_ARCHLIB
2303 default to ../../lib, and INST_EXE is not defined.
2305 The I<install> target of the generated Makefile is a recursive call to
2308 INST_LIB to INSTALLPRIVLIB
2309 INST_ARCHLIB to INSTALLARCHLIB
2310 INST_EXE to INSTALLBIN
2312 The three INSTALL... macros in turn default to
2313 $Config{installprivlib}, $Config{installarchlib}, and
2314 $Config{installbin} respectively.
2316 The recommended way to proceed is to set only the INSTALL* macros, not
2317 the INST_* targets. In doing so, you give room to the compilation
2318 process without affecting important directories. Usually a 'make test'
2319 will succeed after the make, and a 'make install' can finish the game.
2321 MakeMaker gives you much more freedom than needed to configure
2322 internal variables and get different results. It is worth to mention,
2323 that make(1) also lets you configure most of the variables that are
2324 used in the Makefile. But in the majority of situations this will not
2325 be necessary, and should only be done, if the author of a package
2328 The usual relationship between INSTALLPRIVLIB and INSTALLARCHLIB is
2329 that the latter is a subdirectory of the former with the name
2330 C<$Config{'archname'}>, MakeMaker supports the user who sets
2331 INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not, then
2332 MakeMaker defaults the latter to be INSTALLPRIVLIB/ARCHNAME if that
2333 directory exists, otherwise it defaults to INSTALLPRIVLIB.
2335 Previous versions of MakeMaker suggested to use the INST_* macros. For
2336 backwards compatibility, these are still supported but deprecated in
2337 favor of the INSTALL* macros.
2339 Here is the description, what they are used for: If the user specifies
2340 the final destination for the INST_... macros, then there is no need
2341 to call 'make install', because 'make' will already put all files in
2344 If there is a need to first build everything in the C<./blib>
2345 directory and test the product, then it's appropriate to use the
2346 INSTALL... macros. So the users have the choice to either say
2348 # case: trust the module
2349 perl Makefile.PL INST_LIB=~/perllib INST_EXE=~/bin
2355 perl Makefile.PL INSTALLPRIVLIB=~/foo \
2356 INSTALLARCHLIB=~/foo/bar INSTALLBIN=~/bin
2361 Note, that the tilde expansion is done by MakeMaker, not by perl by
2362 default, nor by make. So be careful to use the tilde only with the
2363 C<perl Makefile.PL> call.
2365 It is important to know, that the INSTALL* macros should be absolute
2366 paths, never relativ ones. Packages with multiple Makefile.PLs in
2367 different directories get the contents of the INSTALL* macros
2368 propagated verbatim. (The INST_* macros will be corrected, if they are
2369 relativ paths, but not the INSTALL* macros.)
2371 If the user has superuser privileges, and is not working on AFS
2372 (Andrew File System) or relatives, then the defaults for
2373 INSTALLPRIVLIB, INSTALLARCHLIB, and INSTALLBIN will be appropriate,
2374 and this incantation will be the best:
2376 perl Makefile.PL; make; make test
2379 (I<make test> is not necessarily supported for all modules.)
2381 C<make install> per default writes some documentation of what has been
2382 done into the file C<$Config{'installarchlib'}/perllocal.pod>. This is
2383 an experimental feature. It can be bypassed by calling C<make
2386 =head2 Support to Link a new Perl Binary (eg dynamic loading not available)
2388 An extension that is built with the above steps is ready to use on
2389 systems supporting dynamic loading. On systems that do not support
2390 dynamic loading, any newly created extension has to be linked together
2391 with the available resources. MakeMaker supports the linking process
2392 by creating appropriate targets in the Makefile whenever an extension
2393 is built. You can invoke the corresponding section of the makefile with
2397 That produces a new perl binary in the current directory with all
2398 extensions linked in that can be found in INST_ARCHLIB (usually
2399 C<./blib>) and PERL_ARCHLIB.
2401 The binary can be installed into the directory where perl normally
2402 resides on your machine with
2406 To produce a perl binary with a different name than C<perl>, either say
2408 perl Makefile.PL MAP_TARGET=myperl
2415 make myperl MAP_TARGET=myperl
2416 make inst_perl MAP_TARGET=myperl
2418 In any case you will be prompted with the correct invocation of the
2419 C<inst_perl> target that installs the new binary into INSTALLBIN.
2421 Note, that there is a C<makeaperl> scipt in the perl distribution,
2422 that supports the linking of a new perl binary in a similar fashion,
2423 but with more options.
2425 C<make inst_perl> per default writes some documentation of what has been
2426 done into the file C<$Config{'installarchlib'}/perllocal.pod>. This
2427 can be bypassed by calling C<make pure_inst_perl>.
2429 Warning: the inst_perl: target is rather mighty and will probably
2430 overwrite your existing perl binary. Use with care!
2432 =head2 Determination of Perl Library and Installation Locations
2434 MakeMaker needs to know, or to guess, where certain things are
2435 located. Especially INST_LIB and INST_ARCHLIB (where to install files
2436 into), PERL_LIB and PERL_ARCHLIB (where to read existing modules
2437 from), and PERL_INC (header files and C<libperl*.*>).
2439 Extensions may be built either using the contents of the perl source
2440 directory tree or from an installed copy of the perl library.
2442 If an extension is being built below the C<ext/> directory of the perl
2443 source then MakeMaker will set PERL_SRC automatically (e.g., C<../..>).
2444 If PERL_SRC is defined then other variables default to the following:
2447 PERL_LIB = PERL_SRC/lib
2448 PERL_ARCHLIB = PERL_SRC/lib
2450 INST_ARCHLIB = PERL_ARCHLIB
2452 If an extension is being built away from the perl source then MakeMaker
2453 will leave PERL_SRC undefined and default to using the installed copy
2454 of the perl library. The other variables default to the following:
2456 PERL_INC = $archlib/CORE
2458 PERL_ARCHLIB = $archlib
2460 INST_ARCHLIB = ./blib
2462 If perl has not yet been installed then PERL_SRC can be defined on the
2463 command line as shown in the previous section.
2465 =head2 Useful Default Makefile Macros
2467 FULLEXT = Pathname for extension directory (eg DBD/Oracle).
2469 BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
2471 ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD)
2473 PERL_LIB = Directory where we read the perl library files
2475 PERL_ARCHLIB = Same as above for architecture dependent files
2477 INST_LIB = Directory where we put library files of this extension
2478 while building it. If we are building below PERL_SRC/ext
2479 we default to PERL_SRC/lib, else we default to ./blib.
2481 INST_ARCHLIB = Same as above for architecture dependent files
2483 INST_LIBDIR = C<$(INST_LIB)$(ROOTEXT)>
2485 INST_AUTODIR = C<$(INST_LIB)/auto/$(FULLEXT)>
2487 INST_ARCHAUTODIR = C<$(INST_ARCHLIB)/auto/$(FULLEXT)>
2489 =head2 Customizing The Generated Makefile
2491 If the Makefile generated does not fit your purpose you can change it
2492 using the mechanisms described below.
2494 =head2 Using Attributes (and Parameters)
2496 The following attributes can be specified as arguments to WriteMakefile()
2497 or as NAME=VALUE pairs on the command line:
2499 This description is not yet documented; you can get at the description
2500 with one of the commands
2504 =item C<perl Makefile.PL help>
2505 (if you already have a basic Makefile.PL)
2508 (if you already have a Makefile)
2510 =item C<perl -e 'use ExtUtils::MakeMaker "&help"; &help;'>
2511 (if you have neither nor)
2515 =head2 Overriding MakeMaker Methods
2517 If you cannot achieve the desired Makefile behaviour by specifying
2518 attributes you may define private subroutines in the Makefile.PL.
2519 Each subroutines returns the text it wishes to have written to
2520 the Makefile. To override a section of the Makefile you can
2523 sub MY::c_o { "new literal text" }
2525 or you can edit the default by saying something like:
2527 sub MY::c_o { $_=MM->c_o; s/old text/new text/; $_ }
2529 If you still need a different solution, try to develop another
2530 subroutine, that fits your needs and submit the diffs to
2531 F<perl5-porters@nicoh.com> or F<comp.lang.perl> as appropriate.
2533 =head2 Distribution Support
2535 For authors of extensions MakeMaker provides several Makefile
2536 targets. Most of the support comes from the ExtUtils::Manifest module,
2537 where additional documentation can be found.
2541 =item make distcheck
2542 reports which files are below the build directory but not in the
2543 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2546 =item make distclean
2547 does a realclean first and then the distcheck. Note that this is not
2548 needed to build a new distribution as long as you are sure, that the
2549 MANIFEST file is ok.
2552 rewrites the MANIFEST file, adding all remaining files found (See
2553 ExtUtils::Manifest::mkmanifest() for details)
2556 Copies all the files that are in the MANIFEST file to a newly created
2557 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2558 exists, it will be removed first.
2561 First does a command $(PREOP) which defaults to a null command. Does a
2562 distdir next and runs C<tar> on that directory into a tarfile. Then
2563 deletes the distdir. Finishes with a command $(POSTOP) which defaults
2567 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2569 =item make uutardist
2570 Runs a tardist first and uuencodes the tarfile.
2573 First does a command $(PREOP) which defaults to a null command. Does a
2574 distdir next and runs C<shar> on that directory into a sharfile. Then
2575 deletes the distdir. Finishes with a command $(POSTOP) which defaults
2576 to a null command. Note: For shdist to work properly a C<shar>
2577 program that can handle directories is mandatory.
2580 Does a $(CI) (defaults to C<ci -u>) and a $(RCS) (C<rcs -q
2581 -Nv$(VERSION_SYM):>) on all files in the MANIFEST file
2583 Customization of the dist targets can be done by specifying a hash
2584 reference to the dist attribute of the WriteMakefile call. The
2585 following parameters are recognized:
2589 COMPRESS ('compress')
2597 WriteMakefile( 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" })
2603 Andy Dougherty F<E<lt>doughera@lafcol.lafayette.eduE<gt>>, Andreas
2604 Koenig F<E<lt>k@franz.ww.TU-Berlin.DEE<gt>>, Tim Bunce
2605 F<E<lt>Tim.Bunce@ig.co.ukE<gt>>. VMS support by Charles Bailey
2606 F<E<lt>bailey@HMIVAX.HUMGEN.UPENN.EDUE<gt>>. Contact the makemaker
2607 mailing list L<mailto:makemaker@franz.ww.tu-berlin.de>, if you have any
2610 =head1 MODIFICATION HISTORY
2612 v1, August 1994; by Andreas Koenig. Based on Andy Dougherty's Makefile.SH.
2613 v2, September 1994 by Tim Bunce.
2614 v3.0 October 1994 by Tim Bunce.
2615 v3.1 November 11th 1994 by Tim Bunce.
2616 v3.2 November 18th 1994 by Tim Bunce.
2617 v3.3 November 27th 1994 by Andreas Koenig.
2618 v3.4 December 7th 1994 by Andreas Koenig and Tim Bunce.
2619 v3.5 December 15th 1994 by Tim Bunce.
2620 v3.6 December 15th 1994 by Tim Bunce.
2621 v3.7 December 30th 1994 By Tim Bunce
2622 v3.8 January 17th 1995 By Andreas Koenig and Tim Bunce
2623 v3.9 January 19th 1995 By Tim Bunce
2624 v3.10 January 23rd 1995 By Tim Bunce
2625 v3.11 January 24th 1995 By Andreas Koenig
2626 v4.00 January 24th 1995 By Tim Bunce
2627 v4.01 January 25th 1995 By Tim Bunce
2628 v4.02 January 29th 1995 By Andreas Koenig
2629 v4.03 January 30th 1995 By Andreas Koenig
2630 v4.04 Februeary 5th 1995 By Andreas Koenig
2631 v4.05 February 8th 1995 By Andreas Koenig
2632 v4.06 February 10th 1995 By Andreas Koenig
2633 v4.061 February 12th 1995 By Andreas Koenig
2634 v4.08 - 4.085 February 14th-21st 1995 by Andreas Koenig
2635 v4.086 March 9 1995 by Andy Dougherty
2636 v4.09 March 31 1995 by Andreas Koenig
2637 v4.091 April 3 1995 by Andy Dougherty
2638 v4.092 April 11 1995 by Andreas Koenig
2639 v4.093 April 12 1995 by Andy Dougherty
2640 v4.094 April 12 1995 by Andy Dougherty
2642 v4.100 May 10 1995 by Andreas Koenig
2644 Broken out Mkbootstrap to make the file smaller and easier to manage,
2645 and to speed up the build process.
2647 Added ExtUtils::Manifest as an extra module that is used to streamline
2648 distributions. (See pod section I<distribution support>).
2650 Added a VERSION_SYM macro, that is derived from VERSION but all C<\W>
2651 characters replaced by an underscore.
2653 Moved the whole documentation below __END__ for easier maintanance.
2655 linkext =E<gt> { LINKTYPE =E<gt> '' } should work now as expected.
2657 Rechecked the use of INST_LIB, INST_ARCHLIB, and INST_EXE from the
2658 perspective of an AFS user (thanks to Rudolph T Maceyko for the
2659 hint). With full backward compatiblity it is now possible, to set
2660 INSTALLPRIVLIB, INSTALLARCHLIB, and INSTALLBIN either with 'perl
2661 Makefile.PL' or with 'make install'. A bare 'make' ignores these
2662 settings. The effect of this change is that it is no longer
2663 recommended to set the INST_* attributes directly, although it doesn't
2664 hurt, if they do so. The PASTHRU variables (now PASTHRU1 and PASTHRU2)
2665 are fully aware of their duty: the INST_* attributes are only
2666 propagated to runsubdirpl, not to 'cd subdir && make config' and 'cd
2667 subdir && make all'.
2669 Included Tim's "Unable to locate Perl library" patch.
2671 Eliminated any excess of spaces in the $old/$new comparison in
2674 Added a prompt function with usage $answer = prompt $message, $default.
2676 Included Tim's patch that searches for perl5 and perl$] as well as
2679 Added .NO_PARALLEL for the time until I have a multiple cpu machine
2682 Introduced a macro() subroutine. WriteMakefile("macro" =E<gt> { FOO
2683 =E<gt> BAR }) defines the macro FOO = BAR in the generated Makefile.
2685 Rolled in Tim's patch for needs_linking.
2687 writedoc now tries to be less clever. It was trying to determine, if a
2688 perllocal.pod had to be created or appended to. As we have now the
2689 possibility, that INSTALLARCHLIB is determined at make's runtime, we
2690 cannot do this anymore. We append to that file in any case.
2692 Added Kenneth's pod installation patch.
2694 v4.110 May 19 1995 by Andreas Koenig
2698 MANIFEST.SKIP now contains only regular expressions. RCS directories
2699 are no longer skipped by default, as this may be configured in the
2702 The manifest target now does no realclean anymore.
2704 I_PERL_LIBS depreciated (no longer used). (unless you speak up, of
2707 I could not justify that we rebuild the Makefile when MakeMaker has
2708 changed (as Kenneth suggested). If this is really a strong desire,
2709 please convince me. But a minor change of the MakeMaker should not
2710 trigger a 60 minutes rebuild of Tk, IMO.
2712 Broken out extliblist into the new module ExtUtils::Liblist. Should
2713 help extension writers for their own Configure scripts. The breaking
2714 into pieces should be done now, I suppose.
2716 Added an (experimenta!!) uninstall target that works with a
2717 packlist. AutoSplit files are not yet in the packlist. This needs a
2718 patch to AutoSplit, doesn't it? The packlist file is installed in
2719 INST_ARCHAUTODIR/.packlist. It doesn't have means to decide, if a file
2720 is architecture dependent or not, we just collect as much as we can
2721 get. make -n recommended before actually executing. (I leave this
2722 target undocumented in the pod section). Suggestions welcome!
2724 Added basic chmod support. Nothing spectacular. *.so and *.a files get
2725 permission 755, because I seem to recall, that some systems need
2726 execute permissions in some weird constellations. The rest becomes
2727 644. What else do we need to make this flexible?
2729 Then I took Tim's word serious: no bloat. No turning all packages into
2730 perl scripts. Leaving shar, tar, uu be what they are... Sorry,
2731 Kenneth, we still have to convince Larry that a growing MakeMaker
2734 Added an extra check whenever they install below the perl source tree:
2735 is this extension a standard extension? If it is, everything behaves
2736 as we are used to. If it is not, the three INST_ macros are set to
2737 ./blib, and they get a warning that this extension has to be
2738 installed manually with 'make install'.
2740 Added a warning for targets that have a colon or a hashmark within
2741 their names, because most make(1)s will not be able to process them.
2743 Applied Hallvard's patch to ~user evaluation for cases where user does
2746 Added a ci target that checks in all files from the MANIFEST into rcs.
2748 =head1 new in 4.12/4.13
2750 "Please notify perl5-porters" message is now accompanied by
2753 (Manifest.pm) Change delimiter for the evaluation of the regexes from
2754 MANIFEST.SKIP to from "!" to "/". I had overlooked the fact, that ! no
2755 has a meaning in regular expressions.
2757 Disabled the new logic that prevents non-standard extensions from
2758 writing to PERL_SRC/lib to give Andy room for 5.001f.
2760 Added a Version_check target that calls MakeMaker for a simple Version
2761 control function on every invocation of 'make' in the future. Doesn't
2762 have an effect currently.
2764 Target dist is still defaulting to tardist, but the level of
2765 indirection has changed. The Makefile macro DIST_DEFAULT takes it's
2766 place. This allows me to make dist dependent from whatever I intend as
2767 my standard distribution.
2769 Made sure that INST_EXE is created for extensions that need it.
2771 4.13 is just a cleanup/documentation patch. And it adds a MakeMaker FAQ :)
2773 =head v4.14 June 5, 1995, by Andreas Koenig
2775 Reintroduces the LD_RUN_PATH macro. LD_RUN_PATH is passed as an
2776 environment variable to the ld run. It is needed on Sun OS, and does
2777 no harm on other systems. It is a colon seperated list of the
2778 directories in LDLOADLIBS.
2780 =head v4.15 June 6, 1995, by Andreas Koenig
2782 Add -I$(PERL_ARCHLIB) -I$(PERL_LIB) to calls to xsubpp.
2784 =head v4.16 June 18, 1995, by Tim Bunce
2786 Split test: target into test_static: and test_dynamic: with automatic
2787 selection based on LINKTYPE. The test_static: target automatically
2788 builds a local ./perl binary containing the extension and executes the
2789 tests using that binary. This fixes problems that users were having
2790 dealing with building and testing static extensions. It also simplifies
2791 the process down to the standard: make + make test.
2793 MakeMaker no longer incorrectly considers a perlmain.c file to be part
2794 of an extensions source files. The map_clean target is now invoked by
2795 clean not realclean and now deletes MAP_TARGET but does not delete
2796 Makefile (since that's done properly elsewhere).
2798 Since the staticmake section defines macros that the test target now
2799 needs the test section is written into the makefile after the
2800 staticmake section. The postamble section has been made last again, as
2805 Needs more complete documentation.
2807 Add a C<html:> target when there has been found a general solution to
2808 installing html files.
2810 Add a FLAVOR variable that makes it easier to build debugging,
2811 embedded or multiplicity perls. Currently the easiest way to produce a
2812 debugging perl seems to be (after haveing built perl):
2814 ./Configure -D"archname=IP22-irix-d" -des
2815 make perllib=libperld.a
2816 make test perllib=libperld.a
2817 mv /usr/local/bin/perl /usr/local/bin/perl/O_perl5.001e
2818 make install perllib=libperld.a
2819 cp /usr/local/bin/perl/O_perl5.001e /usr/local/bin/perl
2820 It would be nice, if the Configure step could be dropped. Also nice, but
2821 maybe expensive, if 'make clobber' wouldn't be needed.
2823 The uninstall target has to be completed, it's just a sketch.
2825 Reconsider Makefile macros. The output of macro() should be the last
2826 before PASTHRU and none should come after that -- tough work.
2828 Think about Nick's desire, that the pTk subdirectory needs a special
2831 Find a way to have multiple MYEXTLIB archive files combined into
2832 one. Actually I need some scenario, where this problem can be
2833 illustrated. I currently don't see the problem.
2835 Test if .NOPARALLEL can be omitted.
2837 Don't let extensions write to PERL_SRC/lib anymore, build perl from
2838 the extensions found below ext, run 'make test' and 'make install' on
2839 each extension (giving room for letting them fail). Move some of the
2840 tests from t/lib/* to the libraries.
2842 Streamline the production of a new perl binary on systems that DO have
2843 dynamic loading (especially make test needs further support, as test
2844 most probably needs the new binary).