X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=src%2Fstripper;h=f121d35919fb967c6469c54b32d4f791ea631480;hp=199d17f6a0ced2d67695c87a478a596ab2d1d6cc;hb=8117fff863431671939d5aa1c11c0a84e56298a2;hpb=db95c207362bbf475c4756f1f3b352cabe75c5e8 diff --git a/src/stripper b/src/stripper index 199d17f6a0..f121d35919 100755 --- a/src/stripper +++ b/src/stripper @@ -1,12 +1,34 @@ -#!/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-sharedlib*|application/x-archive*) cmd="${cmd} --strip-debug --remove-section=.comment --remove-section=.note" ;; *) @@ -18,10 +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} || 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