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 return "$file.exe" if -e "$file.exe";
74 sub file_name_is_absolute {
76 $file =~ m{^([a-z]:)?[\\/]}i ;
80 my($self, $ver, $names, $dirs, $trace) = @_;
83 print "Looking for perl $ver by these names:
89 foreach $dir (@$dirs){
90 next unless defined $dir; # $self->{PERL_SRC} may be undefined
91 foreach $name (@$names){
93 if ($self->file_name_is_absolute($name)) { # /foo/bar
95 } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
96 $abs = $self->catfile($dir, $name);
98 $abs = $self->canonpath($self->catfile($self->curdir, $name));
100 print "Checking $abs\n" if ($trace >= 2);
101 next unless $self->maybe_command($abs);
102 print "Executing $abs\n" if ($trace >= 2);
103 $val = `$abs -e "require $ver;" 2>&1`;
105 print "Using PERL=$abs\n" if $trace;
107 } elsif ($trace >= 2) {
108 print "Result: `$val'\n";
112 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
113 0; # false and not empty
120 # append a slash to each argument unless it has one there
121 $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
123 my $result = $self->canonpath(join('', @args));
129 Concatenate one or more directory names and a filename to form a
130 complete path ending with a filename
137 return $file unless @_;
138 my $dir = $self->catdir(@_);
140 $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
147 &ExtUtils::MM_Unix::init_others;
148 $self->{'TOUCH'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e touch';
149 $self->{'CHMOD'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e chmod';
150 $self->{'CP'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e cp';
151 $self->{'RM_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_f';
152 $self->{'RM_RF'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_rf';
153 $self->{'MV'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mv';
154 $self->{'NOOP'} = 'rem';
155 $self->{'TEST_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e test_f';
156 $self->{'LD'} = $Config{'ld'} || 'link';
157 $self->{'AR'} = $Config{'ar'} || 'lib';
160 $self->{'LDLOADLIBS'} ||= ' ';
164 $self->{'LDLOADLIBS'}
166 ? 'import32.lib cw32mti.lib '
167 : ( $OBJ ? '' : 'msvcrt.lib ' )
168 .'oldnames.lib kernel32.lib comdlg32.lib winspool.lib gdi32.lib '
169 .'advapi32.lib user32.lib shell32.lib netapi32.lib ole32.lib '
170 .'oleaut32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib '
171 ) . ' odbc32.lib odbccp32.lib';
173 $self->{'DEV_NULL'} = '> NUL';
174 # $self->{'NOECHO'} = ''; # till we have it working
180 Initializes lots of constants and .SUFFIXES and .PHONY
190 AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
191 VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
192 INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
193 INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
194 INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
195 PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
196 FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
197 PERL_INC PERL FULLPERL
200 next unless defined $self->{$tmp};
201 push @m, "$tmp = $self->{$tmp}\n";
205 VERSION_MACRO = VERSION
206 DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
207 XS_VERSION_MACRO = XS_VERSION
208 XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
212 MAKEMAKER = $INC{'ExtUtils\MakeMaker.pm'}
213 MM_VERSION = $ExtUtils::MakeMaker::VERSION
217 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
218 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
219 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
220 # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
221 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
225 FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
228 next unless defined $self->{$tmp};
229 push @m, "$tmp = $self->{$tmp}\n";
233 # Handy lists of source code files:
234 XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
235 C_FILES = ".join(" \\\n\t", @{$self->{C}})."
236 O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
237 H_FILES = ".join(" \\\n\t", @{$self->{H}})."
238 MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
239 MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
243 INST_MAN1DIR INSTALLMAN1DIR MAN1EXT INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
245 next unless defined $self->{$tmp};
246 push @m, "$tmp = $self->{$tmp}\n";
254 .NO_CONFIG_REC: Makefile
255 } if $ENV{CLEARCASE_ROOT};
257 # why not q{} ? -- emacs
259 # work around a famous dec-osf make(1) feature(?):
262 .SUFFIXES: .xs .c .C .cpp .cxx .cc \$(OBJ_EXT)
264 # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
265 # some make implementations will delete the Makefile when we rebuild it. Because
266 # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
267 # does so. Our milage may vary.
268 # .PRECIOUS: Makefile # seems to be not necessary anymore
270 .PHONY: all config static dynamic test linkext manifest
272 # Where is the Config information that we are using/depend on
273 CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
276 my @parentdir = split(/::/, $self->{PARENT_NAME});
278 # Where to put things:
279 INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
280 INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
282 INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
283 INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
286 if ($self->has_link_code()) {
288 INST_STATIC = $(INST_ARCHAUTODIR)\$(BASEEXT)$(LIB_EXT)
289 INST_DYNAMIC = $(INST_ARCHAUTODIR)\$(DLBASE).$(DLEXT)
290 INST_BOOT = $(INST_ARCHAUTODIR)\$(BASEEXT).bs
300 $tmp = $self->export_list;
304 $tmp = $self->perl_archive;
310 #INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
312 #PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
316 TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
318 PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
328 my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
329 my @path = split(';',$path);
330 foreach(@path) { $_ = '.' if $_ eq '' }
336 Defines how to produce the *.a (or equivalent) files.
342 # Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
343 # return '' unless $self->needs_linking(); #might be because of a subdir
345 return '' unless $self->has_link_code;
349 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)\.exists
352 # If this extension has it's own library (eg SDBM_File)
353 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
354 push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
357 q{ $(AR) }.($BORLAND ? '$@ $(OBJECT:^"+")'
358 : ($GCC ? '-ru $@ $(OBJECT)'
359 : '-out:$@ $(OBJECT)')).q{
360 }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld
364 # Old mechanism - still available:
366 push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs}."\n\n"
367 if $self->{PERL_SRC};
369 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
375 Defines targets for bootstrap files.
380 my($self, %attribs) = @_;
383 ' unless $self->has_link_code();
386 BOOTSTRAP = '."$self->{BASEEXT}.bs".'
388 # As Mkbootstrap might not write a file (if none is required)
389 # we use touch to prevent make continually trying to remake it.
390 # The DynaLoader only reads a non-empty file.
391 $(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)\.exists
392 '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
393 '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
394 -MExtUtils::Mkbootstrap \
395 -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
396 '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
399 $(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists
400 '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
401 -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
406 =item dynamic_lib (o)
408 Defines how to produce the *.so (or equivalent) files.
413 my($self, %attribs) = @_;
414 return '' unless $self->needs_linking(); #might be because of a subdir
416 return '' unless $self->has_link_code;
418 my($otherldflags) = $attribs{OTHERLDFLAGS} || ($BORLAND ? 'c0d32.obj': '');
419 my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
420 my($ldfrom) = '$(LDFROM)';
423 # This section creates the dynamically loadable $(INST_DYNAMIC)
424 # from $(OBJECT) and possibly $(MYEXTLIB).
425 OTHERLDFLAGS = '.$otherldflags.'
426 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
428 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
432 q{ dlltool --def $(EXPORT_LIST) --output-exp dll.exp
433 $(LD) -o $@ -Wl,--base-file -Wl,dll.base $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp
434 dlltool --def $(EXPORT_LIST) --base-file dll.base --output-exp dll.exp
435 $(LD) -o $@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp });
438 q{ $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) }.$ldfrom.q{,$@,,$(PERL_ARCHIVE:s,/,\,) $(LDLOADLIBS:s,/,\,) $(MYEXTLIB:s,/,\,),$(EXPORT_LIST:s,/,\,),$(RESFILES)} :
439 q{ $(LD) -out:$@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)}
446 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
454 if ($self->{CAPI} eq 'TRUE') {
455 return '$(PERL_INC)\PerlCAPI$(LIB_EXT)';
458 return '$(PERL_INC)\perlcore$(LIB_EXT)';
461 return '$(PERL_INC)\perl$(LIB_EXT)';
467 return "$self->{BASEEXT}.def";
472 No physical check on the filesystem, but a logical cleanup of a
473 path. On UNIX eliminated successive slashes and successive "/.".
478 my($self,$path) = @_;
479 $path =~ s/^([a-z]:)/\u$1/;
481 $path =~ s|(.)\\+|$1\\|g ; # xx////xx -> xx/xx
482 $path =~ s|(\\\.)+\\|\\|g ; # xx/././xx -> xx/xx
483 $path =~ s|^(\.\\)+|| unless $path eq ".\\"; # ./xx -> xx
485 unless $path =~ m#^([a-z]:)?\\#; # xx/ -> xx
486 $path .= '.' if $path =~ m#\\$#;
492 Takes one argument, a file name, and returns the file name, if the
493 argument is likely to be a perl script. On MM_Unix this is true for
494 any ordinary, readable file.
499 my($self,$file) = @_;
500 return "$file.pl" if -r "$file.pl" && -f _;
506 Defines target that copies all files in the hash PM to their
507 destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
513 my($autodir) = $self->catdir('$(INST_LIB)','auto');
515 pm_to_blib: $(TO_INST_PM)
516 }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
517 "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
518 -e "pm_to_blib(qw[ }.
519 ($NMAKE ? '<<pmfiles.dat'
520 : '$(mktmp,pmfiles.dat $(PM_TO_BLIB:s,\\,\\\\,)\n)').
521 q{ ],'}.$autodir.q{')"
525 } : '') . $self->{NOECHO}.q{$(TOUCH) $@
529 =item test_via_harness (o)
531 Helper method to write the test targets
535 sub test_via_harness {
536 my($self, $perl, $tests) = @_;
537 "\t$perl".q! -Mblib -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e "use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;" !."$tests\n";
541 =item tool_autosplit (override)
543 Use Win32 quoting on command line.
548 my($self, %attribs) = @_;
550 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
552 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
553 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MAutoSplit }.$asl.q{ -e "autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1);"
557 =item tools_other (o)
561 Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
562 the Makefile. Also defines the perl programs MKPATH,
563 WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
570 my $bin_sh = $Config{sh} || 'cmd /c';
573 } unless $DMAKE; # dmake determines its own shell
575 for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
576 push @m, "$_ = $self->{$_}\n";
580 # The following is a portable way to say mkdir -p
581 # To see which directories are created, change the if 0 to if 1
582 MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
584 # This helps us to minimize the effect of the .exists files A yet
585 # better solution would be to have a stable file in the perl
586 # distribution with a timestamp of zero. But this solution doesn't
587 # need any changes to the core distribution and works with older perls
588 EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
592 return join "", @m if $self->{PARENT};
595 # Here we warn users that an old packlist file was found somewhere,
596 # and that they should call some uninstall routine
597 WARN_IF_OLD_PACKLIST = $(PERL) -lwe "exit unless -f $$ARGV[0];" \\
598 -e "print 'WARNING: I have found an old package in';" \\
599 -e "print ' ', $$ARGV[0], '.';" \\
600 -e "print 'Please make sure the two installations are not conflicting';"
605 MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
606 -e "install({ @ARGV },'$(VERBINST)',0,'$(UNINST)');"
608 DOC_INSTALL = $(PERL) -e "$$\=\"\n\n\";" \
609 -e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', shift, '>';" \
610 -e "print '=over 4';" \
611 -e "while (defined($$key = shift) and defined($$val = shift)) { print '=item *';print 'C<', \"$$key: $$val\", '>'; }" \
614 UNINSTALL = $(PERL) -MExtUtils::Install \
615 -e "uninstall($$ARGV[0],1,1); print \"\nUninstall is deprecated. Please check the";" \
616 -e "print \" packlist above carefully.\n There may be errors. Remove the\";" \
617 -e "print \" appropriate files manually.\n Sorry for the inconveniences.\n\""
625 Defines suffix rules to go from XS to object files directly. This is
626 only intended for broken make implementations.
630 sub xs_o { # many makes are too dumb to use xs_c then c_o
635 =item top_targets (o)
637 Defines the targets all, subdirs, config, and O_FILES
642 # --- Target Sections ---
647 #all :: config $(INST_PM) subdirs linkext manifypods
651 all :: pure_all manifypods
652 '.$self->{NOECHO}.'$(NOOP)
654 unless $self->{SKIPHASH}{'all'};
657 pure_all :: config pm_to_blib subdirs linkext
658 '.$self->{NOECHO}.'$(NOOP)
660 subdirs :: $(MYEXTLIB)
661 '.$self->{NOECHO}.'$(NOOP)
663 config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)\.exists
664 '.$self->{NOECHO}.'$(NOOP)
666 config :: $(INST_ARCHAUTODIR)\.exists
667 '.$self->{NOECHO}.'$(NOOP)
669 config :: $(INST_AUTODIR)\.exists
670 '.$self->{NOECHO}.'$(NOOP)
674 config :: Version_check
675 $self->{NOECHO}\$(NOOP)
677 } unless $self->{PARENT} or ($self->{PERL_SRC} && $self->{INSTALLDIRS} eq "perl") or $self->{NO_VC};
679 push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
681 if (%{$self->{MAN1PODS}}) {
683 config :: \$(INST_MAN1DIR)\\.exists
684 $self->{NOECHO}\$(NOOP)
687 push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
689 if (%{$self->{MAN3PODS}}) {
691 config :: \$(INST_MAN3DIR)\\.exists
692 $self->{NOECHO}\$(NOOP)
695 push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
699 $(O_FILES): $(H_FILES)
700 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
704 perldoc ExtUtils::MakeMaker
709 }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
710 -MExtUtils::MakeMaker=Version_check \
711 -e "Version_check('$(MM_VERSION)')"
719 We don't want manpage process. XXX add pod2html support later.
724 return "\nmanifypods :\n\t$self->{NOECHO}\$(NOOP)\n";
729 Same as MM_Unix version (changes command-line quoting).
738 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
739 -e "@all = keys %{ maniread() };" \\
740 -e "print(\"Executing $(CI) @all\n\"); system(\"$(CI) @all\");" \\
741 -e "print(\"Executing $(RCS_LABEL) ...\n\"); system(\"$(RCS_LABEL) @all\");"
748 Same as MM_Unix version (changes command-line quoting).
756 dist : $(DIST_DEFAULT)
757 }.$self->{NOECHO}.q{$(PERL) -le "print \"Warning: Makefile possibly out of date with $$vf\" if " \
758 -e "-e ($$vf=\"$(VERSION_FROM)\") and -M $$vf < -M \"}.$self->{MAKEFILE}.q{\";"
760 tardist : $(DISTVNAME).tar$(SUFFIX)
762 zipdist : $(DISTVNAME).zip
764 $(DISTVNAME).tar$(SUFFIX) : distdir
767 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
768 $(RM_RF) $(DISTVNAME)
769 $(COMPRESS) $(DISTVNAME).tar
772 $(DISTVNAME).zip : distdir
774 $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
775 $(RM_RF) $(DISTVNAME)
778 uutardist : $(DISTVNAME).tar$(SUFFIX)
779 uuencode $(DISTVNAME).tar$(SUFFIX) \\
780 $(DISTVNAME).tar$(SUFFIX) > \\
781 $(DISTVNAME).tar$(SUFFIX)_uu
785 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
786 $(RM_RF) $(DISTVNAME)
794 Defines the string that is passed to recursive make calls in
801 return "PASTHRU = " . ($NMAKE ? "-nologo" : "");