#! /bin/sh# depcomp - compile a program generating dependencies as side-effects# Copyright 1999, 2000 Free Software Foundation, Inc.# This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2, or (at your option)# any later version.# This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.# You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA# 02111-1307, USA.# As a special exception to the GNU General Public License, if you# distribute this file as part of a program that contains a# configuration script generated by Autoconf, you may include it under# the same distribution terms that you use for the rest of that program.# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.if test -z "$depmode" || test -z "$source" || test -z "$object"; thenecho "depcomp: Variables source, object and depmode must be set" 1>&2exit 1fi# `libtool' can also be set to `yes' or `no'.depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}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.if test "$depmode" = hp; then# HP compiler uses -M and no extra arg.gccflag=-Mdepmode=gccfiif test "$depmode" = dashXmstdout; then# This is just like dashmstdout with a different argument.dashmflag=-xMdepmode=dashmstdoutficase "$depmode" ingcc3)## 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."$@" -MT "$object" -MD -MP -MF "$tmpdepfile"stat=$?if test $stat -eq 0; then :elserm -f "$tmpdepfile"exit $statfimv "$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"; thengccflag=-MD,fi"$@" -Wp,"$gccflag$tmpdepfile"stat=$?if test $stat -eq 0; then :elserm -f "$tmpdepfile"exit $statfirm -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";;hp)# This case exists only to let depend.m4 do its work. It works by# looking at the text of this script. This case will never be run,# since it is checked for above.exit 1;;sgi)if test "$libtool" = yes; then"$@" "-Wp,-MDupdate,$tmpdepfile"else"$@" -MDupdate "$tmpdepfile"fistat=$?if test $stat -eq 0; then :elserm -f "$tmpdepfile"exit $statfirm -f "$depfile"if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other filesecho "$object : \\" > "$depfile"# Clip off the initial element (the dependent). Don't try to be# clever and replace this with sed code, as IRIX sed won't handle# lines with more than a fixed number of characters (4096 in# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;# the IRIX cc adds comments like `#:fec' to the end of the# dependency line.tr ' ' '' < "$tmpdepfile" \| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \tr '' ' ' >> $depfileecho >> $depfile# The second pass generates a dummy entry for each header file.tr ' ' '' < "$tmpdepfile" \| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \>> $depfileelse# The sourcefile does not contain any dependencies, so just# store a dummy comment line, to avoid errors with the Makefile# "include basename.Plo" scheme.echo "#dummy" > "$depfile"firm -f "$tmpdepfile";;aix)# The C for AIX Compiler uses -M and outputs the dependencies# in a .u file. This file always lives in the current directory.# Also, the AIX compiler puts `$object:' at the start of each line;# $object doesn't have directory information.stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`tmpdepfile="$stripped.u"outname="$stripped.o"if test "$libtool" = yes; then"$@" -Wc,-Melse"$@" -Mfistat=$?if test $stat -eq 0; then :elserm -f "$tmpdepfile"exit $statfiif test -f "$tmpdepfile"; then# Each line is of the form `foo.o: dependent.h'.# Do two passes, one to just change these to# `$object: dependent.h' and one to simply `dependent.h:'.sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"else# The sourcefile does not contain any dependencies, so just# store a dummy comment line, to avoid errors with the Makefile# "include basename.Plo" scheme.echo "#dummy" > "$depfile"firm -f "$tmpdepfile";;icc)# Must come before tru64.# Intel's C compiler understands `-MD -MF file'. However# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c# will fill foo.d with something like# foo.o: sub/foo.c# foo.o: sub/foo.h# which is wrong. We want:# sub/foo.o: sub/foo.c# sub/foo.o: sub/foo.h# sub/foo.c:# sub/foo.h:"$@" -MD -MF "$tmpdepfile"stat=$?if test $stat -eq 0; then :elserm -f "$tmpdepfile"exit $statfirm -f "$depfile"# Each line is of the form `foo.o: dependent.h'.# Do two passes, one to just change these to# `$object: dependent.h' and one to simply `dependent.h:'.sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"rm -f "$tmpdepfile";;tru64)# The Tru64 AIX compiler uses -MD to generate dependencies as a side# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put# dependencies in `foo.d' instead, so we check for that too.# Subdirectories are respected.tmpdepfile1="$object.d"tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'`if test "$libtool" = yes; then"$@" -Wc,-MDelse"$@" -MDfistat=$?if test $stat -eq 0; then :elserm -f "$tmpdepfile1" "$tmpdepfile2"exit $statfiif test -f "$tmpdepfile1"; thentmpdepfile="$tmpdepfile1"elsetmpdepfile="$tmpdepfile2"fiif test -f "$tmpdepfile"; thensed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"# That's a space and a tab in the [].sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"elseecho "#dummy" > "$depfile"firm -f "$tmpdepfile";;#nosideeffect)# This comment above is used by automake to tell side-effect# dependency tracking mechanisms from slower ones.dashmstdout)# Important note: in order to support this mode, a compiler *must*# always write the proprocessed file to stdout, regardless of -o,# because we must use -o when running libtool.test -z "$dashmflag" && dashmflag=-M( IFS=" "case " $* " in*" --mode=compile "*) # this is libtool, let us make it quietfor argdo # cycle over the argumentscase "$arg" in"--mode=compile")# insert --quiet before "--mode=compile"set fnord "$@" --quietshift # fnord;;esacset fnord "$@" "$arg"shift # fnordshift # "$arg"done;;esac"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile") &proc=$!"$@"stat=$?wait "$proc"if test "$stat" != 0; then exit $stat; firm -f "$depfile"cat < "$tmpdepfile" > "$depfile"tr ' ' '' < "$tmpdepfile" | \## 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";;dashXmstdout)# This case only exists to satisfy depend.m4. It is never actually# run, as this mode is specially recognized in the preamble.exit 1;;makedepend)# X makedepend(shiftcleared=nofor arg in "$@"; docase $cleared in no)set ""; shiftcleared=yesesaccase "$arg" in-D*|-I*)set fnord "$@" "$arg"; shift;;-*);;*)set fnord "$@" "$arg"; shift;;esacdoneobj_suffix="`echo $object | sed 's/^.*\././'`"touch "$tmpdepfile"${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@") &proc=$!"$@"stat=$?wait "$proc"if test "$stat" != 0; then exit $stat; firm -f "$depfile"cat < "$tmpdepfile" > "$depfile"tail +3 "$tmpdepfile" | tr ' ' '' | \## 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" "$tmpdepfile".bak;;cpp)# Important note: in order to support this mode, a compiler *must*# always write the proprocessed file to stdout, regardless of -o,# because we must use -o when running libtool.( IFS=" "case " $* " in*" --mode=compile "*)for argdo # cycle over the argumentscase $arg in"--mode=compile")# insert --quiet before "--mode=compile"set fnord "$@" --quietshift # fnord;;esacset fnord "$@" "$arg"shift # fnordshift # "$arg"done;;esac"$@" -E |sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |sed '$ s: \\$::' > "$tmpdepfile") &proc=$!"$@"stat=$?wait "$proc"if test "$stat" != 0; then exit $stat; firm -f "$depfile"echo "$object : \\" > "$depfile"cat < "$tmpdepfile" >> "$depfile"sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"rm -f "$tmpdepfile";;msvisualcpp)# Important note: in order to support this mode, a compiler *must*# always write the proprocessed file to stdout, regardless of -o,# because we must use -o when running libtool.( IFS=" "case " $* " in*" --mode=compile "*)for argdo # cycle over the argumentscase $arg in"--mode=compile")# insert --quiet before "--mode=compile"set fnord "$@" --quietshift # fnord;;esacset fnord "$@" "$arg"shift # fnordshift # "$arg"done;;esac"$@" -E |sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile") &proc=$!"$@"stat=$?wait "$proc"if test "$stat" != 0; then exit $stat; firm -f "$depfile"echo "$object : \\" > "$depfile". "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"echo " " >> "$depfile". "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"rm -f "$tmpdepfile";;none)exec "$@";;*)echo "Unknown depmode $depmode" 1>&2exit 1;;esacexit 0