aboutsummaryrefslogblamecommitdiffstats
path: root/bs/mkdep.sh
blob: 019b4bc4c00e7decdbeb11570d3a9710911b6cf2 (plain) (tree)

























































                                                                      
#!/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"