depcomp revision fffe5102
167f05d30Smrg#! /bin/sh 267f05d30Smrg# depcomp - compile a program generating dependencies as side-effects 3fffe5102Smrg 4fffe5102Smrgscriptversion=2009-04-28.21; # UTC 5fffe5102Smrg 6fffe5102Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7fffe5102Smrg# Software Foundation, Inc. 867f05d30Smrg 967f05d30Smrg# This program is free software; you can redistribute it and/or modify 1067f05d30Smrg# it under the terms of the GNU General Public License as published by 1167f05d30Smrg# the Free Software Foundation; either version 2, or (at your option) 1267f05d30Smrg# any later version. 1367f05d30Smrg 1467f05d30Smrg# This program is distributed in the hope that it will be useful, 1567f05d30Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1667f05d30Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1767f05d30Smrg# GNU General Public License for more details. 1867f05d30Smrg 1967f05d30Smrg# You should have received a copy of the GNU General Public License 20fffe5102Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2167f05d30Smrg 2267f05d30Smrg# As a special exception to the GNU General Public License, if you 2367f05d30Smrg# distribute this file as part of a program that contains a 2467f05d30Smrg# configuration script generated by Autoconf, you may include it under 2567f05d30Smrg# the same distribution terms that you use for the rest of that program. 2667f05d30Smrg 2767f05d30Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2867f05d30Smrg 29fffe5102Smrgcase $1 in 30fffe5102Smrg '') 31fffe5102Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32fffe5102Smrg exit 1; 33fffe5102Smrg ;; 34fffe5102Smrg -h | --h*) 35fffe5102Smrg cat <<\EOF 36fffe5102SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37fffe5102Smrg 38fffe5102SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39fffe5102Smrgas side-effects. 40fffe5102Smrg 41fffe5102SmrgEnvironment variables: 42fffe5102Smrg depmode Dependency tracking mode. 43fffe5102Smrg source Source file read by `PROGRAMS ARGS'. 44fffe5102Smrg object Object file output by `PROGRAMS ARGS'. 45fffe5102Smrg DEPDIR directory where to store dependencies. 46fffe5102Smrg depfile Dependency file to output. 47fffe5102Smrg tmpdepfile Temporary file to use when outputing dependencies. 48fffe5102Smrg libtool Whether libtool is used (yes/no). 49fffe5102Smrg 50fffe5102SmrgReport bugs to <bug-automake@gnu.org>. 51fffe5102SmrgEOF 52fffe5102Smrg exit $? 53fffe5102Smrg ;; 54fffe5102Smrg -v | --v*) 55fffe5102Smrg echo "depcomp $scriptversion" 56fffe5102Smrg exit $? 57fffe5102Smrg ;; 58fffe5102Smrgesac 59fffe5102Smrg 6067f05d30Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6167f05d30Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6267f05d30Smrg exit 1 6367f05d30Smrgfi 6467f05d30Smrg 65fffe5102Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66fffe5102Smrgdepfile=${depfile-`echo "$object" | 67fffe5102Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6867f05d30Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6967f05d30Smrg 7067f05d30Smrgrm -f "$tmpdepfile" 7167f05d30Smrg 7267f05d30Smrg# Some modes work just like other modes, but use different flags. We 7367f05d30Smrg# parameterize here, but still list the modes in the big case below, 7467f05d30Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7567f05d30Smrg# here, because this file can only contain one case statement. 7667f05d30Smrgif test "$depmode" = hp; then 7767f05d30Smrg # HP compiler uses -M and no extra arg. 7867f05d30Smrg gccflag=-M 7967f05d30Smrg depmode=gcc 8067f05d30Smrgfi 8167f05d30Smrg 8267f05d30Smrgif test "$depmode" = dashXmstdout; then 8367f05d30Smrg # This is just like dashmstdout with a different argument. 8467f05d30Smrg dashmflag=-xM 8567f05d30Smrg depmode=dashmstdout 8667f05d30Smrgfi 8767f05d30Smrg 88fffe5102Smrgcygpath_u="cygpath -u -f -" 89fffe5102Smrgif test "$depmode" = msvcmsys; then 90fffe5102Smrg # This is just like msvisualcpp but w/o cygpath translation. 91fffe5102Smrg # Just convert the backslash-escaped backslashes to single forward 92fffe5102Smrg # slashes to satisfy depend.m4 93fffe5102Smrg cygpath_u="sed s,\\\\\\\\,/,g" 94fffe5102Smrg depmode=msvisualcpp 95fffe5102Smrgfi 96fffe5102Smrg 9767f05d30Smrgcase "$depmode" in 9867f05d30Smrggcc3) 9967f05d30Smrg## gcc 3 implements dependency tracking that does exactly what 10067f05d30Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10167f05d30Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102fffe5102Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103fffe5102Smrg## the command line argument order; so add the flags where they 104fffe5102Smrg## appear in depend2.am. Note that the slowdown incurred here 105fffe5102Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106fffe5102Smrg for arg 107fffe5102Smrg do 108fffe5102Smrg case $arg in 109fffe5102Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110fffe5102Smrg *) set fnord "$@" "$arg" ;; 111fffe5102Smrg esac 112fffe5102Smrg shift # fnord 113fffe5102Smrg shift # $arg 114fffe5102Smrg done 115fffe5102Smrg "$@" 11667f05d30Smrg stat=$? 11767f05d30Smrg if test $stat -eq 0; then : 11867f05d30Smrg else 11967f05d30Smrg rm -f "$tmpdepfile" 12067f05d30Smrg exit $stat 12167f05d30Smrg fi 12267f05d30Smrg mv "$tmpdepfile" "$depfile" 12367f05d30Smrg ;; 12467f05d30Smrg 12567f05d30Smrggcc) 12667f05d30Smrg## There are various ways to get dependency output from gcc. Here's 12767f05d30Smrg## why we pick this rather obscure method: 12867f05d30Smrg## - Don't want to use -MD because we'd like the dependencies to end 12967f05d30Smrg## up in a subdir. Having to rename by hand is ugly. 13067f05d30Smrg## (We might end up doing this anyway to support other compilers.) 13167f05d30Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 13267f05d30Smrg## -MM, not -M (despite what the docs say). 13367f05d30Smrg## - Using -M directly means running the compiler twice (even worse 13467f05d30Smrg## than renaming). 13567f05d30Smrg if test -z "$gccflag"; then 13667f05d30Smrg gccflag=-MD, 13767f05d30Smrg fi 13867f05d30Smrg "$@" -Wp,"$gccflag$tmpdepfile" 13967f05d30Smrg stat=$? 14067f05d30Smrg if test $stat -eq 0; then : 14167f05d30Smrg else 14267f05d30Smrg rm -f "$tmpdepfile" 14367f05d30Smrg exit $stat 14467f05d30Smrg fi 14567f05d30Smrg rm -f "$depfile" 14667f05d30Smrg echo "$object : \\" > "$depfile" 14767f05d30Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 14867f05d30Smrg## The second -e expression handles DOS-style file names with drive letters. 14967f05d30Smrg sed -e 's/^[^:]*: / /' \ 15067f05d30Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15167f05d30Smrg## This next piece of magic avoids the `deleted header file' problem. 15267f05d30Smrg## The problem is that when a header file which appears in a .P file 15367f05d30Smrg## is deleted, the dependency causes make to die (because there is 15467f05d30Smrg## typically no way to rebuild the header). We avoid this by adding 15567f05d30Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 15667f05d30Smrg## this for us directly. 15767f05d30Smrg tr ' ' ' 15867f05d30Smrg' < "$tmpdepfile" | 15967f05d30Smrg## Some versions of gcc put a space before the `:'. On the theory 16067f05d30Smrg## that the space means something, we add a space to the output as 16167f05d30Smrg## well. 16267f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 16367f05d30Smrg## correctly. Breaking it into two sed invocations is a workaround. 16467f05d30Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 16567f05d30Smrg rm -f "$tmpdepfile" 16667f05d30Smrg ;; 16767f05d30Smrg 16867f05d30Smrghp) 16967f05d30Smrg # This case exists only to let depend.m4 do its work. It works by 17067f05d30Smrg # looking at the text of this script. This case will never be run, 17167f05d30Smrg # since it is checked for above. 17267f05d30Smrg exit 1 17367f05d30Smrg ;; 17467f05d30Smrg 17567f05d30Smrgsgi) 17667f05d30Smrg if test "$libtool" = yes; then 17767f05d30Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 17867f05d30Smrg else 17967f05d30Smrg "$@" -MDupdate "$tmpdepfile" 18067f05d30Smrg fi 18167f05d30Smrg stat=$? 18267f05d30Smrg if test $stat -eq 0; then : 18367f05d30Smrg else 18467f05d30Smrg rm -f "$tmpdepfile" 18567f05d30Smrg exit $stat 18667f05d30Smrg fi 18767f05d30Smrg rm -f "$depfile" 18867f05d30Smrg 18967f05d30Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 19067f05d30Smrg echo "$object : \\" > "$depfile" 19167f05d30Smrg 19267f05d30Smrg # Clip off the initial element (the dependent). Don't try to be 19367f05d30Smrg # clever and replace this with sed code, as IRIX sed won't handle 19467f05d30Smrg # lines with more than a fixed number of characters (4096 in 19567f05d30Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 19667f05d30Smrg # the IRIX cc adds comments like `#:fec' to the end of the 19767f05d30Smrg # dependency line. 19867f05d30Smrg tr ' ' ' 19967f05d30Smrg' < "$tmpdepfile" \ 20067f05d30Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 20167f05d30Smrg tr ' 202fffe5102Smrg' ' ' >> "$depfile" 203fffe5102Smrg echo >> "$depfile" 20467f05d30Smrg 20567f05d30Smrg # The second pass generates a dummy entry for each header file. 20667f05d30Smrg tr ' ' ' 20767f05d30Smrg' < "$tmpdepfile" \ 20867f05d30Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209fffe5102Smrg >> "$depfile" 21067f05d30Smrg else 21167f05d30Smrg # The sourcefile does not contain any dependencies, so just 21267f05d30Smrg # store a dummy comment line, to avoid errors with the Makefile 21367f05d30Smrg # "include basename.Plo" scheme. 21467f05d30Smrg echo "#dummy" > "$depfile" 21567f05d30Smrg fi 21667f05d30Smrg rm -f "$tmpdepfile" 21767f05d30Smrg ;; 21867f05d30Smrg 21967f05d30Smrgaix) 22067f05d30Smrg # The C for AIX Compiler uses -M and outputs the dependencies 22167f05d30Smrg # in a .u file. In older versions, this file always lives in the 22267f05d30Smrg # current directory. Also, the AIX compiler puts `$object:' at the 22367f05d30Smrg # start of each line; $object doesn't have directory information. 22467f05d30Smrg # Version 6 uses the directory in both cases. 225fffe5102Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226fffe5102Smrg test "x$dir" = "x$object" && dir= 227fffe5102Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 22867f05d30Smrg if test "$libtool" = yes; then 229fffe5102Smrg tmpdepfile1=$dir$base.u 230fffe5102Smrg tmpdepfile2=$base.u 231fffe5102Smrg tmpdepfile3=$dir.libs/$base.u 23267f05d30Smrg "$@" -Wc,-M 23367f05d30Smrg else 234fffe5102Smrg tmpdepfile1=$dir$base.u 235fffe5102Smrg tmpdepfile2=$dir$base.u 236fffe5102Smrg tmpdepfile3=$dir$base.u 23767f05d30Smrg "$@" -M 23867f05d30Smrg fi 23967f05d30Smrg stat=$? 24067f05d30Smrg 24167f05d30Smrg if test $stat -eq 0; then : 24267f05d30Smrg else 243fffe5102Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24467f05d30Smrg exit $stat 24567f05d30Smrg fi 24667f05d30Smrg 247fffe5102Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248fffe5102Smrg do 249fffe5102Smrg test -f "$tmpdepfile" && break 250fffe5102Smrg done 25167f05d30Smrg if test -f "$tmpdepfile"; then 25267f05d30Smrg # Each line is of the form `foo.o: dependent.h'. 25367f05d30Smrg # Do two passes, one to just change these to 25467f05d30Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255fffe5102Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256fffe5102Smrg # That's a tab and a space in the []. 257fffe5102Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 25867f05d30Smrg else 25967f05d30Smrg # The sourcefile does not contain any dependencies, so just 26067f05d30Smrg # store a dummy comment line, to avoid errors with the Makefile 26167f05d30Smrg # "include basename.Plo" scheme. 26267f05d30Smrg echo "#dummy" > "$depfile" 26367f05d30Smrg fi 26467f05d30Smrg rm -f "$tmpdepfile" 26567f05d30Smrg ;; 26667f05d30Smrg 26767f05d30Smrgicc) 26867f05d30Smrg # Intel's C compiler understands `-MD -MF file'. However on 26967f05d30Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 27067f05d30Smrg # ICC 7.0 will fill foo.d with something like 27167f05d30Smrg # foo.o: sub/foo.c 27267f05d30Smrg # foo.o: sub/foo.h 27367f05d30Smrg # which is wrong. We want: 27467f05d30Smrg # sub/foo.o: sub/foo.c 27567f05d30Smrg # sub/foo.o: sub/foo.h 27667f05d30Smrg # sub/foo.c: 27767f05d30Smrg # sub/foo.h: 27867f05d30Smrg # ICC 7.1 will output 27967f05d30Smrg # foo.o: sub/foo.c sub/foo.h 28067f05d30Smrg # and will wrap long lines using \ : 28167f05d30Smrg # foo.o: sub/foo.c ... \ 28267f05d30Smrg # sub/foo.h ... \ 28367f05d30Smrg # ... 28467f05d30Smrg 28567f05d30Smrg "$@" -MD -MF "$tmpdepfile" 28667f05d30Smrg stat=$? 28767f05d30Smrg if test $stat -eq 0; then : 28867f05d30Smrg else 28967f05d30Smrg rm -f "$tmpdepfile" 29067f05d30Smrg exit $stat 29167f05d30Smrg fi 29267f05d30Smrg rm -f "$depfile" 29367f05d30Smrg # Each line is of the form `foo.o: dependent.h', 29467f05d30Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 29567f05d30Smrg # Do two passes, one to just change these to 29667f05d30Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 29767f05d30Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 29867f05d30Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 29967f05d30Smrg # correctly. Breaking it into two sed invocations is a workaround. 30067f05d30Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 30167f05d30Smrg sed -e 's/$/ :/' >> "$depfile" 30267f05d30Smrg rm -f "$tmpdepfile" 30367f05d30Smrg ;; 30467f05d30Smrg 305fffe5102Smrghp2) 306fffe5102Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307fffe5102Smrg # compilers, which have integrated preprocessors. The correct option 308fffe5102Smrg # to use with these is +Maked; it writes dependencies to a file named 309fffe5102Smrg # 'foo.d', which lands next to the object file, wherever that 310fffe5102Smrg # happens to be. 311fffe5102Smrg # Much of this is similar to the tru64 case; see comments there. 312fffe5102Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313fffe5102Smrg test "x$dir" = "x$object" && dir= 314fffe5102Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315fffe5102Smrg if test "$libtool" = yes; then 316fffe5102Smrg tmpdepfile1=$dir$base.d 317fffe5102Smrg tmpdepfile2=$dir.libs/$base.d 318fffe5102Smrg "$@" -Wc,+Maked 319fffe5102Smrg else 320fffe5102Smrg tmpdepfile1=$dir$base.d 321fffe5102Smrg tmpdepfile2=$dir$base.d 322fffe5102Smrg "$@" +Maked 323fffe5102Smrg fi 324fffe5102Smrg stat=$? 325fffe5102Smrg if test $stat -eq 0; then : 326fffe5102Smrg else 327fffe5102Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328fffe5102Smrg exit $stat 329fffe5102Smrg fi 330fffe5102Smrg 331fffe5102Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332fffe5102Smrg do 333fffe5102Smrg test -f "$tmpdepfile" && break 334fffe5102Smrg done 335fffe5102Smrg if test -f "$tmpdepfile"; then 336fffe5102Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337fffe5102Smrg # Add `dependent.h:' lines. 338fffe5102Smrg sed -ne '2,${ 339fffe5102Smrg s/^ *// 340fffe5102Smrg s/ \\*$// 341fffe5102Smrg s/$/:/ 342fffe5102Smrg p 343fffe5102Smrg }' "$tmpdepfile" >> "$depfile" 344fffe5102Smrg else 345fffe5102Smrg echo "#dummy" > "$depfile" 346fffe5102Smrg fi 347fffe5102Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348fffe5102Smrg ;; 349fffe5102Smrg 35067f05d30Smrgtru64) 35167f05d30Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 35267f05d30Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 35367f05d30Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 35467f05d30Smrg # dependencies in `foo.d' instead, so we check for that too. 35567f05d30Smrg # Subdirectories are respected. 35667f05d30Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 35767f05d30Smrg test "x$dir" = "x$object" && dir= 35867f05d30Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 35967f05d30Smrg 36067f05d30Smrg if test "$libtool" = yes; then 361fffe5102Smrg # With Tru64 cc, shared objects can also be used to make a 362fffe5102Smrg # static library. This mechanism is used in libtool 1.4 series to 363fffe5102Smrg # handle both shared and static libraries in a single compilation. 364fffe5102Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365fffe5102Smrg # 366fffe5102Smrg # With libtool 1.5 this exception was removed, and libtool now 367fffe5102Smrg # generates 2 separate objects for the 2 libraries. These two 368fffe5102Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369fffe5102Smrg # in $dir$base.o.d. We have to check for both files, because 370fffe5102Smrg # one of the two compilations can be disabled. We should prefer 371fffe5102Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372fffe5102Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373fffe5102Smrg # the former would cause a distcleancheck panic. 374fffe5102Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375fffe5102Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376fffe5102Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377fffe5102Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 37867f05d30Smrg "$@" -Wc,-MD 37967f05d30Smrg else 380fffe5102Smrg tmpdepfile1=$dir$base.o.d 381fffe5102Smrg tmpdepfile2=$dir$base.d 382fffe5102Smrg tmpdepfile3=$dir$base.d 383fffe5102Smrg tmpdepfile4=$dir$base.d 38467f05d30Smrg "$@" -MD 38567f05d30Smrg fi 38667f05d30Smrg 38767f05d30Smrg stat=$? 38867f05d30Smrg if test $stat -eq 0; then : 38967f05d30Smrg else 390fffe5102Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 39167f05d30Smrg exit $stat 39267f05d30Smrg fi 39367f05d30Smrg 394fffe5102Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395fffe5102Smrg do 396fffe5102Smrg test -f "$tmpdepfile" && break 397fffe5102Smrg done 39867f05d30Smrg if test -f "$tmpdepfile"; then 39967f05d30Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 40067f05d30Smrg # That's a tab and a space in the []. 40167f05d30Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 40267f05d30Smrg else 40367f05d30Smrg echo "#dummy" > "$depfile" 40467f05d30Smrg fi 40567f05d30Smrg rm -f "$tmpdepfile" 40667f05d30Smrg ;; 40767f05d30Smrg 40867f05d30Smrg#nosideeffect) 40967f05d30Smrg # This comment above is used by automake to tell side-effect 41067f05d30Smrg # dependency tracking mechanisms from slower ones. 41167f05d30Smrg 41267f05d30Smrgdashmstdout) 41367f05d30Smrg # Important note: in order to support this mode, a compiler *must* 41467f05d30Smrg # always write the preprocessed file to stdout, regardless of -o. 41567f05d30Smrg "$@" || exit $? 41667f05d30Smrg 41767f05d30Smrg # Remove the call to Libtool. 41867f05d30Smrg if test "$libtool" = yes; then 419fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 42067f05d30Smrg shift 42167f05d30Smrg done 42267f05d30Smrg shift 42367f05d30Smrg fi 42467f05d30Smrg 42567f05d30Smrg # Remove `-o $object'. 42667f05d30Smrg IFS=" " 42767f05d30Smrg for arg 42867f05d30Smrg do 42967f05d30Smrg case $arg in 43067f05d30Smrg -o) 43167f05d30Smrg shift 43267f05d30Smrg ;; 43367f05d30Smrg $object) 43467f05d30Smrg shift 43567f05d30Smrg ;; 43667f05d30Smrg *) 43767f05d30Smrg set fnord "$@" "$arg" 43867f05d30Smrg shift # fnord 43967f05d30Smrg shift # $arg 44067f05d30Smrg ;; 44167f05d30Smrg esac 44267f05d30Smrg done 44367f05d30Smrg 44467f05d30Smrg test -z "$dashmflag" && dashmflag=-M 44567f05d30Smrg # Require at least two characters before searching for `:' 44667f05d30Smrg # in the target name. This is to cope with DOS-style filenames: 44767f05d30Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 44867f05d30Smrg "$@" $dashmflag | 44967f05d30Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 45067f05d30Smrg rm -f "$depfile" 45167f05d30Smrg cat < "$tmpdepfile" > "$depfile" 45267f05d30Smrg tr ' ' ' 45367f05d30Smrg' < "$tmpdepfile" | \ 45467f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 45567f05d30Smrg## correctly. Breaking it into two sed invocations is a workaround. 45667f05d30Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 45767f05d30Smrg rm -f "$tmpdepfile" 45867f05d30Smrg ;; 45967f05d30Smrg 46067f05d30SmrgdashXmstdout) 46167f05d30Smrg # This case only exists to satisfy depend.m4. It is never actually 46267f05d30Smrg # run, as this mode is specially recognized in the preamble. 46367f05d30Smrg exit 1 46467f05d30Smrg ;; 46567f05d30Smrg 46667f05d30Smrgmakedepend) 46767f05d30Smrg "$@" || exit $? 46867f05d30Smrg # Remove any Libtool call 46967f05d30Smrg if test "$libtool" = yes; then 470fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 47167f05d30Smrg shift 47267f05d30Smrg done 47367f05d30Smrg shift 47467f05d30Smrg fi 47567f05d30Smrg # X makedepend 47667f05d30Smrg shift 477fffe5102Smrg cleared=no eat=no 478fffe5102Smrg for arg 479fffe5102Smrg do 48067f05d30Smrg case $cleared in 48167f05d30Smrg no) 48267f05d30Smrg set ""; shift 48367f05d30Smrg cleared=yes ;; 48467f05d30Smrg esac 485fffe5102Smrg if test $eat = yes; then 486fffe5102Smrg eat=no 487fffe5102Smrg continue 488fffe5102Smrg fi 48967f05d30Smrg case "$arg" in 49067f05d30Smrg -D*|-I*) 49167f05d30Smrg set fnord "$@" "$arg"; shift ;; 49267f05d30Smrg # Strip any option that makedepend may not understand. Remove 49367f05d30Smrg # the object too, otherwise makedepend will parse it as a source file. 494fffe5102Smrg -arch) 495fffe5102Smrg eat=yes ;; 49667f05d30Smrg -*|$object) 49767f05d30Smrg ;; 49867f05d30Smrg *) 49967f05d30Smrg set fnord "$@" "$arg"; shift ;; 50067f05d30Smrg esac 50167f05d30Smrg done 502fffe5102Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 50367f05d30Smrg touch "$tmpdepfile" 50467f05d30Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 50567f05d30Smrg rm -f "$depfile" 50667f05d30Smrg cat < "$tmpdepfile" > "$depfile" 50767f05d30Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 50867f05d30Smrg' | \ 50967f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 51067f05d30Smrg## correctly. Breaking it into two sed invocations is a workaround. 51167f05d30Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51267f05d30Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 51367f05d30Smrg ;; 51467f05d30Smrg 51567f05d30Smrgcpp) 51667f05d30Smrg # Important note: in order to support this mode, a compiler *must* 51767f05d30Smrg # always write the preprocessed file to stdout. 51867f05d30Smrg "$@" || exit $? 51967f05d30Smrg 52067f05d30Smrg # Remove the call to Libtool. 52167f05d30Smrg if test "$libtool" = yes; then 522fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 52367f05d30Smrg shift 52467f05d30Smrg done 52567f05d30Smrg shift 52667f05d30Smrg fi 52767f05d30Smrg 52867f05d30Smrg # Remove `-o $object'. 52967f05d30Smrg IFS=" " 53067f05d30Smrg for arg 53167f05d30Smrg do 53267f05d30Smrg case $arg in 53367f05d30Smrg -o) 53467f05d30Smrg shift 53567f05d30Smrg ;; 53667f05d30Smrg $object) 53767f05d30Smrg shift 53867f05d30Smrg ;; 53967f05d30Smrg *) 54067f05d30Smrg set fnord "$@" "$arg" 54167f05d30Smrg shift # fnord 54267f05d30Smrg shift # $arg 54367f05d30Smrg ;; 54467f05d30Smrg esac 54567f05d30Smrg done 54667f05d30Smrg 54767f05d30Smrg "$@" -E | 548fffe5102Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549fffe5102Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 55067f05d30Smrg sed '$ s: \\$::' > "$tmpdepfile" 55167f05d30Smrg rm -f "$depfile" 55267f05d30Smrg echo "$object : \\" > "$depfile" 55367f05d30Smrg cat < "$tmpdepfile" >> "$depfile" 55467f05d30Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 55567f05d30Smrg rm -f "$tmpdepfile" 55667f05d30Smrg ;; 55767f05d30Smrg 55867f05d30Smrgmsvisualcpp) 55967f05d30Smrg # Important note: in order to support this mode, a compiler *must* 560fffe5102Smrg # always write the preprocessed file to stdout. 56167f05d30Smrg "$@" || exit $? 562fffe5102Smrg 563fffe5102Smrg # Remove the call to Libtool. 564fffe5102Smrg if test "$libtool" = yes; then 565fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 566fffe5102Smrg shift 567fffe5102Smrg done 568fffe5102Smrg shift 569fffe5102Smrg fi 570fffe5102Smrg 57167f05d30Smrg IFS=" " 57267f05d30Smrg for arg 57367f05d30Smrg do 57467f05d30Smrg case "$arg" in 575fffe5102Smrg -o) 576fffe5102Smrg shift 577fffe5102Smrg ;; 578fffe5102Smrg $object) 579fffe5102Smrg shift 580fffe5102Smrg ;; 58167f05d30Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 58267f05d30Smrg set fnord "$@" 58367f05d30Smrg shift 58467f05d30Smrg shift 58567f05d30Smrg ;; 58667f05d30Smrg *) 58767f05d30Smrg set fnord "$@" "$arg" 58867f05d30Smrg shift 58967f05d30Smrg shift 59067f05d30Smrg ;; 59167f05d30Smrg esac 59267f05d30Smrg done 593fffe5102Smrg "$@" -E 2>/dev/null | 594fffe5102Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 59567f05d30Smrg rm -f "$depfile" 59667f05d30Smrg echo "$object : \\" > "$depfile" 597fffe5102Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 59867f05d30Smrg echo " " >> "$depfile" 599fffe5102Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 60067f05d30Smrg rm -f "$tmpdepfile" 60167f05d30Smrg ;; 60267f05d30Smrg 603fffe5102Smrgmsvcmsys) 604fffe5102Smrg # This case exists only to let depend.m4 do its work. It works by 605fffe5102Smrg # looking at the text of this script. This case will never be run, 606fffe5102Smrg # since it is checked for above. 607fffe5102Smrg exit 1 608fffe5102Smrg ;; 609fffe5102Smrg 61067f05d30Smrgnone) 61167f05d30Smrg exec "$@" 61267f05d30Smrg ;; 61367f05d30Smrg 61467f05d30Smrg*) 61567f05d30Smrg echo "Unknown depmode $depmode" 1>&2 61667f05d30Smrg exit 1 61767f05d30Smrg ;; 61867f05d30Smrgesac 61967f05d30Smrg 62067f05d30Smrgexit 0 621fffe5102Smrg 622fffe5102Smrg# Local Variables: 623fffe5102Smrg# mode: shell-script 624fffe5102Smrg# sh-indentation: 2 625fffe5102Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626fffe5102Smrg# time-stamp-start: "scriptversion=" 627fffe5102Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628fffe5102Smrg# time-stamp-time-zone: "UTC" 629fffe5102Smrg# time-stamp-end: "; # UTC" 630fffe5102Smrg# End: 631