depcomp revision 8fff3f40
1e6232409Smrg#! /bin/sh 2e6232409Smrg# depcomp - compile a program generating dependencies as side-effects 3e6232409Smrg 48fff3f40Smrgscriptversion=2009-04-28.21; # UTC 5e6232409Smrg 68fff3f40Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 78fff3f40Smrg# Software Foundation, Inc. 8e6232409Smrg 9e6232409Smrg# This program is free software; you can redistribute it and/or modify 10e6232409Smrg# it under the terms of the GNU General Public License as published by 11e6232409Smrg# the Free Software Foundation; either version 2, or (at your option) 12e6232409Smrg# any later version. 13e6232409Smrg 14e6232409Smrg# This program is distributed in the hope that it will be useful, 15e6232409Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16e6232409Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17e6232409Smrg# GNU General Public License for more details. 18e6232409Smrg 19e6232409Smrg# You should have received a copy of the GNU General Public License 208fff3f40Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21e6232409Smrg 22e6232409Smrg# As a special exception to the GNU General Public License, if you 23e6232409Smrg# distribute this file as part of a program that contains a 24e6232409Smrg# configuration script generated by Autoconf, you may include it under 25e6232409Smrg# the same distribution terms that you use for the rest of that program. 26e6232409Smrg 27e6232409Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28e6232409Smrg 29e6232409Smrgcase $1 in 30e6232409Smrg '') 31e6232409Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32e6232409Smrg exit 1; 33e6232409Smrg ;; 34e6232409Smrg -h | --h*) 35e6232409Smrg cat <<\EOF 36e6232409SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37e6232409Smrg 38e6232409SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39e6232409Smrgas side-effects. 40e6232409Smrg 41e6232409SmrgEnvironment variables: 42e6232409Smrg depmode Dependency tracking mode. 43e6232409Smrg source Source file read by `PROGRAMS ARGS'. 44e6232409Smrg object Object file output by `PROGRAMS ARGS'. 45e6232409Smrg DEPDIR directory where to store dependencies. 46e6232409Smrg depfile Dependency file to output. 47e6232409Smrg tmpdepfile Temporary file to use when outputing dependencies. 48e6232409Smrg libtool Whether libtool is used (yes/no). 49e6232409Smrg 50e6232409SmrgReport bugs to <bug-automake@gnu.org>. 51e6232409SmrgEOF 52e6232409Smrg exit $? 53e6232409Smrg ;; 54e6232409Smrg -v | --v*) 55e6232409Smrg echo "depcomp $scriptversion" 56e6232409Smrg exit $? 57e6232409Smrg ;; 58e6232409Smrgesac 59e6232409Smrg 60e6232409Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61e6232409Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62e6232409Smrg exit 1 63e6232409Smrgfi 64e6232409Smrg 65e6232409Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66e6232409Smrgdepfile=${depfile-`echo "$object" | 67e6232409Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68e6232409Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69e6232409Smrg 70e6232409Smrgrm -f "$tmpdepfile" 71e6232409Smrg 72e6232409Smrg# Some modes work just like other modes, but use different flags. We 73e6232409Smrg# parameterize here, but still list the modes in the big case below, 74e6232409Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75e6232409Smrg# here, because this file can only contain one case statement. 76e6232409Smrgif test "$depmode" = hp; then 77e6232409Smrg # HP compiler uses -M and no extra arg. 78e6232409Smrg gccflag=-M 79e6232409Smrg depmode=gcc 80e6232409Smrgfi 81e6232409Smrg 82e6232409Smrgif test "$depmode" = dashXmstdout; then 83e6232409Smrg # This is just like dashmstdout with a different argument. 84e6232409Smrg dashmflag=-xM 85e6232409Smrg depmode=dashmstdout 86e6232409Smrgfi 87e6232409Smrg 888fff3f40Smrgcygpath_u="cygpath -u -f -" 898fff3f40Smrgif test "$depmode" = msvcmsys; then 908fff3f40Smrg # This is just like msvisualcpp but w/o cygpath translation. 918fff3f40Smrg # Just convert the backslash-escaped backslashes to single forward 928fff3f40Smrg # slashes to satisfy depend.m4 938fff3f40Smrg cygpath_u="sed s,\\\\\\\\,/,g" 948fff3f40Smrg depmode=msvisualcpp 958fff3f40Smrgfi 968fff3f40Smrg 97e6232409Smrgcase "$depmode" in 98e6232409Smrggcc3) 99e6232409Smrg## gcc 3 implements dependency tracking that does exactly what 100e6232409Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101e6232409Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1028fff3f40Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1038fff3f40Smrg## the command line argument order; so add the flags where they 1048fff3f40Smrg## appear in depend2.am. Note that the slowdown incurred here 1058fff3f40Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1068fff3f40Smrg for arg 1078fff3f40Smrg do 1088fff3f40Smrg case $arg in 1098fff3f40Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1108fff3f40Smrg *) set fnord "$@" "$arg" ;; 1118fff3f40Smrg esac 1128fff3f40Smrg shift # fnord 1138fff3f40Smrg shift # $arg 1148fff3f40Smrg done 1158fff3f40Smrg "$@" 116e6232409Smrg stat=$? 117e6232409Smrg if test $stat -eq 0; then : 118e6232409Smrg else 119e6232409Smrg rm -f "$tmpdepfile" 120e6232409Smrg exit $stat 121e6232409Smrg fi 122e6232409Smrg mv "$tmpdepfile" "$depfile" 123e6232409Smrg ;; 124e6232409Smrg 125e6232409Smrggcc) 126e6232409Smrg## There are various ways to get dependency output from gcc. Here's 127e6232409Smrg## why we pick this rather obscure method: 128e6232409Smrg## - Don't want to use -MD because we'd like the dependencies to end 129e6232409Smrg## up in a subdir. Having to rename by hand is ugly. 130e6232409Smrg## (We might end up doing this anyway to support other compilers.) 131e6232409Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132e6232409Smrg## -MM, not -M (despite what the docs say). 133e6232409Smrg## - Using -M directly means running the compiler twice (even worse 134e6232409Smrg## than renaming). 135e6232409Smrg if test -z "$gccflag"; then 136e6232409Smrg gccflag=-MD, 137e6232409Smrg fi 138e6232409Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139e6232409Smrg stat=$? 140e6232409Smrg if test $stat -eq 0; then : 141e6232409Smrg else 142e6232409Smrg rm -f "$tmpdepfile" 143e6232409Smrg exit $stat 144e6232409Smrg fi 145e6232409Smrg rm -f "$depfile" 146e6232409Smrg echo "$object : \\" > "$depfile" 147e6232409Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148e6232409Smrg## The second -e expression handles DOS-style file names with drive letters. 149e6232409Smrg sed -e 's/^[^:]*: / /' \ 150e6232409Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151e6232409Smrg## This next piece of magic avoids the `deleted header file' problem. 152e6232409Smrg## The problem is that when a header file which appears in a .P file 153e6232409Smrg## is deleted, the dependency causes make to die (because there is 154e6232409Smrg## typically no way to rebuild the header). We avoid this by adding 155e6232409Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156e6232409Smrg## this for us directly. 157e6232409Smrg tr ' ' ' 158e6232409Smrg' < "$tmpdepfile" | 159e6232409Smrg## Some versions of gcc put a space before the `:'. On the theory 160e6232409Smrg## that the space means something, we add a space to the output as 161e6232409Smrg## well. 162e6232409Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163e6232409Smrg## correctly. Breaking it into two sed invocations is a workaround. 164e6232409Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165e6232409Smrg rm -f "$tmpdepfile" 166e6232409Smrg ;; 167e6232409Smrg 168e6232409Smrghp) 169e6232409Smrg # This case exists only to let depend.m4 do its work. It works by 170e6232409Smrg # looking at the text of this script. This case will never be run, 171e6232409Smrg # since it is checked for above. 172e6232409Smrg exit 1 173e6232409Smrg ;; 174e6232409Smrg 175e6232409Smrgsgi) 176e6232409Smrg if test "$libtool" = yes; then 177e6232409Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178e6232409Smrg else 179e6232409Smrg "$@" -MDupdate "$tmpdepfile" 180e6232409Smrg fi 181e6232409Smrg stat=$? 182e6232409Smrg if test $stat -eq 0; then : 183e6232409Smrg else 184e6232409Smrg rm -f "$tmpdepfile" 185e6232409Smrg exit $stat 186e6232409Smrg fi 187e6232409Smrg rm -f "$depfile" 188e6232409Smrg 189e6232409Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190e6232409Smrg echo "$object : \\" > "$depfile" 191e6232409Smrg 192e6232409Smrg # Clip off the initial element (the dependent). Don't try to be 193e6232409Smrg # clever and replace this with sed code, as IRIX sed won't handle 194e6232409Smrg # lines with more than a fixed number of characters (4096 in 195e6232409Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196e6232409Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197e6232409Smrg # dependency line. 198e6232409Smrg tr ' ' ' 199e6232409Smrg' < "$tmpdepfile" \ 200e6232409Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201e6232409Smrg tr ' 2028fff3f40Smrg' ' ' >> "$depfile" 2038fff3f40Smrg echo >> "$depfile" 204e6232409Smrg 205e6232409Smrg # The second pass generates a dummy entry for each header file. 206e6232409Smrg tr ' ' ' 207e6232409Smrg' < "$tmpdepfile" \ 208e6232409Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2098fff3f40Smrg >> "$depfile" 210e6232409Smrg else 211e6232409Smrg # The sourcefile does not contain any dependencies, so just 212e6232409Smrg # store a dummy comment line, to avoid errors with the Makefile 213e6232409Smrg # "include basename.Plo" scheme. 214e6232409Smrg echo "#dummy" > "$depfile" 215e6232409Smrg fi 216e6232409Smrg rm -f "$tmpdepfile" 217e6232409Smrg ;; 218e6232409Smrg 219e6232409Smrgaix) 220e6232409Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221e6232409Smrg # in a .u file. In older versions, this file always lives in the 222e6232409Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223e6232409Smrg # start of each line; $object doesn't have directory information. 224e6232409Smrg # Version 6 uses the directory in both cases. 2258fff3f40Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2268fff3f40Smrg test "x$dir" = "x$object" && dir= 2278fff3f40Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228e6232409Smrg if test "$libtool" = yes; then 2298fff3f40Smrg tmpdepfile1=$dir$base.u 2308fff3f40Smrg tmpdepfile2=$base.u 2318fff3f40Smrg tmpdepfile3=$dir.libs/$base.u 232e6232409Smrg "$@" -Wc,-M 233e6232409Smrg else 2348fff3f40Smrg tmpdepfile1=$dir$base.u 2358fff3f40Smrg tmpdepfile2=$dir$base.u 2368fff3f40Smrg tmpdepfile3=$dir$base.u 237e6232409Smrg "$@" -M 238e6232409Smrg fi 239e6232409Smrg stat=$? 240e6232409Smrg 241e6232409Smrg if test $stat -eq 0; then : 242e6232409Smrg else 2438fff3f40Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244e6232409Smrg exit $stat 245e6232409Smrg fi 246e6232409Smrg 2478fff3f40Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2488fff3f40Smrg do 2498fff3f40Smrg test -f "$tmpdepfile" && break 2508fff3f40Smrg done 251e6232409Smrg if test -f "$tmpdepfile"; then 252e6232409Smrg # Each line is of the form `foo.o: dependent.h'. 253e6232409Smrg # Do two passes, one to just change these to 254e6232409Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2558fff3f40Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2568fff3f40Smrg # That's a tab and a space in the []. 2578fff3f40Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258e6232409Smrg else 259e6232409Smrg # The sourcefile does not contain any dependencies, so just 260e6232409Smrg # store a dummy comment line, to avoid errors with the Makefile 261e6232409Smrg # "include basename.Plo" scheme. 262e6232409Smrg echo "#dummy" > "$depfile" 263e6232409Smrg fi 264e6232409Smrg rm -f "$tmpdepfile" 265e6232409Smrg ;; 266e6232409Smrg 267e6232409Smrgicc) 268e6232409Smrg # Intel's C compiler understands `-MD -MF file'. However on 269e6232409Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270e6232409Smrg # ICC 7.0 will fill foo.d with something like 271e6232409Smrg # foo.o: sub/foo.c 272e6232409Smrg # foo.o: sub/foo.h 273e6232409Smrg # which is wrong. We want: 274e6232409Smrg # sub/foo.o: sub/foo.c 275e6232409Smrg # sub/foo.o: sub/foo.h 276e6232409Smrg # sub/foo.c: 277e6232409Smrg # sub/foo.h: 278e6232409Smrg # ICC 7.1 will output 279e6232409Smrg # foo.o: sub/foo.c sub/foo.h 280e6232409Smrg # and will wrap long lines using \ : 281e6232409Smrg # foo.o: sub/foo.c ... \ 282e6232409Smrg # sub/foo.h ... \ 283e6232409Smrg # ... 284e6232409Smrg 285e6232409Smrg "$@" -MD -MF "$tmpdepfile" 286e6232409Smrg stat=$? 287e6232409Smrg if test $stat -eq 0; then : 288e6232409Smrg else 289e6232409Smrg rm -f "$tmpdepfile" 290e6232409Smrg exit $stat 291e6232409Smrg fi 292e6232409Smrg rm -f "$depfile" 293e6232409Smrg # Each line is of the form `foo.o: dependent.h', 294e6232409Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295e6232409Smrg # Do two passes, one to just change these to 296e6232409Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297e6232409Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298e6232409Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299e6232409Smrg # correctly. Breaking it into two sed invocations is a workaround. 300e6232409Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301e6232409Smrg sed -e 's/$/ :/' >> "$depfile" 302e6232409Smrg rm -f "$tmpdepfile" 303e6232409Smrg ;; 304e6232409Smrg 3058fff3f40Smrghp2) 3068fff3f40Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3078fff3f40Smrg # compilers, which have integrated preprocessors. The correct option 3088fff3f40Smrg # to use with these is +Maked; it writes dependencies to a file named 3098fff3f40Smrg # 'foo.d', which lands next to the object file, wherever that 3108fff3f40Smrg # happens to be. 3118fff3f40Smrg # Much of this is similar to the tru64 case; see comments there. 3128fff3f40Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3138fff3f40Smrg test "x$dir" = "x$object" && dir= 3148fff3f40Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3158fff3f40Smrg if test "$libtool" = yes; then 3168fff3f40Smrg tmpdepfile1=$dir$base.d 3178fff3f40Smrg tmpdepfile2=$dir.libs/$base.d 3188fff3f40Smrg "$@" -Wc,+Maked 3198fff3f40Smrg else 3208fff3f40Smrg tmpdepfile1=$dir$base.d 3218fff3f40Smrg tmpdepfile2=$dir$base.d 3228fff3f40Smrg "$@" +Maked 3238fff3f40Smrg fi 3248fff3f40Smrg stat=$? 3258fff3f40Smrg if test $stat -eq 0; then : 3268fff3f40Smrg else 3278fff3f40Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3288fff3f40Smrg exit $stat 3298fff3f40Smrg fi 3308fff3f40Smrg 3318fff3f40Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3328fff3f40Smrg do 3338fff3f40Smrg test -f "$tmpdepfile" && break 3348fff3f40Smrg done 3358fff3f40Smrg if test -f "$tmpdepfile"; then 3368fff3f40Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3378fff3f40Smrg # Add `dependent.h:' lines. 3388fff3f40Smrg sed -ne '2,${ 3398fff3f40Smrg s/^ *// 3408fff3f40Smrg s/ \\*$// 3418fff3f40Smrg s/$/:/ 3428fff3f40Smrg p 3438fff3f40Smrg }' "$tmpdepfile" >> "$depfile" 3448fff3f40Smrg else 3458fff3f40Smrg echo "#dummy" > "$depfile" 3468fff3f40Smrg fi 3478fff3f40Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3488fff3f40Smrg ;; 3498fff3f40Smrg 350e6232409Smrgtru64) 351e6232409Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352e6232409Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353e6232409Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354e6232409Smrg # dependencies in `foo.d' instead, so we check for that too. 355e6232409Smrg # Subdirectories are respected. 356e6232409Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357e6232409Smrg test "x$dir" = "x$object" && dir= 358e6232409Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359e6232409Smrg 360e6232409Smrg if test "$libtool" = yes; then 361e6232409Smrg # With Tru64 cc, shared objects can also be used to make a 3628fff3f40Smrg # static library. This mechanism is used in libtool 1.4 series to 363e6232409Smrg # handle both shared and static libraries in a single compilation. 364e6232409Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365e6232409Smrg # 366e6232409Smrg # With libtool 1.5 this exception was removed, and libtool now 367e6232409Smrg # generates 2 separate objects for the 2 libraries. These two 3688fff3f40Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369e6232409Smrg # in $dir$base.o.d. We have to check for both files, because 370e6232409Smrg # one of the two compilations can be disabled. We should prefer 371e6232409Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372e6232409Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373e6232409Smrg # the former would cause a distcleancheck panic. 374e6232409Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375e6232409Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376e6232409Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377e6232409Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378e6232409Smrg "$@" -Wc,-MD 379e6232409Smrg else 380e6232409Smrg tmpdepfile1=$dir$base.o.d 381e6232409Smrg tmpdepfile2=$dir$base.d 382e6232409Smrg tmpdepfile3=$dir$base.d 383e6232409Smrg tmpdepfile4=$dir$base.d 384e6232409Smrg "$@" -MD 385e6232409Smrg fi 386e6232409Smrg 387e6232409Smrg stat=$? 388e6232409Smrg if test $stat -eq 0; then : 389e6232409Smrg else 390e6232409Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391e6232409Smrg exit $stat 392e6232409Smrg fi 393e6232409Smrg 394e6232409Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395e6232409Smrg do 396e6232409Smrg test -f "$tmpdepfile" && break 397e6232409Smrg done 398e6232409Smrg if test -f "$tmpdepfile"; then 399e6232409Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400e6232409Smrg # That's a tab and a space in the []. 401e6232409Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402e6232409Smrg else 403e6232409Smrg echo "#dummy" > "$depfile" 404e6232409Smrg fi 405e6232409Smrg rm -f "$tmpdepfile" 406e6232409Smrg ;; 407e6232409Smrg 408e6232409Smrg#nosideeffect) 409e6232409Smrg # This comment above is used by automake to tell side-effect 410e6232409Smrg # dependency tracking mechanisms from slower ones. 411e6232409Smrg 412e6232409Smrgdashmstdout) 413e6232409Smrg # Important note: in order to support this mode, a compiler *must* 414e6232409Smrg # always write the preprocessed file to stdout, regardless of -o. 415e6232409Smrg "$@" || exit $? 416e6232409Smrg 417e6232409Smrg # Remove the call to Libtool. 418e6232409Smrg if test "$libtool" = yes; then 4198fff3f40Smrg while test "X$1" != 'X--mode=compile'; do 420e6232409Smrg shift 421e6232409Smrg done 422e6232409Smrg shift 423e6232409Smrg fi 424e6232409Smrg 425e6232409Smrg # Remove `-o $object'. 426e6232409Smrg IFS=" " 427e6232409Smrg for arg 428e6232409Smrg do 429e6232409Smrg case $arg in 430e6232409Smrg -o) 431e6232409Smrg shift 432e6232409Smrg ;; 433e6232409Smrg $object) 434e6232409Smrg shift 435e6232409Smrg ;; 436e6232409Smrg *) 437e6232409Smrg set fnord "$@" "$arg" 438e6232409Smrg shift # fnord 439e6232409Smrg shift # $arg 440e6232409Smrg ;; 441e6232409Smrg esac 442e6232409Smrg done 443e6232409Smrg 444e6232409Smrg test -z "$dashmflag" && dashmflag=-M 445e6232409Smrg # Require at least two characters before searching for `:' 446e6232409Smrg # in the target name. This is to cope with DOS-style filenames: 447e6232409Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448e6232409Smrg "$@" $dashmflag | 449e6232409Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450e6232409Smrg rm -f "$depfile" 451e6232409Smrg cat < "$tmpdepfile" > "$depfile" 452e6232409Smrg tr ' ' ' 453e6232409Smrg' < "$tmpdepfile" | \ 454e6232409Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455e6232409Smrg## correctly. Breaking it into two sed invocations is a workaround. 456e6232409Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457e6232409Smrg rm -f "$tmpdepfile" 458e6232409Smrg ;; 459e6232409Smrg 460e6232409SmrgdashXmstdout) 461e6232409Smrg # This case only exists to satisfy depend.m4. It is never actually 462e6232409Smrg # run, as this mode is specially recognized in the preamble. 463e6232409Smrg exit 1 464e6232409Smrg ;; 465e6232409Smrg 466e6232409Smrgmakedepend) 467e6232409Smrg "$@" || exit $? 468e6232409Smrg # Remove any Libtool call 469e6232409Smrg if test "$libtool" = yes; then 4708fff3f40Smrg while test "X$1" != 'X--mode=compile'; do 471e6232409Smrg shift 472e6232409Smrg done 473e6232409Smrg shift 474e6232409Smrg fi 475e6232409Smrg # X makedepend 476e6232409Smrg shift 4778fff3f40Smrg cleared=no eat=no 4788fff3f40Smrg for arg 4798fff3f40Smrg do 480e6232409Smrg case $cleared in 481e6232409Smrg no) 482e6232409Smrg set ""; shift 483e6232409Smrg cleared=yes ;; 484e6232409Smrg esac 4858fff3f40Smrg if test $eat = yes; then 4868fff3f40Smrg eat=no 4878fff3f40Smrg continue 4888fff3f40Smrg fi 489e6232409Smrg case "$arg" in 490e6232409Smrg -D*|-I*) 491e6232409Smrg set fnord "$@" "$arg"; shift ;; 492e6232409Smrg # Strip any option that makedepend may not understand. Remove 493e6232409Smrg # the object too, otherwise makedepend will parse it as a source file. 4948fff3f40Smrg -arch) 4958fff3f40Smrg eat=yes ;; 496e6232409Smrg -*|$object) 497e6232409Smrg ;; 498e6232409Smrg *) 499e6232409Smrg set fnord "$@" "$arg"; shift ;; 500e6232409Smrg esac 501e6232409Smrg done 5028fff3f40Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503e6232409Smrg touch "$tmpdepfile" 504e6232409Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505e6232409Smrg rm -f "$depfile" 506e6232409Smrg cat < "$tmpdepfile" > "$depfile" 507e6232409Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508e6232409Smrg' | \ 509e6232409Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510e6232409Smrg## correctly. Breaking it into two sed invocations is a workaround. 511e6232409Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512e6232409Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513e6232409Smrg ;; 514e6232409Smrg 515e6232409Smrgcpp) 516e6232409Smrg # Important note: in order to support this mode, a compiler *must* 517e6232409Smrg # always write the preprocessed file to stdout. 518e6232409Smrg "$@" || exit $? 519e6232409Smrg 520e6232409Smrg # Remove the call to Libtool. 521e6232409Smrg if test "$libtool" = yes; then 5228fff3f40Smrg while test "X$1" != 'X--mode=compile'; do 523e6232409Smrg shift 524e6232409Smrg done 525e6232409Smrg shift 526e6232409Smrg fi 527e6232409Smrg 528e6232409Smrg # Remove `-o $object'. 529e6232409Smrg IFS=" " 530e6232409Smrg for arg 531e6232409Smrg do 532e6232409Smrg case $arg in 533e6232409Smrg -o) 534e6232409Smrg shift 535e6232409Smrg ;; 536e6232409Smrg $object) 537e6232409Smrg shift 538e6232409Smrg ;; 539e6232409Smrg *) 540e6232409Smrg set fnord "$@" "$arg" 541e6232409Smrg shift # fnord 542e6232409Smrg shift # $arg 543e6232409Smrg ;; 544e6232409Smrg esac 545e6232409Smrg done 546e6232409Smrg 547e6232409Smrg "$@" -E | 548e6232409Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549e6232409Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550e6232409Smrg sed '$ s: \\$::' > "$tmpdepfile" 551e6232409Smrg rm -f "$depfile" 552e6232409Smrg echo "$object : \\" > "$depfile" 553e6232409Smrg cat < "$tmpdepfile" >> "$depfile" 554e6232409Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555e6232409Smrg rm -f "$tmpdepfile" 556e6232409Smrg ;; 557e6232409Smrg 558e6232409Smrgmsvisualcpp) 559e6232409Smrg # Important note: in order to support this mode, a compiler *must* 5608fff3f40Smrg # always write the preprocessed file to stdout. 561e6232409Smrg "$@" || exit $? 5628fff3f40Smrg 5638fff3f40Smrg # Remove the call to Libtool. 5648fff3f40Smrg if test "$libtool" = yes; then 5658fff3f40Smrg while test "X$1" != 'X--mode=compile'; do 5668fff3f40Smrg shift 5678fff3f40Smrg done 5688fff3f40Smrg shift 5698fff3f40Smrg fi 5708fff3f40Smrg 571e6232409Smrg IFS=" " 572e6232409Smrg for arg 573e6232409Smrg do 574e6232409Smrg case "$arg" in 5758fff3f40Smrg -o) 5768fff3f40Smrg shift 5778fff3f40Smrg ;; 5788fff3f40Smrg $object) 5798fff3f40Smrg shift 5808fff3f40Smrg ;; 581e6232409Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582e6232409Smrg set fnord "$@" 583e6232409Smrg shift 584e6232409Smrg shift 585e6232409Smrg ;; 586e6232409Smrg *) 587e6232409Smrg set fnord "$@" "$arg" 588e6232409Smrg shift 589e6232409Smrg shift 590e6232409Smrg ;; 591e6232409Smrg esac 592e6232409Smrg done 5938fff3f40Smrg "$@" -E 2>/dev/null | 5948fff3f40Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595e6232409Smrg rm -f "$depfile" 596e6232409Smrg echo "$object : \\" > "$depfile" 5978fff3f40Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598e6232409Smrg echo " " >> "$depfile" 5998fff3f40Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600e6232409Smrg rm -f "$tmpdepfile" 601e6232409Smrg ;; 602e6232409Smrg 6038fff3f40Smrgmsvcmsys) 6048fff3f40Smrg # This case exists only to let depend.m4 do its work. It works by 6058fff3f40Smrg # looking at the text of this script. This case will never be run, 6068fff3f40Smrg # since it is checked for above. 6078fff3f40Smrg exit 1 6088fff3f40Smrg ;; 6098fff3f40Smrg 610e6232409Smrgnone) 611e6232409Smrg exec "$@" 612e6232409Smrg ;; 613e6232409Smrg 614e6232409Smrg*) 615e6232409Smrg echo "Unknown depmode $depmode" 1>&2 616e6232409Smrg exit 1 617e6232409Smrg ;; 618e6232409Smrgesac 619e6232409Smrg 620e6232409Smrgexit 0 621e6232409Smrg 622e6232409Smrg# Local Variables: 623e6232409Smrg# mode: shell-script 624e6232409Smrg# sh-indentation: 2 625e6232409Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626e6232409Smrg# time-stamp-start: "scriptversion=" 627e6232409Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6288fff3f40Smrg# time-stamp-time-zone: "UTC" 6298fff3f40Smrg# time-stamp-end: "; # UTC" 630e6232409Smrg# End: 631