]> sigrok.org Git - sigrok-util.git/blobdiff - cross-compile/android/fix-libraries.sh
sigrok-cross-android: PulseView now starts
[sigrok-util.git] / cross-compile / android / fix-libraries.sh
diff --git a/cross-compile/android/fix-libraries.sh b/cross-compile/android/fix-libraries.sh
new file mode 100755 (executable)
index 0000000..8d14940
--- /dev/null
@@ -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