mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-22 19:44:21 +01:00
cde36b311e
Signed-off-by: B. Watson <urchlay@slackware.uk> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
39 lines
1.4 KiB
Perl
39 lines
1.4 KiB
Perl
#!/usr/bin/perl -w
|
|
|
|
# 20240821 bkw: Find symlinks. Call from a SlackBuild, after 'cd $PKG'
|
|
# and before 'makepkg'. Call as "perl $CWD/findsymlinks.pl >> install/doinst.sh".
|
|
# Do not expect this script's +x bit to be set; it won't be.
|
|
|
|
# For each symlink, print a pair of doinst.sh lines, then remove the symlink.
|
|
# This happens *many* times faster than makepkg's make_install_script()
|
|
# function, especially when there are thousands of symlinks. The output
|
|
# is (or should be) identical to the lines makepkg would add to doinst.sh.
|
|
|
|
# Feel free to use this in your own SlackBuilds. It has been
|
|
# thoroughly tested with gnome-icon-theme. If you run into problems
|
|
# with it, please email me at urchlay@slackware.uk so I can fix it.
|
|
|
|
use File::Find;
|
|
|
|
sub wanted { # dead or aliiive!
|
|
return unless -l $_; # only care about symlinks.
|
|
$found{join("/", $File::Find::dir, $_)} = [$File::Find::dir, $_];
|
|
}
|
|
|
|
find(\&wanted, ("."));
|
|
|
|
# since makepkg sorts the symlinks, we will too.
|
|
for(sort keys %found) {
|
|
my $dir = substr($found{$_}[0], 2); # remove leading ./
|
|
my $target = $found{$_}[1];
|
|
my $src = readlink($_);
|
|
|
|
for my $name ($dir, $src, $target) {
|
|
# escape special chars; regex comes from makepkg itself, but with
|
|
# ] and } added. \x27 is a single-quote, BTW.
|
|
$name =~ s,[] "#\$\&\x27()*;<>?[\\`{}|~],\\$&,g;
|
|
}
|
|
|
|
print "( cd $dir ; rm -rf $target )\n( cd $dir ; ln -sf $src $target )\n";
|
|
unlink $_;
|
|
}
|