1 package ExtUtils::MakeMaker;
3 $Version = 4.15; # Last edited $Date: 1995/06/06 14:04:00 $ by Andreas Koenig
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' => {},
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 } elsif ($name =~ /\.h$/){
771 } elsif ($name =~ /\.(p[ml]|pod)$/){
772 $pm{$name} = "\$(INST_LIBDIR)/$name";
773 } elsif ($name =~ /\.PL$/ && $name ne "Makefile.PL") {
774 ($pl_files{$name} = $name) =~ s/\.PL$// ;
778 # Some larger extensions often wish to install a number of *.pm/pl
779 # files into the library in various locations.
781 # The attribute PMLIBDIRS holds an array reference which lists
782 # subdirectories which we should search for library files to
783 # install. PMLIBDIRS defaults to [ 'lib', $att{BASEEXT} ].
784 # We recursively search through the named directories (skipping
785 # any which don't exist or contain Makefile.PL files).
787 # For each *.pm or *.pl file found MY->libscan() is called with
788 # the default installation path in $_. The return value of libscan
789 # defines the actual installation location.
790 # The default libscan function simply returns $_.
791 # The file is skipped if libscan returns false.
793 # The default installation location passed to libscan in $_ is:
795 # ./*.pm => $(INST_LIBDIR)/*.pm
796 # ./xyz/... => $(INST_LIBDIR)/xyz/...
797 # ./lib/... => $(INST_LIB)/...
799 # In this way the 'lib' directory is seen as the root of the actual
800 # perl library whereas the others are relative to INST_LIBDIR
801 # (which includes ROOTEXT). This is a subtle distinction but one
802 # that's important for nested modules.
804 $att{PMLIBDIRS} = [ 'lib', $att{BASEEXT} ] unless $att{PMLIBDIRS};
806 #only existing directories that aren't in $dir are allowed
807 @{$att{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$att{PMLIBDIRS}};
809 if (@{$att{PMLIBDIRS}}){
810 print "Searching PMLIBDIRS: @{$att{PMLIBDIRS}}"
812 use File::Find; # try changing to require !
813 File::Find::find(sub {
814 # We now allow any file in PMLIBDIRS to be installed. nTk needs that, and
815 # we should allow it.
816 # return unless m/\.p[ml]$/;
817 return if -d $_; # anything else that Can't be copied?
818 my($path, $prefix) = ($File::Find::name, '$(INST_LIBDIR)');
820 $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^lib/::);
821 local($_) = "$prefix/$striplibpath";
822 my($inst) = MY->libscan();
823 print "libscan($path) => '$inst'" if ($Verbose >= 2);
826 }, @{$att{PMLIBDIRS}});
829 $att{DIR} = [sort keys %dir] unless $att{DIRS};
830 $att{XS} = \%xs unless $att{XS};
831 $att{PM} = \%pm unless $att{PM};
832 $att{C} = [sort keys %c] unless $att{C};
833 my(@o_files) = @{$att{C}};
834 my($sufx) = $Is_VMS ? '.obj' : '.o';
835 $att{O_FILES} = [grep s/\.c$/$sufx/, @o_files] ;
836 $att{H} = [sort keys %h] unless $att{H};
837 $att{PL_FILES} = \%pl_files unless $att{PL_FILES};
842 return '' if m:/RCS/: ; # return undef triggered warnings with $Verbose>=2
846 sub init_others { # --- Initialize Other Attributes
848 for $key (keys(%Recognized_Att_Keys), keys(%Other_Att_Keys)){
849 # avoid warnings for uninitialized vars
850 next if exists $att{$key};
854 # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $att{'LIBS'}
855 # Lets look at $att{LIBS} carefully: It may be an anon array, a string or
856 # undefined. In any case we turn it into an anon array:
857 $att{LIBS}=[] unless $att{LIBS};
858 $att{LIBS}=[$att{LIBS}] if ref \$att{LIBS} eq SCALAR;
859 $att{LD_RUN_PATH} = "";
860 foreach ( @{$att{'LIBS'}} ){
861 s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace
862 my(@libs) = MY->extliblist($_);
863 if ($libs[0] or $libs[1] or $libs[2]){
864 @att{EXTRALIBS, BSLOADLIBS, LDLOADLIBS} = @libs;
866 $att{LD_RUN_PATH} = join(":",grep($_=~s/^-L//,split(" ", $libs[2])));
872 print STDOUT "CONFIG must be an array ref\n"
873 if ($att{CONFIG} and ref $att{CONFIG} ne 'ARRAY');
874 $att{CONFIG} = [] unless (ref $att{CONFIG});
875 push(@{$att{CONFIG}},
876 qw(cc libc ldflags lddlflags ccdlflags cccdlflags
877 ranlib so dlext dlsrc
879 push(@{$att{CONFIG}}, 'shellflags') if $Config{'shellflags'};
882 $att{OBJECT} = '$(BASEEXT).obj' unless $att{OBJECT};
883 $att{OBJECT} =~ s/[^,\s]\s+/, /g;
884 $att{OBJECT} =~ s/\n+/, /g;
885 $att{OBJECT} =~ s#\.o,#\.obj,#;
887 $att{OBJECT} = '$(BASEEXT).o' unless $att{OBJECT};
888 $att{OBJECT} =~ s/\n+/ \\\n\t/g;
890 $att{BOOTDEP} = (-f "$att{BASEEXT}_BS") ? "$att{BASEEXT}_BS" : "";
891 $att{LD} = ($Config{'ld'} || 'ld') unless $att{LD};
892 $att{LDFROM} = '$(OBJECT)' unless $att{LDFROM};
893 # Sanity check: don't define LINKTYPE = dynamic if we're skipping
894 # the 'dynamic' section of MM. We don't have this problem with
895 # 'static', since we either must use it (%Config says we can't
896 # use dynamic loading) or the caller asked for it explicitly.
897 if (!$att{LINKTYPE}) {
898 $att{LINKTYPE} = grep(/dynamic/,@{$att{SKIP} || []})
900 : ($Config{'usedl'} ? 'dynamic' : 'static');
903 # These get overridden for VMS and maybe some other systems
905 $att{MAKEFILE} = "Makefile";
906 $att{RM_F} = "rm -f";
907 $att{RM_RF} = "rm -rf";
908 $att{TOUCH} = "touch";
911 $att{CHMOD} = "chmod";
916 my($dir, $regex) = @_;
918 opendir(DIR, $_[0] || ".") or die "opendir: $!";
921 @ls = grep(/$regex/, @ls) if $regex;
927 my($self, $ver, $names, $dirs, $trace) = @_;
930 print "Looking for perl $ver by these names: ";
932 print "in these dirs:";
935 foreach $dir (@$dirs){
936 next unless defined $dir; # $att{PERL_SRC} may be undefined
937 foreach $name (@$names){
938 print "Checking $dir/$name " if ($trace >= 2);
940 $name .= ".exe" unless -x "$dir/$name";
942 next unless -x "$dir/$name";
943 print "Executing $dir/$name" if ($trace >= 2);
946 my($vmscmd) = 'MCR ' . vmsify("$dir/$name");
947 $out = `$vmscmd -e "require $ver; print ""VER_OK\n"""`;
949 $out = `$dir/$name -e 'require $ver; print "VER_OK\n" ' 2>&1`;
951 if ($out =~ /VER_OK/) {
952 print "Using PERL=$dir/$name" if $trace;
957 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
958 0; # false and not empty
966 sub needs_linking { # Does this module need linking?
967 return 1 if $att{OBJECT} or @{$att{C} || []} or $att{MYEXTLIB};
977 DISTNAME = $att{DISTNAME}
978 VERSION = $att{VERSION}
979 VERSION_SYM = $att{VERSION_SYM}
981 # In which directory should we put this extension during 'make'?
982 # This is typically ./blib.
983 # (also see INST_LIBDIR and relationship to ROOTEXT)
984 INST_LIB = $att{INST_LIB}
985 INST_ARCHLIB = $att{INST_ARCHLIB}
986 INST_EXE = $att{INST_EXE}
988 # AFS users will want to set the installation directories for
989 # the final 'make install' early without setting INST_LIB,
990 # INST_ARCHLIB, and INST_EXE for the testing phase
991 INSTALLPRIVLIB = $att{INSTALLPRIVLIB}
992 INSTALLARCHLIB = $att{INSTALLARCHLIB}
993 INSTALLBIN = $att{INSTALLBIN}
995 # Perl library to use when building the extension
996 PERL_LIB = $att{PERL_LIB}
997 PERL_ARCHLIB = $att{PERL_ARCHLIB}
998 LIBPERL_A = $att{LIBPERL_A}
1000 MAKEMAKER = \$(PERL_LIB)/ExtUtils/MakeMaker.pm
1001 MM_VERSION = $ExtUtils::MakeMaker::Version
1004 # Define I_PERL_LIBS to include the required -Ipaths
1005 # To be cute we only include PERL_ARCHLIB if different
1007 #### Deprecated from Version 4.11: We want to avoid different
1008 #### behavior for variables with make(1) and perl(1)
1010 # To be portable we add quotes for VMS
1011 my(@i_perl_libs) = qw{-I$(PERL_ARCHLIB) -I$(PERL_LIB)};
1012 shift(@i_perl_libs) if ($att{PERL_ARCHLIB} eq $att{PERL_LIB});
1014 push @m, "I_PERL_LIBS = \"".join('" "',@i_perl_libs)."\"\n";
1016 push @m, "I_PERL_LIBS = ".join(' ',@i_perl_libs)."\n";
1020 # Where is the perl source code located?
1021 PERL_SRC = $att{PERL_SRC}\n" if $att{PERL_SRC};
1024 # Perl header files (will eventually be under PERL_LIB)
1025 PERL_INC = $att{PERL_INC}
1028 FULLPERL = $att{'FULLPERL'}
1031 # FULLEXT = Pathname for extension directory (eg DBD/Oracle).
1032 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
1033 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD)
1034 FULLEXT = $att{FULLEXT}
1035 BASEEXT = $att{BASEEXT}
1036 ROOTEXT = $att{ROOTEXT}
1040 DEFINE = $att{DEFINE}
1041 OBJECT = $att{OBJECT}
1042 LDFROM = $att{LDFROM}
1043 LINKTYPE = $att{LINKTYPE}
1045 # Handy lists of source code files:
1046 XS_FILES= ".join(" \\\n\t", sort keys %{$att{XS}})."
1047 C_FILES = ".join(" \\\n\t", @{$att{C}})."
1048 O_FILES = ".join(" \\\n\t", @{$att{O_FILES}})."
1049 H_FILES = ".join(" \\\n\t", @{$att{H}})."
1057 .PHONY: all config static dynamic test linkext
1059 # This extension may link to it's own library (see SDBM_File)
1060 MYEXTLIB = $att{MYEXTLIB}
1062 # Where is the Config information that we are using/depend on
1063 CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
1067 # Where to put things:
1068 INST_LIBDIR = $(INST_LIB)$(ROOTEXT)
1069 INST_ARCHLIBDIR = $(INST_ARCHLIB)$(ROOTEXT)
1071 INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
1072 INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
1075 if ($self->needs_linking) {
1077 INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT).a
1078 INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(BASEEXT).$(DLEXT)
1079 INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
1090 INST_PM = '.join(" \\\n\t", sort values %{$att{PM}}).'
1096 $Const_cccmd=0; # package global
1099 my($self,$libperl)=@_;
1100 $libperl or $libperl = $att{LIBPERL_A} || "libperl.a" ;
1101 # This is implemented in the same manner as extliblist,
1102 # e.g., do both and compare results during the transition period.
1103 my($cc,$ccflags,$optimize,$large,$split, $shflags)
1104 = @Config{qw(cc ccflags optimize large split shellflags)};
1107 $shflags = '' unless $shflags;
1108 my($prog, $old, $uc, $perltype);
1110 unless ($Const_cccmd++){
1111 chop($old = `cd $att{PERL_SRC}; sh $shflags ./cflags $libperl $att{BASEEXT}.c`)
1113 $Const_cccmd++; # shut up typo warning
1119 DE => '-DDEBUGGING -DEMBED',
1120 M => '-DEMBED -DMULTIPLICITY',
1121 DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
1124 if ($libperl =~ /libperl(\w*)\.a/){
1127 $uc = ""; # avoid warning
1129 $perltype = $map{$uc} ? $map{$uc} : "";
1137 ( $name = $att{NAME} . "_cflags" ) =~ s/:/_/g ;
1138 if ($prog = $Config{$name}) {
1139 # Expand hints for this extension via the shell
1140 print STDOUT "Processing $name hint:\n" if $Verbose;
1142 ccflags=\"$ccflags\"
1143 optimize=\"$optimize\"
1144 perltype=\"$perltype\"
1145 optdebug=\"$optdebug\"
1150 echo ccflags=\$ccflags
1151 echo optimize=\$optimize
1152 echo perltype=\$perltype
1153 echo optdebug=\$optdebug
1160 if ($line =~ /(.*?)=\s*(.*)\s*$/){
1162 print STDOUT " $1 = $2" if $Verbose;
1164 print STDOUT "Unrecognised result from hint: '$line'\n";
1167 ( $cc,$ccflags,$perltype,$optdebug,$optimize,$large,$split )=@cflags{
1168 qw( cc ccflags perltype optdebug optimize large split)};
1172 $optimize = $optdebug;
1175 my($new) = "$cc -c $ccflags $optimize $perltype $large $split";
1176 $new =~ s/^\s+//; $new =~ s/\s+/ /g; $new =~ s/\s+$//;
1178 $old =~ s/^\s+//; $old =~ s/\s+/ /g; $old =~ s/\s+$//;
1180 print STDOUT "Warning (non-fatal): cflags evaluation in "
1181 ."MakeMaker ($ExtUtils::MakeMaker::Version) "
1182 ."differs from shell output\n"
1183 ." package: $att{NAME}\n"
1186 ." Using 'old' set.\n"
1187 . Config::myconfig()
1188 ."\nPlease send these details to perl5-porters\@nicoh.com\n";
1191 my($cccmd)=($old) ? $old : $new;
1192 $cccmd =~ s/^\s*\Q$Config{'cc'}\E\s/\$(CC) /;
1197 # --- Constants Sections ---
1201 push(@m,"\n# These definitions are from config.sh (via $INC{'Config.pm'})\n");
1203 foreach $m (@{$att{'CONFIG'}}){
1204 next if $once_only{$m};
1205 print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
1206 unless exists $Config{$m};
1207 push @m, "\U$m\E = $Config{$m}\n";
1216 # $att{NAME} might depend on some other libraries:
1217 # (These comments may need revising:)
1219 # Dependent libraries can be linked in one of three ways:
1221 # 1. (For static extensions) by the ld command when the perl binary
1222 # is linked with the extension library. See EXTRALIBS below.
1224 # 2. (For dynamic extensions) by the ld command when the shared
1225 # object is built/linked. See LDLOADLIBS below.
1227 # 3. (For dynamic extensions) by the DynaLoader when the shared
1228 # object is loaded. See BSLOADLIBS below.
1230 # EXTRALIBS = List of libraries that need to be linked with when
1231 # linking a perl binary which includes this extension
1232 # Only those libraries that actually exist are included.
1233 # These are written to a file and used when linking perl.
1235 # LDLOADLIBS = List of those libraries which can or must be linked into
1236 # the shared library when created using ld. These may be
1237 # static or dynamic libraries.
1238 # LD_RUN_PATH is a colon separated list of the directories
1239 # in LDLOADLIBS. It is passed as an environment variable to
1240 # the process that links the shared library.
1242 # BSLOADLIBS = List of those libraries that are needed but can be
1243 # linked in dynamically at run time on this platform.
1244 # SunOS/Solaris does not need this because ld records
1245 # the information (from LDLOADLIBS) into the object file.
1246 # This list is used to create a .bs (bootstrap) file.
1248 EXTRALIBS = $att{'EXTRALIBS'}
1249 LDLOADLIBS = $att{'LDLOADLIBS'}
1250 BSLOADLIBS = $att{'BSLOADLIBS'}
1251 LD_RUN_PATH= $att{'LD_RUN_PATH'}
1256 # --- Tool Sections ---
1259 my($self, %attribs) = @_;
1261 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
1263 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
1264 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
1270 my($xsdir) = '$(PERL_LIB)/ExtUtils';
1271 # drop back to old location if xsubpp is not in new location yet
1272 $xsdir = '$(PERL_SRC)/ext' unless (-f "$att{PERL_LIB}/ExtUtils/xsubpp");
1273 my(@tmdeps) = ('$(XSUBPPDIR)/typemap');
1274 push(@tmdeps, "typemap") if -f "typemap";
1275 my(@tmargs) = map("-typemap $_", @tmdeps);
1278 XSUBPP = \$(XSUBPPDIR)/xsubpp
1279 XSUBPPDEPS = @tmdeps
1280 XSUBPPARGS = @tmargs
1296 # The following is a portable way to say mkdir -p
1297 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;'
1307 my($self,%attribs) = @_;
1309 while (($key,$val) = each %attribs){
1310 push @m, "$key = $val\n";
1317 # It has to be considered carefully, which variables are apt
1318 # to be passed through, e.g. ALL RELATIV DIRECTORIES are
1319 # not suited for PASTHRU to subdirectories.
1320 # Moreover: No directories at all have a chance, because we
1321 # don't know yet, if the directories are absolute or relativ
1323 # PASTHRU2 is a conservative approach, that hardly changed
1324 # MakeMaker between version 4.086 and 4.09.
1326 # PASTHRU1 is a revolutionary approach :), it cares for having
1327 # a prepended "../" whenever runsubdirpl is called, but only
1328 # for the three crucial INST_* directories.
1330 my(@pasthru1,@pasthru2); # 1 for runsubdirpl, 2 for the rest
1332 foreach $key (qw(INST_LIB INST_ARCHLIB INST_EXE)){
1333 push @pasthru1, "$key=\"\$($key)\"";
1336 foreach $key (qw(INSTALLPRIVLIB INSTALLARCHLIB INSTALLBIN LIBPERL_A LINKTYPE)){
1337 push @pasthru1, "$key=\"\$($key)\"";
1338 push @pasthru2, "$key=\"\$($key)\"";
1341 push @m, "\nPASTHRU1 = ", join ("\\\n\t", @pasthru1), "\n";
1342 push @m, "\nPASTHRU2 = ", join ("\\\n\t", @pasthru2), "\n";
1346 # --- Translation Sections ---
1352 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $(INC) $*.c
1360 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSUBPPARGS) $*.xs >$*.tc && mv $*.tc $@
1364 sub xs_o { # many makes are too dumb to use xs_c then c_o
1367 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSUBPPARGS) $*.xs >xstmp.c && mv xstmp.c $*.c
1368 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $(INC) $*.c
1373 # --- Target Sections ---
1378 all :: config linkext $(INST_PM)
1381 config :: '.$att{MAKEFILE}.' $(INST_LIBDIR)/.exists $(INST_ARCHAUTODIR)/.exists Version_check
1384 push @m, MM->dir_target('$(INST_LIBDIR)', '$(INST_ARCHAUTODIR)', '$(INST_EXE)');
1387 $(O_FILES): $(H_FILES)
1388 ' if @{$att{O_FILES} || []} && @{$att{H} || []};
1392 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::MakeMaker "&help"; &help;'
1397 @$(PERL) -I$(PERL_LIB) -e 'use ExtUtils::MakeMaker qw($$Version &Version_check);' \
1398 -e '&Version_check($(MM_VERSION))'
1405 my($self, %attribs) = @_;
1406 # LINKTYPE => static or dynamic or ''
1407 my($linktype) = defined $attribs{LINKTYPE} ?
1408 $attribs{LINKTYPE} : '$(LINKTYPE)';
1410 linkext :: $linktype
1416 my($self,%attribs) = @_;
1418 return '' if ($Config{'osname'} ne 'aix');
1420 my($funcs) = $attribs{DL_FUNCS} || $att{DL_FUNCS} || {};
1421 my($vars) = $attribs{DL_VARS} || $att{DL_VARS} || [];
1425 dynamic :: $att{BASEEXT}.exp
1427 ") unless $skip{'dynamic'};
1430 static :: $att{BASEEXT}.exp
1432 ") unless $skip{'static'};
1435 $att{BASEEXT}.exp: Makefile.PL
1436 ",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::MakeMaker qw(&mksymlists); \\
1437 &mksymlists(DL_FUNCS => ',
1438 %$funcs ? neatvalue($funcs) : '""',', DL_VARS => ',
1439 @$vars ? neatvalue($vars) : '""', ", NAME => \"$att{NAME}\")'
1445 # --- Dynamic Loading Sections ---
1449 # $(INST_PM) has been moved to the all: target.
1450 # It remains here for awhile to allow for old usage: "make dynamic"
1451 dynamic :: '.$att{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
1457 my($self, %attribs) = @_;
1458 return '' unless $self->needs_linking;
1460 BOOTSTRAP = '."$att{BASEEXT}.bs".'
1462 # As Mkbootstrap might not write a file (if none is required)
1463 # we use touch to prevent make continually trying to remake it.
1464 # The DynaLoader only reads a non-empty file.
1465 $(BOOTSTRAP): '."$att{MAKEFILE} $att{BOOTDEP}".'
1466 @ echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
1467 @ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
1468 -e \'use ExtUtils::Mkbootstrap;\' \
1469 -e \'Mkbootstrap("$(BASEEXT)","$(BSLOADLIBS)");\'
1470 @ $(TOUCH) $(BOOTSTRAP)
1472 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1474 $(INST_BOOT): $(BOOTSTRAP)
1475 @ '.$att{RM_RF}.' $(INST_BOOT)
1476 -'.$att{CP}.' $(BOOTSTRAP) $(INST_BOOT)
1478 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1484 my($self, %attribs) = @_;
1485 my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
1486 my($armaybe) = $attribs{ARMAYBE} || $att{ARMAYBE} || ":";
1487 my($ldfrom) = '$(LDFROM)';
1488 return '' unless $self->needs_linking;
1489 my($osname) = $Config{'osname'};
1490 $armaybe = 'ar' if ($osname eq 'dec_osf' and $armaybe eq ':');
1493 # This section creates the dynamically loadable $(INST_DYNAMIC)
1494 # from $(OBJECT) and possibly $(MYEXTLIB).
1495 ARMAYBE = '.$armaybe.'
1496 OTHERLDFLAGS = '.$otherldflags.'
1498 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
1500 if ($armaybe ne ':'){
1502 push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
1503 push(@m,' $(RANLIB) '."$ldfrom\n");
1505 $ldfrom = "-all $ldfrom -none" if ($osname eq 'dec_osf');
1506 push(@m,' LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) -o $@ $(LDDLFLAGS) '.$ldfrom.
1507 ' $(OTHERLDFLAGS) $(MYEXTLIB) $(LDLOADLIBS)');
1510 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1513 push @m, MM->dir_target('$(INST_ARCHAUTODIR)');
1518 # --- Static Loading Sections ---
1522 # $(INST_PM) has been moved to the all: target.
1523 # It remains here for awhile to allow for old usage: "make static"
1524 static :: '.$att{MAKEFILE}.' $(INST_STATIC) $(INST_PM)
1531 return '' unless $self->needs_linking;
1534 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists
1536 # If this extension has it's own library (eg SDBM_File)
1537 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
1538 push(@m, " $att{CP} \$(MYEXTLIB) \$\@\n") if $att{MYEXTLIB};
1541 ar cr $@ $(OBJECT) && $(RANLIB) $@
1542 @echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
1544 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1547 # Old mechanism - still available:
1549 push(@m, <<'END') if $att{PERL_SRC};
1550 @ echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
1553 push @m, MM->dir_target('$(INST_ARCHAUTODIR)');
1559 my($self, %attribs) = @_;
1560 # By default .pm files are split into the architecture independent
1561 # library. This is a good thing. If a specific module requires that
1562 # it's .pm files are split into the architecture specific library
1563 # then it should use: installpm => {SPLITLIB=>'$(INST_ARCHLIB)'}
1564 # Note that installperl currently interferes with this (Config.pm)
1565 # User can disable split by saying: installpm => {SPLITLIB=>''}
1566 my($splitlib) = '$(INST_LIB)'; # NOT arch specific by default
1567 $splitlib = $attribs{SPLITLIB} if exists $attribs{SPLITLIB};
1569 foreach $dist (sort keys %{$att{PM}}){
1570 my($inst) = $att{PM}->{$dist};
1571 push(@m, "\n# installpm: $dist => $inst, splitlib=$splitlib\n");
1572 push(@m, MY->installpm_x($dist, $inst, $splitlib));
1578 sub installpm_x { # called by installpm per file
1579 my($self, $dist, $inst, $splitlib) = @_;
1580 warn "Warning: Most probably 'make' will have problems processing this file: $inst\n"
1581 if $inst =~ m![:#]!;
1582 my($instdir) = $inst =~ m|(.*)/|;
1585 $inst: $dist $att{MAKEFILE} $instdir/.exists
1586 ".' @ '.$att{RM_F}.' $@
1587 '."$att{CP} $dist".' $@
1589 @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
1591 push(@m, "\t\@\$(AUTOSPLITFILE) \$@ $splitlib/auto\n")
1592 if ($splitlib and $inst =~ m/\.pm$/);
1594 push @m, MM->dir_target($instdir);
1599 return "" unless $att{PL_FILES};
1601 foreach $plfile (sort keys %{$att{PL_FILES}}) {
1603 all :: $att{PL_FILES}->{$plfile}
1605 $att{PL_FILES}->{$plfile} :: $plfile
1606 \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile
1613 return "" unless $att{EXE_FILES} && ref $att{EXE_FILES} eq "ARRAY";
1614 my(@m, $from, $to, %fromto, @to);
1615 for $from (@{$att{EXE_FILES}}) {
1616 local($_)= '$(INST_EXE)/' . basename($from);
1617 $to = MY->exescan();
1618 print "exescan($from) => '$to'" if ($Verbose >=2);
1621 @to = values %fromto;
1623 EXE_FILES = @{$att{EXE_FILES}}
1631 while (($from,$to) = each %fromto) {
1632 my $todir = dirname($to);
1634 $to: $from $att{MAKEFILE} $todir/.exists
1644 # --- Sub-directory Sections ---
1648 # This method provides a mechanism to automatically deal with
1649 # subdirectories containing further Makefile.PL scripts.
1650 # It calls the subdir_x() method for each subdirectory.
1651 foreach(grep -d, &lsdir()){
1653 next unless -f "$_/Makefile\.PL" ;
1654 print "Including $_ subdirectory" if ($Verbose);
1655 push(@m, MY->subdir_x($_));
1659 # The default clean, realclean and test targets in this Makefile
1660 # have automatically been given entries for each subdir.
1665 push(@m, "\n# none")
1670 sub runsubdirpl{ # Experimental! See subdir_x section
1671 my($self,$subdir) = @_;
1672 chdir($subdir) or die "chdir($subdir): $!";
1673 ExtUtils::MakeMaker::check_hints();
1675 require "Makefile.PL";
1679 my($self, $subdir) = @_;
1681 # The intention is that the calling Makefile.PL should define the
1682 # $(SUBDIR_MAKEFILE_PL_ARGS) make macro to contain whatever
1683 # information needs to be passed down to the other Makefile.PL scripts.
1684 # If this does not suit your needs you'll need to write your own
1685 # MY::subdir_x() method to override this one.
1687 config :: $subdir/$att{MAKEFILE}
1688 cd $subdir && \$(MAKE) config \$(PASTHRU2) \$(SUBDIR_MAKEFILE_PL_ARGS)
1690 $subdir/$att{MAKEFILE}: $subdir/Makefile.PL \$(CONFIGDEP)
1691 }.' @echo "Rebuilding $@ ..."
1692 @$(PERL) -I"$(PERL_ARCHLIB)" -I"$(PERL_LIB)" \\
1693 -e "use ExtUtils::MakeMaker; MM->runsubdirpl(qw('.$subdir.'))" \\
1694 $(PASTHRU1) $(SUBDIR_MAKEFILE_PL_ARGS)
1695 @echo "Rebuild of $@ complete."
1699 cd $subdir && \$(MAKE) all \$(PASTHRU2)
1705 # --- Cleanup and Distribution Sections ---
1708 my($self, %attribs) = @_;
1711 # Delete temporary files but do not touch installed files. We don\'t delete
1712 # the Makefile here so a later make realclean still has a makefile to use.
1716 # clean subdirectories first
1717 push(@m, map("\t-cd $_ && test -f $att{MAKEFILE} && \$(MAKE) clean\n",@{$att{DIR}}));
1718 my(@otherfiles) = values %{$att{XS}}; # .c files from *.xs files
1719 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
1720 push(@otherfiles, "./blib");
1721 push(@m, " -$att{RM_RF} *~ t/*~ *.o *.a mon.out core so_locations "
1722 ."\$(BOOTSTRAP) \$(BASEEXT).bso \$(BASEEXT).exp @otherfiles\n");
1723 # See realclean and ext/utils/make_ext for usage of Makefile.old
1724 push(@m, " -$att{MV} $att{MAKEFILE} $att{MAKEFILE}.old 2>/dev/null\n");
1725 push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
1730 my($self, %attribs) = @_;
1733 # Delete temporary files (via clean) and also delete installed files
1734 realclean purge :: clean
1736 # realclean subdirectories first (already cleaned)
1737 my $sub = "\t-cd %s && test -f %s && \$(MAKE) %s realclean\n";
1738 foreach(@{$att{DIR}}){
1739 push(@m, sprintf($sub,$_,"$att{MAKEFILE}.old","-f $att{MAKEFILE}.old"));
1740 push(@m, sprintf($sub,$_,"$att{MAKEFILE}",''));
1742 push(@m, " $att{RM_RF} \$(INST_AUTODIR) \$(INST_ARCHAUTODIR)\n");
1743 push(@m, " $att{RM_F} \$(INST_DYNAMIC) \$(INST_BOOT)\n");
1744 push(@m, " $att{RM_F} \$(INST_STATIC) \$(INST_PM)\n");
1745 my(@otherfiles) = ($att{MAKEFILE},
1746 "$att{MAKEFILE}.old"); # Makefiles last
1747 push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
1748 push(@m, " $att{RM_RF} @otherfiles\n") if @otherfiles;
1749 push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
1755 my($self, %attribs) = @_;
1757 # VERSION should be sanitised before use as a file name
1758 if ($attribs{TARNAME}){
1759 print STDOUT "Error (fatal): Attribute TARNAME for target dist is deprecated
1760 Please use DISTNAME and VERSION";
1762 my($name) = $attribs{NAME} || '$(DISTNAME)-$(VERSION)';
1763 my($tar) = $attribs{TAR} || 'tar'; # eg /usr/bin/gnutar
1764 my($tarflags) = $attribs{TARFLAGS} || 'cvf';
1765 my($compress) = $attribs{COMPRESS} || 'compress'; # eg gzip
1766 my($suffix) = $attribs{SUFFIX} || 'Z'; # eg gz
1767 my($shar) = $attribs{SHAR} || 'shar'; # eg "shar --gzip"
1768 my($preop) = $attribs{PREOP} || '@ :'; # eg update MANIFEST
1769 my($postop) = $attribs{POSTOP} || '@ :'; # eg remove the distdir
1770 my($ci) = $attribs{CI} || 'ci -u';
1771 my($rcs) = $attribs{RCS} || 'rcs -Nv$(VERSION_SYM):';
1772 my($dist_default) = $attribs{DIST_DEFAULT} || 'tardist';
1776 TARFLAGS = $tarflags
1777 COMPRESS = $compress
1784 DIST_DEFAULT = $dist_default
1788 distclean :: realclean distcheck
1791 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&fullcheck";' \\
1795 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&mkmanifest";' \\
1798 dist : $(DIST_DEFAULT)
1800 tardist : $(DISTNAME)-$(VERSION).tar.$(SUFFIX)
1802 $(DISTNAME)-$(VERSION).tar.$(SUFFIX) : distdir
1804 $(TAR) $(TARFLAGS) $(DISTNAME)-$(VERSION).tar $(DISTNAME)-$(VERSION)
1805 $(COMPRESS) $(DISTNAME)-$(VERSION).tar
1806 $(RM_RF) $(DISTNAME)-$(VERSION)
1809 uutardist : $(DISTNAME)-$(VERSION).tar.$(SUFFIX)
1810 uuencode $(DISTNAME)-$(VERSION).tar.$(SUFFIX) \\
1811 $(DISTNAME)-$(VERSION).tar.$(SUFFIX) > \\
1812 $(DISTNAME)-$(VERSION).tar.$(SUFFIX).uu
1816 $(SHAR) $(DISTNAME)-$(VERSION) > $(DISTNAME)-$(VERSION).shar
1817 $(RM_RF) $(DISTNAME)-$(VERSION)
1821 $(RM_RF) $(DISTNAME)-$(VERSION)
1822 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "/mani/";' \\
1823 -e 'manicopy(maniread(),"$(DISTNAME)-$(VERSION)");'
1827 $(PERL) -I$(PERL_LIB) -e 'use ExtUtils::Manifest "&maniread";' \\
1828 -e '@all = keys %{maniread()};' \\
1829 -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \\
1830 -e 'print("Executing $(RCS) ...\n"); system("$(RCS) @all");'
1837 # --- Test and Installation Sections ---
1840 my($self, %attribs) = @_;
1841 my($tests) = $attribs{TESTS} || (-d "t" ? "t/*.t" : "");
1848 push(@m, <<"END") if $tests;
1849 \$(FULLPERL) -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
1851 push(@m, <<'END') if -f "test.pl";
1852 $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) test.pl
1854 push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) test \$(PASTHRU2)\n",
1856 push(@m, "\t\@echo 'No tests defined for \$(NAME) extension.'\n") unless @m > 1;
1862 my($self, %attribs) = @_;
1866 @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
1867 @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \\
1868 -e "use ExtUtils::MakeMaker; MM->writedoc('Module', '$(NAME)', \\
1869 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', \\
1870 'EXE_FILES=$(EXE_FILES)')" >> $(INSTALLARCHLIB)/perllocal.pod
1874 install :: pure_install doc_install
1878 # install subdirectories first
1879 push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) install\n",
1882 push(@m, "\t\@\$(PERL) -e 'foreach (\@ARGV){die qq{You do not have permissions to install into \$\$_\\n} unless -w \$\$_}' \$(INSTALLPRIVLIB) \$(INSTALLARCHLIB)
1883 : perl5.000 and MM pre 3.8 autosplit into INST_ARCHLIB, we delete these old files here
1884 $att{RM_F} \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/*.al
1885 $att{RM_F} \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/*.ix
1886 \$(MAKE) INST_LIB=\$(INSTALLPRIVLIB) INST_ARCHLIB=\$(INSTALLARCHLIB) INST_EXE=\$(INSTALLBIN)
1887 \@\$(PERL) -i.bak -lne 'print unless \$\$seen{\$\$_}++' \$(INSTALLARCHLIB)/auto/\$(FULLEXT)/.packlist
1891 #### UNINSTALL IS STILL EXPERIMENTAL ####
1895 push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) uninstall\n",
1897 push @m, "\t".'$(RM_RF) `cat $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist`
1904 '# Phony target to force checking subdirectories.
1913 PERL_HDRS = $(PERL_INC)/EXTERN.h $(PERL_INC)/INTERN.h \
1914 $(PERL_INC)/XSUB.h $(PERL_INC)/av.h $(PERL_INC)/cop.h \
1915 $(PERL_INC)/cv.h $(PERL_INC)/dosish.h $(PERL_INC)/embed.h \
1916 $(PERL_INC)/form.h $(PERL_INC)/gv.h $(PERL_INC)/handy.h \
1917 $(PERL_INC)/hv.h $(PERL_INC)/keywords.h $(PERL_INC)/mg.h \
1918 $(PERL_INC)/op.h $(PERL_INC)/opcode.h $(PERL_INC)/patchlevel.h \
1919 $(PERL_INC)/perl.h $(PERL_INC)/perly.h $(PERL_INC)/pp.h \
1920 $(PERL_INC)/proto.h $(PERL_INC)/regcomp.h $(PERL_INC)/regexp.h \
1921 $(PERL_INC)/scope.h $(PERL_INC)/sv.h $(PERL_INC)/unixish.h \
1922 $(PERL_INC)/util.h $(PERL_INC)/config.h
1927 $(OBJECT) : $(PERL_HDRS)
1931 # Check for unpropogated config.sh changes. Should never happen.
1932 # We do NOT just update config.h because that is not sufficient.
1933 # An out of date config.h is not fatal but complains loudly!
1934 $(PERL_INC)/config.h: $(PERL_SRC)/config.sh
1935 -@echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
1937 $(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
1938 @echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
1939 cd $(PERL_SRC) && $(MAKE) lib/Config.pm
1940 ') if $att{PERL_SRC};
1942 push(@m, join(" ", values %{$att{XS}})." : \$(XSUBPPDEPS)\n")
1950 # We do not know what target was originally specified so we
1951 # must force a manual rerun to be sure. But as it should only
1952 # happen very rarely it is not a significant problem.
1954 $(OBJECT) : '.$att{MAKEFILE}.'
1956 # We take a very conservative approach here, but it\'s worth it.
1957 # We move Makefile to Makefile.old here to avoid gnu make looping.
1958 '.$att{MAKEFILE}.' : Makefile.PL $(CONFIGDEP)
1959 @echo "Makefile out-of-date with respect to $?"
1960 @echo "Cleaning current config before rebuilding Makefile..."
1961 -@mv '."$att{MAKEFILE} $att{MAKEFILE}.old".'
1962 -$(MAKE) -f '.$att{MAKEFILE}.'.old clean >/dev/null 2>&1 || true
1963 $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL '."@ARGV".'
1964 @echo "Now you must rerun make."; false
1974 # --- Make-Directories section (internal method) ---
1975 # dir_target(@array) returns a Makefile entry for the file .exists in each
1976 # named directory. Returns nothing, if the entry has already been processed.
1977 # We're helpless though, if the same directory comes as $(FOO) _and_ as "bar".
1978 # Both of them get an entry, that's why we use "::". I chose '$(PERL)' as the
1979 # prerequisite, because there has to be one, something that doesn't change
1981 %Dir_Target = (); # package global
1984 my($self,@dirs) = @_;
1986 foreach $dir (@dirs) {
1987 next if $Dir_Target{$dir};
1989 $dir/.exists :: \$(PERL)
1991 \@ \$(TOUCH) $dir/.exists
1993 $Dir_Target{$dir}++;
1998 # --- Make-A-Perl section ---
2001 my($self, %attribs) = @_;
2003 my(%searchdirs)=($att{PERL_ARCHLIB} => 1, $att{INST_ARCHLIB} => 1);
2004 my(@searchdirs)=keys %searchdirs;
2005 # And as it's not yet built, we add the current extension
2006 my(@static)="$att{INST_ARCHLIB}/auto/$att{FULLEXT}/$att{BASEEXT}.a";
2007 my(@perlinc) = ($att{INST_ARCHLIB}, $att{INST_LIB}, $att{PERL_ARCHLIB}, $att{PERL_LIB});
2008 MY->makeaperl('MAKE' => $att{MAKEFILE},
2009 'DIRS' => \@searchdirs,
2011 'INCL' => \@perlinc,
2012 'TARGET' => $att{MAP_TARGET},
2014 'LIBPERL' => $att{LIBPERL_A}
2019 my($self, %attribs) = @_;
2020 my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
2021 @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
2023 my($cccmd, $linkcmd);
2025 # This emulates cflags to get the compiler invocation...
2026 $cccmd = MY->const_cccmd($libperl);
2027 $cccmd =~ s/^CCCMD\s*=\s*//;
2029 $cccmd =~ s/\s/ -I$att{PERL_INC} /;
2030 $cccmd .= " $Config{'cccdlflags'}" if ($Config{'d_shrplib'});
2032 # The front matter of the linkcommand...
2033 $linkcmd = join ' ', "\$(CC)",
2034 grep($_, @Config{qw(large split ldflags ccdlflags)});
2035 $linkcmd =~ s/\s+/ /g;
2037 # Which *.a files could we make use of...
2039 File::Find::find(sub {
2040 return unless m/\.a$/;
2041 return if m/^libperl/;
2042 # don't include the installed version of this extension
2043 return if $File::Find::name =~ m:auto/$att{FULLEXT}/$att{BASEEXT}.a$:;
2044 $static{fastcwd() . "/" . $_}++;
2045 }, grep( -d $_, @{$searchdirs || []}) );
2047 # We trust that what has been handed in as argument, will be buildable
2048 $static = [] unless $static;
2049 @static{@{$static}} = (1) x @{$static};
2051 $extra = [] unless $extra && ref $extra eq 'ARRAY';
2052 for (sort keys %static) {
2054 $_ = dirname($_) . "/extralibs.ld";
2058 grep(s/^/-I/, @$perlinc);
2060 $target = "perl" unless $target;
2061 $tmp = "." unless $tmp;
2064 # --- MakeMaker makeaperl section ---
2065 MAP_TARGET = $target
2066 FULLPERL = $att{'FULLPERL'}
2067 MAP_LINKCMD = $linkcmd
2068 MAP_PERLINC = @{$perlinc}
2070 join(" ", sort keys %static), "
2071 MAP_PRELIBS = $Config{'libs'} $Config{'cryptlib'}
2074 unless ($libperl && -f $libperl) {
2075 my $dir = $att{PERL_SRC} || "$att{PERL_ARCHLIB}/CORE";
2076 $libperl ||= "libperl.a";
2077 $libperl = "$dir/$libperl";
2078 print STDOUT "Warning: $libperl not found"
2079 unless (-f $libperl || defined($att{PERL_SRC}));
2083 MAP_LIBPERL = $libperl
2087 extralibs.ld: @$extra
2093 push @m, "\tcat $_ >> \$\@\n";
2097 \$(MAP_TARGET): $tmp/perlmain.o \$(MAP_LIBPERL) \$(MAP_STATIC) extralibs.ld
2098 \$(MAP_LINKCMD) -o \$\@ $tmp/perlmain.o \$(MAP_LIBPERL) \$(MAP_STATIC) `cat extralibs.ld` \$(MAP_PRELIBS)
2099 @ echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
2100 @ echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
2101 @ echo 'To remove the intermediate files say'
2102 @ echo ' make -f $makefilename map_clean'
2104 $tmp/perlmain.o: $tmp/perlmain.c
2106 push @m, "\tcd $tmp && $cccmd perlmain.c\n";
2109 $tmp/perlmain.c: $makefilename}, q{
2111 @ $(FULLPERL) $(MAP_PERLINC) -e 'use ExtUtils::Miniperl; \\
2112 writemain(grep s#.*/auto/##, qw|$(MAP_STATIC)|)' > $@.tmp && mv $@.tmp $@
2116 # We write EXTRA outside the perl program to have it eval'd by the shell
2119 @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
2120 @ $(FULLPERL) -e 'use ExtUtils::MakeMaker; MM->writedoc("Perl binary",' \\
2121 -e '"$(MAP_TARGET)", "MAP_STATIC=$(MAP_STATIC)",' \\
2122 -e '"MAP_EXTRA=@ARGV", "MAP_LIBPERL=$(MAP_LIBPERL)")' \\
2123 -- `cat extralibs.ld` >> $(INSTALLARCHLIB)/perllocal.pod
2127 inst_perl: pure_inst_perl doc_inst_perl
2129 pure_inst_perl: \$(MAP_TARGET)
2130 $att{CP} \$(MAP_TARGET) \$(INSTALLBIN)/\$(MAP_TARGET)
2132 realclean :: map_clean
2135 $att{RM_F} $tmp/perlmain.o $tmp/perlmain.c $makefilename extralibs.ld
2142 my($self,$libs) = @_;
2143 require ExtUtils::Liblist;
2144 ExtUtils::Liblist::ext($libs, $Verbose);
2151 # only AIX requires a symbol list at this point
2152 # (so does VMS, but that's handled by the MM_VMS package)
2153 return '' unless $Config{'osname'} eq 'aix';
2155 init_main(@ARGV) unless defined $att{'BASEEXT'};
2156 if (! $att{DL_FUNCS}) {
2158 ($bootfunc = $att{NAME}) =~ s/\W/_/g;
2159 $att{DL_FUNCS} = {$att{BASEEXT} => ["boot_$bootfunc"]};
2161 rename "$att{BASEEXT}.exp", "$att{BASEEXT}.exp_old";
2163 open(EXP,">$att{BASEEXT}.exp") or die $!;
2164 print EXP join("\n",@{$att{DL_VARS}}) if $att{DL_VARS};
2165 foreach $pkg (keys %{$att{DL_FUNCS}}) {
2166 (my($prefix) = $pkg) =~ s/\W/_/g;
2168 foreach $func (@{$att{DL_FUNCS}->{$pkg}}) {
2169 $func = "XS_${prefix}_$func" unless $func =~ /^boot_/;
2170 print EXP "$func\n";
2176 # --- Output postprocessing section ---
2177 #nicetext is included to make VMS support easier
2178 sub nicetext { # Just return the input - no action needed
2179 my($self,$text) = @_;
2183 # --- perllocal.pod section ---
2185 my($self,$what,$name,@attribs)=@_;
2186 # the following would have to move to a ExtUtils::Perllocal.pm, if we want it
2187 # it's dangerous wrt AFS, and it's against the philosophy that MakeMaker
2188 # should never write to files. We write to stdout and append to the file
2189 # during make install, but we cannot rely on '-f $Config{"installarchlib"},
2190 # as there is a time window between the WriteMakefile and the make.
2191 # -w $Config{'installarchlib'} or die "No write permission to $Config{'installarchlib'}";
2192 # my($localpod) = "$Config{'installarchlib'}/perllocal.pod";
2194 # if (-f $localpod) {
2195 # print "Appending installation info to $localpod\n";
2196 # open POD, ">>$localpod" or die "Couldn't open $localpod";
2198 # print "Writing new file $localpod\n";
2199 # open POD, ">$localpod" or die "Couldn't open $localpod";
2200 # print POD "=head1 NAME
2202 #perllocal - locally installed modules and perl binaries
2203 #\n=head1 HISTORY OF LOCAL INSTALLATIONS
2208 chop($time = ctime(time));
2209 print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
2210 print join "\n\n=item *\n\n", map("C<$_>",@attribs);
2211 print "\n\n=back\n\n";
2217 # the following keeps AutoSplit happy
2218 package ExtUtils::MakeMaker;
2225 ExtUtils::MakeMaker - create an extension Makefile
2229 C<use ExtUtils::MakeMaker;>
2231 C<WriteMakefile( ATTRIBUTE =E<gt> VALUE [, ...] );>
2235 This utility is designed to write a Makefile for an extension module
2236 from a Makefile.PL. It is based on the Makefile.SH model provided by
2237 Andy Dougherty and the perl5-porters.
2239 It splits the task of generating the Makefile into several subroutines
2240 that can be individually overridden. Each subroutine returns the text
2241 it wishes to have written to the Makefile.
2243 MakeMaker.pm uses the architecture specific information from
2244 Config.pm. In addition the extension may contribute to the C<%Config>
2245 hash table of Config.pm by supplying hints files in a C<hints/>
2246 directory. The hints files are expected to be named like their
2247 counterparts in C<PERL_SRC/hints>, but with an C<.pl> file name
2248 extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by MakeMaker
2249 within the WriteMakefile() subroutine, and can be used to execute
2250 commands as well as to include special variables. If there is no
2251 hintsfile for the actual system, but for some previous releases of the
2252 same operating system, the latest one of those is used.
2254 =head2 Default Makefile Behaviour
2256 The automatically generated Makefile enables the user of the extension
2259 perl Makefile.PL # optionally "perl Makefile.PL verbose"
2261 make test # optionally set TEST_VERBOSE=1
2262 make install # See below
2264 The Makefile to be produced may be altered by adding arguments of the
2265 form C<KEY=VALUE>. If the user wants to work with a different perl
2266 than the default, this is achieved by specifying
2268 perl Makefile.PL PERL=/tmp/myperl5
2270 Other interesting targets in the generated Makefile are
2272 make config # to check if the Makefile is up-to-date
2273 make clean # delete local temporary files (Makefile gets renamed)
2274 make realclean # delete all derived files (including installed files)
2275 make dist # see below the Distribution Support section
2277 =head2 Special case C<make install>
2279 C<make> alone puts all relevant files into directories that are named
2280 by the macros INST_LIB, INST_ARCHLIB, and INST_EXE. All three default
2281 to ./blib if you are I<not> building below the perl source directory. If
2282 you I<are> building below the perl source, INST_LIB and INST_ARCHLIB
2283 default to ../../lib, and INST_EXE is not defined.
2285 The I<install> target of the generated Makefile is a recursive call to
2288 INST_LIB to INSTALLPRIVLIB
2289 INST_ARCHLIB to INSTALLARCHLIB
2290 INST_EXE to INSTALLBIN
2292 The three INSTALL... macros in turn default to
2293 $Config{installprivlib}, $Config{installarchlib}, and
2294 $Config{installbin} respectively.
2296 The recommended way to proceed is to set only the INSTALL* macros, not
2297 the INST_* targets. In doing so, you give room to the compilation
2298 process without affecting important directories. Usually a 'make test'
2299 will succeed after the make, and a 'make install' can finish the game.
2301 MakeMaker gives you much more freedom than needed to configure
2302 internal variables and get different results. It is worth to mention,
2303 that make(1) also lets you configure most of the variables that are
2304 used in the Makefile. But in the majority of situations this will not
2305 be necessary, and should only be done, if the author of a package
2308 The usual relationship between INSTALLPRIVLIB and INSTALLARCHLIB is
2309 that the latter is a subdirectory of the former with the name
2310 C<$Config{'archname'}>, MakeMaker supports the user who sets
2311 INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not, then
2312 MakeMaker defaults the latter to be INSTALLPRIVLIB/ARCHNAME if that
2313 directory exists, otherwise it defaults to INSTALLPRIVLIB.
2315 Previous versions of MakeMaker suggested to use the INST_* macros. For
2316 backwards compatibility, these are still supported but deprecated in
2317 favor of the INSTALL* macros.
2319 Here is the description, what they are used for: If the user specifies
2320 the final destination for the INST_... macros, then there is no need
2321 to call 'make install', because 'make' will already put all files in
2324 If there is a need to first build everything in the C<./blib>
2325 directory and test the product, then it's appropriate to use the
2326 INSTALL... macros. So the users have the choice to either say
2328 # case: trust the module
2329 perl Makefile.PL INST_LIB=~/perllib INST_EXE=~/bin
2335 perl Makefile.PL INSTALLPRIVLIB=~/foo \
2336 INSTALLARCHLIB=~/foo/bar INSTALLBIN=~/bin
2341 Note, that the tilde expansion is done by MakeMaker, not by perl by
2342 default, nor by make. So be careful to use the tilde only with the
2343 C<perl Makefile.PL> call.
2345 It is important to know, that the INSTALL* macros should be absolute
2346 paths, never relativ ones. Packages with multiple Makefile.PLs in
2347 different directories get the contents of the INSTALL* macros
2348 propagated verbatim. (The INST_* macros will be corrected, if they are
2349 relativ paths, but not the INSTALL* macros.)
2351 If the user has superuser privileges, and is not working on AFS
2352 (Andrew File System) or relatives, then the defaults for
2353 INSTALLPRIVLIB, INSTALLARCHLIB, and INSTALLBIN will be appropriate,
2354 and this incantation will be the best:
2356 perl Makefile.PL; make; make test
2359 (I<make test> is not necessarily supported for all modules.)
2361 C<make install> per default writes some documentation of what has been
2362 done into the file C<$Config{'installarchlib'}/perllocal.pod>. This is
2363 an experimental feature. It can be bypassed by calling C<make
2366 =head2 Support to Link a new Perl Binary (eg dynamic loading not available)
2368 An extension that is built with the above steps is ready to use on
2369 systems supporting dynamic loading. On systems that do not support
2370 dynamic loading, any newly created extension has to be linked together
2371 with the available resources. MakeMaker supports the linking process
2372 by creating appropriate targets in the Makefile whenever an extension
2373 is built. You can invoke the corresponding section of the makefile with
2377 That produces a new perl binary in the current directory with all
2378 extensions linked in that can be found in INST_ARCHLIB (usually
2379 C<./blib>) and PERL_ARCHLIB.
2381 The binary can be installed into the directory where perl normally
2382 resides on your machine with
2386 To produce a perl binary with a different name than C<perl>, either say
2388 perl Makefile.PL MAP_TARGET=myperl
2395 make myperl MAP_TARGET=myperl
2396 make inst_perl MAP_TARGET=myperl
2398 In any case you will be prompted with the correct invocation of the
2399 C<inst_perl> target that installs the new binary into INSTALLBIN.
2401 Note, that there is a C<makeaperl> scipt in the perl distribution,
2402 that supports the linking of a new perl binary in a similar fashion,
2403 but with more options.
2405 C<make inst_perl> per default writes some documentation of what has been
2406 done into the file C<$Config{'installarchlib'}/perllocal.pod>. This
2407 can be bypassed by calling C<make pure_inst_perl>.
2409 Warning: the inst_perl: target is rather mighty and will probably
2410 overwrite your existing perl binary. Use with care!
2412 =head2 Determination of Perl Library and Installation Locations
2414 MakeMaker needs to know, or to guess, where certain things are
2415 located. Especially INST_LIB and INST_ARCHLIB (where to install files
2416 into), PERL_LIB and PERL_ARCHLIB (where to read existing modules
2417 from), and PERL_INC (header files and C<libperl*.*>).
2419 Extensions may be built either using the contents of the perl source
2420 directory tree or from an installed copy of the perl library.
2422 If an extension is being built below the C<ext/> directory of the perl
2423 source then MakeMaker will set PERL_SRC automatically (e.g., C<../..>).
2424 If PERL_SRC is defined then other variables default to the following:
2427 PERL_LIB = PERL_SRC/lib
2428 PERL_ARCHLIB = PERL_SRC/lib
2430 INST_ARCHLIB = PERL_ARCHLIB
2432 If an extension is being built away from the perl source then MakeMaker
2433 will leave PERL_SRC undefined and default to using the installed copy
2434 of the perl library. The other variables default to the following:
2436 PERL_INC = $archlib/CORE
2438 PERL_ARCHLIB = $archlib
2440 INST_ARCHLIB = ./blib
2442 If perl has not yet been installed then PERL_SRC can be defined on the
2443 command line as shown in the previous section.
2445 =head2 Useful Default Makefile Macros
2447 FULLEXT = Pathname for extension directory (eg DBD/Oracle).
2449 BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
2451 ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD)
2453 PERL_LIB = Directory where we read the perl library files
2455 PERL_ARCHLIB = Same as above for architecture dependent files
2457 INST_LIB = Directory where we put library files of this extension
2458 while building it. If we are building below PERL_SRC/ext
2459 we default to PERL_SRC/lib, else we default to ./blib.
2461 INST_ARCHLIB = Same as above for architecture dependent files
2463 INST_LIBDIR = C<$(INST_LIB)$(ROOTEXT)>
2465 INST_AUTODIR = C<$(INST_LIB)/auto/$(FULLEXT)>
2467 INST_ARCHAUTODIR = C<$(INST_ARCHLIB)/auto/$(FULLEXT)>
2469 =head2 Customizing The Generated Makefile
2471 If the Makefile generated does not fit your purpose you can change it
2472 using the mechanisms described below.
2474 =head2 Using Attributes (and Parameters)
2476 The following attributes can be specified as arguments to WriteMakefile()
2477 or as NAME=VALUE pairs on the command line:
2479 This description is not yet documented; you can get at the description
2480 with one of the commands
2484 =item C<perl Makefile.PL help>
2485 (if you already have a basic Makefile.PL)
2488 (if you already have a Makefile)
2490 =item C<perl -e 'use ExtUtils::MakeMaker "&help"; &help;'>
2491 (if you have neither nor)
2495 =head2 Overriding MakeMaker Methods
2497 If you cannot achieve the desired Makefile behaviour by specifying
2498 attributes you may define private subroutines in the Makefile.PL.
2499 Each subroutines returns the text it wishes to have written to
2500 the Makefile. To override a section of the Makefile you can
2503 sub MY::c_o { "new literal text" }
2505 or you can edit the default by saying something like:
2507 sub MY::c_o { $_=MM->c_o; s/old text/new text/; $_ }
2509 If you still need a different solution, try to develop another
2510 subroutine, that fits your needs and submit the diffs to
2511 F<perl5-porters@nicoh.com> or F<comp.lang.perl> as appropriate.
2513 =head2 Distribution Support
2515 For authors of extensions MakeMaker provides several Makefile
2516 targets. Most of the support comes from the ExtUtils::Manifest module,
2517 where additional documentation can be found.
2521 =item make distcheck
2522 reports which files are below the build directory but not in the
2523 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2526 =item make distclean
2527 does a realclean first and then the distcheck. Note that this is not
2528 needed to build a new distribution as long as you are sure, that the
2529 MANIFEST file is ok.
2532 rewrites the MANIFEST file, adding all remaining files found (See
2533 ExtUtils::Manifest::mkmanifest() for details)
2536 Copies all the files that are in the MANIFEST file to a newly created
2537 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2538 exists, it will be removed first.
2541 First does a command $(PREOP) which defaults to a null command. Does a
2542 distdir next and runs C<tar> on that directory into a tarfile. Then
2543 deletes the distdir. Finishes with a command $(POSTOP) which defaults
2547 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2549 =item make uutardist
2550 Runs a tardist first and uuencodes the tarfile.
2553 First does a command $(PREOP) which defaults to a null command. Does a
2554 distdir next and runs C<shar> on that directory into a sharfile. Then
2555 deletes the distdir. Finishes with a command $(POSTOP) which defaults
2556 to a null command. Note: For shdist to work properly a C<shar>
2557 program that can handle directories is mandatory.
2560 Does a $(CI) (defaults to C<ci -u>) and a $(RCS) (C<rcs -q
2561 -Nv$(VERSION_SYM):>) on all files in the MANIFEST file
2563 Customization of the dist targets can be done by specifying a hash
2564 reference to the dist attribute of the WriteMakefile call. The
2565 following parameters are recognized:
2569 COMPRESS ('compress')
2577 WriteMakefile( 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" })
2583 Andy Dougherty F<E<lt>doughera@lafcol.lafayette.eduE<gt>>, Andreas
2584 Koenig F<E<lt>k@franz.ww.TU-Berlin.DEE<gt>>, Tim Bunce
2585 F<E<lt>Tim.Bunce@ig.co.ukE<gt>>. VMS support by Charles Bailey
2586 F<E<lt>bailey@HMIVAX.HUMGEN.UPENN.EDUE<gt>>. Contact the makemaker
2587 mailing list L<mailto:makemaker@franz.ww.tu-berlin.de>, if you have any
2590 =head1 MODIFICATION HISTORY
2592 v1, August 1994; by Andreas Koenig. Based on Andy Dougherty's Makefile.SH.
2593 v2, September 1994 by Tim Bunce.
2594 v3.0 October 1994 by Tim Bunce.
2595 v3.1 November 11th 1994 by Tim Bunce.
2596 v3.2 November 18th 1994 by Tim Bunce.
2597 v3.3 November 27th 1994 by Andreas Koenig.
2598 v3.4 December 7th 1994 by Andreas Koenig and Tim Bunce.
2599 v3.5 December 15th 1994 by Tim Bunce.
2600 v3.6 December 15th 1994 by Tim Bunce.
2601 v3.7 December 30th 1994 By Tim Bunce
2602 v3.8 January 17th 1995 By Andreas Koenig and Tim Bunce
2603 v3.9 January 19th 1995 By Tim Bunce
2604 v3.10 January 23rd 1995 By Tim Bunce
2605 v3.11 January 24th 1995 By Andreas Koenig
2606 v4.00 January 24th 1995 By Tim Bunce
2607 v4.01 January 25th 1995 By Tim Bunce
2608 v4.02 January 29th 1995 By Andreas Koenig
2609 v4.03 January 30th 1995 By Andreas Koenig
2610 v4.04 Februeary 5th 1995 By Andreas Koenig
2611 v4.05 February 8th 1995 By Andreas Koenig
2612 v4.06 February 10th 1995 By Andreas Koenig
2613 v4.061 February 12th 1995 By Andreas Koenig
2614 v4.08 - 4.085 February 14th-21st 1995 by Andreas Koenig
2615 v4.086 March 9 1995 by Andy Dougherty
2616 v4.09 March 31 1995 by Andreas Koenig
2617 v4.091 April 3 1995 by Andy Dougherty
2618 v4.092 April 11 1995 by Andreas Koenig
2619 v4.093 April 12 1995 by Andy Dougherty
2620 v4.094 April 12 1995 by Andy Dougherty
2622 v4.100 May 10 1995 by Andreas Koenig
2624 Broken out Mkbootstrap to make the file smaller and easier to manage,
2625 and to speed up the build process.
2627 Added ExtUtils::Manifest as an extra module that is used to streamline
2628 distributions. (See pod section I<distribution support>).
2630 Added a VERSION_SYM macro, that is derived from VERSION but all C<\W>
2631 characters replaced by an underscore.
2633 Moved the whole documentation below __END__ for easier maintanance.
2635 linkext =E<gt> { LINKTYPE =E<gt> '' } should work now as expected.
2637 Rechecked the use of INST_LIB, INST_ARCHLIB, and INST_EXE from the
2638 perspective of an AFS user (thanks to Rudolph T Maceyko for the
2639 hint). With full backward compatiblity it is now possible, to set
2640 INSTALLPRIVLIB, INSTALLARCHLIB, and INSTALLBIN either with 'perl
2641 Makefile.PL' or with 'make install'. A bare 'make' ignores these
2642 settings. The effect of this change is that it is no longer
2643 recommended to set the INST_* attributes directly, although it doesn't
2644 hurt, if they do so. The PASTHRU variables (now PASTHRU1 and PASTHRU2)
2645 are fully aware of their duty: the INST_* attributes are only
2646 propagated to runsubdirpl, not to 'cd subdir && make config' and 'cd
2647 subdir && make all'.
2649 Included Tim's "Unable to locate Perl library" patch.
2651 Eliminated any excess of spaces in the $old/$new comparison in
2654 Added a prompt function with usage $answer = prompt $message, $default.
2656 Included Tim's patch that searches for perl5 and perl$] as well as
2659 Added .NO_PARALLEL for the time until I have a multiple cpu machine
2662 Introduced a macro() subroutine. WriteMakefile("macro" =E<gt> { FOO
2663 =E<gt> BAR }) defines the macro FOO = BAR in the generated Makefile.
2665 Rolled in Tim's patch for needs_linking.
2667 writedoc now tries to be less clever. It was trying to determine, if a
2668 perllocal.pod had to be created or appended to. As we have now the
2669 possibility, that INSTALLARCHLIB is determined at make's runtime, we
2670 cannot do this anymore. We append to that file in any case.
2672 Added Kenneth's pod installation patch.
2674 v4.110 May 19 1995 by Andreas Koenig
2678 MANIFEST.SKIP now contains only regular expressions. RCS directories
2679 are no longer skipped by default, as this may be configured in the
2682 The manifest target now does no realclean anymore.
2684 I_PERL_LIBS depreciated (no longer used). (unless you speak up, of
2687 I could not justify that we rebuild the Makefile when MakeMaker has
2688 changed (as Kenneth suggested). If this is really a strong desire,
2689 please convince me. But a minor change of the MakeMaker should not
2690 trigger a 60 minutes rebuild of Tk, IMO.
2692 Broken out extliblist into the new module ExtUtils::Liblist. Should
2693 help extension writers for their own Configure scripts. The breaking
2694 into pieces should be done now, I suppose.
2696 Added an (experimenta!!) uninstall target that works with a
2697 packlist. AutoSplit files are not yet in the packlist. This needs a
2698 patch to AutoSplit, doesn't it? The packlist file is installed in
2699 INST_ARCHAUTODIR/.packlist. It doesn't have means to decide, if a file
2700 is architecture dependent or not, we just collect as much as we can
2701 get. make -n recommended before actually executing. (I leave this
2702 target undocumented in the pod section). Suggestions welcome!
2704 Added basic chmod support. Nothing spectacular. *.so and *.a files get
2705 permission 755, because I seem to recall, that some systems need
2706 execute permissions in some weird constellations. The rest becomes
2707 644. What else do we need to make this flexible?
2709 Then I took Tim's word serious: no bloat. No turning all packages into
2710 perl scripts. Leaving shar, tar, uu be what they are... Sorry,
2711 Kenneth, we still have to convince Larry that a growing MakeMaker
2714 Added an extra check whenever they install below the perl source tree:
2715 is this extension a standard extension? If it is, everything behaves
2716 as we are used to. If it is not, the three INST_ macros are set to
2717 ./blib, and they get a warning that this extension has to be
2718 installed manually with 'make install'.
2720 Added a warning for targets that have a colon or a hashmark within
2721 their names, because most make(1)s will not be able to process them.
2723 Applied Hallvard's patch to ~user evaluation for cases where user does
2726 Added a ci target that checks in all files from the MANIFEST into rcs.
2728 =head1 new in 4.12/4.13
2730 "Please notify perl5-porters" message is now accompanied by
2733 (Manifest.pm) Change delimiter for the evaluation of the regexes from
2734 MANIFEST.SKIP to from "!" to "/". I had overlooked the fact, that ! no
2735 has a meaning in regular expressions.
2737 Disabled the new logic that prevents non-standard extensions from
2738 writing to PERL_SRC/lib to give Andy room for 5.001f.
2740 Added a Version_check target that calls MakeMaker for a simple Version
2741 control function on every invocation of 'make' in the future. Doesn't
2742 have an effect currently.
2744 Target dist is still defaulting to tardist, but the level of
2745 indirection has changed. The Makefile macro DIST_DEFAULT takes it's
2746 place. This allows me to make dist dependent from whatever I intend as
2747 my standard distribution.
2749 Made sure that INST_EXE is created for extensions that need it.
2751 4.13 is just a cleanup/documentation patch. And it adds a MakeMaker FAQ :)
2753 =head v4.14 June 5, 1995, by Andreas Koenig
2755 Reintroduces the LD_RUN_PATH macro. LD_RUN_PATH is passed as an
2756 environment variable to the ld run. It is needed on Sun OS, and does
2757 no harm on other systems. It is a colon seperated list of the
2758 directories in LDLOADLIBS.
2760 =head v4.15 June 6, 1995, by Andreas Koenig
2762 Add -I$(PERL_ARCHLIB) -I$(PERL_LIB) to calls to xsubpp.
2766 Needs more complete documentation.
2768 Add a C<html:> target when there has been found a general solution to
2769 installing html files.
2771 Add a FLAVOR variable that makes it easier to build debugging,
2772 embedded or multiplicity perls. Currently the easiest way to produce a
2773 debugging perl seems to be (after haveing built perl):
2775 ./Configure -D"archname=IP22-irix-d" -des
2776 make perllib=libperld.a
2777 make test perllib=libperld.a
2778 mv /usr/local/bin/perl /usr/local/bin/perl/O_perl5.001e
2779 make install perllib=libperld.a
2780 cp /usr/local/bin/perl/O_perl5.001e /usr/local/bin/perl
2781 It would be nice, if the Configure step could be dropped. Also nice, but
2782 maybe expensive, if 'make clobber' wouldn't be needed.
2784 The uninstall target has to be completed, it's just a sketch.
2786 Reconsider Makefile macros. The output of macro() should be the last
2787 before PASTHRU and none should come after that -- tough work.
2789 Think about Nick's desire, that the pTk subdirectory needs a special
2792 Find a way to have multiple MYEXTLIB archive files combined into
2793 one. Actually I need some scenario, where this problem can be
2794 illustrated. I currently don't see the problem.
2796 Test if .NOPARALLEL can be omitted.
2798 Don't let extensions write to PERL_SRC/lib anymore, build perl from
2799 the extensions found below ext, run 'make test' and 'make install' on
2800 each extension (giving room for letting them fail). Move some of the
2801 tests from t/lib/* to the libraries.
2803 Streamline the production of a new perl binary on systems that DO have
2804 dynamic loading (especially make test needs further support, as test
2805 most probably needs the new binary).