#!/bin/bash
-shopt -s extglob
+set -e
hpp=$1
object=$2
name=$3
sed=$4
-otool=$5
-lipo=$6
-nm=$7
-shift 7
+lipo=$5
+nm=$6
+otool=$7
-#shift 1
-#set /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -I/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk/usr/include "$@"
+exec >"${hpp}"
-"$@"
+detailed=$("${lipo}" -detailed_info "${object}")
-detailed=$(lipo -detailed_info "${object}")
-
-{
+regex=$'\nNon-fat file: .* is architecture: (.*)'
+if [[ ${detailed} =~ ${regex} ]]; then
+ archs=(${BASH_REMATCH[1]})
+ unset detailed
+else
+ archs=($(echo "${detailed}" | "${sed}" -e '/^architecture / { s/^architecture //; p; }; d;'))
+fi
echo '#include "Trampoline.hpp"'
-for arch in $(echo "${detailed}" | "${sed}" -e '/^architecture / { s/^architecture //; p; }; d;'); do
- offset=$(echo "${detailed}" | "${sed}" -e '
- /^architecture / { x; s/.*/0/; x; };
- /^architecture '${arch}'$/ { x; s/.*/1/; x; };
- x; /^1$/ { x; /^ *offset / { s/^ *offset //; p; }; x; }; x;
- d;
- ')
+for arch in "${archs[@]}"; do
+ if [[ "${detailed+@}" ]]; then
+ offset=$(echo "${detailed}" | "${sed}" -e '
+ /^architecture / { x; s/.*/0/; x; };
+ /^architecture '${arch}'$/ { x; s/.*/1/; x; };
+ x; /^1$/ { x; /^ *offset / { s/^ *offset //; p; }; x; }; x;
+ d;
+ ')
+ else
+ offset=0
+ fi
file=($("${otool}" -arch "${arch}" -l "${object}" | "${sed}" -e '
x; /^1$/ { x;
x; }; x;
/^ *cmd LC_SEGMENT/ { x; s/.*/1/; x; };
-
+
d;
'))
s@^ @// @;
s/\(....\)/ \1/g;
s@^ // @//@;
- s/ *$//;
+ s/ *$/,/;
};
/^[0-7]/ {
echo
echo "/*"
- "${otool}" -vVt -arch "${arch}" "${object}"
+ "${otool}" -arch "${arch}" -vVt "${object}"
echo "*/"
echo
echo " sizeof(${name}_${arch}_data_),"
echo " ${name}_${arch}_entry_,"
echo "};"
-done
-
-} >"${hpp}"
-#rm -f "${object}"
+done