#!/bin/sh # If using normal root, avoid changing anything. if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then exit 0 fi STRIP=${1:-strip} NCPUS=${RPM_BUILD_NCPUS:-1} # 32 was chosen as a compromise between reducing the overhead of starting new # processes and distributing the work load evenly over as much processors as # possible MAX_ARGS=32 case `uname -a` in Darwin*) exit 0 ;; *) ;; esac # Below is the explanation of commands in the order of their appearance # Ignore /usr/lib/debug entries # Ignore all go(guile objects & golang) files # Consider files with only single link # Run the file command to find relevant non-stripped binaries, with bundle size of 32 # Ignore all 'no machine' files # Only operate on non-stripped binaries strip_elf_binaries() { local nlinks="${1}" local nprocs="${2}" find "$RPM_BUILD_ROOT" -type f \ ! -regex "${RPM_BUILD_ROOT}/*usr/lib/debug.*" \ ! -name "*.go" -links "${nlinks}" -print0 | \ xargs -0 -r -P${nprocs} -n${MAX_ARGS} sh -c "file \"\$@\" | \ sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped.*/\1/p' | \ grep -v 'no machine' | \ xargs -I\{\} $STRIP -g \{\}" ARG0 } # strip all binaries with single link strip_elf_binaries "1" "${NCPUS}" # strip all binaries with more than 1 link strip_elf_binaries "+1" "1"