⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mm_unix.pm

📁 UNIX下perl实现代码
💻 PM
📖 第 1 页 / 共 5 页
字号:
    # 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 + -