📄 mm_unix.pm
字号:
# We get SITELIBEXP and SITEARCHEXP directly via # Get_from_Config. When we are running standard modules, these # won't matter, we will set INSTALLDIRS to "perl". Otherwise we # set it to "site". I prefer that INSTALLDIRS be set from outside # MakeMaker. $self->{INSTALLDIRS} ||= "site"; # INST_LIB typically pre-set if building an extension after # perl has been built and installed. Setting INST_LIB allows # you to build directly into, say $Config::Config{privlibexp}. unless ($self->{INST_LIB}){ ##### XXXXX We have to change this nonsense if (defined $self->{PERL_SRC} and $self->{INSTALLDIRS} eq "perl") { $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB}; } else { $self->{INST_LIB} = $self->catdir($self->curdir,"blib","lib"); } } $self->{INST_ARCHLIB} ||= $self->catdir($self->curdir,"blib","arch"); $self->{INST_BIN} ||= $self->catdir($self->curdir,'blib','bin'); # We need to set up INST_LIBDIR before init_libscan() for VMS my @parentdir = split(/::/, $self->{PARENT_NAME}); $self->{INST_LIBDIR} = $self->catdir('$(INST_LIB)',@parentdir); $self->{INST_ARCHLIBDIR} = $self->catdir('$(INST_ARCHLIB)',@parentdir); $self->{INST_AUTODIR} = $self->catdir('$(INST_LIB)','auto','$(FULLEXT)'); $self->{INST_ARCHAUTODIR} = $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)'); # INST_EXE is deprecated, should go away March '97 $self->{INST_EXE} ||= $self->catdir($self->curdir,'blib','script'); $self->{INST_SCRIPT} ||= $self->catdir($self->curdir,'blib','script'); # The user who requests an installation directory explicitly # should not have to tell us a architecture installation directory # as well. We look if a directory exists that is named after the # architecture. If not we take it as a sign that it should be the # same as the requested installation directory. Otherwise we take # the found one. # We do the same thing twice: for privlib/archlib and for sitelib/sitearch my($libpair); for $libpair ({l=>"privlib", a=>"archlib"}, {l=>"sitelib", a=>"sitearch"}) { my $lib = "install$libpair->{l}"; my $Lib = uc $lib; my $Arch = uc "install$libpair->{a}"; if( $self->{$Lib} && ! $self->{$Arch} ){ my($ilib) = $Config{$lib}; $ilib = VMS::Filespec::unixify($ilib) if $Is_VMS; $self->prefixify($Arch,$ilib,$self->{$Lib}); unless (-d $self->{$Arch}) { print STDOUT "Directory $self->{$Arch} not found, thusly\n" if $Verbose; $self->{$Arch} = $self->{$Lib}; } print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose; } } # we have to look at the relation between $Config{prefix} and the # requested values. We're going to set the $Config{prefix} part of # all the installation path variables to literally $(PREFIX), so # the user can still say make PREFIX=foo my($configure_prefix) = $Config{'prefix'}; $configure_prefix = VMS::Filespec::unixify($configure_prefix) if $Is_VMS; $self->{PREFIX} ||= $configure_prefix; my($install_variable,$search_prefix,$replace_prefix); # If the prefix contains perl, Configure shapes the tree as follows: # perlprefix/lib/ INSTALLPRIVLIB # perlprefix/lib/pod/ # perlprefix/lib/site_perl/ INSTALLSITELIB # perlprefix/bin/ INSTALLBIN # perlprefix/man/ INSTALLMAN1DIR # else # prefix/lib/perl5/ INSTALLPRIVLIB # prefix/lib/perl5/pod/ # prefix/lib/perl5/site_perl/ INSTALLSITELIB # prefix/bin/ INSTALLBIN # prefix/lib/perl5/man/ INSTALLMAN1DIR # # The above results in various kinds of breakage on various # platforms, so we cope with it as follows: if prefix/lib/perl5 # or prefix/lib/perl5/man exist, we'll replace those instead # of /prefix/{lib,man} $replace_prefix = qq[\$\(PREFIX\)]; for $install_variable (qw/ INSTALLBIN INSTALLSCRIPT /) { $self->prefixify($install_variable,$configure_prefix,$replace_prefix); } my $funkylibdir = $self->catdir($configure_prefix,"lib","perl5"); $funkylibdir = '' unless -d $funkylibdir; $search_prefix = $funkylibdir || $self->catdir($configure_prefix,"lib"); if ($self->{LIB}) { $self->{INSTALLPRIVLIB} = $self->{INSTALLSITELIB} = $self->{LIB}; $self->{INSTALLARCHLIB} = $self->{INSTALLSITEARCH} = $self->catdir($self->{LIB},$Config{'archname'}); } else { if (-d $self->catdir($self->{PREFIX},"lib","perl5")) { $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5"); } else { $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib"); } for $install_variable (qw/ INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB INSTALLSITEARCH /) { $self->prefixify($install_variable,$search_prefix,$replace_prefix); } } my $funkymandir = $self->catdir($configure_prefix,"lib","perl5","man"); $funkymandir = '' unless -d $funkymandir; $search_prefix = $funkymandir || $self->catdir($configure_prefix,"man"); if (-d $self->catdir($self->{PREFIX},"lib","perl5", "man")) { $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man"); } else { $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"man"); } for $install_variable (qw/ INSTALLMAN1DIR INSTALLMAN3DIR /) { $self->prefixify($install_variable,$search_prefix,$replace_prefix); } # Now we head at the manpages. Maybe they DO NOT want manpages # installed $self->{INSTALLMAN1DIR} = $Config::Config{installman1dir} unless defined $self->{INSTALLMAN1DIR}; unless (defined $self->{INST_MAN1DIR}){ if ($self->{INSTALLMAN1DIR} =~ /^(none|\s*)$/){ $self->{INST_MAN1DIR} = $self->{INSTALLMAN1DIR}; } else { $self->{INST_MAN1DIR} = $self->catdir($self->curdir,'blib','man1'); } } $self->{MAN1EXT} ||= $Config::Config{man1ext}; $self->{INSTALLMAN3DIR} = $Config::Config{installman3dir} unless defined $self->{INSTALLMAN3DIR}; unless (defined $self->{INST_MAN3DIR}){ if ($self->{INSTALLMAN3DIR} =~ /^(none|\s*)$/){ $self->{INST_MAN3DIR} = $self->{INSTALLMAN3DIR}; } else { $self->{INST_MAN3DIR} = $self->catdir($self->curdir,'blib','man3'); } } $self->{MAN3EXT} ||= $Config::Config{man3ext}; $self->{INSTALLHTMLPRIVLIBDIR} = $Config::Config{installhtmlprivlibdir} unless defined $self->{INSTALLHTMLPRIVLIBDIR}; $self->{INSTALLHTMLSITELIBDIR} = $Config::Config{installhtmlsitelibdir} unless defined $self->{INSTALLHTMLSITELIBDIR}; unless (defined $self->{INST_HTMLLIBDIR}){ if ($self->{INSTALLHTMLSITELIBDIR} =~ /^(none|\s*)$/){ $self->{INST_HTMLLIBDIR} = $self->{INSTALLHTMLSITELIBDIR}; } else { $self->{INST_HTMLLIBDIR} = $self->catdir($self->curdir,'blib','html','lib'); } } $self->{INSTALLHTMLSCRIPTDIR} = $Config::Config{installhtmlscriptdir} unless defined $self->{INSTALLHTMLSCRIPTDIR}; unless (defined $self->{INST_HTMLSCRIPTDIR}){ if ($self->{INSTALLHTMLSCRIPTDIR} =~ /^(none|\s*)$/){ $self->{INST_HTMLSCRIPTDIR} = $self->{INSTALLHTMLSCRIPTDIR}; } else { $self->{INST_HTMLSCRIPTDIR} = $self->catdir($self->curdir,'blib','html','bin'); } } $self->{HTMLEXT} ||= $Config::Config{htmlext} || 'html'; # Get some stuff out of %Config if we haven't yet done so print STDOUT "CONFIG must be an array ref\n" if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY'); $self->{CONFIG} = [] unless (ref $self->{CONFIG}); push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config); push(@{$self->{CONFIG}}, 'shellflags') if $Config::Config{shellflags}; my(%once_only,$m); foreach $m (@{$self->{CONFIG}}){ next if $once_only{$m}; print STDOUT "CONFIG key '$m' does not exist in Config.pm\n" unless exists $Config::Config{$m}; $self->{uc $m} ||= $Config::Config{$m}; $once_only{$m} = 1; }# This is too dangerous:# if ($^O eq "next") {# $self->{AR} = "libtool";# $self->{AR_STATIC_ARGS} = "-o";# }# But I leave it as a placeholder $self->{AR_STATIC_ARGS} ||= "cr"; # These should never be needed $self->{LD} ||= 'ld'; $self->{OBJ_EXT} ||= '.o'; $self->{LIB_EXT} ||= '.a'; $self->{MAP_TARGET} ||= "perl"; $self->{LIBPERL_A} ||= "libperl$self->{LIB_EXT}"; # make a simple check if we find Exporter warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory (Exporter.pm not found)" unless -f $self->catfile("$self->{PERL_LIB}","Exporter.pm") || $self->{NAME} eq "ExtUtils::MakeMaker"; # Determine VERSION and VERSION_FROM ($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME}; if ($self->{VERSION_FROM}){ $self->{VERSION} = $self->parse_version($self->{VERSION_FROM}) or Carp::carp "WARNING: Setting VERSION via file '$self->{VERSION_FROM}' failed\n" } # strip blanks if ($self->{VERSION}) { $self->{VERSION} =~ s/^\s+//; $self->{VERSION} =~ s/\s+$//; } $self->{VERSION} ||= "0.10"; ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g; # Graham Barr and Paul Marquess had some ideas how to ensure # version compatibility between the *.pm file and the # corresponding *.xs file. The bottomline was, that we need an # XS_VERSION macro that defaults to VERSION: $self->{XS_VERSION} ||= $self->{VERSION}; # --- Initialize Perl Binary Locations # Find Perl 5. The only contract here is that both 'PERL' and 'FULLPERL' # will be working versions of perl 5. miniperl has priority over perl # for PERL to ensure that $(PERL) is usable while building ./ext/* my ($component,@defpath); foreach $component ($self->{PERL_SRC}, $self->path(), $Config::Config{binexp}) { push @defpath, $component if defined $component; } $self->{PERL} ||= $self->find_perl(5.0, [ $self->canonpath($^X), 'miniperl', 'perl','perl5',"perl$Config{version}" ], \@defpath, $Verbose ); # don't check if perl is executable, maybe they have decided to # supply switches with perl # Define 'FULLPERL' to be a non-miniperl (used in test: target) ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i unless ($self->{FULLPERL});}=item init_othersInitializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH,OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, NOOP, FIRST_MAKEFILE,MAKEFILE, NOECHO, RM_F, RM_RF, TEST_F, TOUCH, CP, MV, CHMOD, UMASK_NULL=cutsub init_others { # --- Initialize Other Attributes my($self) = shift; # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $self->{LIBS} # Lets look at $self->{LIBS} carefully: It may be an anon array, a string or # undefined. In any case we turn it into an anon array: # May check $Config{libs} too, thus not empty. $self->{LIBS}=[''] unless $self->{LIBS}; $self->{LIBS}=[$self->{LIBS}] if ref \$self->{LIBS} eq 'SCALAR'; $self->{LD_RUN_PATH} = ""; my($libs); foreach $libs ( @{$self->{LIBS}} ){ $libs =~ s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace my(@libs) = $self->extliblist($libs); if ($libs[0] or $libs[1] or $libs[2]){ # LD_RUN_PATH now computed by ExtUtils::Liblist ($self->{EXTRALIBS}, $self->{BSLOADLIBS}, $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs; last; } } if ( $self->{OBJECT} ) { $self->{OBJECT} =~ s!\.o(bj)?\b!\$(OBJ_EXT)!g; } else { # init_dirscan should have found out, if we have C files $self->{OBJECT} = ""; $self->{OBJECT} = '$(BASEEXT)$(OBJ_EXT)' if @{$self->{C}||[]}; } $self->{OBJECT} =~ s/\n+/ \\\n\t/g; $self->{BOOTDEP} = (-f "$self->{BASEEXT}_BS") ? "$self->{BASEEXT}_BS" : ""; $self->{PERLMAINCC} ||= '$(CC)'; $self->{LDFROM} = '$(OBJECT)' unless $self->{LDFROM}; # Sanity check: don't define LINKTYPE = dynamic if we're skipping # the 'dynamic' section of MM. We don't have this problem with # 'static', since we either must use it (%Config says we can't # use dynamic loading) or the caller asked for it explicitly. if (!$self->{LINKTYPE}) { $self->{LINKTYPE} = $self->{SKIPHASH}{'dynamic'} ? 'static' : ($Config::Config{usedl} ? 'dynamic' : 'static'); }; # These get overridden for VMS and maybe some other systems $self->{NOOP} ||= '$(SHELL) -c true'; $self->{FIRST_MAKEFILE} ||= "Makefile"; $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE}; $self->{MAKE_APERL_FILE} ||= "Makefile.aperl"; $self->{NOECHO} = '@' unless defined $self->{NOECHO}; $self->{RM_F} ||= "rm -f"; $self->{RM_RF} ||= "rm -rf"; $self->{TOUCH} ||= "touch"; $self->{TEST_F} ||= "test -f"; $self->{CP} ||= "cp"; $self->{MV} ||= "mv"; $self->{CHMOD} ||= "chmod"; $self->{UMASK_NULL} ||= "umask 0"; $self->{DEV_NULL} ||= "> /dev/null 2>&1";}=item install (o)Defines the install target.=cutsub install { my($self, %attribs) = @_; my(@m); push @m, q{install :: all pure_install doc_installinstall_perl :: all pure_perl_install doc_perl_installinstall_site :: all pure_site_install doc_site_installinstall_ :: install_site @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=sitepure_install :: pure_$(INSTALLDIRS)_installdoc_install :: doc_$(INSTALLDIRS)_install }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.podpure__install : pure_site_install @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=sitedoc__install : doc_site_install @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=sitepure_perl_install :: }.$self->{NOECHO}.q{$(MOD_INSTALL) \ read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \ write }.$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \ $(INST_LIB) $(INSTALLPRIVLIB) \ $(INST_ARCHLIB) $(INSTALLARCHLIB) \ $(INST_BIN) $(INSTALLBIN) \ $(INST_SCRIPT) $(INSTALLSCRIPT) \ $(INST_HTMLLIBDIR) $(INSTALLHTMLPRIVLIBDIR) \ $(INST_HTMLSCRIPTDIR) $(INSTALLHTMLSCRIPTDIR) \ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \ $(INST_MAN3DIR) $(INSTALLMAN3DIR) }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \ }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{pure_site_install :: }.$self->{NOECHO}.q{$(MOD_INSTALL) \ read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \ write }.$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \ $(INST_LIB) $(INSTALLSITELIB) \ $(INST_ARCHLIB) $(INSTALLSITEARCH) \ $(INST_BIN) $(INSTALLBIN) \ $(INST_SCRIPT) $(INSTALLSCRIPT) \ $(INST_HTMLLIBDIR) $(INSTALLHTMLSITELIBDIR) \ $(INST_HTMLSCRIPTDIR) $(INSTALLHTMLSCRIPTDIR) \ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \ $(INST_MAN3DIR) $(INSTALLMAN3DIR) }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \ }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{doc_perl_install :: -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB) -}.$self->{NOECHO}.q{$(DOC_INSTALL) \ "Module" "$(NAME)" \ "installed into" "$(INSTALLPRIVLIB)" \ LINKTYPE "$(LINKTYPE)" \ VERSION "$(VERSION)" \ EXE_FILES "$(EXE_FILES)" \ >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{doc_site_install :: -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB) -}.$self->{NOECHO}.q{$(DOC_INSTALL) \ "Module" "$(NAME)" \ "installed into" "$(INSTALLSITELIB)" \ LINKTYPE "$(LINKTYPE)" \ VERSION "$(VERSION)" \ EXE_FILES "$(EXE_FILES)" \ >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{}; push @m, q{uninstall :: uninstall_from_$(INSTALLDIRS)dirsuninstall_from_perldirs :: }.$self->{NOECHO}. q{$(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{uninstall_from_sitedirs :: }.$self->{NOECHO}. q{$(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -