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

📄 kid.pm

📁 source of perl for linux application,
💻 PM
📖 第 1 页 / 共 2 页
字号:
package ExtUtils::Liblist::Kid;# XXX Splitting this out into its own .pm is a temporary solution.# This kid package is to be used by MakeMaker.  It will not work if# $self is not a Makemaker.use 5.00503;# Broken out of MakeMaker from version 4.11use strict;use vars qw($VERSION);$VERSION = 6.42;use Config;use Cwd 'cwd';use File::Basename;use File::Spec;sub ext {  if   ($^O eq 'VMS')     { return &_vms_ext;      }  elsif($^O eq 'MSWin32') { return &_win32_ext;    }  else                    { return &_unix_os2_ext; }}sub _unix_os2_ext {    my($self,$potential_libs, $verbose, $give_libs) = @_;    $verbose ||= 0;    if ($^O =~ 'os2' and $Config{perllibs}) { 	# Dynamic libraries are not transitive, so we may need including	# the libraries linked against perl.dll again.	$potential_libs .= " " if $potential_libs;	$potential_libs .= $Config{perllibs};    }    return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs;    warn "Potential libraries are '$potential_libs':\n" if $verbose;    my($so)   = $Config{so};    my($libs) = defined $Config{perllibs} ? $Config{perllibs} : $Config{libs};    my $Config_libext = $Config{lib_ext} || ".a";    # compute $extralibs, $bsloadlibs and $ldloadlibs from    # $potential_libs    # this is a rewrite of Andy Dougherty's extliblist in perl    my(@searchpath); # from "-L/path" entries in $potential_libs    my(@libpath) = split " ", $Config{'libpth'};    my(@ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen);    my(@libs, %libs_seen);    my($fullname, $thislib, $thispth, @fullname);    my($pwd) = cwd(); # from Cwd.pm    my($found) = 0;    foreach $thislib (split ' ', $potential_libs){	# Handle possible linker path arguments.	if ($thislib =~ s/^(-[LR]|-Wl,-R)//){	# save path flag type	    my($ptype) = $1;	    unless (-d $thislib){		warn "$ptype$thislib ignored, directory does not exist\n"			if $verbose;		next;	    }	    my($rtype) = $ptype;	    if (($ptype eq '-R') or ($ptype eq '-Wl,-R')) {		if ($Config{'lddlflags'} =~ /-Wl,-R/) {		    $rtype = '-Wl,-R';		} elsif ($Config{'lddlflags'} =~ /-R/) {		    $rtype = '-R';		}	    }	    unless (File::Spec->file_name_is_absolute($thislib)) {	      warn "Warning: $ptype$thislib changed to $ptype$pwd/$thislib\n";	      $thislib = $self->catdir($pwd,$thislib);	    }	    push(@searchpath, $thislib);	    push(@extralibs,  "$ptype$thislib");	    push(@ldloadlibs, "$rtype$thislib");	    next;	}	# Handle possible library arguments.	unless ($thislib =~ s/^-l//){	  warn "Unrecognized argument in LIBS ignored: '$thislib'\n";	  next;	}	my($found_lib)=0;	foreach $thispth (@searchpath, @libpath){		# Try to find the full name of the library.  We need this to		# determine whether it's a dynamically-loadable library or not.		# This tends to be subject to various os-specific quirks.		# For gcc-2.6.2 on linux (March 1995), DLD can not load		# .sa libraries, with the exception of libm.sa, so we		# deliberately skip them.	    if (@fullname =		    $self->lsdir($thispth,"^\Qlib$thislib.$so.\E[0-9]+")){		# Take care that libfoo.so.10 wins against libfoo.so.9.		# Compare two libraries to find the most recent version		# number.  E.g.  if you have libfoo.so.9.0.7 and		# libfoo.so.10.1, first convert all digits into two		# decimal places.  Then we'll add ".00" to the shorter		# strings so that we're comparing strings of equal length		# Thus we'll compare libfoo.so.09.07.00 with		# libfoo.so.10.01.00.  Some libraries might have letters		# in the version.  We don't know what they mean, but will		# try to skip them gracefully -- we'll set any letter to		# '0'.  Finally, sort in reverse so we can take the		# first element.		#TODO: iterate through the directory instead of sorting		$fullname = "$thispth/" .		(sort { my($ma) = $a;			my($mb) = $b;			$ma =~ tr/A-Za-z/0/s;			$ma =~ s/\b(\d)\b/0$1/g;			$mb =~ tr/A-Za-z/0/s;			$mb =~ s/\b(\d)\b/0$1/g;			while (length($ma) < length($mb)) { $ma .= ".00"; }			while (length($mb) < length($ma)) { $mb .= ".00"; }			# Comparison deliberately backwards			$mb cmp $ma;} @fullname)[0];	    } elsif (-f ($fullname="$thispth/lib$thislib.$so")		 && (($Config{'dlsrc'} ne "dl_dld.xs") || ($thislib eq "m"))){	    } elsif (-f ($fullname="$thispth/lib${thislib}_s$Config_libext")                 && (! $Config{'archname'} =~ /RM\d\d\d-svr4/)		 && ($thislib .= "_s") ){ # we must explicitly use _s version	    } elsif (-f ($fullname="$thispth/lib$thislib$Config_libext")){	    } elsif (-f ($fullname="$thispth/$thislib$Config_libext")){            } elsif (-f ($fullname="$thispth/lib$thislib.dll$Config_libext")){	    } elsif (-f ($fullname="$thispth/Slib$thislib$Config_libext")){	    } elsif ($^O eq 'dgux'		 && -l ($fullname="$thispth/lib$thislib$Config_libext")		 && readlink($fullname) =~ /^elink:/s) {		 # Some of DG's libraries look like misconnected symbolic		 # links, but development tools can follow them.  (They		 # look like this:		 #		 #    libm.a -> elink:${SDE_PATH:-/usr}/sde/\		 #    ${TARGET_BINARY_INTERFACE:-m88kdgux}/usr/lib/libm.a		 #		 # , the compilation tools expand the environment variables.)	    } else {		warn "$thislib not found in $thispth\n" if $verbose;		next;	    }	    warn "'-l$thislib' found at $fullname\n" if $verbose;	    push @libs, $fullname unless $libs_seen{$fullname}++;	    $found++;	    $found_lib++;	    # Now update library lists	    # what do we know about this library...	    my $is_dyna = ($fullname !~ /\Q$Config_libext\E\z/);	    my $in_perl = ($libs =~ /\B-l\Q${thislib}\E\b/s);            # include the path to the lib once in the dynamic linker path            # but only if it is a dynamic lib and not in Perl itself            my($fullnamedir) = dirname($fullname);            push @ld_run_path, $fullnamedir                 if $is_dyna && !$in_perl &&                    !$ld_run_path_seen{$fullnamedir}++;	    # Do not add it into the list if it is already linked in	    # with the main perl executable.	    # We have to special-case the NeXT, because math and ndbm 	    # are both in libsys_s	    unless ($in_perl || 		($Config{'osname'} eq 'next' &&		    ($thislib eq 'm' || $thislib eq 'ndbm')) ){		push(@extralibs, "-l$thislib");	    }	    # We might be able to load this archive file dynamically	    if ( ($Config{'dlsrc'} =~ /dl_next/ && $Config{'osvers'} lt '4_0')	    ||   ($Config{'dlsrc'} =~ /dl_dld/) )	    {		# We push -l$thislib instead of $fullname because		# it avoids hardwiring a fixed path into the .bs file.		# Mkbootstrap will automatically add dl_findfile() to		# the .bs file if it sees a name in the -l format.		# USE THIS, when dl_findfile() is fixed: 		# push(@bsloadlibs, "-l$thislib");		# OLD USE WAS while checking results against old_extliblist		push(@bsloadlibs, "$fullname");	    } else {		if ($is_dyna){                    # For SunOS4, do not add in this shared library if                    # it is already linked in the main perl executable		    push(@ldloadlibs, "-l$thislib")			unless ($in_perl and $^O eq 'sunos');		} else {		    push(@ldloadlibs, "-l$thislib");		}	    }	    last;	# found one here so don't bother looking further	}	warn "Note (probably harmless): "		     ."No library found for -l$thislib\n"	    unless $found_lib>0;    }    unless( $found ) {        return ('','','','', ($give_libs ? \@libs : ()));    }    else {        return ("@extralibs", "@bsloadlibs", "@ldloadlibs",                join(":",@ld_run_path), ($give_libs ? \@libs : ()));    }}sub _win32_ext {    require Text::ParseWords;    my($self, $potential_libs, $verbose, $give_libs) = @_;    $verbose ||= 0;    # If user did not supply a list, we punt.    # (caller should probably use the list in $Config{libs})    return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs;    my $cc		= $Config{cc};    my $VC		= $cc =~ /^cl/i;    my $BC		= $cc =~ /^bcc/i;    my $GC		= $cc =~ /^gcc/i;    my $so		= $Config{'so'};    my $libs		= $Config{'perllibs'};    my $libpth		= $Config{'libpth'};    my $libext		= $Config{'lib_ext'} || ".lib";    my(@libs, %libs_seen);    if ($libs and $potential_libs !~ /:nodefault/i) { 	# If Config.pm defines a set of default libs, we always	# tack them on to the user-supplied list, unless the user	# specified :nodefault	$potential_libs .= " " if $potential_libs;	$potential_libs .= $libs;    }    warn "Potential libraries are '$potential_libs':\n" if $verbose;    # normalize to forward slashes    $libpth =~ s,\\,/,g;    $potential_libs =~ s,\\,/,g;    # compute $extralibs from $potential_libs    my @searchpath;		    # from "-L/path" in $potential_libs    my @libpath		= Text::ParseWords::quotewords('\s+', 0, $libpth);    my @extralibs;    my $pwd		= cwd();    # from Cwd.pm    my $lib		= '';    my $found		= 0;    my $search		= 1;    my($fullname, $thislib, $thispth);    # add "$Config{installarchlib}/CORE" to default search path    push @libpath, "$Config{installarchlib}/CORE";    if ($VC and exists $ENV{LIB} and $ENV{LIB}) {        push @libpath, split /;/, $ENV{LIB};    }    foreach (Text::ParseWords::quotewords('\s+', 0, $potential_libs)){	$thislib = $_;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -