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 $PERLMAKE = 1 if $Config{'make'} =~ /^pmake/i;
37 $OBJ = 1 if $Config{'ccflags'} =~ /PERL_OBJECT/i;
39 # a few workarounds for command.com (very basic)
40 if (Win32::IsWin95()) {
41 package ExtUtils::MM_Win95;
42 unshift @MM::ISA, 'ExtUtils::MM_Win95';
46 return '' unless $self->needs_linking();
49 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) \\
50 $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c
56 return '' unless $self->needs_linking();
59 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) \\
60 $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp
64 # many makes are too dumb to use xs_c then c_o
67 return '' unless $self->needs_linking();
68 # Dmake gets confused with 2 ways of making things
69 return '' if $ExtUtils::MM_Win32::DMAKE;
72 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) \\
73 $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c
74 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
80 my($self,%attribs) = @_;
82 my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
83 my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
84 my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
85 my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
87 (my $boot = $self->{NAME}) =~ s/:/_/g;
89 if (not $self->{SKIPHASH}{'dynamic'}) {
91 $self->{BASEEXT}.def: Makefile.PL
93 q! $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Mksymlists \\
94 -e "Mksymlists('NAME' => '!, $self->{NAME},
95 q!', 'DLBASE' => '!,$self->{DLBASE},
96 q!', 'DL_FUNCS' => !,neatvalue($funcs),
97 q!, 'FUNCLIST' => !,neatvalue($funclist),
98 q!, 'IMPORTS' => !,neatvalue($imports),
99 q!, 'DL_VARS' => !, neatvalue($vars), q!);"
105 sub replace_manpage_separator {
112 my($self,$file) = @_;
113 my @e = exists($ENV{'PATHEXT'})
114 ? split(/;/, $ENV{PATHEXT})
115 : qw(.com .exe .bat .cmd);
117 for (@e) { $e .= "\Q$_\E|" }
119 # see if file ends in one of the known extensions
120 if ($file =~ /($e)$/i) {
121 return $file if -e $file;
125 return "$file$_" if -e "$file$_";
131 sub file_name_is_absolute {
132 my($self,$file) = @_;
133 $file =~ m{^([a-z]:)?[\\/]}i ;
137 my($self, $ver, $names, $dirs, $trace) = @_;
140 print "Looking for perl $ver by these names:
146 foreach $dir (@$dirs){
147 next unless defined $dir; # $self->{PERL_SRC} may be undefined
148 foreach $name (@$names){
150 if ($self->file_name_is_absolute($name)) { # /foo/bar
152 } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
153 $abs = $self->catfile($dir, $name);
155 $abs = $self->canonpath($self->catfile($self->curdir, $name));
157 print "Checking $abs\n" if ($trace >= 2);
158 next unless $self->maybe_command($abs);
159 print "Executing $abs\n" if ($trace >= 2);
160 $val = `$abs -e "require $ver;" 2>&1`;
162 print "Using PERL=$abs\n" if $trace;
164 } elsif ($trace >= 2) {
165 print "Result: `$val'\n";
169 print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
170 0; # false and not empty
177 # append a slash to each argument unless it has one there
178 $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
180 my $result = $self->canonpath(join('', @args));
186 Concatenate one or more directory names and a filename to form a
187 complete path ending with a filename
194 return $file unless @_;
195 my $dir = $self->catdir(@_);
197 $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
204 &ExtUtils::MM_Unix::init_others;
205 $self->{'TOUCH'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e touch';
206 $self->{'CHMOD'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e chmod';
207 $self->{'CP'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e cp';
208 $self->{'RM_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_f';
209 $self->{'RM_RF'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_rf';
210 $self->{'MV'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mv';
211 $self->{'NOOP'} = 'rem';
212 $self->{'TEST_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e test_f';
213 $self->{'LD'} = $Config{'ld'} || 'link';
214 $self->{'AR'} = $Config{'ar'} || 'lib';
215 $self->{'LDLOADLIBS'} ||= $Config{'libs'};
216 # -Lfoo must come first for Borland, so we put it in LDDLFLAGS
218 my $libs = $self->{'LDLOADLIBS'};
220 while ($libs =~ s/(?:^|\s)(("?)-L.+?\2)(?:\s|$)/ /) {
221 $libpath .= ' ' if length $libpath;
224 $self->{'LDLOADLIBS'} = $libs;
225 $self->{'LDDLFLAGS'} ||= $Config{'lddlflags'};
226 $self->{'LDDLFLAGS'} .= " $libpath";
228 $self->{'DEV_NULL'} = '> NUL';
229 # $self->{'NOECHO'} = ''; # till we have it working
235 Initializes lots of constants and .SUFFIXES and .PHONY
245 AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
246 VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
247 INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
248 INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
249 INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
250 PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
251 FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
252 PERL_INC PERL FULLPERL
255 next unless defined $self->{$tmp};
256 push @m, "$tmp = $self->{$tmp}\n";
260 VERSION_MACRO = VERSION
261 DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
262 XS_VERSION_MACRO = XS_VERSION
263 XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
267 MAKEMAKER = $INC{'ExtUtils\MakeMaker.pm'}
268 MM_VERSION = $ExtUtils::MakeMaker::VERSION
272 # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
273 # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
274 # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
275 # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
276 # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
280 FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
283 next unless defined $self->{$tmp};
284 push @m, "$tmp = $self->{$tmp}\n";
288 # Handy lists of source code files:
289 XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
290 C_FILES = ".join(" \\\n\t", @{$self->{C}})."
291 O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
292 H_FILES = ".join(" \\\n\t", @{$self->{H}})."
293 HTMLLIBPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLLIBPODS}})."
294 HTMLSCRIPTPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLSCRIPTPODS}})."
295 MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
296 MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
300 INST_HTMLPRIVLIBDIR INSTALLHTMLPRIVLIBDIR
301 INST_HTMLSITELIBDIR INSTALLHTMLSITELIBDIR
302 INST_HTMLSCRIPTDIR INSTALLHTMLSCRIPTDIR
303 INST_HTMLLIBDIR HTMLEXT
304 INST_MAN1DIR INSTALLMAN1DIR MAN1EXT
305 INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
307 next unless defined $self->{$tmp};
308 push @m, "$tmp = $self->{$tmp}\n";
316 .NO_CONFIG_REC: Makefile
317 } if $ENV{CLEARCASE_ROOT};
319 # why not q{} ? -- emacs
321 # work around a famous dec-osf make(1) feature(?):
324 .SUFFIXES: .xs .c .C .cpp .cxx .cc \$(OBJ_EXT)
326 # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
327 # some make implementations will delete the Makefile when we rebuild it. Because
328 # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
329 # does so. Our milage may vary.
330 # .PRECIOUS: Makefile # seems to be not necessary anymore
332 .PHONY: all config static dynamic test linkext manifest
334 # Where is the Config information that we are using/depend on
335 CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
338 my @parentdir = split(/::/, $self->{PARENT_NAME});
340 # Where to put things:
341 INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
342 INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
344 INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
345 INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
348 if ($self->has_link_code()) {
350 INST_STATIC = $(INST_ARCHAUTODIR)\$(BASEEXT)$(LIB_EXT)
351 INST_DYNAMIC = $(INST_ARCHAUTODIR)\$(DLBASE).$(DLEXT)
352 INST_BOOT = $(INST_ARCHAUTODIR)\$(BASEEXT).bs
362 $tmp = $self->export_list;
366 $tmp = $self->perl_archive;
372 #INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
374 #PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
378 TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
380 PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
390 my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
391 my @path = split(';',$path);
392 foreach(@path) { $_ = '.' if $_ eq '' }
398 Defines how to produce the *.a (or equivalent) files.
404 # Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
405 # return '' unless $self->needs_linking(); #might be because of a subdir
407 return '' unless $self->has_link_code;
411 $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)\.exists
414 # If this extension has it's own library (eg SDBM_File)
415 # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
416 push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
419 q{ $(AR) }.($BORLAND ? '$@ $(OBJECT:^"+")'
420 : ($GCC ? '-ru $@ $(OBJECT)'
421 : '-out:$@ $(OBJECT)')).q{
422 }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld
426 # Old mechanism - still available:
428 push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs}."\n\n"
429 if $self->{PERL_SRC};
431 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
437 Defines targets for bootstrap files.
442 my($self, %attribs) = @_;
445 ' unless $self->has_link_code();
448 BOOTSTRAP = '."$self->{BASEEXT}.bs".'
450 # As Mkbootstrap might not write a file (if none is required)
451 # we use touch to prevent make continually trying to remake it.
452 # The DynaLoader only reads a non-empty file.
453 $(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)\.exists
454 '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
455 '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
456 -MExtUtils::Mkbootstrap \
457 -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
458 '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
461 $(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists
462 '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
463 -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
468 =item dynamic_lib (o)
470 Defines how to produce the *.so (or equivalent) files.
475 my($self, %attribs) = @_;
476 return '' unless $self->needs_linking(); #might be because of a subdir
478 return '' unless $self->has_link_code;
480 my($otherldflags) = $attribs{OTHERLDFLAGS} || ($BORLAND ? 'c0d32.obj': '');
481 my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
482 my($ldfrom) = '$(LDFROM)';
485 # This section creates the dynamically loadable $(INST_DYNAMIC)
486 # from $(OBJECT) and possibly $(MYEXTLIB).
487 OTHERLDFLAGS = '.$otherldflags.'
488 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
490 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
494 q{ dlltool --def $(EXPORT_LIST) --output-exp dll.exp
495 $(LD) -o $@ -Wl,--base-file -Wl,dll.base $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp
496 dlltool --def $(EXPORT_LIST) --base-file dll.base --output-exp dll.exp
497 $(LD) -o $@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp });
500 q{ $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) }.$ldfrom.q{,$@,,}
501 .($DMAKE ? q{$(PERL_ARCHIVE:s,/,\,) $(LDLOADLIBS:s,/,\,) }
502 .q{$(MYEXTLIB:s,/,\,),$(EXPORT_LIST:s,/,\,)}
503 : q{$(subst /,\,$(PERL_ARCHIVE)) $(subst /,\,$(LDLOADLIBS)) }
504 .q{$(subst /,\,$(MYEXTLIB)),$(subst /,\,$(EXPORT_LIST))})
508 q{ $(LD) -out:$@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) }
509 .q{$(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)});
515 push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
522 return '$(PERL_INC)\\'.$Config{'libperl'};
528 return "$self->{BASEEXT}.def";
533 No physical check on the filesystem, but a logical cleanup of a
534 path. On UNIX eliminated successive slashes and successive "/.".
539 my($self,$path) = @_;
540 $path =~ s/^([a-z]:)/\u$1/;
542 $path =~ s|(.)\\+|$1\\|g ; # xx////xx -> xx/xx
543 $path =~ s|(\\\.)+\\|\\|g ; # xx/././xx -> xx/xx
544 $path =~ s|^(\.\\)+|| unless $path eq ".\\"; # ./xx -> xx
546 unless $path =~ m#^([a-z]:)?\\#; # xx/ -> xx
547 $path .= '.' if $path =~ m#\\$#;
553 Takes one argument, a file name, and returns the file name, if the
554 argument is likely to be a perl script. On MM_Unix this is true for
555 any ordinary, readable file.
560 my($self,$file) = @_;
561 return $file if -r $file && -f _;
562 return "$file.pl" if -r "$file.pl" && -f _;
563 return "$file.bat" if -r "$file.bat" && -f _;
569 Defines target that copies all files in the hash PM to their
570 destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
576 my($autodir) = $self->catdir('$(INST_LIB)','auto');
578 pm_to_blib: $(TO_INST_PM)
579 }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
580 "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
582 ($NMAKE ? 'qw[ <<pmfiles.dat ],'
583 : $DMAKE ? 'qw[ $(mktmp,pmfiles.dat $(PM_TO_BLIB:s,\\,\\\\,)\n) ],'
584 : '{ qw[$(PM_TO_BLIB)] },'
585 ).q{'}.$autodir.q{')"
589 } : '') . $self->{NOECHO}.q{$(TOUCH) $@
593 =item test_via_harness (o)
595 Helper method to write the test targets
599 sub test_via_harness {
600 my($self, $perl, $tests) = @_;
601 "\t$perl".q! -Mblib -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e "use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;" !."$tests\n";
605 =item tool_autosplit (override)
607 Use Win32 quoting on command line.
612 my($self, %attribs) = @_;
614 $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
616 # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
617 AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MAutoSplit }.$asl.q{ -e "autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1);"
621 =item tools_other (o)
625 Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
626 the Makefile. Also defines the perl programs MKPATH,
627 WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
634 my $bin_sh = $Config{sh} || 'cmd /c';
637 } unless $DMAKE; # dmake determines its own shell
639 for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
640 push @m, "$_ = $self->{$_}\n";
644 # The following is a portable way to say mkdir -p
645 # To see which directories are created, change the if 0 to if 1
646 MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
648 # This helps us to minimize the effect of the .exists files A yet
649 # better solution would be to have a stable file in the perl
650 # distribution with a timestamp of zero. But this solution doesn't
651 # need any changes to the core distribution and works with older perls
652 EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
656 return join "", @m if $self->{PARENT};
659 # Here we warn users that an old packlist file was found somewhere,
660 # and that they should call some uninstall routine
661 WARN_IF_OLD_PACKLIST = $(PERL) -lwe "exit unless -f $$ARGV[0];" \\
662 -e "print 'WARNING: I have found an old package in';" \\
663 -e "print ' ', $$ARGV[0], '.';" \\
664 -e "print 'Please make sure the two installations are not conflicting';"
669 MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
670 -e "install({ @ARGV },'$(VERBINST)',0,'$(UNINST)');"
672 DOC_INSTALL = $(PERL) -e "$$\=\"\n\n\";" \
673 -e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', shift, '>';" \
674 -e "print '=over 4';" \
675 -e "while (defined($$key = shift) and defined($$val = shift)) { print '=item *';print 'C<', \"$$key: $$val\", '>'; }" \
678 UNINSTALL = $(PERL) -MExtUtils::Install \
679 -e "uninstall($$ARGV[0],1,1); print \"\nUninstall is deprecated. Please check the";" \
680 -e "print \" packlist above carefully.\n There may be errors. Remove the\";" \
681 -e "print \" appropriate files manually.\n Sorry for the inconveniences.\n\""
689 Defines suffix rules to go from XS to object files directly. This is
690 only intended for broken make implementations.
694 sub xs_o { # many makes are too dumb to use xs_c then c_o
699 =item top_targets (o)
701 Defines the targets all, subdirs, config, and O_FILES
706 # --- Target Sections ---
711 #all :: config $(INST_PM) subdirs linkext manifypods
715 all :: pure_all htmlifypods manifypods
716 '.$self->{NOECHO}.'$(NOOP)
718 unless $self->{SKIPHASH}{'all'};
721 pure_all :: config pm_to_blib subdirs linkext
722 '.$self->{NOECHO}.'$(NOOP)
724 subdirs :: $(MYEXTLIB)
725 '.$self->{NOECHO}.'$(NOOP)
727 config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)\.exists
728 '.$self->{NOECHO}.'$(NOOP)
730 config :: $(INST_ARCHAUTODIR)\.exists
731 '.$self->{NOECHO}.'$(NOOP)
733 config :: $(INST_AUTODIR)\.exists
734 '.$self->{NOECHO}.'$(NOOP)
738 config :: Version_check
739 $self->{NOECHO}\$(NOOP)
741 } unless $self->{PARENT} or ($self->{PERL_SRC} && $self->{INSTALLDIRS} eq "perl") or $self->{NO_VC};
743 push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
745 if (%{$self->{HTMLLIBPODS}}) {
747 config :: \$(INST_HTMLLIBDIR)/.exists
748 $self->{NOECHO}\$(NOOP)
751 push @m, $self->dir_target(qw[$(INST_HTMLLIBDIR)]);
754 if (%{$self->{HTMLSCRIPTPODS}}) {
756 config :: \$(INST_HTMLSCRIPTDIR)/.exists
757 $self->{NOECHO}\$(NOOP)
760 push @m, $self->dir_target(qw[$(INST_HTMLSCRIPTDIR)]);
763 if (%{$self->{MAN1PODS}}) {
765 config :: \$(INST_MAN1DIR)\\.exists
766 $self->{NOECHO}\$(NOOP)
769 push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
771 if (%{$self->{MAN3PODS}}) {
773 config :: \$(INST_MAN3DIR)\\.exists
774 $self->{NOECHO}\$(NOOP)
777 push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
781 $(O_FILES): $(H_FILES)
782 ' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
786 perldoc ExtUtils::MakeMaker
791 }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
792 -MExtUtils::MakeMaker=Version_check \
793 -e "Version_check('$(MM_VERSION)')"
799 =item htmlifypods (o)
801 Defines targets and routines to translate the pods into HTML manpages
802 and put them into the INST_HTMLLIBDIR and INST_HTMLSCRIPTDIR
805 Same as MM_Unix version (changes command-line quoting).
810 my($self, %attribs) = @_;
811 return "\nhtmlifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
812 %{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}};
815 if (defined $self->{PERL_SRC}) {
816 $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
818 $pod2html_exe = $self->catfile($Config{scriptdirexp},'pod2html');
820 unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
821 # No pod2html but some HTMLxxxPODS to be installed
824 Warning: I could not locate your pod2html program. Please make sure,
825 your pod2html program is in your PATH before you execute 'make'
828 $pod2html_exe = "-S pod2html";
832 qq[POD2HTML_EXE = $pod2html_exe\n],
833 qq[POD2HTML = \$(PERL) -we "use File::Basename; use File::Path qw(mkpath); %m=\@ARGV;for (keys %m){" \\\n],
834 q[-e "next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M '],
835 $self->{MAKEFILE}, q[';" \\
836 -e "print qq(Htmlifying $$m{$$_}\n);" \\
837 -e "$$dir = dirname($$m{$$_}); mkpath($$dir) unless -d $$dir;" \\
838 -e "system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2HTML_EXE) ].qq[$$_>$$m{$$_}])==0 or warn qq(Couldn\\047t install $$m{$$_}\n);" \\
839 -e "chmod(oct($(PERM_RW))), $$m{$$_} or warn qq(chmod $(PERM_RW) $$m{$$_}: $$!\n);}"
841 push @m, "\nhtmlifypods : pure_all ";
842 push @m, join " \\\n\t", keys %{$self->{HTMLLIBPODS}}, keys %{$self->{HTMLSCRIPTPODS}};
845 if (%{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}}) {
846 push @m, "\t$self->{NOECHO}\$(POD2HTML) \\\n\t";
847 push @m, join " \\\n\t", %{$self->{HTMLLIBPODS}}, %{$self->{HTMLSCRIPTPODS}};
854 We don't want manpage process.
860 return "\nmanifypods :\n\t$self->{NOECHO}\$(NOOP)\n";
865 Same as MM_Unix version (changes command-line quoting).
874 $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
875 -e "@all = keys %{ maniread() };" \\
876 -e "print(\"Executing $(CI) @all\n\"); system(\"$(CI) @all\");" \\
877 -e "print(\"Executing $(RCS_LABEL) ...\n\"); system(\"$(RCS_LABEL) @all\");"
884 Same as MM_Unix version (changes command-line quoting).
892 dist : $(DIST_DEFAULT)
893 }.$self->{NOECHO}.q{$(PERL) -le "print \"Warning: Makefile possibly out of date with $$vf\" if " \
894 -e "-e ($$vf=\"$(VERSION_FROM)\") and -M $$vf < -M \"}.$self->{MAKEFILE}.q{\";"
896 tardist : $(DISTVNAME).tar$(SUFFIX)
898 zipdist : $(DISTVNAME).zip
900 $(DISTVNAME).tar$(SUFFIX) : distdir
903 $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
904 $(RM_RF) $(DISTVNAME)
905 $(COMPRESS) $(DISTVNAME).tar
908 $(DISTVNAME).zip : distdir
910 $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
911 $(RM_RF) $(DISTVNAME)
914 uutardist : $(DISTVNAME).tar$(SUFFIX)
915 uuencode $(DISTVNAME).tar$(SUFFIX) \\
916 $(DISTVNAME).tar$(SUFFIX) > \\
917 $(DISTVNAME).tar$(SUFFIX)_uu
921 $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
922 $(RM_RF) $(DISTVNAME)
930 Defines the string that is passed to recursive make calls in
937 return "PASTHRU = " . ($NMAKE ? "-nologo" : "");