depcomp revision 983b4bf2
17e6fb56fSmrg#! /bin/sh 27e6fb56fSmrg# depcomp - compile a program generating dependencies as side-effects 37e6fb56fSmrg 4983b4bf2Smrgscriptversion=2011-12-04.11; # UTC 57e6fb56fSmrg 6983b4bf2Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7983b4bf2Smrg# 2011 Free Software Foundation, Inc. 87e6fb56fSmrg 97e6fb56fSmrg# This program is free software; you can redistribute it and/or modify 107e6fb56fSmrg# it under the terms of the GNU General Public License as published by 117e6fb56fSmrg# the Free Software Foundation; either version 2, or (at your option) 127e6fb56fSmrg# any later version. 137e6fb56fSmrg 147e6fb56fSmrg# This program is distributed in the hope that it will be useful, 157e6fb56fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 167e6fb56fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177e6fb56fSmrg# GNU General Public License for more details. 187e6fb56fSmrg 197e6fb56fSmrg# You should have received a copy of the GNU General Public License 207e6fb56fSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 217e6fb56fSmrg 227e6fb56fSmrg# As a special exception to the GNU General Public License, if you 237e6fb56fSmrg# distribute this file as part of a program that contains a 247e6fb56fSmrg# configuration script generated by Autoconf, you may include it under 257e6fb56fSmrg# the same distribution terms that you use for the rest of that program. 267e6fb56fSmrg 277e6fb56fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 287e6fb56fSmrg 297e6fb56fSmrgcase $1 in 307e6fb56fSmrg '') 31983b4bf2Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32983b4bf2Smrg exit 1; 33983b4bf2Smrg ;; 347e6fb56fSmrg -h | --h*) 357e6fb56fSmrg cat <<\EOF 367e6fb56fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 377e6fb56fSmrg 387e6fb56fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 397e6fb56fSmrgas side-effects. 407e6fb56fSmrg 417e6fb56fSmrgEnvironment variables: 427e6fb56fSmrg depmode Dependency tracking mode. 43983b4bf2Smrg source Source file read by `PROGRAMS ARGS'. 44983b4bf2Smrg object Object file output by `PROGRAMS ARGS'. 457e6fb56fSmrg DEPDIR directory where to store dependencies. 467e6fb56fSmrg depfile Dependency file to output. 4790b17f1bSmrg tmpdepfile Temporary file to use when outputting dependencies. 487e6fb56fSmrg libtool Whether libtool is used (yes/no). 497e6fb56fSmrg 507e6fb56fSmrgReport bugs to <bug-automake@gnu.org>. 517e6fb56fSmrgEOF 527e6fb56fSmrg exit $? 537e6fb56fSmrg ;; 547e6fb56fSmrg -v | --v*) 557e6fb56fSmrg echo "depcomp $scriptversion" 567e6fb56fSmrg exit $? 577e6fb56fSmrg ;; 587e6fb56fSmrgesac 597e6fb56fSmrg 607e6fb56fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 617e6fb56fSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 627e6fb56fSmrg exit 1 637e6fb56fSmrgfi 647e6fb56fSmrg 657e6fb56fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 667e6fb56fSmrgdepfile=${depfile-`echo "$object" | 677e6fb56fSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 687e6fb56fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 697e6fb56fSmrg 707e6fb56fSmrgrm -f "$tmpdepfile" 717e6fb56fSmrg 727e6fb56fSmrg# Some modes work just like other modes, but use different flags. We 737e6fb56fSmrg# parameterize here, but still list the modes in the big case below, 747e6fb56fSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 757e6fb56fSmrg# here, because this file can only contain one case statement. 767e6fb56fSmrgif test "$depmode" = hp; then 777e6fb56fSmrg # HP compiler uses -M and no extra arg. 787e6fb56fSmrg gccflag=-M 797e6fb56fSmrg depmode=gcc 807e6fb56fSmrgfi 817e6fb56fSmrg 827e6fb56fSmrgif test "$depmode" = dashXmstdout; then 83983b4bf2Smrg # This is just like dashmstdout with a different argument. 84983b4bf2Smrg dashmflag=-xM 85983b4bf2Smrg depmode=dashmstdout 867e6fb56fSmrgfi 877e6fb56fSmrg 887e6fb56fSmrgcygpath_u="cygpath -u -f -" 897e6fb56fSmrgif test "$depmode" = msvcmsys; then 90983b4bf2Smrg # This is just like msvisualcpp but w/o cygpath translation. 91983b4bf2Smrg # Just convert the backslash-escaped backslashes to single forward 92983b4bf2Smrg # slashes to satisfy depend.m4 93983b4bf2Smrg cygpath_u='sed s,\\\\,/,g' 94983b4bf2Smrg depmode=msvisualcpp 957e6fb56fSmrgfi 967e6fb56fSmrg 9790b17f1bSmrgif test "$depmode" = msvc7msys; then 98983b4bf2Smrg # This is just like msvc7 but w/o cygpath translation. 99983b4bf2Smrg # Just convert the backslash-escaped backslashes to single forward 100983b4bf2Smrg # slashes to satisfy depend.m4 101983b4bf2Smrg cygpath_u='sed s,\\\\,/,g' 102983b4bf2Smrg depmode=msvc7 10390b17f1bSmrgfi 10490b17f1bSmrg 1057e6fb56fSmrgcase "$depmode" in 1067e6fb56fSmrggcc3) 1077e6fb56fSmrg## gcc 3 implements dependency tracking that does exactly what 1087e6fb56fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1097e6fb56fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1107e6fb56fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1117e6fb56fSmrg## the command line argument order; so add the flags where they 1127e6fb56fSmrg## appear in depend2.am. Note that the slowdown incurred here 1137e6fb56fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1147e6fb56fSmrg for arg 1157e6fb56fSmrg do 1167e6fb56fSmrg case $arg in 1177e6fb56fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1187e6fb56fSmrg *) set fnord "$@" "$arg" ;; 1197e6fb56fSmrg esac 1207e6fb56fSmrg shift # fnord 1217e6fb56fSmrg shift # $arg 1227e6fb56fSmrg done 1237e6fb56fSmrg "$@" 1247e6fb56fSmrg stat=$? 125983b4bf2Smrg if test $stat -eq 0; then : 126983b4bf2Smrg else 1277e6fb56fSmrg rm -f "$tmpdepfile" 1287e6fb56fSmrg exit $stat 1297e6fb56fSmrg fi 1307e6fb56fSmrg mv "$tmpdepfile" "$depfile" 1317e6fb56fSmrg ;; 1327e6fb56fSmrg 1337e6fb56fSmrggcc) 1347e6fb56fSmrg## There are various ways to get dependency output from gcc. Here's 1357e6fb56fSmrg## why we pick this rather obscure method: 1367e6fb56fSmrg## - Don't want to use -MD because we'd like the dependencies to end 1377e6fb56fSmrg## up in a subdir. Having to rename by hand is ugly. 1387e6fb56fSmrg## (We might end up doing this anyway to support other compilers.) 1397e6fb56fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140983b4bf2Smrg## -MM, not -M (despite what the docs say). 1417e6fb56fSmrg## - Using -M directly means running the compiler twice (even worse 1427e6fb56fSmrg## than renaming). 1437e6fb56fSmrg if test -z "$gccflag"; then 1447e6fb56fSmrg gccflag=-MD, 1457e6fb56fSmrg fi 1467e6fb56fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 1477e6fb56fSmrg stat=$? 148983b4bf2Smrg if test $stat -eq 0; then : 149983b4bf2Smrg else 1507e6fb56fSmrg rm -f "$tmpdepfile" 1517e6fb56fSmrg exit $stat 1527e6fb56fSmrg fi 1537e6fb56fSmrg rm -f "$depfile" 1547e6fb56fSmrg echo "$object : \\" > "$depfile" 155983b4bf2Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156983b4bf2Smrg## The second -e expression handles DOS-style file names with drive letters. 1577e6fb56fSmrg sed -e 's/^[^:]*: / /' \ 1587e6fb56fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159983b4bf2Smrg## This next piece of magic avoids the `deleted header file' problem. 1607e6fb56fSmrg## The problem is that when a header file which appears in a .P file 1617e6fb56fSmrg## is deleted, the dependency causes make to die (because there is 1627e6fb56fSmrg## typically no way to rebuild the header). We avoid this by adding 1637e6fb56fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 1647e6fb56fSmrg## this for us directly. 165983b4bf2Smrg tr ' ' ' 166983b4bf2Smrg' < "$tmpdepfile" | 167983b4bf2Smrg## Some versions of gcc put a space before the `:'. On the theory 1687e6fb56fSmrg## that the space means something, we add a space to the output as 16990b17f1bSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 17090b17f1bSmrg## to the object. Take care to not repeat it in the output. 1717e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 1727e6fb56fSmrg## correctly. Breaking it into two sed invocations is a workaround. 173983b4bf2Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 174983b4bf2Smrg | sed -e 's/$/ :/' >> "$depfile" 1757e6fb56fSmrg rm -f "$tmpdepfile" 1767e6fb56fSmrg ;; 1777e6fb56fSmrg 1787e6fb56fSmrghp) 1797e6fb56fSmrg # This case exists only to let depend.m4 do its work. It works by 1807e6fb56fSmrg # looking at the text of this script. This case will never be run, 1817e6fb56fSmrg # since it is checked for above. 1827e6fb56fSmrg exit 1 1837e6fb56fSmrg ;; 1847e6fb56fSmrg 1857e6fb56fSmrgsgi) 1867e6fb56fSmrg if test "$libtool" = yes; then 1877e6fb56fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1887e6fb56fSmrg else 1897e6fb56fSmrg "$@" -MDupdate "$tmpdepfile" 1907e6fb56fSmrg fi 1917e6fb56fSmrg stat=$? 192983b4bf2Smrg if test $stat -eq 0; then : 193983b4bf2Smrg else 1947e6fb56fSmrg rm -f "$tmpdepfile" 1957e6fb56fSmrg exit $stat 1967e6fb56fSmrg fi 1977e6fb56fSmrg rm -f "$depfile" 1987e6fb56fSmrg 1997e6fb56fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2007e6fb56fSmrg echo "$object : \\" > "$depfile" 201983b4bf2Smrg 2027e6fb56fSmrg # Clip off the initial element (the dependent). Don't try to be 2037e6fb56fSmrg # clever and replace this with sed code, as IRIX sed won't handle 2047e6fb56fSmrg # lines with more than a fixed number of characters (4096 in 2057e6fb56fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206983b4bf2Smrg # the IRIX cc adds comments like `#:fec' to the end of the 2077e6fb56fSmrg # dependency line. 208983b4bf2Smrg tr ' ' ' 209983b4bf2Smrg' < "$tmpdepfile" \ 210983b4bf2Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211983b4bf2Smrg tr ' 212983b4bf2Smrg' ' ' >> "$depfile" 2137e6fb56fSmrg echo >> "$depfile" 214983b4bf2Smrg 2157e6fb56fSmrg # The second pass generates a dummy entry for each header file. 216983b4bf2Smrg tr ' ' ' 217983b4bf2Smrg' < "$tmpdepfile" \ 218983b4bf2Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 219983b4bf2Smrg >> "$depfile" 2207e6fb56fSmrg else 221983b4bf2Smrg # The sourcefile does not contain any dependencies, so just 222983b4bf2Smrg # store a dummy comment line, to avoid errors with the Makefile 223983b4bf2Smrg # "include basename.Plo" scheme. 224983b4bf2Smrg echo "#dummy" > "$depfile" 2257e6fb56fSmrg fi 2267e6fb56fSmrg rm -f "$tmpdepfile" 2277e6fb56fSmrg ;; 2287e6fb56fSmrg 2297e6fb56fSmrgaix) 2307e6fb56fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2317e6fb56fSmrg # in a .u file. In older versions, this file always lives in the 232983b4bf2Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2337e6fb56fSmrg # start of each line; $object doesn't have directory information. 2347e6fb56fSmrg # Version 6 uses the directory in both cases. 235983b4bf2Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 236983b4bf2Smrg test "x$dir" = "x$object" && dir= 237983b4bf2Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2387e6fb56fSmrg if test "$libtool" = yes; then 2397e6fb56fSmrg tmpdepfile1=$dir$base.u 2407e6fb56fSmrg tmpdepfile2=$base.u 2417e6fb56fSmrg tmpdepfile3=$dir.libs/$base.u 2427e6fb56fSmrg "$@" -Wc,-M 2437e6fb56fSmrg else 2447e6fb56fSmrg tmpdepfile1=$dir$base.u 2457e6fb56fSmrg tmpdepfile2=$dir$base.u 2467e6fb56fSmrg tmpdepfile3=$dir$base.u 2477e6fb56fSmrg "$@" -M 2487e6fb56fSmrg fi 2497e6fb56fSmrg stat=$? 250983b4bf2Smrg 251983b4bf2Smrg if test $stat -eq 0; then : 252983b4bf2Smrg else 2537e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2547e6fb56fSmrg exit $stat 2557e6fb56fSmrg fi 2567e6fb56fSmrg 2577e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2587e6fb56fSmrg do 2597e6fb56fSmrg test -f "$tmpdepfile" && break 2607e6fb56fSmrg done 261983b4bf2Smrg if test -f "$tmpdepfile"; then 262983b4bf2Smrg # Each line is of the form `foo.o: dependent.h'. 263983b4bf2Smrg # Do two passes, one to just change these to 264983b4bf2Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 265983b4bf2Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 266983b4bf2Smrg # That's a tab and a space in the []. 267983b4bf2Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268983b4bf2Smrg else 269983b4bf2Smrg # The sourcefile does not contain any dependencies, so just 270983b4bf2Smrg # store a dummy comment line, to avoid errors with the Makefile 271983b4bf2Smrg # "include basename.Plo" scheme. 272983b4bf2Smrg echo "#dummy" > "$depfile" 2737e6fb56fSmrg fi 2747e6fb56fSmrg rm -f "$tmpdepfile" 2757e6fb56fSmrg ;; 2767e6fb56fSmrg 277983b4bf2Smrgicc) 278983b4bf2Smrg # Intel's C compiler understands `-MD -MF file'. However on 279983b4bf2Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280983b4bf2Smrg # ICC 7.0 will fill foo.d with something like 281983b4bf2Smrg # foo.o: sub/foo.c 282983b4bf2Smrg # foo.o: sub/foo.h 283983b4bf2Smrg # which is wrong. We want: 284983b4bf2Smrg # sub/foo.o: sub/foo.c 285983b4bf2Smrg # sub/foo.o: sub/foo.h 286983b4bf2Smrg # sub/foo.c: 287983b4bf2Smrg # sub/foo.h: 288983b4bf2Smrg # ICC 7.1 will output 2897e6fb56fSmrg # foo.o: sub/foo.c sub/foo.h 290983b4bf2Smrg # and will wrap long lines using \ : 2917e6fb56fSmrg # foo.o: sub/foo.c ... \ 2927e6fb56fSmrg # sub/foo.h ... \ 2937e6fb56fSmrg # ... 294963d66acSmrg 295983b4bf2Smrg "$@" -MD -MF "$tmpdepfile" 296983b4bf2Smrg stat=$? 297983b4bf2Smrg if test $stat -eq 0; then : 298983b4bf2Smrg else 2997e6fb56fSmrg rm -f "$tmpdepfile" 3007e6fb56fSmrg exit $stat 3017e6fb56fSmrg fi 3027e6fb56fSmrg rm -f "$depfile" 303963d66acSmrg # Each line is of the form `foo.o: dependent.h', 304963d66acSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 3057e6fb56fSmrg # Do two passes, one to just change these to 306963d66acSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 307963d66acSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308963d66acSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 309963d66acSmrg # correctly. Breaking it into two sed invocations is a workaround. 310983b4bf2Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311983b4bf2Smrg sed -e 's/$/ :/' >> "$depfile" 3127e6fb56fSmrg rm -f "$tmpdepfile" 3137e6fb56fSmrg ;; 3147e6fb56fSmrg 3157e6fb56fSmrghp2) 3167e6fb56fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3177e6fb56fSmrg # compilers, which have integrated preprocessors. The correct option 3187e6fb56fSmrg # to use with these is +Maked; it writes dependencies to a file named 3197e6fb56fSmrg # 'foo.d', which lands next to the object file, wherever that 3207e6fb56fSmrg # happens to be. 3217e6fb56fSmrg # Much of this is similar to the tru64 case; see comments there. 322983b4bf2Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 323983b4bf2Smrg test "x$dir" = "x$object" && dir= 324983b4bf2Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3257e6fb56fSmrg if test "$libtool" = yes; then 3267e6fb56fSmrg tmpdepfile1=$dir$base.d 3277e6fb56fSmrg tmpdepfile2=$dir.libs/$base.d 3287e6fb56fSmrg "$@" -Wc,+Maked 3297e6fb56fSmrg else 3307e6fb56fSmrg tmpdepfile1=$dir$base.d 3317e6fb56fSmrg tmpdepfile2=$dir$base.d 3327e6fb56fSmrg "$@" +Maked 3337e6fb56fSmrg fi 3347e6fb56fSmrg stat=$? 335983b4bf2Smrg if test $stat -eq 0; then : 336983b4bf2Smrg else 3377e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3387e6fb56fSmrg exit $stat 3397e6fb56fSmrg fi 3407e6fb56fSmrg 3417e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3427e6fb56fSmrg do 3437e6fb56fSmrg test -f "$tmpdepfile" && break 3447e6fb56fSmrg done 3457e6fb56fSmrg if test -f "$tmpdepfile"; then 346983b4bf2Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 347983b4bf2Smrg # Add `dependent.h:' lines. 3487e6fb56fSmrg sed -ne '2,${ 349983b4bf2Smrg s/^ *// 350983b4bf2Smrg s/ \\*$// 351983b4bf2Smrg s/$/:/ 352983b4bf2Smrg p 353983b4bf2Smrg }' "$tmpdepfile" >> "$depfile" 3547e6fb56fSmrg else 355983b4bf2Smrg echo "#dummy" > "$depfile" 3567e6fb56fSmrg fi 3577e6fb56fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3587e6fb56fSmrg ;; 3597e6fb56fSmrg 3607e6fb56fSmrgtru64) 361983b4bf2Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 362983b4bf2Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363983b4bf2Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364983b4bf2Smrg # dependencies in `foo.d' instead, so we check for that too. 365983b4bf2Smrg # Subdirectories are respected. 366983b4bf2Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367983b4bf2Smrg test "x$dir" = "x$object" && dir= 368983b4bf2Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369983b4bf2Smrg 370983b4bf2Smrg if test "$libtool" = yes; then 371983b4bf2Smrg # With Tru64 cc, shared objects can also be used to make a 372983b4bf2Smrg # static library. This mechanism is used in libtool 1.4 series to 373983b4bf2Smrg # handle both shared and static libraries in a single compilation. 374983b4bf2Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375983b4bf2Smrg # 376983b4bf2Smrg # With libtool 1.5 this exception was removed, and libtool now 377983b4bf2Smrg # generates 2 separate objects for the 2 libraries. These two 378983b4bf2Smrg # compilations output dependencies in $dir.libs/$base.o.d and 379983b4bf2Smrg # in $dir$base.o.d. We have to check for both files, because 380983b4bf2Smrg # one of the two compilations can be disabled. We should prefer 381983b4bf2Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382983b4bf2Smrg # automatically cleaned when .libs/ is deleted, while ignoring 383983b4bf2Smrg # the former would cause a distcleancheck panic. 384983b4bf2Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385983b4bf2Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386983b4bf2Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387983b4bf2Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388983b4bf2Smrg "$@" -Wc,-MD 389983b4bf2Smrg else 390983b4bf2Smrg tmpdepfile1=$dir$base.o.d 391983b4bf2Smrg tmpdepfile2=$dir$base.d 392983b4bf2Smrg tmpdepfile3=$dir$base.d 393983b4bf2Smrg tmpdepfile4=$dir$base.d 394983b4bf2Smrg "$@" -MD 395983b4bf2Smrg fi 396983b4bf2Smrg 397983b4bf2Smrg stat=$? 398983b4bf2Smrg if test $stat -eq 0; then : 399983b4bf2Smrg else 400983b4bf2Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401983b4bf2Smrg exit $stat 402983b4bf2Smrg fi 403983b4bf2Smrg 404983b4bf2Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405983b4bf2Smrg do 406983b4bf2Smrg test -f "$tmpdepfile" && break 407983b4bf2Smrg done 408983b4bf2Smrg if test -f "$tmpdepfile"; then 409983b4bf2Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410983b4bf2Smrg # That's a tab and a space in the []. 411983b4bf2Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412983b4bf2Smrg else 413983b4bf2Smrg echo "#dummy" > "$depfile" 414983b4bf2Smrg fi 415983b4bf2Smrg rm -f "$tmpdepfile" 416983b4bf2Smrg ;; 4177e6fb56fSmrg 41890b17f1bSmrgmsvc7) 41990b17f1bSmrg if test "$libtool" = yes; then 42090b17f1bSmrg showIncludes=-Wc,-showIncludes 42190b17f1bSmrg else 42290b17f1bSmrg showIncludes=-showIncludes 42390b17f1bSmrg fi 42490b17f1bSmrg "$@" $showIncludes > "$tmpdepfile" 42590b17f1bSmrg stat=$? 42690b17f1bSmrg grep -v '^Note: including file: ' "$tmpdepfile" 427983b4bf2Smrg if test "$stat" = 0; then : 428983b4bf2Smrg else 42990b17f1bSmrg rm -f "$tmpdepfile" 43090b17f1bSmrg exit $stat 43190b17f1bSmrg fi 43290b17f1bSmrg rm -f "$depfile" 43390b17f1bSmrg echo "$object : \\" > "$depfile" 43490b17f1bSmrg # The first sed program below extracts the file names and escapes 43590b17f1bSmrg # backslashes for cygpath. The second sed program outputs the file 43690b17f1bSmrg # name when reading, but also accumulates all include files in the 43790b17f1bSmrg # hold buffer in order to output them again at the end. This only 43890b17f1bSmrg # works with sed implementations that can handle large buffers. 43990b17f1bSmrg sed < "$tmpdepfile" -n ' 44090b17f1bSmrg/^Note: including file: *\(.*\)/ { 44190b17f1bSmrg s//\1/ 44290b17f1bSmrg s/\\/\\\\/g 44390b17f1bSmrg p 44490b17f1bSmrg}' | $cygpath_u | sort -u | sed -n ' 44590b17f1bSmrgs/ /\\ /g 446983b4bf2Smrgs/\(.*\)/ \1 \\/p 44790b17f1bSmrgs/.\(.*\) \\/\1:/ 44890b17f1bSmrgH 44990b17f1bSmrg$ { 450983b4bf2Smrg s/.*/ / 45190b17f1bSmrg G 45290b17f1bSmrg p 45390b17f1bSmrg}' >> "$depfile" 45490b17f1bSmrg rm -f "$tmpdepfile" 45590b17f1bSmrg ;; 45690b17f1bSmrg 45790b17f1bSmrgmsvc7msys) 45890b17f1bSmrg # This case exists only to let depend.m4 do its work. It works by 45990b17f1bSmrg # looking at the text of this script. This case will never be run, 46090b17f1bSmrg # since it is checked for above. 46190b17f1bSmrg exit 1 46290b17f1bSmrg ;; 46390b17f1bSmrg 4647e6fb56fSmrg#nosideeffect) 4657e6fb56fSmrg # This comment above is used by automake to tell side-effect 4667e6fb56fSmrg # dependency tracking mechanisms from slower ones. 4677e6fb56fSmrg 4687e6fb56fSmrgdashmstdout) 4697e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 4707e6fb56fSmrg # always write the preprocessed file to stdout, regardless of -o. 4717e6fb56fSmrg "$@" || exit $? 4727e6fb56fSmrg 4737e6fb56fSmrg # Remove the call to Libtool. 4747e6fb56fSmrg if test "$libtool" = yes; then 4757e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 4767e6fb56fSmrg shift 4777e6fb56fSmrg done 4787e6fb56fSmrg shift 4797e6fb56fSmrg fi 4807e6fb56fSmrg 481983b4bf2Smrg # Remove `-o $object'. 4827e6fb56fSmrg IFS=" " 4837e6fb56fSmrg for arg 4847e6fb56fSmrg do 4857e6fb56fSmrg case $arg in 4867e6fb56fSmrg -o) 4877e6fb56fSmrg shift 4887e6fb56fSmrg ;; 4897e6fb56fSmrg $object) 4907e6fb56fSmrg shift 4917e6fb56fSmrg ;; 4927e6fb56fSmrg *) 4937e6fb56fSmrg set fnord "$@" "$arg" 4947e6fb56fSmrg shift # fnord 4957e6fb56fSmrg shift # $arg 4967e6fb56fSmrg ;; 4977e6fb56fSmrg esac 4987e6fb56fSmrg done 4997e6fb56fSmrg 5007e6fb56fSmrg test -z "$dashmflag" && dashmflag=-M 501983b4bf2Smrg # Require at least two characters before searching for `:' 5027e6fb56fSmrg # in the target name. This is to cope with DOS-style filenames: 503983b4bf2Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 5047e6fb56fSmrg "$@" $dashmflag | 505983b4bf2Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 5067e6fb56fSmrg rm -f "$depfile" 5077e6fb56fSmrg cat < "$tmpdepfile" > "$depfile" 508983b4bf2Smrg tr ' ' ' 509983b4bf2Smrg' < "$tmpdepfile" | \ 510983b4bf2Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 511983b4bf2Smrg## correctly. Breaking it into two sed invocations is a workaround. 512983b4bf2Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5137e6fb56fSmrg rm -f "$tmpdepfile" 5147e6fb56fSmrg ;; 5157e6fb56fSmrg 5167e6fb56fSmrgdashXmstdout) 5177e6fb56fSmrg # This case only exists to satisfy depend.m4. It is never actually 5187e6fb56fSmrg # run, as this mode is specially recognized in the preamble. 5197e6fb56fSmrg exit 1 5207e6fb56fSmrg ;; 5217e6fb56fSmrg 5227e6fb56fSmrgmakedepend) 5237e6fb56fSmrg "$@" || exit $? 5247e6fb56fSmrg # Remove any Libtool call 5257e6fb56fSmrg if test "$libtool" = yes; then 5267e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 5277e6fb56fSmrg shift 5287e6fb56fSmrg done 5297e6fb56fSmrg shift 5307e6fb56fSmrg fi 5317e6fb56fSmrg # X makedepend 5327e6fb56fSmrg shift 5337e6fb56fSmrg cleared=no eat=no 5347e6fb56fSmrg for arg 5357e6fb56fSmrg do 5367e6fb56fSmrg case $cleared in 5377e6fb56fSmrg no) 5387e6fb56fSmrg set ""; shift 5397e6fb56fSmrg cleared=yes ;; 5407e6fb56fSmrg esac 5417e6fb56fSmrg if test $eat = yes; then 5427e6fb56fSmrg eat=no 5437e6fb56fSmrg continue 5447e6fb56fSmrg fi 5457e6fb56fSmrg case "$arg" in 5467e6fb56fSmrg -D*|-I*) 5477e6fb56fSmrg set fnord "$@" "$arg"; shift ;; 5487e6fb56fSmrg # Strip any option that makedepend may not understand. Remove 5497e6fb56fSmrg # the object too, otherwise makedepend will parse it as a source file. 5507e6fb56fSmrg -arch) 5517e6fb56fSmrg eat=yes ;; 5527e6fb56fSmrg -*|$object) 5537e6fb56fSmrg ;; 5547e6fb56fSmrg *) 5557e6fb56fSmrg set fnord "$@" "$arg"; shift ;; 5567e6fb56fSmrg esac 5577e6fb56fSmrg done 5587e6fb56fSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5597e6fb56fSmrg touch "$tmpdepfile" 5607e6fb56fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5617e6fb56fSmrg rm -f "$depfile" 56290b17f1bSmrg # makedepend may prepend the VPATH from the source file name to the object. 56390b17f1bSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 56490b17f1bSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565983b4bf2Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566983b4bf2Smrg' | \ 567983b4bf2Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 568983b4bf2Smrg## correctly. Breaking it into two sed invocations is a workaround. 569983b4bf2Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5707e6fb56fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5717e6fb56fSmrg ;; 5727e6fb56fSmrg 5737e6fb56fSmrgcpp) 5747e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 5757e6fb56fSmrg # always write the preprocessed file to stdout. 5767e6fb56fSmrg "$@" || exit $? 5777e6fb56fSmrg 5787e6fb56fSmrg # Remove the call to Libtool. 5797e6fb56fSmrg if test "$libtool" = yes; then 5807e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 5817e6fb56fSmrg shift 5827e6fb56fSmrg done 5837e6fb56fSmrg shift 5847e6fb56fSmrg fi 5857e6fb56fSmrg 586983b4bf2Smrg # Remove `-o $object'. 5877e6fb56fSmrg IFS=" " 5887e6fb56fSmrg for arg 5897e6fb56fSmrg do 5907e6fb56fSmrg case $arg in 5917e6fb56fSmrg -o) 5927e6fb56fSmrg shift 5937e6fb56fSmrg ;; 5947e6fb56fSmrg $object) 5957e6fb56fSmrg shift 5967e6fb56fSmrg ;; 5977e6fb56fSmrg *) 5987e6fb56fSmrg set fnord "$@" "$arg" 5997e6fb56fSmrg shift # fnord 6007e6fb56fSmrg shift # $arg 6017e6fb56fSmrg ;; 6027e6fb56fSmrg esac 6037e6fb56fSmrg done 6047e6fb56fSmrg 605983b4bf2Smrg "$@" -E | 606983b4bf2Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607983b4bf2Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608983b4bf2Smrg sed '$ s: \\$::' > "$tmpdepfile" 6097e6fb56fSmrg rm -f "$depfile" 6107e6fb56fSmrg echo "$object : \\" > "$depfile" 6117e6fb56fSmrg cat < "$tmpdepfile" >> "$depfile" 6127e6fb56fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6137e6fb56fSmrg rm -f "$tmpdepfile" 6147e6fb56fSmrg ;; 6157e6fb56fSmrg 6167e6fb56fSmrgmsvisualcpp) 6177e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 6187e6fb56fSmrg # always write the preprocessed file to stdout. 6197e6fb56fSmrg "$@" || exit $? 6207e6fb56fSmrg 6217e6fb56fSmrg # Remove the call to Libtool. 6227e6fb56fSmrg if test "$libtool" = yes; then 6237e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 6247e6fb56fSmrg shift 6257e6fb56fSmrg done 6267e6fb56fSmrg shift 6277e6fb56fSmrg fi 6287e6fb56fSmrg 6297e6fb56fSmrg IFS=" " 6307e6fb56fSmrg for arg 6317e6fb56fSmrg do 6327e6fb56fSmrg case "$arg" in 6337e6fb56fSmrg -o) 6347e6fb56fSmrg shift 6357e6fb56fSmrg ;; 6367e6fb56fSmrg $object) 6377e6fb56fSmrg shift 6387e6fb56fSmrg ;; 6397e6fb56fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640983b4bf2Smrg set fnord "$@" 641983b4bf2Smrg shift 642983b4bf2Smrg shift 643983b4bf2Smrg ;; 6447e6fb56fSmrg *) 645983b4bf2Smrg set fnord "$@" "$arg" 646983b4bf2Smrg shift 647983b4bf2Smrg shift 648983b4bf2Smrg ;; 6497e6fb56fSmrg esac 6507e6fb56fSmrg done 6517e6fb56fSmrg "$@" -E 2>/dev/null | 6527e6fb56fSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 6537e6fb56fSmrg rm -f "$depfile" 6547e6fb56fSmrg echo "$object : \\" > "$depfile" 655983b4bf2Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656983b4bf2Smrg echo " " >> "$depfile" 6577e6fb56fSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6587e6fb56fSmrg rm -f "$tmpdepfile" 6597e6fb56fSmrg ;; 6607e6fb56fSmrg 6617e6fb56fSmrgmsvcmsys) 6627e6fb56fSmrg # This case exists only to let depend.m4 do its work. It works by 6637e6fb56fSmrg # looking at the text of this script. This case will never be run, 6647e6fb56fSmrg # since it is checked for above. 6657e6fb56fSmrg exit 1 6667e6fb56fSmrg ;; 6677e6fb56fSmrg 6687e6fb56fSmrgnone) 6697e6fb56fSmrg exec "$@" 6707e6fb56fSmrg ;; 6717e6fb56fSmrg 6727e6fb56fSmrg*) 6737e6fb56fSmrg echo "Unknown depmode $depmode" 1>&2 6747e6fb56fSmrg exit 1 6757e6fb56fSmrg ;; 6767e6fb56fSmrgesac 6777e6fb56fSmrg 6787e6fb56fSmrgexit 0 6797e6fb56fSmrg 6807e6fb56fSmrg# Local Variables: 6817e6fb56fSmrg# mode: shell-script 6827e6fb56fSmrg# sh-indentation: 2 6837e6fb56fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6847e6fb56fSmrg# time-stamp-start: "scriptversion=" 6857e6fb56fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6867e6fb56fSmrg# time-stamp-time-zone: "UTC" 6877e6fb56fSmrg# time-stamp-end: "; # UTC" 6887e6fb56fSmrg# End: 689