depcomp revision 7d5e3a19
17d5e3a19Smrg#! /bin/sh 27d5e3a19Smrg# depcomp - compile a program generating dependencies as side-effects 37d5e3a19Smrg 47d5e3a19Smrgscriptversion=2006-10-15.18 57d5e3a19Smrg 67d5e3a19Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 77d5e3a19Smrg# Foundation, Inc. 87d5e3a19Smrg 97d5e3a19Smrg# This program is free software; you can redistribute it and/or modify 107d5e3a19Smrg# it under the terms of the GNU General Public License as published by 117d5e3a19Smrg# the Free Software Foundation; either version 2, or (at your option) 127d5e3a19Smrg# any later version. 137d5e3a19Smrg 147d5e3a19Smrg# This program is distributed in the hope that it will be useful, 157d5e3a19Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 167d5e3a19Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177d5e3a19Smrg# GNU General Public License for more details. 187d5e3a19Smrg 197d5e3a19Smrg# You should have received a copy of the GNU General Public License 207d5e3a19Smrg# along with this program; if not, write to the Free Software 217d5e3a19Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 227d5e3a19Smrg# 02110-1301, USA. 237d5e3a19Smrg 247d5e3a19Smrg# As a special exception to the GNU General Public License, if you 257d5e3a19Smrg# distribute this file as part of a program that contains a 267d5e3a19Smrg# configuration script generated by Autoconf, you may include it under 277d5e3a19Smrg# the same distribution terms that you use for the rest of that program. 287d5e3a19Smrg 297d5e3a19Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 307d5e3a19Smrg 317d5e3a19Smrgcase $1 in 327d5e3a19Smrg '') 337d5e3a19Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 347d5e3a19Smrg exit 1; 357d5e3a19Smrg ;; 367d5e3a19Smrg -h | --h*) 377d5e3a19Smrg cat <<\EOF 387d5e3a19SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 397d5e3a19Smrg 407d5e3a19SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 417d5e3a19Smrgas side-effects. 427d5e3a19Smrg 437d5e3a19SmrgEnvironment variables: 447d5e3a19Smrg depmode Dependency tracking mode. 457d5e3a19Smrg source Source file read by `PROGRAMS ARGS'. 467d5e3a19Smrg object Object file output by `PROGRAMS ARGS'. 477d5e3a19Smrg DEPDIR directory where to store dependencies. 487d5e3a19Smrg depfile Dependency file to output. 497d5e3a19Smrg tmpdepfile Temporary file to use when outputing dependencies. 507d5e3a19Smrg libtool Whether libtool is used (yes/no). 517d5e3a19Smrg 527d5e3a19SmrgReport bugs to <bug-automake@gnu.org>. 537d5e3a19SmrgEOF 547d5e3a19Smrg exit $? 557d5e3a19Smrg ;; 567d5e3a19Smrg -v | --v*) 577d5e3a19Smrg echo "depcomp $scriptversion" 587d5e3a19Smrg exit $? 597d5e3a19Smrg ;; 607d5e3a19Smrgesac 617d5e3a19Smrg 627d5e3a19Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 637d5e3a19Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 647d5e3a19Smrg exit 1 657d5e3a19Smrgfi 667d5e3a19Smrg 677d5e3a19Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 687d5e3a19Smrgdepfile=${depfile-`echo "$object" | 697d5e3a19Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 707d5e3a19Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 717d5e3a19Smrg 727d5e3a19Smrgrm -f "$tmpdepfile" 737d5e3a19Smrg 747d5e3a19Smrg# Some modes work just like other modes, but use different flags. We 757d5e3a19Smrg# parameterize here, but still list the modes in the big case below, 767d5e3a19Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 777d5e3a19Smrg# here, because this file can only contain one case statement. 787d5e3a19Smrgif test "$depmode" = hp; then 797d5e3a19Smrg # HP compiler uses -M and no extra arg. 807d5e3a19Smrg gccflag=-M 817d5e3a19Smrg depmode=gcc 827d5e3a19Smrgfi 837d5e3a19Smrg 847d5e3a19Smrgif test "$depmode" = dashXmstdout; then 857d5e3a19Smrg # This is just like dashmstdout with a different argument. 867d5e3a19Smrg dashmflag=-xM 877d5e3a19Smrg depmode=dashmstdout 887d5e3a19Smrgfi 897d5e3a19Smrg 907d5e3a19Smrgcase "$depmode" in 917d5e3a19Smrggcc3) 927d5e3a19Smrg## gcc 3 implements dependency tracking that does exactly what 937d5e3a19Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 947d5e3a19Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 957d5e3a19Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 967d5e3a19Smrg## the command line argument order; so add the flags where they 977d5e3a19Smrg## appear in depend2.am. Note that the slowdown incurred here 987d5e3a19Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 997d5e3a19Smrg for arg 1007d5e3a19Smrg do 1017d5e3a19Smrg case $arg in 1027d5e3a19Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1037d5e3a19Smrg *) set fnord "$@" "$arg" ;; 1047d5e3a19Smrg esac 1057d5e3a19Smrg shift # fnord 1067d5e3a19Smrg shift # $arg 1077d5e3a19Smrg done 1087d5e3a19Smrg "$@" 1097d5e3a19Smrg stat=$? 1107d5e3a19Smrg if test $stat -eq 0; then : 1117d5e3a19Smrg else 1127d5e3a19Smrg rm -f "$tmpdepfile" 1137d5e3a19Smrg exit $stat 1147d5e3a19Smrg fi 1157d5e3a19Smrg mv "$tmpdepfile" "$depfile" 1167d5e3a19Smrg ;; 1177d5e3a19Smrg 1187d5e3a19Smrggcc) 1197d5e3a19Smrg## There are various ways to get dependency output from gcc. Here's 1207d5e3a19Smrg## why we pick this rather obscure method: 1217d5e3a19Smrg## - Don't want to use -MD because we'd like the dependencies to end 1227d5e3a19Smrg## up in a subdir. Having to rename by hand is ugly. 1237d5e3a19Smrg## (We might end up doing this anyway to support other compilers.) 1247d5e3a19Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1257d5e3a19Smrg## -MM, not -M (despite what the docs say). 1267d5e3a19Smrg## - Using -M directly means running the compiler twice (even worse 1277d5e3a19Smrg## than renaming). 1287d5e3a19Smrg if test -z "$gccflag"; then 1297d5e3a19Smrg gccflag=-MD, 1307d5e3a19Smrg fi 1317d5e3a19Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1327d5e3a19Smrg stat=$? 1337d5e3a19Smrg if test $stat -eq 0; then : 1347d5e3a19Smrg else 1357d5e3a19Smrg rm -f "$tmpdepfile" 1367d5e3a19Smrg exit $stat 1377d5e3a19Smrg fi 1387d5e3a19Smrg rm -f "$depfile" 1397d5e3a19Smrg echo "$object : \\" > "$depfile" 1407d5e3a19Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1417d5e3a19Smrg## The second -e expression handles DOS-style file names with drive letters. 1427d5e3a19Smrg sed -e 's/^[^:]*: / /' \ 1437d5e3a19Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1447d5e3a19Smrg## This next piece of magic avoids the `deleted header file' problem. 1457d5e3a19Smrg## The problem is that when a header file which appears in a .P file 1467d5e3a19Smrg## is deleted, the dependency causes make to die (because there is 1477d5e3a19Smrg## typically no way to rebuild the header). We avoid this by adding 1487d5e3a19Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1497d5e3a19Smrg## this for us directly. 1507d5e3a19Smrg tr ' ' ' 1517d5e3a19Smrg' < "$tmpdepfile" | 1527d5e3a19Smrg## Some versions of gcc put a space before the `:'. On the theory 1537d5e3a19Smrg## that the space means something, we add a space to the output as 1547d5e3a19Smrg## well. 1557d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1567d5e3a19Smrg## correctly. Breaking it into two sed invocations is a workaround. 1577d5e3a19Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1587d5e3a19Smrg rm -f "$tmpdepfile" 1597d5e3a19Smrg ;; 1607d5e3a19Smrg 1617d5e3a19Smrghp) 1627d5e3a19Smrg # This case exists only to let depend.m4 do its work. It works by 1637d5e3a19Smrg # looking at the text of this script. This case will never be run, 1647d5e3a19Smrg # since it is checked for above. 1657d5e3a19Smrg exit 1 1667d5e3a19Smrg ;; 1677d5e3a19Smrg 1687d5e3a19Smrgsgi) 1697d5e3a19Smrg if test "$libtool" = yes; then 1707d5e3a19Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1717d5e3a19Smrg else 1727d5e3a19Smrg "$@" -MDupdate "$tmpdepfile" 1737d5e3a19Smrg fi 1747d5e3a19Smrg stat=$? 1757d5e3a19Smrg if test $stat -eq 0; then : 1767d5e3a19Smrg else 1777d5e3a19Smrg rm -f "$tmpdepfile" 1787d5e3a19Smrg exit $stat 1797d5e3a19Smrg fi 1807d5e3a19Smrg rm -f "$depfile" 1817d5e3a19Smrg 1827d5e3a19Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1837d5e3a19Smrg echo "$object : \\" > "$depfile" 1847d5e3a19Smrg 1857d5e3a19Smrg # Clip off the initial element (the dependent). Don't try to be 1867d5e3a19Smrg # clever and replace this with sed code, as IRIX sed won't handle 1877d5e3a19Smrg # lines with more than a fixed number of characters (4096 in 1887d5e3a19Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1897d5e3a19Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1907d5e3a19Smrg # dependency line. 1917d5e3a19Smrg tr ' ' ' 1927d5e3a19Smrg' < "$tmpdepfile" \ 1937d5e3a19Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1947d5e3a19Smrg tr ' 1957d5e3a19Smrg' ' ' >> $depfile 1967d5e3a19Smrg echo >> $depfile 1977d5e3a19Smrg 1987d5e3a19Smrg # The second pass generates a dummy entry for each header file. 1997d5e3a19Smrg tr ' ' ' 2007d5e3a19Smrg' < "$tmpdepfile" \ 2017d5e3a19Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2027d5e3a19Smrg >> $depfile 2037d5e3a19Smrg else 2047d5e3a19Smrg # The sourcefile does not contain any dependencies, so just 2057d5e3a19Smrg # store a dummy comment line, to avoid errors with the Makefile 2067d5e3a19Smrg # "include basename.Plo" scheme. 2077d5e3a19Smrg echo "#dummy" > "$depfile" 2087d5e3a19Smrg fi 2097d5e3a19Smrg rm -f "$tmpdepfile" 2107d5e3a19Smrg ;; 2117d5e3a19Smrg 2127d5e3a19Smrgaix) 2137d5e3a19Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2147d5e3a19Smrg # in a .u file. In older versions, this file always lives in the 2157d5e3a19Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2167d5e3a19Smrg # start of each line; $object doesn't have directory information. 2177d5e3a19Smrg # Version 6 uses the directory in both cases. 2187d5e3a19Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2197d5e3a19Smrg tmpdepfile="$stripped.u" 2207d5e3a19Smrg if test "$libtool" = yes; then 2217d5e3a19Smrg "$@" -Wc,-M 2227d5e3a19Smrg else 2237d5e3a19Smrg "$@" -M 2247d5e3a19Smrg fi 2257d5e3a19Smrg stat=$? 2267d5e3a19Smrg 2277d5e3a19Smrg if test -f "$tmpdepfile"; then : 2287d5e3a19Smrg else 2297d5e3a19Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2307d5e3a19Smrg tmpdepfile="$stripped.u" 2317d5e3a19Smrg fi 2327d5e3a19Smrg 2337d5e3a19Smrg if test $stat -eq 0; then : 2347d5e3a19Smrg else 2357d5e3a19Smrg rm -f "$tmpdepfile" 2367d5e3a19Smrg exit $stat 2377d5e3a19Smrg fi 2387d5e3a19Smrg 2397d5e3a19Smrg if test -f "$tmpdepfile"; then 2407d5e3a19Smrg outname="$stripped.o" 2417d5e3a19Smrg # Each line is of the form `foo.o: dependent.h'. 2427d5e3a19Smrg # Do two passes, one to just change these to 2437d5e3a19Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2447d5e3a19Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2457d5e3a19Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2467d5e3a19Smrg else 2477d5e3a19Smrg # The sourcefile does not contain any dependencies, so just 2487d5e3a19Smrg # store a dummy comment line, to avoid errors with the Makefile 2497d5e3a19Smrg # "include basename.Plo" scheme. 2507d5e3a19Smrg echo "#dummy" > "$depfile" 2517d5e3a19Smrg fi 2527d5e3a19Smrg rm -f "$tmpdepfile" 2537d5e3a19Smrg ;; 2547d5e3a19Smrg 2557d5e3a19Smrgicc) 2567d5e3a19Smrg # Intel's C compiler understands `-MD -MF file'. However on 2577d5e3a19Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2587d5e3a19Smrg # ICC 7.0 will fill foo.d with something like 2597d5e3a19Smrg # foo.o: sub/foo.c 2607d5e3a19Smrg # foo.o: sub/foo.h 2617d5e3a19Smrg # which is wrong. We want: 2627d5e3a19Smrg # sub/foo.o: sub/foo.c 2637d5e3a19Smrg # sub/foo.o: sub/foo.h 2647d5e3a19Smrg # sub/foo.c: 2657d5e3a19Smrg # sub/foo.h: 2667d5e3a19Smrg # ICC 7.1 will output 2677d5e3a19Smrg # foo.o: sub/foo.c sub/foo.h 2687d5e3a19Smrg # and will wrap long lines using \ : 2697d5e3a19Smrg # foo.o: sub/foo.c ... \ 2707d5e3a19Smrg # sub/foo.h ... \ 2717d5e3a19Smrg # ... 2727d5e3a19Smrg 2737d5e3a19Smrg "$@" -MD -MF "$tmpdepfile" 2747d5e3a19Smrg stat=$? 2757d5e3a19Smrg if test $stat -eq 0; then : 2767d5e3a19Smrg else 2777d5e3a19Smrg rm -f "$tmpdepfile" 2787d5e3a19Smrg exit $stat 2797d5e3a19Smrg fi 2807d5e3a19Smrg rm -f "$depfile" 2817d5e3a19Smrg # Each line is of the form `foo.o: dependent.h', 2827d5e3a19Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2837d5e3a19Smrg # Do two passes, one to just change these to 2847d5e3a19Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2857d5e3a19Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2867d5e3a19Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2877d5e3a19Smrg # correctly. Breaking it into two sed invocations is a workaround. 2887d5e3a19Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2897d5e3a19Smrg sed -e 's/$/ :/' >> "$depfile" 2907d5e3a19Smrg rm -f "$tmpdepfile" 2917d5e3a19Smrg ;; 2927d5e3a19Smrg 2937d5e3a19Smrghp2) 2947d5e3a19Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2957d5e3a19Smrg # compilers, which have integrated preprocessors. The correct option 2967d5e3a19Smrg # to use with these is +Maked; it writes dependencies to a file named 2977d5e3a19Smrg # 'foo.d', which lands next to the object file, wherever that 2987d5e3a19Smrg # happens to be. 2997d5e3a19Smrg # Much of this is similar to the tru64 case; see comments there. 3007d5e3a19Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3017d5e3a19Smrg test "x$dir" = "x$object" && dir= 3027d5e3a19Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3037d5e3a19Smrg if test "$libtool" = yes; then 3047d5e3a19Smrg tmpdepfile1=$dir$base.d 3057d5e3a19Smrg tmpdepfile2=$dir.libs/$base.d 3067d5e3a19Smrg "$@" -Wc,+Maked 3077d5e3a19Smrg else 3087d5e3a19Smrg tmpdepfile1=$dir$base.d 3097d5e3a19Smrg tmpdepfile2=$dir$base.d 3107d5e3a19Smrg "$@" +Maked 3117d5e3a19Smrg fi 3127d5e3a19Smrg stat=$? 3137d5e3a19Smrg if test $stat -eq 0; then : 3147d5e3a19Smrg else 3157d5e3a19Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3167d5e3a19Smrg exit $stat 3177d5e3a19Smrg fi 3187d5e3a19Smrg 3197d5e3a19Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3207d5e3a19Smrg do 3217d5e3a19Smrg test -f "$tmpdepfile" && break 3227d5e3a19Smrg done 3237d5e3a19Smrg if test -f "$tmpdepfile"; then 3247d5e3a19Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3257d5e3a19Smrg # Add `dependent.h:' lines. 3267d5e3a19Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3277d5e3a19Smrg else 3287d5e3a19Smrg echo "#dummy" > "$depfile" 3297d5e3a19Smrg fi 3307d5e3a19Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3317d5e3a19Smrg ;; 3327d5e3a19Smrg 3337d5e3a19Smrgtru64) 3347d5e3a19Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3357d5e3a19Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3367d5e3a19Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3377d5e3a19Smrg # dependencies in `foo.d' instead, so we check for that too. 3387d5e3a19Smrg # Subdirectories are respected. 3397d5e3a19Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3407d5e3a19Smrg test "x$dir" = "x$object" && dir= 3417d5e3a19Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3427d5e3a19Smrg 3437d5e3a19Smrg if test "$libtool" = yes; then 3447d5e3a19Smrg # With Tru64 cc, shared objects can also be used to make a 3457d5e3a19Smrg # static library. This mechanism is used in libtool 1.4 series to 3467d5e3a19Smrg # handle both shared and static libraries in a single compilation. 3477d5e3a19Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3487d5e3a19Smrg # 3497d5e3a19Smrg # With libtool 1.5 this exception was removed, and libtool now 3507d5e3a19Smrg # generates 2 separate objects for the 2 libraries. These two 3517d5e3a19Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3527d5e3a19Smrg # in $dir$base.o.d. We have to check for both files, because 3537d5e3a19Smrg # one of the two compilations can be disabled. We should prefer 3547d5e3a19Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3557d5e3a19Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3567d5e3a19Smrg # the former would cause a distcleancheck panic. 3577d5e3a19Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3587d5e3a19Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3597d5e3a19Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3607d5e3a19Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3617d5e3a19Smrg "$@" -Wc,-MD 3627d5e3a19Smrg else 3637d5e3a19Smrg tmpdepfile1=$dir$base.o.d 3647d5e3a19Smrg tmpdepfile2=$dir$base.d 3657d5e3a19Smrg tmpdepfile3=$dir$base.d 3667d5e3a19Smrg tmpdepfile4=$dir$base.d 3677d5e3a19Smrg "$@" -MD 3687d5e3a19Smrg fi 3697d5e3a19Smrg 3707d5e3a19Smrg stat=$? 3717d5e3a19Smrg if test $stat -eq 0; then : 3727d5e3a19Smrg else 3737d5e3a19Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3747d5e3a19Smrg exit $stat 3757d5e3a19Smrg fi 3767d5e3a19Smrg 3777d5e3a19Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3787d5e3a19Smrg do 3797d5e3a19Smrg test -f "$tmpdepfile" && break 3807d5e3a19Smrg done 3817d5e3a19Smrg if test -f "$tmpdepfile"; then 3827d5e3a19Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3837d5e3a19Smrg # That's a tab and a space in the []. 3847d5e3a19Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3857d5e3a19Smrg else 3867d5e3a19Smrg echo "#dummy" > "$depfile" 3877d5e3a19Smrg fi 3887d5e3a19Smrg rm -f "$tmpdepfile" 3897d5e3a19Smrg ;; 3907d5e3a19Smrg 3917d5e3a19Smrg#nosideeffect) 3927d5e3a19Smrg # This comment above is used by automake to tell side-effect 3937d5e3a19Smrg # dependency tracking mechanisms from slower ones. 3947d5e3a19Smrg 3957d5e3a19Smrgdashmstdout) 3967d5e3a19Smrg # Important note: in order to support this mode, a compiler *must* 3977d5e3a19Smrg # always write the preprocessed file to stdout, regardless of -o. 3987d5e3a19Smrg "$@" || exit $? 3997d5e3a19Smrg 4007d5e3a19Smrg # Remove the call to Libtool. 4017d5e3a19Smrg if test "$libtool" = yes; then 4027d5e3a19Smrg while test $1 != '--mode=compile'; do 4037d5e3a19Smrg shift 4047d5e3a19Smrg done 4057d5e3a19Smrg shift 4067d5e3a19Smrg fi 4077d5e3a19Smrg 4087d5e3a19Smrg # Remove `-o $object'. 4097d5e3a19Smrg IFS=" " 4107d5e3a19Smrg for arg 4117d5e3a19Smrg do 4127d5e3a19Smrg case $arg in 4137d5e3a19Smrg -o) 4147d5e3a19Smrg shift 4157d5e3a19Smrg ;; 4167d5e3a19Smrg $object) 4177d5e3a19Smrg shift 4187d5e3a19Smrg ;; 4197d5e3a19Smrg *) 4207d5e3a19Smrg set fnord "$@" "$arg" 4217d5e3a19Smrg shift # fnord 4227d5e3a19Smrg shift # $arg 4237d5e3a19Smrg ;; 4247d5e3a19Smrg esac 4257d5e3a19Smrg done 4267d5e3a19Smrg 4277d5e3a19Smrg test -z "$dashmflag" && dashmflag=-M 4287d5e3a19Smrg # Require at least two characters before searching for `:' 4297d5e3a19Smrg # in the target name. This is to cope with DOS-style filenames: 4307d5e3a19Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4317d5e3a19Smrg "$@" $dashmflag | 4327d5e3a19Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4337d5e3a19Smrg rm -f "$depfile" 4347d5e3a19Smrg cat < "$tmpdepfile" > "$depfile" 4357d5e3a19Smrg tr ' ' ' 4367d5e3a19Smrg' < "$tmpdepfile" | \ 4377d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4387d5e3a19Smrg## correctly. Breaking it into two sed invocations is a workaround. 4397d5e3a19Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4407d5e3a19Smrg rm -f "$tmpdepfile" 4417d5e3a19Smrg ;; 4427d5e3a19Smrg 4437d5e3a19SmrgdashXmstdout) 4447d5e3a19Smrg # This case only exists to satisfy depend.m4. It is never actually 4457d5e3a19Smrg # run, as this mode is specially recognized in the preamble. 4467d5e3a19Smrg exit 1 4477d5e3a19Smrg ;; 4487d5e3a19Smrg 4497d5e3a19Smrgmakedepend) 4507d5e3a19Smrg "$@" || exit $? 4517d5e3a19Smrg # Remove any Libtool call 4527d5e3a19Smrg if test "$libtool" = yes; then 4537d5e3a19Smrg while test $1 != '--mode=compile'; do 4547d5e3a19Smrg shift 4557d5e3a19Smrg done 4567d5e3a19Smrg shift 4577d5e3a19Smrg fi 4587d5e3a19Smrg # X makedepend 4597d5e3a19Smrg shift 4607d5e3a19Smrg cleared=no 4617d5e3a19Smrg for arg in "$@"; do 4627d5e3a19Smrg case $cleared in 4637d5e3a19Smrg no) 4647d5e3a19Smrg set ""; shift 4657d5e3a19Smrg cleared=yes ;; 4667d5e3a19Smrg esac 4677d5e3a19Smrg case "$arg" in 4687d5e3a19Smrg -D*|-I*) 4697d5e3a19Smrg set fnord "$@" "$arg"; shift ;; 4707d5e3a19Smrg # Strip any option that makedepend may not understand. Remove 4717d5e3a19Smrg # the object too, otherwise makedepend will parse it as a source file. 4727d5e3a19Smrg -*|$object) 4737d5e3a19Smrg ;; 4747d5e3a19Smrg *) 4757d5e3a19Smrg set fnord "$@" "$arg"; shift ;; 4767d5e3a19Smrg esac 4777d5e3a19Smrg done 4787d5e3a19Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4797d5e3a19Smrg touch "$tmpdepfile" 4807d5e3a19Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4817d5e3a19Smrg rm -f "$depfile" 4827d5e3a19Smrg cat < "$tmpdepfile" > "$depfile" 4837d5e3a19Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4847d5e3a19Smrg' | \ 4857d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4867d5e3a19Smrg## correctly. Breaking it into two sed invocations is a workaround. 4877d5e3a19Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4887d5e3a19Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4897d5e3a19Smrg ;; 4907d5e3a19Smrg 4917d5e3a19Smrgcpp) 4927d5e3a19Smrg # Important note: in order to support this mode, a compiler *must* 4937d5e3a19Smrg # always write the preprocessed file to stdout. 4947d5e3a19Smrg "$@" || exit $? 4957d5e3a19Smrg 4967d5e3a19Smrg # Remove the call to Libtool. 4977d5e3a19Smrg if test "$libtool" = yes; then 4987d5e3a19Smrg while test $1 != '--mode=compile'; do 4997d5e3a19Smrg shift 5007d5e3a19Smrg done 5017d5e3a19Smrg shift 5027d5e3a19Smrg fi 5037d5e3a19Smrg 5047d5e3a19Smrg # Remove `-o $object'. 5057d5e3a19Smrg IFS=" " 5067d5e3a19Smrg for arg 5077d5e3a19Smrg do 5087d5e3a19Smrg case $arg in 5097d5e3a19Smrg -o) 5107d5e3a19Smrg shift 5117d5e3a19Smrg ;; 5127d5e3a19Smrg $object) 5137d5e3a19Smrg shift 5147d5e3a19Smrg ;; 5157d5e3a19Smrg *) 5167d5e3a19Smrg set fnord "$@" "$arg" 5177d5e3a19Smrg shift # fnord 5187d5e3a19Smrg shift # $arg 5197d5e3a19Smrg ;; 5207d5e3a19Smrg esac 5217d5e3a19Smrg done 5227d5e3a19Smrg 5237d5e3a19Smrg "$@" -E | 5247d5e3a19Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5257d5e3a19Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5267d5e3a19Smrg sed '$ s: \\$::' > "$tmpdepfile" 5277d5e3a19Smrg rm -f "$depfile" 5287d5e3a19Smrg echo "$object : \\" > "$depfile" 5297d5e3a19Smrg cat < "$tmpdepfile" >> "$depfile" 5307d5e3a19Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5317d5e3a19Smrg rm -f "$tmpdepfile" 5327d5e3a19Smrg ;; 5337d5e3a19Smrg 5347d5e3a19Smrgmsvisualcpp) 5357d5e3a19Smrg # Important note: in order to support this mode, a compiler *must* 5367d5e3a19Smrg # always write the preprocessed file to stdout, regardless of -o, 5377d5e3a19Smrg # because we must use -o when running libtool. 5387d5e3a19Smrg "$@" || exit $? 5397d5e3a19Smrg IFS=" " 5407d5e3a19Smrg for arg 5417d5e3a19Smrg do 5427d5e3a19Smrg case "$arg" in 5437d5e3a19Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5447d5e3a19Smrg set fnord "$@" 5457d5e3a19Smrg shift 5467d5e3a19Smrg shift 5477d5e3a19Smrg ;; 5487d5e3a19Smrg *) 5497d5e3a19Smrg set fnord "$@" "$arg" 5507d5e3a19Smrg shift 5517d5e3a19Smrg shift 5527d5e3a19Smrg ;; 5537d5e3a19Smrg esac 5547d5e3a19Smrg done 5557d5e3a19Smrg "$@" -E | 5567d5e3a19Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5577d5e3a19Smrg rm -f "$depfile" 5587d5e3a19Smrg echo "$object : \\" > "$depfile" 5597d5e3a19Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5607d5e3a19Smrg echo " " >> "$depfile" 5617d5e3a19Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5627d5e3a19Smrg rm -f "$tmpdepfile" 5637d5e3a19Smrg ;; 5647d5e3a19Smrg 5657d5e3a19Smrgnone) 5667d5e3a19Smrg exec "$@" 5677d5e3a19Smrg ;; 5687d5e3a19Smrg 5697d5e3a19Smrg*) 5707d5e3a19Smrg echo "Unknown depmode $depmode" 1>&2 5717d5e3a19Smrg exit 1 5727d5e3a19Smrg ;; 5737d5e3a19Smrgesac 5747d5e3a19Smrg 5757d5e3a19Smrgexit 0 5767d5e3a19Smrg 5777d5e3a19Smrg# Local Variables: 5787d5e3a19Smrg# mode: shell-script 5797d5e3a19Smrg# sh-indentation: 2 5807d5e3a19Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5817d5e3a19Smrg# time-stamp-start: "scriptversion=" 5827d5e3a19Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5837d5e3a19Smrg# time-stamp-end: "$" 5847d5e3a19Smrg# End: 585