#!/bin/sh
realpath()
{
local FILE="$1"
local PARENT=$(dirname "$FILE")
local BASE=$(basename "$FILE")
pushd "$PARENT" >/dev/null 2>&1 || return 0
local DIR=$(pwd -P)
popd >/dev/null
if [ "$DIR" == "/" ]; then
echo "/$BASE"
else
echo "$DIR/$BASE"
fi
return 1
}
scriptPath=$(realpath "$0")
scriptRoot=$(dirname "$scriptPath")
migcomPath=$(realpath "${scriptRoot}/../libexec/migcom")
if [ -n "${SDKROOT}" ]; then
sdkRoot="${SDKROOT}";
fi
if [ -z "${MIGCC}" ]; then
xcrunPath="/usr/bin/xcrun"
if [ -x "${xcrunPath}" ]; then
MIGCC=`"${xcrunPath}" -sdk "$sdkRoot" -find cc`
else
MIGCC=$(realpath "${scriptRoot}/cc")
fi
fi
C=${MIGCC}
M=${MIGCOM-${migcomPath}}
cppflags="-D__MACH30__"
files=
arch=`/usr/bin/arch`
WORKTMP=`/usr/bin/mktemp -d "${TMPDIR:-/tmp}/mig.XXXXXX"`
if [ $? -ne 0 ]; then
echo "Failure creating temporary work directory: ${WORKTMP}"
echo "Exiting..."
exit 1
fi
until [ $do
case "$1" in
-[dtqkKQvVtTrRsSlLxX] ) migflags=( "${migflags[@]}" "$1" ); shift;;
-i ) sawI=1; migflags=( "${migflags[@]}" "$1" "$2" ); shift; shift;;
-user ) user="$2"; if [ ! "${sawI-}" ]; then migflags=( "${migflags[@]}" "$1" "$2" ); fi; shift; shift;;
-server ) server="$2"; migflags=( "${migflags[@]}" "$1" "$2" ); shift; shift;;
-header ) header="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;;
-sheader ) sheader="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;;
-iheader ) iheader="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;;
-dheader ) dheader="$2"; migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;;
-arch ) arch="$2"; shift; shift;;
-maxonstack ) migflags=( "${migflags[@]}" "$1" "$2"); shift; shift;;
-split ) migflags=( "${migflags[@]}" "$1" ); shift;;
-MD ) sawMD=1; cppflags="$cppflags $1"; shift;;
-cpp) shift; shift;;
-cc) C="$2"; shift; shift;;
-migcom) M="$2"; shift; shift;;
-isysroot) sdkRoot=$(realpath "$2"); shift; shift;;
-* ) cppflags="$cppflags $1"; shift;;
* ) break;;
esac
done
until [ $do
case "$1" in
-[dtqkKQvVtTrRsSlLxX] ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;;
-i ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-user ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-server ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-header ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-sheader ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-iheader ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-dheader ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-arch ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift ; shift; continue;;
-maxonstack ) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-split ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;;
-MD ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;;
-cpp) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-cc) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-migcom) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-isysroot) echo "warning: option \"$1 $2\" after filename(s) ignored"; shift; shift; continue;;
-* ) echo "warning: option \"$1\" after filename(s) ignored"; shift; continue;;
* ) file="$1"; shift;;
esac
base="$(basename "${file}" .defs)"
temp="${WORKTMP}/${base}.$$"
sourcedir="$(dirname "${file}")"
if [ -n "${sdkRoot}" ]
then
iSysRootParm=( "-isysroot" "${sdkRoot}" )
fi
rm -f "${temp}.c" "${temp}.d"
(echo ' "$C" -E -arch ${arch} ${cppflags} -I "${sourcedir}" "${iSysRootParm[@]}" "${temp}.c" | "$M" "${migflags[@]}" || rm -df "${temp}.c" "${temp}.d" "${WORKTMP}" | exit
if [ "${sawMD}" -a -f "${temp}.d" ]
then
deps=
s=
rheader="${header-${base}.h}"
if [ "${rheader}" != /dev/null ]; then
deps="${deps}${s}${rheader}"; s=" "
fi
ruser="${user-${base}User.c}"
if [ "${ruser}" != /dev/null ]; then
deps="${deps}${s}${ruser}"; s=" "
fi
rserver="${server-${base}Server.c}"
if [ "${rserver}" != /dev/null ]; then
deps="${deps}${s}${rserver}"; s=" "
fi
rsheader="${sheader-/dev/null}"
if [ "${rsheader}" != /dev/null ]; then
deps="${deps}${s}${rsheader}"; s=" "
fi
riheader="${iheader-/dev/null}"
if [ "${riheader}" != /dev/null ]; then
deps="${deps}${s}${riheader}"; s=" "
fi
rdheader="${dheader-/dev/null}"
if [ "${rdheader}" != /dev/null ]; then
deps="${deps}${s}${rdheader}"; s=" "
fi
for target in "${deps}"
do
sed -e 's;^'"${temp}"'.o[ ]*:;'"${target}"':;' \
-e 's;: '"${temp}"'.c;: '"$file"';' \
< "${temp}.d" > "${target}.d"
done
rm -f "${temp}.d"
fi
rm -f "${temp}.c"
done
/bin/rmdir "${WORKTMP}"
exit 0