depcomp revision c2b339b4
1e9554658Smrg#! /bin/sh 2e9554658Smrg# depcomp - compile a program generating dependencies as side-effects 3e9554658Smrg 4c2b339b4Smrgscriptversion=2009-04-28.21; # UTC 5e9554658Smrg 6c2b339b4Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7c2b339b4Smrg# Software Foundation, Inc. 8e9554658Smrg 9e9554658Smrg# This program is free software; you can redistribute it and/or modify 10e9554658Smrg# it under the terms of the GNU General Public License as published by 11e9554658Smrg# the Free Software Foundation; either version 2, or (at your option) 12e9554658Smrg# any later version. 13e9554658Smrg 14e9554658Smrg# This program is distributed in the hope that it will be useful, 15e9554658Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16e9554658Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17e9554658Smrg# GNU General Public License for more details. 18e9554658Smrg 19e9554658Smrg# You should have received a copy of the GNU General Public License 20c2b339b4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21e9554658Smrg 22e9554658Smrg# As a special exception to the GNU General Public License, if you 23e9554658Smrg# distribute this file as part of a program that contains a 24e9554658Smrg# configuration script generated by Autoconf, you may include it under 25e9554658Smrg# the same distribution terms that you use for the rest of that program. 26e9554658Smrg 27e9554658Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28e9554658Smrg 29e9554658Smrgcase $1 in 30e9554658Smrg '') 31e9554658Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32e9554658Smrg exit 1; 33e9554658Smrg ;; 34e9554658Smrg -h | --h*) 35e9554658Smrg cat <<\EOF 36e9554658SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37e9554658Smrg 38e9554658SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39e9554658Smrgas side-effects. 40e9554658Smrg 41e9554658SmrgEnvironment variables: 42e9554658Smrg depmode Dependency tracking mode. 43e9554658Smrg source Source file read by `PROGRAMS ARGS'. 44e9554658Smrg object Object file output by `PROGRAMS ARGS'. 45e9554658Smrg DEPDIR directory where to store dependencies. 46e9554658Smrg depfile Dependency file to output. 47e9554658Smrg tmpdepfile Temporary file to use when outputing dependencies. 48e9554658Smrg libtool Whether libtool is used (yes/no). 49e9554658Smrg 50e9554658SmrgReport bugs to <bug-automake@gnu.org>. 51e9554658SmrgEOF 52e9554658Smrg exit $? 53e9554658Smrg ;; 54e9554658Smrg -v | --v*) 55e9554658Smrg echo "depcomp $scriptversion" 56e9554658Smrg exit $? 57e9554658Smrg ;; 58e9554658Smrgesac 59e9554658Smrg 60e9554658Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61e9554658Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62e9554658Smrg exit 1 63e9554658Smrgfi 64e9554658Smrg 65e9554658Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66e9554658Smrgdepfile=${depfile-`echo "$object" | 67e9554658Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68e9554658Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69e9554658Smrg 70e9554658Smrgrm -f "$tmpdepfile" 71e9554658Smrg 72e9554658Smrg# Some modes work just like other modes, but use different flags. We 73e9554658Smrg# parameterize here, but still list the modes in the big case below, 74e9554658Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75e9554658Smrg# here, because this file can only contain one case statement. 76e9554658Smrgif test "$depmode" = hp; then 77e9554658Smrg # HP compiler uses -M and no extra arg. 78e9554658Smrg gccflag=-M 79e9554658Smrg depmode=gcc 80e9554658Smrgfi 81e9554658Smrg 82e9554658Smrgif test "$depmode" = dashXmstdout; then 83e9554658Smrg # This is just like dashmstdout with a different argument. 84e9554658Smrg dashmflag=-xM 85e9554658Smrg depmode=dashmstdout 86e9554658Smrgfi 87e9554658Smrg 88c2b339b4Smrgcygpath_u="cygpath -u -f -" 89c2b339b4Smrgif test "$depmode" = msvcmsys; then 90c2b339b4Smrg # This is just like msvisualcpp but w/o cygpath translation. 91c2b339b4Smrg # Just convert the backslash-escaped backslashes to single forward 92c2b339b4Smrg # slashes to satisfy depend.m4 93c2b339b4Smrg cygpath_u="sed s,\\\\\\\\,/,g" 94c2b339b4Smrg depmode=msvisualcpp 95c2b339b4Smrgfi 96c2b339b4Smrg 97e9554658Smrgcase "$depmode" in 98e9554658Smrggcc3) 99e9554658Smrg## gcc 3 implements dependency tracking that does exactly what 100e9554658Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101e9554658Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102e9554658Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103e9554658Smrg## the command line argument order; so add the flags where they 104e9554658Smrg## appear in depend2.am. Note that the slowdown incurred here 105e9554658Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106e9554658Smrg for arg 107e9554658Smrg do 108e9554658Smrg case $arg in 109e9554658Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110e9554658Smrg *) set fnord "$@" "$arg" ;; 111e9554658Smrg esac 112e9554658Smrg shift # fnord 113e9554658Smrg shift # $arg 114e9554658Smrg done 115e9554658Smrg "$@" 116e9554658Smrg stat=$? 117e9554658Smrg if test $stat -eq 0; then : 118e9554658Smrg else 119e9554658Smrg rm -f "$tmpdepfile" 120e9554658Smrg exit $stat 121e9554658Smrg fi 122e9554658Smrg mv "$tmpdepfile" "$depfile" 123e9554658Smrg ;; 124e9554658Smrg 125e9554658Smrggcc) 126e9554658Smrg## There are various ways to get dependency output from gcc. Here's 127e9554658Smrg## why we pick this rather obscure method: 128e9554658Smrg## - Don't want to use -MD because we'd like the dependencies to end 129e9554658Smrg## up in a subdir. Having to rename by hand is ugly. 130e9554658Smrg## (We might end up doing this anyway to support other compilers.) 131e9554658Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132e9554658Smrg## -MM, not -M (despite what the docs say). 133e9554658Smrg## - Using -M directly means running the compiler twice (even worse 134e9554658Smrg## than renaming). 135e9554658Smrg if test -z "$gccflag"; then 136e9554658Smrg gccflag=-MD, 137e9554658Smrg fi 138e9554658Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139e9554658Smrg stat=$? 140e9554658Smrg if test $stat -eq 0; then : 141e9554658Smrg else 142e9554658Smrg rm -f "$tmpdepfile" 143e9554658Smrg exit $stat 144e9554658Smrg fi 145e9554658Smrg rm -f "$depfile" 146e9554658Smrg echo "$object : \\" > "$depfile" 147e9554658Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148e9554658Smrg## The second -e expression handles DOS-style file names with drive letters. 149e9554658Smrg sed -e 's/^[^:]*: / /' \ 150e9554658Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151e9554658Smrg## This next piece of magic avoids the `deleted header file' problem. 152e9554658Smrg## The problem is that when a header file which appears in a .P file 153e9554658Smrg## is deleted, the dependency causes make to die (because there is 154e9554658Smrg## typically no way to rebuild the header). We avoid this by adding 155e9554658Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156e9554658Smrg## this for us directly. 157e9554658Smrg tr ' ' ' 158e9554658Smrg' < "$tmpdepfile" | 159e9554658Smrg## Some versions of gcc put a space before the `:'. On the theory 160e9554658Smrg## that the space means something, we add a space to the output as 161e9554658Smrg## well. 162e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163e9554658Smrg## correctly. Breaking it into two sed invocations is a workaround. 164e9554658Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165e9554658Smrg rm -f "$tmpdepfile" 166e9554658Smrg ;; 167e9554658Smrg 168e9554658Smrghp) 169e9554658Smrg # This case exists only to let depend.m4 do its work. It works by 170e9554658Smrg # looking at the text of this script. This case will never be run, 171e9554658Smrg # since it is checked for above. 172e9554658Smrg exit 1 173e9554658Smrg ;; 174e9554658Smrg 175e9554658Smrgsgi) 176e9554658Smrg if test "$libtool" = yes; then 177e9554658Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178e9554658Smrg else 179e9554658Smrg "$@" -MDupdate "$tmpdepfile" 180e9554658Smrg fi 181e9554658Smrg stat=$? 182e9554658Smrg if test $stat -eq 0; then : 183e9554658Smrg else 184e9554658Smrg rm -f "$tmpdepfile" 185e9554658Smrg exit $stat 186e9554658Smrg fi 187e9554658Smrg rm -f "$depfile" 188e9554658Smrg 189e9554658Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190e9554658Smrg echo "$object : \\" > "$depfile" 191e9554658Smrg 192e9554658Smrg # Clip off the initial element (the dependent). Don't try to be 193e9554658Smrg # clever and replace this with sed code, as IRIX sed won't handle 194e9554658Smrg # lines with more than a fixed number of characters (4096 in 195e9554658Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196e9554658Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197e9554658Smrg # dependency line. 198e9554658Smrg tr ' ' ' 199e9554658Smrg' < "$tmpdepfile" \ 200e9554658Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201e9554658Smrg tr ' 202c2b339b4Smrg' ' ' >> "$depfile" 203c2b339b4Smrg echo >> "$depfile" 204e9554658Smrg 205e9554658Smrg # The second pass generates a dummy entry for each header file. 206e9554658Smrg tr ' ' ' 207e9554658Smrg' < "$tmpdepfile" \ 208e9554658Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209c2b339b4Smrg >> "$depfile" 210e9554658Smrg else 211e9554658Smrg # The sourcefile does not contain any dependencies, so just 212e9554658Smrg # store a dummy comment line, to avoid errors with the Makefile 213e9554658Smrg # "include basename.Plo" scheme. 214e9554658Smrg echo "#dummy" > "$depfile" 215e9554658Smrg fi 216e9554658Smrg rm -f "$tmpdepfile" 217e9554658Smrg ;; 218e9554658Smrg 219e9554658Smrgaix) 220e9554658Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221e9554658Smrg # in a .u file. In older versions, this file always lives in the 222e9554658Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223e9554658Smrg # start of each line; $object doesn't have directory information. 224e9554658Smrg # Version 6 uses the directory in both cases. 225c2b339b4Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226c2b339b4Smrg test "x$dir" = "x$object" && dir= 227c2b339b4Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228e9554658Smrg if test "$libtool" = yes; then 229c2b339b4Smrg tmpdepfile1=$dir$base.u 230c2b339b4Smrg tmpdepfile2=$base.u 231c2b339b4Smrg tmpdepfile3=$dir.libs/$base.u 232e9554658Smrg "$@" -Wc,-M 233e9554658Smrg else 234c2b339b4Smrg tmpdepfile1=$dir$base.u 235c2b339b4Smrg tmpdepfile2=$dir$base.u 236c2b339b4Smrg tmpdepfile3=$dir$base.u 237e9554658Smrg "$@" -M 238e9554658Smrg fi 239e9554658Smrg stat=$? 240e9554658Smrg 241e9554658Smrg if test $stat -eq 0; then : 242e9554658Smrg else 243c2b339b4Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244e9554658Smrg exit $stat 245e9554658Smrg fi 246e9554658Smrg 247c2b339b4Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248c2b339b4Smrg do 249c2b339b4Smrg test -f "$tmpdepfile" && break 250c2b339b4Smrg done 251e9554658Smrg if test -f "$tmpdepfile"; then 252e9554658Smrg # Each line is of the form `foo.o: dependent.h'. 253e9554658Smrg # Do two passes, one to just change these to 254e9554658Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255c2b339b4Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256c2b339b4Smrg # That's a tab and a space in the []. 257c2b339b4Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258e9554658Smrg else 259e9554658Smrg # The sourcefile does not contain any dependencies, so just 260e9554658Smrg # store a dummy comment line, to avoid errors with the Makefile 261e9554658Smrg # "include basename.Plo" scheme. 262e9554658Smrg echo "#dummy" > "$depfile" 263e9554658Smrg fi 264e9554658Smrg rm -f "$tmpdepfile" 265e9554658Smrg ;; 266e9554658Smrg 267e9554658Smrgicc) 268e9554658Smrg # Intel's C compiler understands `-MD -MF file'. However on 269e9554658Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270e9554658Smrg # ICC 7.0 will fill foo.d with something like 271e9554658Smrg # foo.o: sub/foo.c 272e9554658Smrg # foo.o: sub/foo.h 273e9554658Smrg # which is wrong. We want: 274e9554658Smrg # sub/foo.o: sub/foo.c 275e9554658Smrg # sub/foo.o: sub/foo.h 276e9554658Smrg # sub/foo.c: 277e9554658Smrg # sub/foo.h: 278e9554658Smrg # ICC 7.1 will output 279e9554658Smrg # foo.o: sub/foo.c sub/foo.h 280e9554658Smrg # and will wrap long lines using \ : 281e9554658Smrg # foo.o: sub/foo.c ... \ 282e9554658Smrg # sub/foo.h ... \ 283e9554658Smrg # ... 284e9554658Smrg 285e9554658Smrg "$@" -MD -MF "$tmpdepfile" 286e9554658Smrg stat=$? 287e9554658Smrg if test $stat -eq 0; then : 288e9554658Smrg else 289e9554658Smrg rm -f "$tmpdepfile" 290e9554658Smrg exit $stat 291e9554658Smrg fi 292e9554658Smrg rm -f "$depfile" 293e9554658Smrg # Each line is of the form `foo.o: dependent.h', 294e9554658Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295e9554658Smrg # Do two passes, one to just change these to 296e9554658Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297e9554658Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298e9554658Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299e9554658Smrg # correctly. Breaking it into two sed invocations is a workaround. 300e9554658Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301e9554658Smrg sed -e 's/$/ :/' >> "$depfile" 302e9554658Smrg rm -f "$tmpdepfile" 303e9554658Smrg ;; 304e9554658Smrg 305e9554658Smrghp2) 306e9554658Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307e9554658Smrg # compilers, which have integrated preprocessors. The correct option 308e9554658Smrg # to use with these is +Maked; it writes dependencies to a file named 309e9554658Smrg # 'foo.d', which lands next to the object file, wherever that 310e9554658Smrg # happens to be. 311e9554658Smrg # Much of this is similar to the tru64 case; see comments there. 312e9554658Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313e9554658Smrg test "x$dir" = "x$object" && dir= 314e9554658Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315e9554658Smrg if test "$libtool" = yes; then 316e9554658Smrg tmpdepfile1=$dir$base.d 317e9554658Smrg tmpdepfile2=$dir.libs/$base.d 318e9554658Smrg "$@" -Wc,+Maked 319e9554658Smrg else 320e9554658Smrg tmpdepfile1=$dir$base.d 321e9554658Smrg tmpdepfile2=$dir$base.d 322e9554658Smrg "$@" +Maked 323e9554658Smrg fi 324e9554658Smrg stat=$? 325e9554658Smrg if test $stat -eq 0; then : 326e9554658Smrg else 327e9554658Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328e9554658Smrg exit $stat 329e9554658Smrg fi 330e9554658Smrg 331e9554658Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332e9554658Smrg do 333e9554658Smrg test -f "$tmpdepfile" && break 334e9554658Smrg done 335e9554658Smrg if test -f "$tmpdepfile"; then 336e9554658Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337e9554658Smrg # Add `dependent.h:' lines. 338c2b339b4Smrg sed -ne '2,${ 339c2b339b4Smrg s/^ *// 340c2b339b4Smrg s/ \\*$// 341c2b339b4Smrg s/$/:/ 342c2b339b4Smrg p 343c2b339b4Smrg }' "$tmpdepfile" >> "$depfile" 344e9554658Smrg else 345e9554658Smrg echo "#dummy" > "$depfile" 346e9554658Smrg fi 347e9554658Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348e9554658Smrg ;; 349e9554658Smrg 350e9554658Smrgtru64) 351e9554658Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352e9554658Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353e9554658Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354e9554658Smrg # dependencies in `foo.d' instead, so we check for that too. 355e9554658Smrg # Subdirectories are respected. 356e9554658Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357e9554658Smrg test "x$dir" = "x$object" && dir= 358e9554658Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359e9554658Smrg 360e9554658Smrg if test "$libtool" = yes; then 361e9554658Smrg # With Tru64 cc, shared objects can also be used to make a 362e9554658Smrg # static library. This mechanism is used in libtool 1.4 series to 363e9554658Smrg # handle both shared and static libraries in a single compilation. 364e9554658Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365e9554658Smrg # 366e9554658Smrg # With libtool 1.5 this exception was removed, and libtool now 367e9554658Smrg # generates 2 separate objects for the 2 libraries. These two 368e9554658Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369e9554658Smrg # in $dir$base.o.d. We have to check for both files, because 370e9554658Smrg # one of the two compilations can be disabled. We should prefer 371e9554658Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372e9554658Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373e9554658Smrg # the former would cause a distcleancheck panic. 374e9554658Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375e9554658Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376e9554658Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377e9554658Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378e9554658Smrg "$@" -Wc,-MD 379e9554658Smrg else 380e9554658Smrg tmpdepfile1=$dir$base.o.d 381e9554658Smrg tmpdepfile2=$dir$base.d 382e9554658Smrg tmpdepfile3=$dir$base.d 383e9554658Smrg tmpdepfile4=$dir$base.d 384e9554658Smrg "$@" -MD 385e9554658Smrg fi 386e9554658Smrg 387e9554658Smrg stat=$? 388e9554658Smrg if test $stat -eq 0; then : 389e9554658Smrg else 390e9554658Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391e9554658Smrg exit $stat 392e9554658Smrg fi 393e9554658Smrg 394e9554658Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395e9554658Smrg do 396e9554658Smrg test -f "$tmpdepfile" && break 397e9554658Smrg done 398e9554658Smrg if test -f "$tmpdepfile"; then 399e9554658Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400e9554658Smrg # That's a tab and a space in the []. 401e9554658Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402e9554658Smrg else 403e9554658Smrg echo "#dummy" > "$depfile" 404e9554658Smrg fi 405e9554658Smrg rm -f "$tmpdepfile" 406e9554658Smrg ;; 407e9554658Smrg 408e9554658Smrg#nosideeffect) 409e9554658Smrg # This comment above is used by automake to tell side-effect 410e9554658Smrg # dependency tracking mechanisms from slower ones. 411e9554658Smrg 412e9554658Smrgdashmstdout) 413e9554658Smrg # Important note: in order to support this mode, a compiler *must* 414e9554658Smrg # always write the preprocessed file to stdout, regardless of -o. 415e9554658Smrg "$@" || exit $? 416e9554658Smrg 417e9554658Smrg # Remove the call to Libtool. 418e9554658Smrg if test "$libtool" = yes; then 419c2b339b4Smrg while test "X$1" != 'X--mode=compile'; do 420e9554658Smrg shift 421e9554658Smrg done 422e9554658Smrg shift 423e9554658Smrg fi 424e9554658Smrg 425e9554658Smrg # Remove `-o $object'. 426e9554658Smrg IFS=" " 427e9554658Smrg for arg 428e9554658Smrg do 429e9554658Smrg case $arg in 430e9554658Smrg -o) 431e9554658Smrg shift 432e9554658Smrg ;; 433e9554658Smrg $object) 434e9554658Smrg shift 435e9554658Smrg ;; 436e9554658Smrg *) 437e9554658Smrg set fnord "$@" "$arg" 438e9554658Smrg shift # fnord 439e9554658Smrg shift # $arg 440e9554658Smrg ;; 441e9554658Smrg esac 442e9554658Smrg done 443e9554658Smrg 444e9554658Smrg test -z "$dashmflag" && dashmflag=-M 445e9554658Smrg # Require at least two characters before searching for `:' 446e9554658Smrg # in the target name. This is to cope with DOS-style filenames: 447e9554658Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448e9554658Smrg "$@" $dashmflag | 449e9554658Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450e9554658Smrg rm -f "$depfile" 451e9554658Smrg cat < "$tmpdepfile" > "$depfile" 452e9554658Smrg tr ' ' ' 453e9554658Smrg' < "$tmpdepfile" | \ 454e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455e9554658Smrg## correctly. Breaking it into two sed invocations is a workaround. 456e9554658Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457e9554658Smrg rm -f "$tmpdepfile" 458e9554658Smrg ;; 459e9554658Smrg 460e9554658SmrgdashXmstdout) 461e9554658Smrg # This case only exists to satisfy depend.m4. It is never actually 462e9554658Smrg # run, as this mode is specially recognized in the preamble. 463e9554658Smrg exit 1 464e9554658Smrg ;; 465e9554658Smrg 466e9554658Smrgmakedepend) 467e9554658Smrg "$@" || exit $? 468e9554658Smrg # Remove any Libtool call 469e9554658Smrg if test "$libtool" = yes; then 470c2b339b4Smrg while test "X$1" != 'X--mode=compile'; do 471e9554658Smrg shift 472e9554658Smrg done 473e9554658Smrg shift 474e9554658Smrg fi 475e9554658Smrg # X makedepend 476e9554658Smrg shift 477c2b339b4Smrg cleared=no eat=no 478c2b339b4Smrg for arg 479c2b339b4Smrg do 480e9554658Smrg case $cleared in 481e9554658Smrg no) 482e9554658Smrg set ""; shift 483e9554658Smrg cleared=yes ;; 484e9554658Smrg esac 485c2b339b4Smrg if test $eat = yes; then 486c2b339b4Smrg eat=no 487c2b339b4Smrg continue 488c2b339b4Smrg fi 489e9554658Smrg case "$arg" in 490e9554658Smrg -D*|-I*) 491e9554658Smrg set fnord "$@" "$arg"; shift ;; 492e9554658Smrg # Strip any option that makedepend may not understand. Remove 493e9554658Smrg # the object too, otherwise makedepend will parse it as a source file. 494c2b339b4Smrg -arch) 495c2b339b4Smrg eat=yes ;; 496e9554658Smrg -*|$object) 497e9554658Smrg ;; 498e9554658Smrg *) 499e9554658Smrg set fnord "$@" "$arg"; shift ;; 500e9554658Smrg esac 501e9554658Smrg done 502c2b339b4Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503e9554658Smrg touch "$tmpdepfile" 504e9554658Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505e9554658Smrg rm -f "$depfile" 506e9554658Smrg cat < "$tmpdepfile" > "$depfile" 507e9554658Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508e9554658Smrg' | \ 509e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510e9554658Smrg## correctly. Breaking it into two sed invocations is a workaround. 511e9554658Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512e9554658Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513e9554658Smrg ;; 514e9554658Smrg 515e9554658Smrgcpp) 516e9554658Smrg # Important note: in order to support this mode, a compiler *must* 517e9554658Smrg # always write the preprocessed file to stdout. 518e9554658Smrg "$@" || exit $? 519e9554658Smrg 520e9554658Smrg # Remove the call to Libtool. 521e9554658Smrg if test "$libtool" = yes; then 522c2b339b4Smrg while test "X$1" != 'X--mode=compile'; do 523e9554658Smrg shift 524e9554658Smrg done 525e9554658Smrg shift 526e9554658Smrg fi 527e9554658Smrg 528e9554658Smrg # Remove `-o $object'. 529e9554658Smrg IFS=" " 530e9554658Smrg for arg 531e9554658Smrg do 532e9554658Smrg case $arg in 533e9554658Smrg -o) 534e9554658Smrg shift 535e9554658Smrg ;; 536e9554658Smrg $object) 537e9554658Smrg shift 538e9554658Smrg ;; 539e9554658Smrg *) 540e9554658Smrg set fnord "$@" "$arg" 541e9554658Smrg shift # fnord 542e9554658Smrg shift # $arg 543e9554658Smrg ;; 544e9554658Smrg esac 545e9554658Smrg done 546e9554658Smrg 547e9554658Smrg "$@" -E | 548e9554658Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549e9554658Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550e9554658Smrg sed '$ s: \\$::' > "$tmpdepfile" 551e9554658Smrg rm -f "$depfile" 552e9554658Smrg echo "$object : \\" > "$depfile" 553e9554658Smrg cat < "$tmpdepfile" >> "$depfile" 554e9554658Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555e9554658Smrg rm -f "$tmpdepfile" 556e9554658Smrg ;; 557e9554658Smrg 558e9554658Smrgmsvisualcpp) 559e9554658Smrg # Important note: in order to support this mode, a compiler *must* 560c2b339b4Smrg # always write the preprocessed file to stdout. 561e9554658Smrg "$@" || exit $? 562c2b339b4Smrg 563c2b339b4Smrg # Remove the call to Libtool. 564c2b339b4Smrg if test "$libtool" = yes; then 565c2b339b4Smrg while test "X$1" != 'X--mode=compile'; do 566c2b339b4Smrg shift 567c2b339b4Smrg done 568c2b339b4Smrg shift 569c2b339b4Smrg fi 570c2b339b4Smrg 571e9554658Smrg IFS=" " 572e9554658Smrg for arg 573e9554658Smrg do 574e9554658Smrg case "$arg" in 575c2b339b4Smrg -o) 576c2b339b4Smrg shift 577c2b339b4Smrg ;; 578c2b339b4Smrg $object) 579c2b339b4Smrg shift 580c2b339b4Smrg ;; 581e9554658Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582e9554658Smrg set fnord "$@" 583e9554658Smrg shift 584e9554658Smrg shift 585e9554658Smrg ;; 586e9554658Smrg *) 587e9554658Smrg set fnord "$@" "$arg" 588e9554658Smrg shift 589e9554658Smrg shift 590e9554658Smrg ;; 591e9554658Smrg esac 592e9554658Smrg done 593c2b339b4Smrg "$@" -E 2>/dev/null | 594c2b339b4Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595e9554658Smrg rm -f "$depfile" 596e9554658Smrg echo "$object : \\" > "$depfile" 597c2b339b4Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598e9554658Smrg echo " " >> "$depfile" 599c2b339b4Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600e9554658Smrg rm -f "$tmpdepfile" 601e9554658Smrg ;; 602e9554658Smrg 603c2b339b4Smrgmsvcmsys) 604c2b339b4Smrg # This case exists only to let depend.m4 do its work. It works by 605c2b339b4Smrg # looking at the text of this script. This case will never be run, 606c2b339b4Smrg # since it is checked for above. 607c2b339b4Smrg exit 1 608c2b339b4Smrg ;; 609c2b339b4Smrg 610e9554658Smrgnone) 611e9554658Smrg exec "$@" 612e9554658Smrg ;; 613e9554658Smrg 614e9554658Smrg*) 615e9554658Smrg echo "Unknown depmode $depmode" 1>&2 616e9554658Smrg exit 1 617e9554658Smrg ;; 618e9554658Smrgesac 619e9554658Smrg 620e9554658Smrgexit 0 621e9554658Smrg 622e9554658Smrg# Local Variables: 623e9554658Smrg# mode: shell-script 624e9554658Smrg# sh-indentation: 2 625e9554658Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626e9554658Smrg# time-stamp-start: "scriptversion=" 627e9554658Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628c2b339b4Smrg# time-stamp-time-zone: "UTC" 629c2b339b4Smrg# time-stamp-end: "; # UTC" 630e9554658Smrg# End: 631