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;
38 my($self,%attribs) = @_;
40 my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
41 my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
42 my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
44 (my $boot = $self->{NAME}) =~ s/:/_/g;
46 if (not $self->{SKIPHASH}{'dynamic'}) {
48 $self->{BASEEXT}.def: Makefile.PL
50 q! $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Mksymlists \\
51 -e "Mksymlists('NAME' => '!, $self->{NAME},
52 q!', 'DLBASE' => '!,$self->{DLBASE},
53 q!', 'DL_FUNCS' => !,neatvalue($funcs),
54 q!, 'IMPORTS' => !,neatvalue($imports),
55 q!, 'DL_VARS' => !, neatvalue($vars), q!);"
61 sub replace_manpage_separator {
69 return "$file.exe" if -e "$file.exe";
73 sub file_name_is_absolute {
75 $file =~ m{^([a-z]:)?[\\/]}i ;
79 my($self, $ver, $names, $dirs, $trace) = @_;
82 print "Looking for perl $ver by these names:
88 foreach $dir (@$dirs){
89 next unless defined $dir; # $self->{PERL_SRC} may be undefined
90 foreach $name (@$names){
92 if ($self->file_name_is_absolute($name)) { # /foo/bar
94 } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
95 $abs = $self->catfile($dir, $name);
97 $abs = $self->canonpath($self->catfile($self->curdir, $name));
99 print "Checking $abs\n" if ($trace >= 2);
100 next unless $self->maybe_command($abs);
101 print "Executing $abs\n" if ($trace >= 2);
102 $val = `$abs -e "require $ver;" 2>&1`;
104 print "Using PERL=$abs\n" if $trace;
106 } elsif ($trace >= 2) {
107 print "Result: `$val'\n";
111 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
112 0; # false and not empty
119 # append a slash to each argument unless it has one there
120 $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
122 my $result = $self->canonpath(join('', @args));
128 Concatenate one or more directory names and a filename to form a
129 complete path ending with a filename
136 return $file unless @_;
137 my $dir = $self->catdir(@_);
139 $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
146 &ExtUtils::MM_Unix::init_others;
147 $self->{'TOUCH'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e touch';
148 $self->{'CHMOD'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e chmod';
149 $self->{'CP'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e cp';
150 $self->{'RM_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_f';
151 $self->{'RM_RF'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_rf';
152 $self->{'MV'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mv';
153 $self->{'NOOP'} = 'rem';
154 $self->{'TEST_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e test_f';
155 $self->{'LD'} = $Config{'ld'} || 'link';
156 $self->{'AR'} = $Config{'ar'} || 'lib';
159 $self->{'LDLOADLIBS'} ||= ' ';
163 $self->{'LDLOADLIBS'}
165 ? 'import32.lib cw32mti.lib '
166 : 'msvcrt.lib oldnames.lib kernel32.lib comdlg32.lib winspool.lib gdi32.lib '
167 .'advapi32.lib user32.lib shell32.lib netapi32.lib ole32.lib '
168 .'oleaut32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib '
169 ) . ' odbc32.lib odbccp32.lib';
171 $self->{'DEV_NULL'} = '> NUL';
172 # $self->{'NOECHO'} = ''; # till we have it working
178 Initializes lots of constants and .SUFFIXES and .PHONY
188 AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
189 VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
190 INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
191 INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
192 INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
193 PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
194 FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
195 PERL_INC PERL FULLPERL
198 next unless defined $self->{$tmp};
199 push @m, "$tmp = $self->{$tmp}\n";
203 VERSION_MACRO = VERSION
204 DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
205 XS_VERSION_MACRO = XS_VERSION
206 XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
210 MAKEMAKER = $INC{'ExtUtils\MakeMaker.pm'}
211 MM_VERSION = $ExtUtils::MakeMaker::VERSION
215 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
216 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
217 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
218 # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
219 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
223 FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
226 next unless defined $self->{$tmp};
227 push @m, "$tmp = $self->{$tmp}\n";
231 # Handy lists of source code files:
232 XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
233 C_FILES = ".join(" \\\n\t", @{$self->{C}})."
234 O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
235 H_FILES = ".join(" \\\n\t", @{$self->{H}})."
236 MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
237 MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
241 INST_MAN1DIR INSTALLMAN1DIR MAN1EXT INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
243 next unless defined $self->{$tmp};
244 push @m, "$tmp = $self->{$tmp}\n";
252 .NO_CONFIG_REC: Makefile
253 } if $ENV{CLEARCASE_ROOT};
255 # why not q{} ? -- emacs
257 # work around a famous dec-osf make(1) feature(?):
260 .SUFFIXES: .xs .c .C .cpp .cxx .cc \$(OBJ_EXT)
262 # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
263 # some make implementations will delete the Makefile when we rebuild it. Because
264 # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
265 # does so. Our milage may vary.
266 # .PRECIOUS: Makefile # seems to be not necessary anymore
268 .PHONY: all config static dynamic test linkext manifest
270 # Where is the Config information that we are using/depend on
271 CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
274 my @parentdir = split(/::/, $self->{PARENT_NAME});
276 # Where to put things:
277 INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
278 INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
280 INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
281 INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
284 if ($self->has_link_code()) {
286 INST_STATIC = $(INST_ARCHAUTODIR)\$(BASEEXT)$(LIB_EXT)
287 INST_DYNAMIC = $(INST_ARCHAUTODIR)\$(DLBASE).$(DLEXT)
288 INST_BOOT = $(INST_ARCHAUTODIR)\$(BASEEXT).bs
298 $tmp = $self->export_list;
302 $tmp = $self->perl_archive;
308 #INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
310 #PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
314 TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
316 PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
326 my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
327 my @path = split(';',$path);
328 foreach(@path) { $_ = '.' if $_ eq '' }
334 Defines how to produce the *.a (or equivalent) files.
340 # Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
341 # return '' unless $self->needs_linking(); #might be because of a subdir
343 return '' unless $self->has_link_code;
347 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)\.exists
350 # If this extension has it's own library (eg SDBM_File)
351 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
352 push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
355 q{ $(AR) }.($BORLAND ? '$@ $(OBJECT:^"+")'
356 : ($GCC ? '-ru $@ $(OBJECT)'
357 : '-out:$@ $(OBJECT)')).q{
358 }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld
362 # Old mechanism - still available:
364 push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs}."\n\n"
365 if $self->{PERL_SRC};
367 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
373 Defines targets for bootstrap files.
378 my($self, %attribs) = @_;
381 ' unless $self->has_link_code();
384 BOOTSTRAP = '."$self->{BASEEXT}.bs".'
386 # As Mkbootstrap might not write a file (if none is required)
387 # we use touch to prevent make continually trying to remake it.
388 # The DynaLoader only reads a non-empty file.
389 $(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)\.exists
390 '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
391 '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
392 -MExtUtils::Mkbootstrap \
393 -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
394 '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
397 $(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists
398 '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
399 -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
404 =item dynamic_lib (o)
406 Defines how to produce the *.so (or equivalent) files.
411 my($self, %attribs) = @_;
412 return '' unless $self->needs_linking(); #might be because of a subdir
414 return '' unless $self->has_link_code;
416 my($otherldflags) = $attribs{OTHERLDFLAGS} || ($BORLAND ? 'c0d32.obj': '');
417 my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
418 my($ldfrom) = '$(LDFROM)';
421 # This section creates the dynamically loadable $(INST_DYNAMIC)
422 # from $(OBJECT) and possibly $(MYEXTLIB).
423 OTHERLDFLAGS = '.$otherldflags.'
424 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
426 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
430 q{ dlltool --def $(EXPORT_LIST) --output-exp dll.exp
431 $(LD) -o $@ -Wl,--base-file -Wl,dll.base $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp
432 dlltool --def $(EXPORT_LIST) --base-file dll.base --output-exp dll.exp
433 $(LD) -o $@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp });
436 q{ $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) }.$ldfrom.q{,$@,,$(PERL_ARCHIVE:s,/,\,) $(LDLOADLIBS:s,/,\,) $(MYEXTLIB:s,/,\,),$(EXPORT_LIST:s,/,\,),$(RESFILES)} :
437 q{ $(LD) -out:$@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)}
444 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
450 return '$(PERL_INC)\perl$(LIB_EXT)';
456 return "$self->{BASEEXT}.def";
461 No physical check on the filesystem, but a logical cleanup of a
462 path. On UNIX eliminated successive slashes and successive "/.".
467 my($self,$path) = @_;
468 $path =~ s/^([a-z]:)/\u$1/;
470 $path =~ s|(.)\\+|$1\\|g ; # xx////xx -> xx/xx
471 $path =~ s|(\\\.)+\\|\\|g ; # xx/././xx -> xx/xx
472 $path =~ s|^(\.\\)+|| unless $path eq ".\\"; # ./xx -> xx
474 unless $path =~ m#^([a-z]:)?\\#; # xx/ -> xx
475 $path .= '.' if $path =~ m#\\$#;
481 Takes one argument, a file name, and returns the file name, if the
482 argument is likely to be a perl script. On MM_Unix this is true for
483 any ordinary, readable file.
488 my($self,$file) = @_;
489 return "$file.pl" if -r "$file.pl" && -f _;
495 Defines target that copies all files in the hash PM to their
496 destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
502 my($autodir) = $self->catdir('$(INST_LIB)','auto');
504 pm_to_blib: $(TO_INST_PM)
505 }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
506 "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
507 -e "pm_to_blib(qw[ }.
508 ($NMAKE ? '<<pmfiles.dat'
509 : '$(mktmp,pmfiles.dat $(PM_TO_BLIB:s,\\,\\\\,)\n)').
510 q{ ],'}.$autodir.q{')"
514 } : '') . $self->{NOECHO}.q{$(TOUCH) $@
518 =item test_via_harness (o)
520 Helper method to write the test targets
524 sub test_via_harness {
525 my($self, $perl, $tests) = @_;
526 "\t$perl".q! -Mblib -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e "use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;" !."$tests\n";
530 =item tool_autosplit (override)
532 Use Win32 quoting on command line.
537 my($self, %attribs) = @_;
539 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
541 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
542 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MAutoSplit }.$asl.q{ -e "autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1);"
546 =item tools_other (o)
550 Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
551 the Makefile. Also defines the perl programs MKPATH,
552 WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
559 my $bin_sh = $Config{sh} || 'cmd /c';
562 } unless $DMAKE; # dmake determines its own shell
564 for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
565 push @m, "$_ = $self->{$_}\n";
569 # The following is a portable way to say mkdir -p
570 # To see which directories are created, change the if 0 to if 1
571 MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
573 # This helps us to minimize the effect of the .exists files A yet
574 # better solution would be to have a stable file in the perl
575 # distribution with a timestamp of zero. But this solution doesn't
576 # need any changes to the core distribution and works with older perls
577 EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
581 return join "", @m if $self->{PARENT};
584 # Here we warn users that an old packlist file was found somewhere,
585 # and that they should call some uninstall routine
586 WARN_IF_OLD_PACKLIST = $(PERL) -lwe "exit unless -f $$ARGV[0];" \\
587 -e "print 'WARNING: I have found an old package in';" \\
588 -e "print ' ', $$ARGV[0], '.';" \\
589 -e "print 'Please make sure the two installations are not conflicting';"
594 MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
595 -e "install({ @ARGV },'$(VERBINST)',0,'$(UNINST)');"
597 DOC_INSTALL = $(PERL) -e "$$\=\"\n\n\";" \
598 -e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', shift, '>';" \
599 -e "print '=over 4';" \
600 -e "while (defined($$key = shift) and defined($$val = shift)) { print '=item *';print 'C<', \"$$key: $$val\", '>'; }" \
603 UNINSTALL = $(PERL) -MExtUtils::Install \
604 -e "uninstall($$ARGV[0],1,1); print \"\nUninstall is deprecated. Please check the";" \
605 -e "print \" packlist above carefully.\n There may be errors. Remove the\";" \
606 -e "print \" appropriate files manually.\n Sorry for the inconveniences.\n\""
614 Defines suffix rules to go from XS to object files directly. This is
615 only intended for broken make implementations.
619 sub xs_o { # many makes are too dumb to use xs_c then c_o
624 =item top_targets (o)
626 Defines the targets all, subdirs, config, and O_FILES
631 # --- Target Sections ---
636 #all :: config $(INST_PM) subdirs linkext manifypods
640 all :: pure_all manifypods
641 '.$self->{NOECHO}.'$(NOOP)
643 unless $self->{SKIPHASH}{'all'};
646 pure_all :: config pm_to_blib subdirs linkext
647 '.$self->{NOECHO}.'$(NOOP)
649 subdirs :: $(MYEXTLIB)
650 '.$self->{NOECHO}.'$(NOOP)
652 config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)\.exists
653 '.$self->{NOECHO}.'$(NOOP)
655 config :: $(INST_ARCHAUTODIR)\.exists
656 '.$self->{NOECHO}.'$(NOOP)
658 config :: $(INST_AUTODIR)\.exists
659 '.$self->{NOECHO}.'$(NOOP)
663 config :: Version_check
664 $self->{NOECHO}\$(NOOP)
666 } unless $self->{PARENT} or ($self->{PERL_SRC} && $self->{INSTALLDIRS} eq "perl") or $self->{NO_VC};
668 push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
670 if (%{$self->{MAN1PODS}}) {
672 config :: \$(INST_MAN1DIR)\\.exists
673 $self->{NOECHO}\$(NOOP)
676 push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
678 if (%{$self->{MAN3PODS}}) {
680 config :: \$(INST_MAN3DIR)\\.exists
681 $self->{NOECHO}\$(NOOP)
684 push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
688 $(O_FILES): $(H_FILES)
689 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
693 perldoc ExtUtils::MakeMaker
698 }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
699 -MExtUtils::MakeMaker=Version_check \
700 -e "Version_check('$(MM_VERSION)')"
708 We don't want manpage process. XXX add pod2html support later.
713 return "\nmanifypods :\n\t$self->{NOECHO}\$(NOOP)\n";
718 Same as MM_Unix version (changes command-line quoting).
727 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
728 -e "@all = keys %{ maniread() };" \\
729 -e "print(\"Executing $(CI) @all\n\"); system(\"$(CI) @all\");" \\
730 -e "print(\"Executing $(RCS_LABEL) ...\n\"); system(\"$(RCS_LABEL) @all\");"
737 Same as MM_Unix version (changes command-line quoting).
745 dist : $(DIST_DEFAULT)
746 }.$self->{NOECHO}.q{$(PERL) -le "print \"Warning: Makefile possibly out of date with $$vf\" if " \
747 -e "-e ($$vf=\"$(VERSION_FROM)\") and -M $$vf < -M \"}.$self->{MAKEFILE}.q{\";"
749 tardist : $(DISTVNAME).tar$(SUFFIX)
751 zipdist : $(DISTVNAME).zip
753 $(DISTVNAME).tar$(SUFFIX) : distdir
756 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
757 $(RM_RF) $(DISTVNAME)
758 $(COMPRESS) $(DISTVNAME).tar
761 $(DISTVNAME).zip : distdir
763 $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
764 $(RM_RF) $(DISTVNAME)
767 uutardist : $(DISTVNAME).tar$(SUFFIX)
768 uuencode $(DISTVNAME).tar$(SUFFIX) \\
769 $(DISTVNAME).tar$(SUFFIX) > \\
770 $(DISTVNAME).tar$(SUFFIX)_uu
774 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
775 $(RM_RF) $(DISTVNAME)
783 Defines the string that is passed to recursive make calls in
790 return "PASTHRU = " . ($NMAKE ? "-nologo" : "");