]> sigrok.org Git - sigrok-util.git/blame - cross-compile/android/fix-libraries.sh
sigrok-cross-android: Set rpath to gnustl_shared for boost libraries
[sigrok-util.git] / cross-compile / android / fix-libraries.sh
CommitLineData
aef0361e
MC
1#!/bin/sh
2
3set -e
4tmpdir=/tmp/fixlib$$
5trap 'rm -rf "$tmpdir"' 0 1 2 3 15
6mkdir -p "$tmpdir"
7
8if [ $# -lt 3 ]; then
9 echo >&2 "Usage: $0 srclib destlib library ..."
10 exit 1
11fi
12
13: ${READELF=readelf}
14
15srclib="$1"
16destlib="$2"
17shift
18shift
19rm -f "$tmpdir"/todo
20touch "$tmpdir"/todo
21for lib; do
22 echo "$lib" >> "$tmpdir"/todo
23done
24
25process()
26{
27 libname="$1"
28 libfile="$destlib"/"$libname"
29 if [ ! -f "$libfile" ]; then
30 echo >&2 "$libfile not found"
31 exit 1
32 fi
33 "$READELF" -d "$libfile" | awk '$1=="0x00000001" {print $NF}' | tr -d '][' | grep '\.so\.' | sort >> "$tmpdir"/worklist
34}
35
36install()
37{
38 libname="$1"
39 libfile=`echo "$libname" | sed -e 's/\.so\..*/.so/'`
40 cp "$srclib"/"$libname" "$destlib"/"$libfile"
41 echo "$libfile" >> "$tmpdir"/worklist
42 for deplib in `"$READELF" -d "$destlib"/"$libfile" | awk '$1=="0x00000001" {print $NF}' | tr -d '][' | grep '\.so\.' | sort`; do
43 echo "$deplib $libname" >> "$tmpdir"/liblist
44 done
45}
46
47rm -f "$tmpdir"/liblist
48touch "$tmpdir"/liblist
49sort "$tmpdir"/todo > "$tmpdir"/processed
50while [ -s "$tmpdir"/todo ]; do
51 rm -f "$tmpdir"/worklist
52 touch "$tmpdir"/worklist
53 cat "$tmpdir"/todo | while read lib; do
54 if [ ! -z "$lib" ]; then
55 process "$lib"
56 fi
57 done
58 sort "$tmpdir"/worklist | uniq > "$tmpdir"/todo.tmp
59 comm -13 "$tmpdir"/processed "$tmpdir"/todo.tmp > "$tmpdir"/todo
60 sort -m "$tmpdir"/processed "$tmpdir"/todo | uniq > "$tmpdir"/processed.tmp
61 mv "$tmpdir"/processed.tmp "$tmpdir"/processed
62 rm -f "$tmpdir"/worklist
63 touch "$tmpdir"/worklist
64 cat "$tmpdir"/todo | while read lib; do
65 if [ ! -z "$lib" ]; then
66 install "$lib"
67 fi
68 done
69 mv "$tmpdir"/worklist "$tmpdir"/todo
70done
71tsort "$tmpdir"/liblist