X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=cross-compile%2Fandroid%2Ffix-libraries.sh;fp=cross-compile%2Fandroid%2Ffix-libraries.sh;h=8d149402b83f75df0f680e6a27c24ca7f9d35199;hb=aef0361e598870a8e2a16ff568efbae3e1ad20b9;hp=0000000000000000000000000000000000000000;hpb=b03a5e4895bf6bd0ae8634c139276a67df28f728;p=sigrok-util.git diff --git a/cross-compile/android/fix-libraries.sh b/cross-compile/android/fix-libraries.sh new file mode 100755 index 0000000..8d14940 --- /dev/null +++ b/cross-compile/android/fix-libraries.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +set -e +tmpdir=/tmp/fixlib$$ +trap 'rm -rf "$tmpdir"' 0 1 2 3 15 +mkdir -p "$tmpdir" + +if [ $# -lt 3 ]; then + echo >&2 "Usage: $0 srclib destlib library ..." + exit 1 +fi + +: ${READELF=readelf} + +srclib="$1" +destlib="$2" +shift +shift +rm -f "$tmpdir"/todo +touch "$tmpdir"/todo +for lib; do + echo "$lib" >> "$tmpdir"/todo +done + +process() +{ + libname="$1" + libfile="$destlib"/"$libname" + if [ ! -f "$libfile" ]; then + echo >&2 "$libfile not found" + exit 1 + fi + "$READELF" -d "$libfile" | awk '$1=="0x00000001" {print $NF}' | tr -d '][' | grep '\.so\.' | sort >> "$tmpdir"/worklist +} + +install() +{ + libname="$1" + libfile=`echo "$libname" | sed -e 's/\.so\..*/.so/'` + cp "$srclib"/"$libname" "$destlib"/"$libfile" + echo "$libfile" >> "$tmpdir"/worklist + for deplib in `"$READELF" -d "$destlib"/"$libfile" | awk '$1=="0x00000001" {print $NF}' | tr -d '][' | grep '\.so\.' | sort`; do + echo "$deplib $libname" >> "$tmpdir"/liblist + done +} + +rm -f "$tmpdir"/liblist +touch "$tmpdir"/liblist +sort "$tmpdir"/todo > "$tmpdir"/processed +while [ -s "$tmpdir"/todo ]; do + rm -f "$tmpdir"/worklist + touch "$tmpdir"/worklist + cat "$tmpdir"/todo | while read lib; do + if [ ! -z "$lib" ]; then + process "$lib" + fi + done + sort "$tmpdir"/worklist | uniq > "$tmpdir"/todo.tmp + comm -13 "$tmpdir"/processed "$tmpdir"/todo.tmp > "$tmpdir"/todo + sort -m "$tmpdir"/processed "$tmpdir"/todo | uniq > "$tmpdir"/processed.tmp + mv "$tmpdir"/processed.tmp "$tmpdir"/processed + rm -f "$tmpdir"/worklist + touch "$tmpdir"/worklist + cat "$tmpdir"/todo | while read lib; do + if [ ! -z "$lib" ]; then + install "$lib" + fi + done + mv "$tmpdir"/worklist "$tmpdir"/todo +done +tsort "$tmpdir"/liblist