]>
Commit | Line | Data |
---|---|---|
6c4cc7ea | 1 | #!/usr/bin/env bash |
bc259fdc MT |
2 | |
3 | dirs="" | |
4 | excludes="/dev /proc /sys /run" | |
5 | ||
6 | while [ $# -gt 0 ]; do | |
7 | case "${1}" in | |
8 | --exclude=*) | |
9 | excludes="${excludes} ${1#*=}" | |
10 | ;; | |
11 | *) | |
12 | dirs="${dirs} ${1}" | |
13 | ;; | |
14 | esac | |
15 | shift | |
16 | done | |
fc44fa1f MT |
17 | |
18 | function _strip() { | |
19 | local file=${1} | |
25d50589 | 20 | local strip="${STRIP-strip}" |
fc44fa1f | 21 | |
bc259fdc MT |
22 | local exclude l |
23 | for exclude in ${excludes}; do | |
24 | l=${#exclude} | |
25 | if [ "${file:0:${l}}" = "${exclude}" ]; then | |
26 | return 0 | |
27 | fi | |
28 | done | |
29 | ||
37ef9fe4 MT |
30 | # Fetch any capabilities |
31 | local capabilities="$(getfattr --no-dereference --name="security.capability" \ | |
131cfcf2 | 32 | --absolute-names --dump "${file}" 2>/dev/null)" |
37ef9fe4 | 33 | |
25d50589 MT |
34 | local cmd=( "${strip}" ) |
35 | ||
fc44fa1f | 36 | case "$(file -bi ${file})" in |
25d50589 MT |
37 | application/x-archive*) |
38 | cmd+=( "--strip-debug" "--remove-section=.comment" "--remove-section=.note" ) | |
fc44fa1f MT |
39 | ;; |
40 | *) | |
25d50589 | 41 | cmd+=( "--strip-all" ) |
fc44fa1f MT |
42 | ;; |
43 | esac | |
44 | ||
45 | echo "Stripping ${file}..." | |
25d50589 | 46 | ${cmd[*]} ${file} |
37ef9fe4 MT |
47 | |
48 | # Restore capabilities | |
49 | if [ -n "${capabilities}" ]; then | |
50 | setfattr --no-dereference --restore=<(echo "${capabilities}") | |
51 | fi | |
fc44fa1f MT |
52 | } |
53 | ||
bc259fdc | 54 | for dir in ${dirs}; do |
d9bb5239 | 55 | # Strip shared objects. |
fc44fa1f | 56 | find ${dir} -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \ |
2ee623a8 | 57 | | file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped.*/\1/p' | |
fc44fa1f | 58 | while read file; do |
b98ca5fa MT |
59 | _strip ${file} || exit $? |
60 | done || exit $? | |
d9bb5239 MT |
61 | |
62 | # Strip static archives. | |
63 | find ${dir} -name \*.a -a -exec file {} \; \ | |
64 | | grep 'current ar archive' | sed -n -e 's/^\(.*\):[ ]*current ar archive/\1/p' | | |
65 | while read file; do | |
b98ca5fa MT |
66 | _strip ${file} || exit $? |
67 | done || exit $? | |
fc44fa1f | 68 | done |