59 lines
1.1 KiB
Bash
59 lines
1.1 KiB
Bash
|
#!/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"
|