Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
use File::Find; use Config;
if (@ARGV != 2) { warn <<"EOT"; Usage: makeliblinks libautodir targetdir where libautodir is the architecture-dependent auto directory (e.g. $Config::Config{archlib}/auto). EOT exit 2; }
my ($libautodir, $targetdir) = @ARGV;
# Calculate relative path prefix from $targetdir to $libautodir sub relprefix { my ($to, $from) = @_; my $up; for ($up = 0; substr($to, 0, length($from)) ne $from; $up++) { $from =~ s( [^/]+ (?# a group of non-slashes) /* (?# maybe with some trailing slashes) $ (?# at the end of the path) )()x; } return (("../" x $up) . substr($to, length($from))); }
my $relprefix = relprefix($libautodir, $targetdir);
my ($dlext, $lib_ext) = @Config::Config{qw(dlext lib_ext)};
sub link_if_library { if (/\.($dlext|$lib_ext)$/o) { my $ext = $1; my $name = $File::Find::name; if (substr($name, 0, length($libautodir) + 1) ne "$libautodir/") { die "directory of $name doesn't match $libautodir\n"; } substr($name, 0, length($libautodir) + 1) = ''; my @parts = split(m(/), $name); if ($parts[-1] ne "$parts[-2].$ext") { die "module name $_ doesn't match its directory $libautodir\n"; } pop @parts; my $libpath = "$targetdir/lib" . join("__", @parts) . ".$ext"; print "$libpath -> $relprefix/$name\n"; symlink("$relprefix/$name", $libpath) or warn "above link failed with error: $!\n"; } }
find(\&link_if_library, $libautodir); exit 0;
|