This is lip.pl in view mode; [Download] [Up]
#!/usr/local/bin/perl
# spilice some architecture from Mach multi-architechture-binary
# hyoudo@kcn.or.jp
# 1997.07.17 - 18,24 viewer implement
# 08.03 remover implement
$fpath = "~/Apps";
$fwrite = 0; # disable $fpath for rewrite
while( $#ARGV > -1) {
$_ = shift @ARGV;
if( /^\-sort/ ){
$fsort = 1 ;
} elsif( /^\-nim/ ){
$fnim = 1 ;
} elsif( /^\-path$/ ){
if( $#ARGV < 0 ){
print "No parameter of -path, use $fpath\n";
} else {
$temp = shift @ARGV;
$_ = `if [ -r $temp ]\
then echo "exists"\
else echo "no"\
fi\
`;
chop;
if( /^no$/ ){
print "Cnat't read path: $temp, use $fpath\n";
} else {
$fpath = $temp;
$fwrite = 1; # enable $fpath for rewrite
}
}
} elsif( /^\-nihs$/ ){
if( $#ARGV < 0 ){
print "No parameter of -nihs\n";
} else {
$_ = $fnihs . (shift @ARGV);
tr/A-Z/a-z/;
s/[^nihs]//g;
$fnihs = $_;
}
} else {
print "Unknown argument : $_\n";
$fwrite = 0; # disable $fpath for rewrite
}
}
$fnihs = "nihs" unless $fnihs;
# debug print
# print "sort $fsort; num $fnim; path $fpath; nihs $fnihs\n";
print "Not rewrite $fpath\n" unless $fwrite;
@exfile = `find $fpath -perm -100 ! -type d -print`;
open( stderr, ">/dev/null" );
for ( @exfile ) {
# print "1 $_";
chop;
$_ = `lipo -info $_`;
next if /^$/;
# print "2 $_";
chop;
@a = split( /: / );
$_ = $a[$#a];
$arch = "";
$f = $fsort;
while( $f ){
$arch .= "m68k ", next if s/m68k\s*//;
$arch .= "i${1}86 ", next if s/i(\d)86\s*//;
$arch .= "hppa ", next if s/hppa\s*//;
$arch .= "sparc ", next if s/sparc\s*//;
$arch .= $_ if /.+/;
$f = 0;
s/ $/$/;
$_ = $arch;
}
@arch = split( / / );
if( $fnim ){
s/m68k/N/;
s/i\d86/I/;
s/hppa/H/;
s/sparc/S/;
s/ //g;
}
$arch = $_;
pop @a;
shift @a;
$_ = pop @a;
s/ are$//;
s/ is architecture$//;
$fn = $_;
$_ = join( ": ", $arch, @a, $fn );
print "$_\n";
$remove = $rarch = "";
while( $#arch > -1 ){
$_ = shift @arch;
s/^m/n/;
unless( /^[$fnihs]/ ){
s/^n/m/;
$rarch .= "$_ ";
$remove .= " -remove $_" ;
}
}
$remove = "lipo $fn $remove" if $remove;
next unless $rarch;
if( $fwrite ){
# ディレクトリ確認
$dirs = $fn;
$dirs =~ s/\/[^\/]+$//;
print "DIR: $dirs\n";
$_ = `if [ -w $dirs -a -w $fn]
then echo "good"
else echo "no"
fi`;
if( /^no/ ){
print "\t$arch Not removed, Can't write.\n";
} else {
# テンポラリファイル確認
$temp = "__001";
while( `if [ -f $dirs/$temp -o -d $dirs/$temp ]
then echo "TRUE"
fi` ){
$temp++;
}
# 抽出
$_ = `$remove -output $dirs/$temp`;
print $_;
# 抽出確認
if( `if [ -f $dirs/$temp ]
then echo "TRUE"
fi`){
$_ = `mv $dirs/$temp $fn`;
print $_;
print "\t$rarch removed.\n";
} else {
print "\tFailed remove $rarch.\n";
}
}
} else {
print "\t$rarch Not removed.\n";
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.