faster strip_files() function
Tested with a port with 5500 output files, from which 53 candidates for stripping. The timing was: - 30 secs (old code) - 0.2 secs (new code - current patch) - 1.4 secs (new code with proper quoting - not commited) Most of the time is spent in getting the output from the file program. The old code started the file program for every file. The new/present code starts N=$(nproc) processes in parallel with 10 input files for each 'file' process. The output of the file program is feed to an awk process which filters-out only the candidates for stripping. This process runs in parallel too (but with one file per strip process). The --no-buffer options is used because it sounds good (the strip should start as soon as one of the file processes has a verdict for one of their 10 files), but I didn't measure it. The "xargs -r -L10 -P$N" command will miss the files with spaces. For a file named "a b" it will spawn: file "a" "b" A slower version, with proper quoting, "xargs -r -L1 -P$N -I{} file ... '{}'", will spawn: file "a b" * xargs will force -L1 if -I{} is used Given that the file process doesn't return error codes for non-existing files, and that there is a very low probability that we have ports with filenames constaining spaces that are worth stripping them, I choose to keep the faster (non perfect) version.
This commit is contained in:
parent
9acb4ea98b
commit
ece7f90bf8
27
pkgmk.in
27
pkgmk.in
@ -409,7 +409,8 @@ refresh_signature() {
|
||||
}
|
||||
|
||||
strip_files() {
|
||||
local FILE FILTER
|
||||
local FILTER
|
||||
local N=$(nproc)
|
||||
|
||||
cd $PKG
|
||||
|
||||
@ -419,18 +420,18 @@ strip_files() {
|
||||
FILTER="cat"
|
||||
fi
|
||||
|
||||
find . -type f -printf "%P\n" | $FILTER | while read FILE; do
|
||||
case $(file -b "$FILE") in
|
||||
*ELF*executable*not\ stripped*)
|
||||
strip --strip-all "$FILE"
|
||||
;;
|
||||
*ELF*shared\ object*not\ stripped*)
|
||||
strip --strip-unneeded "$FILE"
|
||||
;;
|
||||
current\ ar\ archive)
|
||||
strip --strip-debug "$FILE"
|
||||
esac
|
||||
done
|
||||
find . -type f -printf "%P\n" | $FILTER \
|
||||
| xargs -r -L10 -P$N \
|
||||
file --no-buffer --separator '>' \
|
||||
-e apptype -e ascii -e encoding -e tokens \
|
||||
-e cdf -e compress -e tar -e text \
|
||||
| awk '
|
||||
BEGIN { FS = ">[ ]+" }
|
||||
$0 ~ /ELF.*executable.*not stripped/ { print "--strip-all \"" $1 "\"" }
|
||||
$0 ~ /ELF.*shared object.*not stripped/ { print "--strip-unneeded \"" $1 "\"" }
|
||||
$2 == "current ar archive" { print "--strip-debug \"" $1 "\"" }
|
||||
' \
|
||||
| xargs -r -L1 -P$N strip
|
||||
}
|
||||
|
||||
compress_manpages() {
|
||||
|
Loading…
Reference in New Issue
Block a user