mpd/bs/mkdep.sh

59 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
# $d must have a trailing slash $(dir file) in GNU Make
f="$1"
d="$2"
x="$3"
if test -z "$O"; then
echo '$O= not defined or not a directory' >&2
exit 1
fi
test -d "$O/$d" || "$SHELL" ./bs/mkdir_p.sh "$O/$d"
t="$O/t.$$.d"
depmode=
out=
if test -e "$O/depmode"; then
. "$O/depmode"
fi
case "$depmode" in
mm)
$CC -MM $CPPFLAGS $CFLAGS "$f" > "$t" 2>/dev/null
;;
m)
$CC -M $CPPFLAGS $CFLAGS "$f" > "$t" 2>/dev/null
;;
none)
echo "$O/$f: $f $HDR_DEP_HACK" | sed -e 's#c:#o:#' > "$x"+
;;
*)
# detect our depmode
# -MM is gcc-specific...
$CC -MM $CPPFLAGS $CFLAGS "$f" > "$t" 2>/dev/null
if test $? -eq 0; then
depmode=mm
else
# ok, maybe -M is supported...
$CC -M $CPPFLAGS $CFLAGS "$f" \
> "$t" 2>/dev/null
if test $? -eq 0; then
depmode=m
else
depmode=none
# don't guess, fudge the dependencies by using
# all headers
echo "$O/$f: $f $HDR_DEP_HACK" \
| sed -e 's#c:#o:#' > "$x"+
fi
fi
echo "depmode=$depmode" > "$O/depmode"
;;
esac
case "$depmode" in
m|mm)
sed -e 's#.c$#.o#' -e "1s#^#$O/$d&#" < "$t" > "$x"+
;;
esac
rm -f "$t"
exec mv "$x"+ "$x"