X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Fstripper;h=f121d35919fb967c6469c54b32d4f791ea631480;hp=15fa308faff70a1f3731ea395e3e01657788a418;hb=82b405615f47bb1dc34f4a3b488cb282058e9be3;hpb=3e5f5165063b57f09aadc43e5e549cc9673e1fa3 diff --git a/src/stripper b/src/stripper index 15fa308faf..f121d35919 100755 --- a/src/stripper +++ b/src/stripper @@ -1,10 +1,32 @@ -#!/bin/bash +#!/usr/bin/env bash + +dirs="" +excludes="/dev /proc /sys /run" + +while [ $# -gt 0 ]; do + case "${1}" in + --exclude=*) + excludes="${excludes} ${1#*=}" + ;; + *) + dirs="${dirs} ${1}" + ;; + esac + shift +done function _strip() { local file=${1} - local cmd="${STRIP-strip}" + local exclude l + for exclude in ${excludes}; do + l=${#exclude} + if [ "${file:0:${l}}" = "${exclude}" ]; then + return 0 + fi + done + case "$(file -bi ${file})" in application/x-sharedlib*|application/x-archive*) cmd="${cmd} --strip-debug --remove-section=.comment --remove-section=.note" @@ -18,18 +40,18 @@ function _strip() { ${cmd} ${file} } -for dir in $@; do +for dir in ${dirs}; do # Strip shared objects. find ${dir} -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \ - | file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' | + | file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped.*/\1/p' | while read file; do - _strip ${file} - done + _strip ${file} || exit $? + done || exit $? # Strip static archives. find ${dir} -name \*.a -a -exec file {} \; \ | grep 'current ar archive' | sed -n -e 's/^\(.*\):[ ]*current ar archive/\1/p' | while read file; do - _strip ${file} - done + _strip ${file} || exit $? + done || exit $? done