| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #! /bin/sh
- # depcomp - compile a program generating dependencies as side-effects
- # Copyright 1999, 2000 Free Software Foundation, Inc.
- if test -z "$depmode" || test -z "$source" || test -z "$object"; then
- echo "depcomp: Variables source, object and depmode must be set" 1>&2
- exit 1
- fi
- if test -z "$depfile"; then
- base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
- dir=`echo "$object" | sed 's,/.*$,/,'`
- if test "$dir" = "$object"; then
- dir=
- fi
- depfile="$dir.deps/$base"
- fi
- tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
- rm -f "$tmpdepfile"
- # Some modes work just like other modes, but use different flags. We
- # parameterize here, but still list the modes in the big case below,
- # to make depend.m4 easier to write. Note that we *cannot* use a case
- # here, because this file can only contain one case statement.
- case "$depmode" in
- gcc3)
- ## gcc 3 implements dependency tracking that does exactly what
- ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
- ## it if -MD -MP comes after the -MF stuff. Hmm.
- if test -z "$MM"; then
- "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
- else
- "$@" -MM "$object" -MD -MP -MF "$tmpdepfile"
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- mv "$tmpdepfile" "$depfile"
- ;;
- gcc)
- ## There are various ways to get dependency output from gcc. Here's
- ## why we pick this rather obscure method:
- ## - Don't want to use -MD because we'd like the dependencies to end
- ## up in a subdir. Having to rename by hand is ugly.
- ## (We might end up doing this anyway to support other compilers.)
- ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
- ## -MM, not -M (despite what the docs say).
- ## - Using -M directly means running the compiler twice (even worse
- ## than renaming).
- if test -z "$gccflag"; then
- gccflag=-MD,
- fi
- "$@" -Wp,"$gccflag$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
- ## The second -e expression handles DOS-style file names with drive letters.
- sed -e 's/^[^:]*: / /' \
- -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
- ## This next piece of magic avoids the `deleted header file' problem.
- ## The problem is that when a header file which appears in a .P file
- ## is deleted, the dependency causes make to die (because there is
- ## typically no way to rebuild the header). We avoid this by adding
- ## dummy dependencies for each header file. Too bad gcc doesn't do
- ## this for us directly.
- tr ' ' '
- ' < "$tmpdepfile" |
- ## Some versions of gcc put a space before the `:'. On the theory
- ## that the space means something, we add a space to the output as
- ## well.
- ## Some versions of the HPUX 10.20 sed can't process this invocation
- ## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
- #nosideeffect)
- # This comment above is used by automake to tell side-effect
- # dependency tracking mechanisms from slower ones.
- none)
- exec "$@"
- ;;
- *)
- echo "Unknown depmode $depmode" 1>&2
- exit 1
- ;;
- esac
- exit 0
|