1 package ExtUtils::MM_Win32;
5 ExtUtils::MM_Win32 - methods to override UN*X behaviour in ExtUtils::MakeMaker
9 use ExtUtils::MM_Win32; # Done internally by ExtUtils::MakeMaker if needed
13 See ExtUtils::MM_Unix for a documentation of the methods provided
14 there. This package overrides the implementation of these methods, not
26 Exporter::import('ExtUtils::MakeMaker',
27 qw( $Verbose &neatvalue));
29 $ENV{EMXSHELL} = 'sh'; # to run `commands`
30 unshift @MM::ISA, 'ExtUtils::MM_Win32';
32 $BORLAND = 1 if $Config{'cc'} =~ /^bcc/i;
33 $GCC = 1 if $Config{'cc'} =~ /^gcc/i;
34 $DMAKE = 1 if $Config{'make'} =~ /^dmake/i;
35 $NMAKE = 1 if $Config{'make'} =~ /^nmake/i;
36 $OBJ = 1 if $Config{'ccflags'} =~ /PERL_OBJECT/i;
39 my($self,%attribs) = @_;
41 my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
42 my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
43 my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
45 (my $boot = $self->{NAME}) =~ s/:/_/g;
47 if (not $self->{SKIPHASH}{'dynamic'}) {
49 $self->{BASEEXT}.def: Makefile.PL
51 q! $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Mksymlists \\
52 -e "Mksymlists('NAME' => '!, $self->{NAME},
53 q!', 'DLBASE' => '!,$self->{DLBASE},
54 q!', 'DL_FUNCS' => !,neatvalue($funcs),
55 q!, 'IMPORTS' => !,neatvalue($imports),
56 q!, 'DL_VARS' => !, neatvalue($vars), q!);"
62 sub replace_manpage_separator {
70 my @e = exists($ENV{'PATHEXT'})
71 ? split(/;/, $ENV{PATHEXT})
72 : qw(.com .exe .bat .cmd);
74 for (@e) { $e .= "\Q$_\E|" }
76 # see if file ends in one of the known extensions
77 if ($file =~ /($e)$/) {
78 return $file if -e $file;
82 return "$file$_" if -e "$file$_";
88 sub file_name_is_absolute {
90 $file =~ m{^([a-z]:)?[\\/]}i ;
94 my($self, $ver, $names, $dirs, $trace) = @_;
97 print "Looking for perl $ver by these names:
103 foreach $dir (@$dirs){
104 next unless defined $dir; # $self->{PERL_SRC} may be undefined
105 foreach $name (@$names){
107 if ($self->file_name_is_absolute($name)) { # /foo/bar
109 } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
110 $abs = $self->catfile($dir, $name);
112 $abs = $self->canonpath($self->catfile($self->curdir, $name));
114 print "Checking $abs\n" if ($trace >= 2);
115 next unless $self->maybe_command($abs);
116 print "Executing $abs\n" if ($trace >= 2);
117 $val = `$abs -e "require $ver;" 2>&1`;
119 print "Using PERL=$abs\n" if $trace;
121 } elsif ($trace >= 2) {
122 print "Result: `$val'\n";
126 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
127 0; # false and not empty
134 # append a slash to each argument unless it has one there
135 $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
137 my $result = $self->canonpath(join('', @args));
143 Concatenate one or more directory names and a filename to form a
144 complete path ending with a filename
151 return $file unless @_;
152 my $dir = $self->catdir(@_);
154 $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
161 &ExtUtils::MM_Unix::init_others;
162 $self->{'TOUCH'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e touch';
163 $self->{'CHMOD'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e chmod';
164 $self->{'CP'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e cp';
165 $self->{'RM_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_f';
166 $self->{'RM_RF'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_rf';
167 $self->{'MV'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mv';
168 $self->{'NOOP'} = 'rem';
169 $self->{'TEST_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e test_f';
170 $self->{'LD'} = $Config{'ld'} || 'link';
171 $self->{'AR'} = $Config{'ar'} || 'lib';
174 $self->{'LDLOADLIBS'} ||= ' ';
178 $self->{'LDLOADLIBS'}
181 : # compiler adds msvcrtd?.lib according to debug switches
182 'oldnames.lib kernel32.lib comdlg32.lib winspool.lib gdi32.lib '
183 .'advapi32.lib user32.lib shell32.lib netapi32.lib ole32.lib '
184 .'oleaut32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib'
185 ) . ' $(LIBC) odbc32.lib odbccp32.lib';
187 $self->{'DEV_NULL'} = '> NUL';
188 # $self->{'NOECHO'} = ''; # till we have it working
194 Initializes lots of constants and .SUFFIXES and .PHONY
204 AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
205 VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
206 INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
207 INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
208 INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
209 PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
210 FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
211 PERL_INC PERL FULLPERL
214 next unless defined $self->{$tmp};
215 push @m, "$tmp = $self->{$tmp}\n";
219 VERSION_MACRO = VERSION
220 DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
221 XS_VERSION_MACRO = XS_VERSION
222 XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
226 MAKEMAKER = $INC{'ExtUtils\MakeMaker.pm'}
227 MM_VERSION = $ExtUtils::MakeMaker::VERSION
231 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
232 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
233 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
234 # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
235 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
239 FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
242 next unless defined $self->{$tmp};
243 push @m, "$tmp = $self->{$tmp}\n";
247 # Handy lists of source code files:
248 XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
249 C_FILES = ".join(" \\\n\t", @{$self->{C}})."
250 O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
251 H_FILES = ".join(" \\\n\t", @{$self->{H}})."
252 MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
253 MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
257 INST_MAN1DIR INSTALLMAN1DIR MAN1EXT INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
259 next unless defined $self->{$tmp};
260 push @m, "$tmp = $self->{$tmp}\n";
268 .NO_CONFIG_REC: Makefile
269 } if $ENV{CLEARCASE_ROOT};
271 # why not q{} ? -- emacs
273 # work around a famous dec-osf make(1) feature(?):
276 .SUFFIXES: .xs .c .C .cpp .cxx .cc \$(OBJ_EXT)
278 # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
279 # some make implementations will delete the Makefile when we rebuild it. Because
280 # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
281 # does so. Our milage may vary.
282 # .PRECIOUS: Makefile # seems to be not necessary anymore
284 .PHONY: all config static dynamic test linkext manifest
286 # Where is the Config information that we are using/depend on
287 CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
290 my @parentdir = split(/::/, $self->{PARENT_NAME});
292 # Where to put things:
293 INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
294 INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
296 INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
297 INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
300 if ($self->has_link_code()) {
302 INST_STATIC = $(INST_ARCHAUTODIR)\$(BASEEXT)$(LIB_EXT)
303 INST_DYNAMIC = $(INST_ARCHAUTODIR)\$(DLBASE).$(DLEXT)
304 INST_BOOT = $(INST_ARCHAUTODIR)\$(BASEEXT).bs
314 $tmp = $self->export_list;
318 $tmp = $self->perl_archive;
324 #INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
326 #PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
330 TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
332 PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
342 my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
343 my @path = split(';',$path);
344 foreach(@path) { $_ = '.' if $_ eq '' }
350 Defines how to produce the *.a (or equivalent) files.
356 # Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
357 # return '' unless $self->needs_linking(); #might be because of a subdir
359 return '' unless $self->has_link_code;
363 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)\.exists
366 # If this extension has it's own library (eg SDBM_File)
367 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
368 push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
371 q{ $(AR) }.($BORLAND ? '$@ $(OBJECT:^"+")'
372 : ($GCC ? '-ru $@ $(OBJECT)'
373 : '-out:$@ $(OBJECT)')).q{
374 }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld
378 # Old mechanism - still available:
380 push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs}."\n\n"
381 if $self->{PERL_SRC};
383 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
389 Defines targets for bootstrap files.
394 my($self, %attribs) = @_;
397 ' unless $self->has_link_code();
400 BOOTSTRAP = '."$self->{BASEEXT}.bs".'
402 # As Mkbootstrap might not write a file (if none is required)
403 # we use touch to prevent make continually trying to remake it.
404 # The DynaLoader only reads a non-empty file.
405 $(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)\.exists
406 '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
407 '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
408 -MExtUtils::Mkbootstrap \
409 -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
410 '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
413 $(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists
414 '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
415 -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
420 =item dynamic_lib (o)
422 Defines how to produce the *.so (or equivalent) files.
427 my($self, %attribs) = @_;
428 return '' unless $self->needs_linking(); #might be because of a subdir
430 return '' unless $self->has_link_code;
432 my($otherldflags) = $attribs{OTHERLDFLAGS} || ($BORLAND ? 'c0d32.obj': '');
433 my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
434 my($ldfrom) = '$(LDFROM)';
437 # This section creates the dynamically loadable $(INST_DYNAMIC)
438 # from $(OBJECT) and possibly $(MYEXTLIB).
439 OTHERLDFLAGS = '.$otherldflags.'
440 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
442 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
446 q{ dlltool --def $(EXPORT_LIST) --output-exp dll.exp
447 $(LD) -o $@ -Wl,--base-file -Wl,dll.base $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp
448 dlltool --def $(EXPORT_LIST) --base-file dll.base --output-exp dll.exp
449 $(LD) -o $@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp });
452 q{ $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) }.$ldfrom.q{,$@,,$(PERL_ARCHIVE:s,/,\,) $(LDLOADLIBS:s,/,\,) $(MYEXTLIB:s,/,\,),$(EXPORT_LIST:s,/,\,),$(RESFILES)} :
453 q{ $(LD) -out:$@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)}
460 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
468 if ($self->{CAPI} eq 'TRUE') {
469 return '$(PERL_INC)\perlCAPI$(LIB_EXT)';
472 return '$(PERL_INC)\\'.$Config{'libperl'};
478 return "$self->{BASEEXT}.def";
483 No physical check on the filesystem, but a logical cleanup of a
484 path. On UNIX eliminated successive slashes and successive "/.".
489 my($self,$path) = @_;
490 $path =~ s/^([a-z]:)/\u$1/;
492 $path =~ s|(.)\\+|$1\\|g ; # xx////xx -> xx/xx
493 $path =~ s|(\\\.)+\\|\\|g ; # xx/././xx -> xx/xx
494 $path =~ s|^(\.\\)+|| unless $path eq ".\\"; # ./xx -> xx
496 unless $path =~ m#^([a-z]:)?\\#; # xx/ -> xx
497 $path .= '.' if $path =~ m#\\$#;
503 Takes one argument, a file name, and returns the file name, if the
504 argument is likely to be a perl script. On MM_Unix this is true for
505 any ordinary, readable file.
510 my($self,$file) = @_;
511 return "$file.pl" if -r "$file.pl" && -f _;
517 Defines target that copies all files in the hash PM to their
518 destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
524 my($autodir) = $self->catdir('$(INST_LIB)','auto');
526 pm_to_blib: $(TO_INST_PM)
527 }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
528 "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
529 -e "pm_to_blib(qw[ }.
530 ($NMAKE ? '<<pmfiles.dat'
531 : '$(mktmp,pmfiles.dat $(PM_TO_BLIB:s,\\,\\\\,)\n)').
532 q{ ],'}.$autodir.q{')"
536 } : '') . $self->{NOECHO}.q{$(TOUCH) $@
540 =item test_via_harness (o)
542 Helper method to write the test targets
546 sub test_via_harness {
547 my($self, $perl, $tests) = @_;
548 "\t$perl".q! -Mblib -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e "use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;" !."$tests\n";
552 =item tool_autosplit (override)
554 Use Win32 quoting on command line.
559 my($self, %attribs) = @_;
561 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
563 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
564 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MAutoSplit }.$asl.q{ -e "autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1);"
568 =item tools_other (o)
572 Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
573 the Makefile. Also defines the perl programs MKPATH,
574 WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
581 my $bin_sh = $Config{sh} || 'cmd /c';
584 } unless $DMAKE; # dmake determines its own shell
586 for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
587 push @m, "$_ = $self->{$_}\n";
591 # The following is a portable way to say mkdir -p
592 # To see which directories are created, change the if 0 to if 1
593 MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
595 # This helps us to minimize the effect of the .exists files A yet
596 # better solution would be to have a stable file in the perl
597 # distribution with a timestamp of zero. But this solution doesn't
598 # need any changes to the core distribution and works with older perls
599 EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
603 return join "", @m if $self->{PARENT};
606 # Here we warn users that an old packlist file was found somewhere,
607 # and that they should call some uninstall routine
608 WARN_IF_OLD_PACKLIST = $(PERL) -lwe "exit unless -f $$ARGV[0];" \\
609 -e "print 'WARNING: I have found an old package in';" \\
610 -e "print ' ', $$ARGV[0], '.';" \\
611 -e "print 'Please make sure the two installations are not conflicting';"
616 MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
617 -e "install({ @ARGV },'$(VERBINST)',0,'$(UNINST)');"
619 DOC_INSTALL = $(PERL) -e "$$\=\"\n\n\";" \
620 -e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', shift, '>';" \
621 -e "print '=over 4';" \
622 -e "while (defined($$key = shift) and defined($$val = shift)) { print '=item *';print 'C<', \"$$key: $$val\", '>'; }" \
625 UNINSTALL = $(PERL) -MExtUtils::Install \
626 -e "uninstall($$ARGV[0],1,1); print \"\nUninstall is deprecated. Please check the";" \
627 -e "print \" packlist above carefully.\n There may be errors. Remove the\";" \
628 -e "print \" appropriate files manually.\n Sorry for the inconveniences.\n\""
636 Defines suffix rules to go from XS to object files directly. This is
637 only intended for broken make implementations.
641 sub xs_o { # many makes are too dumb to use xs_c then c_o
646 =item top_targets (o)
648 Defines the targets all, subdirs, config, and O_FILES
653 # --- Target Sections ---
658 #all :: config $(INST_PM) subdirs linkext manifypods
662 all :: pure_all manifypods
663 '.$self->{NOECHO}.'$(NOOP)
665 unless $self->{SKIPHASH}{'all'};
668 pure_all :: config pm_to_blib subdirs linkext
669 '.$self->{NOECHO}.'$(NOOP)
671 subdirs :: $(MYEXTLIB)
672 '.$self->{NOECHO}.'$(NOOP)
674 config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)\.exists
675 '.$self->{NOECHO}.'$(NOOP)
677 config :: $(INST_ARCHAUTODIR)\.exists
678 '.$self->{NOECHO}.'$(NOOP)
680 config :: $(INST_AUTODIR)\.exists
681 '.$self->{NOECHO}.'$(NOOP)
685 config :: Version_check
686 $self->{NOECHO}\$(NOOP)
688 } unless $self->{PARENT} or ($self->{PERL_SRC} && $self->{INSTALLDIRS} eq "perl") or $self->{NO_VC};
690 push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
692 if (%{$self->{MAN1PODS}}) {
694 config :: \$(INST_MAN1DIR)\\.exists
695 $self->{NOECHO}\$(NOOP)
698 push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
700 if (%{$self->{MAN3PODS}}) {
702 config :: \$(INST_MAN3DIR)\\.exists
703 $self->{NOECHO}\$(NOOP)
706 push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
710 $(O_FILES): $(H_FILES)
711 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
715 perldoc ExtUtils::MakeMaker
720 }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
721 -MExtUtils::MakeMaker=Version_check \
722 -e "Version_check('$(MM_VERSION)')"
730 We don't want manpage process. XXX add pod2html support later.
736 return "\nmanifypods :\n\t$self->{NOECHO}\$(NOOP)\n";
741 Same as MM_Unix version (changes command-line quoting).
750 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
751 -e "@all = keys %{ maniread() };" \\
752 -e "print(\"Executing $(CI) @all\n\"); system(\"$(CI) @all\");" \\
753 -e "print(\"Executing $(RCS_LABEL) ...\n\"); system(\"$(RCS_LABEL) @all\");"
760 Same as MM_Unix version (changes command-line quoting).
768 dist : $(DIST_DEFAULT)
769 }.$self->{NOECHO}.q{$(PERL) -le "print \"Warning: Makefile possibly out of date with $$vf\" if " \
770 -e "-e ($$vf=\"$(VERSION_FROM)\") and -M $$vf < -M \"}.$self->{MAKEFILE}.q{\";"
772 tardist : $(DISTVNAME).tar$(SUFFIX)
774 zipdist : $(DISTVNAME).zip
776 $(DISTVNAME).tar$(SUFFIX) : distdir
779 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
780 $(RM_RF) $(DISTVNAME)
781 $(COMPRESS) $(DISTVNAME).tar
784 $(DISTVNAME).zip : distdir
786 $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
787 $(RM_RF) $(DISTVNAME)
790 uutardist : $(DISTVNAME).tar$(SUFFIX)
791 uuencode $(DISTVNAME).tar$(SUFFIX) \\
792 $(DISTVNAME).tar$(SUFFIX) > \\
793 $(DISTVNAME).tar$(SUFFIX)_uu
797 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
798 $(RM_RF) $(DISTVNAME)
806 Defines the string that is passed to recursive make calls in
813 return "PASTHRU = " . ($NMAKE ? "-nologo" : "");