depcomp revision 5e695a52
1943345d3Smrg#! /bin/sh 2943345d3Smrg# depcomp - compile a program generating dependencies as side-effects 3943345d3Smrg 45e695a52Smrgscriptversion=2009-04-28.21; # UTC 5943345d3Smrg 65e695a52Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 75e695a52Smrg# Software Foundation, Inc. 8943345d3Smrg 9943345d3Smrg# This program is free software; you can redistribute it and/or modify 10943345d3Smrg# it under the terms of the GNU General Public License as published by 11943345d3Smrg# the Free Software Foundation; either version 2, or (at your option) 12943345d3Smrg# any later version. 13943345d3Smrg 14943345d3Smrg# This program is distributed in the hope that it will be useful, 15943345d3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16943345d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17943345d3Smrg# GNU General Public License for more details. 18943345d3Smrg 19943345d3Smrg# You should have received a copy of the GNU General Public License 205e695a52Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21943345d3Smrg 22943345d3Smrg# As a special exception to the GNU General Public License, if you 23943345d3Smrg# distribute this file as part of a program that contains a 24943345d3Smrg# configuration script generated by Autoconf, you may include it under 25943345d3Smrg# the same distribution terms that you use for the rest of that program. 26943345d3Smrg 27943345d3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28943345d3Smrg 29943345d3Smrgcase $1 in 30943345d3Smrg '') 31943345d3Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32943345d3Smrg exit 1; 33943345d3Smrg ;; 34943345d3Smrg -h | --h*) 35943345d3Smrg cat <<\EOF 36943345d3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37943345d3Smrg 38943345d3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39943345d3Smrgas side-effects. 40943345d3Smrg 41943345d3SmrgEnvironment variables: 42943345d3Smrg depmode Dependency tracking mode. 43943345d3Smrg source Source file read by `PROGRAMS ARGS'. 44943345d3Smrg object Object file output by `PROGRAMS ARGS'. 45943345d3Smrg DEPDIR directory where to store dependencies. 46943345d3Smrg depfile Dependency file to output. 47943345d3Smrg tmpdepfile Temporary file to use when outputing dependencies. 48943345d3Smrg libtool Whether libtool is used (yes/no). 49943345d3Smrg 50943345d3SmrgReport bugs to <bug-automake@gnu.org>. 51943345d3SmrgEOF 52943345d3Smrg exit $? 53943345d3Smrg ;; 54943345d3Smrg -v | --v*) 55943345d3Smrg echo "depcomp $scriptversion" 56943345d3Smrg exit $? 57943345d3Smrg ;; 58943345d3Smrgesac 59943345d3Smrg 60943345d3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61943345d3Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62943345d3Smrg exit 1 63943345d3Smrgfi 64943345d3Smrg 65943345d3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66943345d3Smrgdepfile=${depfile-`echo "$object" | 67943345d3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68943345d3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69943345d3Smrg 70943345d3Smrgrm -f "$tmpdepfile" 71943345d3Smrg 72943345d3Smrg# Some modes work just like other modes, but use different flags. We 73943345d3Smrg# parameterize here, but still list the modes in the big case below, 74943345d3Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75943345d3Smrg# here, because this file can only contain one case statement. 76943345d3Smrgif test "$depmode" = hp; then 77943345d3Smrg # HP compiler uses -M and no extra arg. 78943345d3Smrg gccflag=-M 79943345d3Smrg depmode=gcc 80943345d3Smrgfi 81943345d3Smrg 82943345d3Smrgif test "$depmode" = dashXmstdout; then 83943345d3Smrg # This is just like dashmstdout with a different argument. 84943345d3Smrg dashmflag=-xM 85943345d3Smrg depmode=dashmstdout 86943345d3Smrgfi 87943345d3Smrg 885e695a52Smrgcygpath_u="cygpath -u -f -" 895e695a52Smrgif test "$depmode" = msvcmsys; then 905e695a52Smrg # This is just like msvisualcpp but w/o cygpath translation. 915e695a52Smrg # Just convert the backslash-escaped backslashes to single forward 925e695a52Smrg # slashes to satisfy depend.m4 935e695a52Smrg cygpath_u="sed s,\\\\\\\\,/,g" 945e695a52Smrg depmode=msvisualcpp 955e695a52Smrgfi 965e695a52Smrg 97943345d3Smrgcase "$depmode" in 98943345d3Smrggcc3) 99943345d3Smrg## gcc 3 implements dependency tracking that does exactly what 100943345d3Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101943345d3Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102f67b85aaSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103f67b85aaSmrg## the command line argument order; so add the flags where they 104f67b85aaSmrg## appear in depend2.am. Note that the slowdown incurred here 105f67b85aaSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106f67b85aaSmrg for arg 107f67b85aaSmrg do 108f67b85aaSmrg case $arg in 109f67b85aaSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110f67b85aaSmrg *) set fnord "$@" "$arg" ;; 111f67b85aaSmrg esac 112f67b85aaSmrg shift # fnord 113f67b85aaSmrg shift # $arg 114f67b85aaSmrg done 115f67b85aaSmrg "$@" 116943345d3Smrg stat=$? 117943345d3Smrg if test $stat -eq 0; then : 118943345d3Smrg else 119943345d3Smrg rm -f "$tmpdepfile" 120943345d3Smrg exit $stat 121943345d3Smrg fi 122943345d3Smrg mv "$tmpdepfile" "$depfile" 123943345d3Smrg ;; 124943345d3Smrg 125943345d3Smrggcc) 126943345d3Smrg## There are various ways to get dependency output from gcc. Here's 127943345d3Smrg## why we pick this rather obscure method: 128943345d3Smrg## - Don't want to use -MD because we'd like the dependencies to end 129943345d3Smrg## up in a subdir. Having to rename by hand is ugly. 130943345d3Smrg## (We might end up doing this anyway to support other compilers.) 131943345d3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132943345d3Smrg## -MM, not -M (despite what the docs say). 133943345d3Smrg## - Using -M directly means running the compiler twice (even worse 134943345d3Smrg## than renaming). 135943345d3Smrg if test -z "$gccflag"; then 136943345d3Smrg gccflag=-MD, 137943345d3Smrg fi 138943345d3Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139943345d3Smrg stat=$? 140943345d3Smrg if test $stat -eq 0; then : 141943345d3Smrg else 142943345d3Smrg rm -f "$tmpdepfile" 143943345d3Smrg exit $stat 144943345d3Smrg fi 145943345d3Smrg rm -f "$depfile" 146943345d3Smrg echo "$object : \\" > "$depfile" 147943345d3Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148943345d3Smrg## The second -e expression handles DOS-style file names with drive letters. 149943345d3Smrg sed -e 's/^[^:]*: / /' \ 150943345d3Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151943345d3Smrg## This next piece of magic avoids the `deleted header file' problem. 152943345d3Smrg## The problem is that when a header file which appears in a .P file 153943345d3Smrg## is deleted, the dependency causes make to die (because there is 154943345d3Smrg## typically no way to rebuild the header). We avoid this by adding 155943345d3Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156943345d3Smrg## this for us directly. 157943345d3Smrg tr ' ' ' 158943345d3Smrg' < "$tmpdepfile" | 159943345d3Smrg## Some versions of gcc put a space before the `:'. On the theory 160943345d3Smrg## that the space means something, we add a space to the output as 161943345d3Smrg## well. 162943345d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163943345d3Smrg## correctly. Breaking it into two sed invocations is a workaround. 164943345d3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165943345d3Smrg rm -f "$tmpdepfile" 166943345d3Smrg ;; 167943345d3Smrg 168943345d3Smrghp) 169943345d3Smrg # This case exists only to let depend.m4 do its work. It works by 170943345d3Smrg # looking at the text of this script. This case will never be run, 171943345d3Smrg # since it is checked for above. 172943345d3Smrg exit 1 173943345d3Smrg ;; 174943345d3Smrg 175943345d3Smrgsgi) 176943345d3Smrg if test "$libtool" = yes; then 177943345d3Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178943345d3Smrg else 179943345d3Smrg "$@" -MDupdate "$tmpdepfile" 180943345d3Smrg fi 181943345d3Smrg stat=$? 182943345d3Smrg if test $stat -eq 0; then : 183943345d3Smrg else 184943345d3Smrg rm -f "$tmpdepfile" 185943345d3Smrg exit $stat 186943345d3Smrg fi 187943345d3Smrg rm -f "$depfile" 188943345d3Smrg 189943345d3Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190943345d3Smrg echo "$object : \\" > "$depfile" 191943345d3Smrg 192943345d3Smrg # Clip off the initial element (the dependent). Don't try to be 193943345d3Smrg # clever and replace this with sed code, as IRIX sed won't handle 194943345d3Smrg # lines with more than a fixed number of characters (4096 in 195943345d3Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196943345d3Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197943345d3Smrg # dependency line. 198943345d3Smrg tr ' ' ' 199943345d3Smrg' < "$tmpdepfile" \ 200943345d3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201943345d3Smrg tr ' 2025e695a52Smrg' ' ' >> "$depfile" 2035e695a52Smrg echo >> "$depfile" 204943345d3Smrg 205943345d3Smrg # The second pass generates a dummy entry for each header file. 206943345d3Smrg tr ' ' ' 207943345d3Smrg' < "$tmpdepfile" \ 208943345d3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2095e695a52Smrg >> "$depfile" 210943345d3Smrg else 211943345d3Smrg # The sourcefile does not contain any dependencies, so just 212943345d3Smrg # store a dummy comment line, to avoid errors with the Makefile 213943345d3Smrg # "include basename.Plo" scheme. 214943345d3Smrg echo "#dummy" > "$depfile" 215943345d3Smrg fi 216943345d3Smrg rm -f "$tmpdepfile" 217943345d3Smrg ;; 218943345d3Smrg 219943345d3Smrgaix) 220943345d3Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221943345d3Smrg # in a .u file. In older versions, this file always lives in the 222943345d3Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223943345d3Smrg # start of each line; $object doesn't have directory information. 224943345d3Smrg # Version 6 uses the directory in both cases. 2255e695a52Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2265e695a52Smrg test "x$dir" = "x$object" && dir= 2275e695a52Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228943345d3Smrg if test "$libtool" = yes; then 2295e695a52Smrg tmpdepfile1=$dir$base.u 2305e695a52Smrg tmpdepfile2=$base.u 2315e695a52Smrg tmpdepfile3=$dir.libs/$base.u 232943345d3Smrg "$@" -Wc,-M 233943345d3Smrg else 2345e695a52Smrg tmpdepfile1=$dir$base.u 2355e695a52Smrg tmpdepfile2=$dir$base.u 2365e695a52Smrg tmpdepfile3=$dir$base.u 237943345d3Smrg "$@" -M 238943345d3Smrg fi 239943345d3Smrg stat=$? 240943345d3Smrg 241943345d3Smrg if test $stat -eq 0; then : 242943345d3Smrg else 2435e695a52Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244943345d3Smrg exit $stat 245943345d3Smrg fi 246943345d3Smrg 2475e695a52Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2485e695a52Smrg do 2495e695a52Smrg test -f "$tmpdepfile" && break 2505e695a52Smrg done 251943345d3Smrg if test -f "$tmpdepfile"; then 252943345d3Smrg # Each line is of the form `foo.o: dependent.h'. 253943345d3Smrg # Do two passes, one to just change these to 254943345d3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2555e695a52Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2565e695a52Smrg # That's a tab and a space in the []. 2575e695a52Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258943345d3Smrg else 259943345d3Smrg # The sourcefile does not contain any dependencies, so just 260943345d3Smrg # store a dummy comment line, to avoid errors with the Makefile 261943345d3Smrg # "include basename.Plo" scheme. 262943345d3Smrg echo "#dummy" > "$depfile" 263943345d3Smrg fi 264943345d3Smrg rm -f "$tmpdepfile" 265943345d3Smrg ;; 266943345d3Smrg 267943345d3Smrgicc) 268943345d3Smrg # Intel's C compiler understands `-MD -MF file'. However on 269943345d3Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270943345d3Smrg # ICC 7.0 will fill foo.d with something like 271943345d3Smrg # foo.o: sub/foo.c 272943345d3Smrg # foo.o: sub/foo.h 273943345d3Smrg # which is wrong. We want: 274943345d3Smrg # sub/foo.o: sub/foo.c 275943345d3Smrg # sub/foo.o: sub/foo.h 276943345d3Smrg # sub/foo.c: 277943345d3Smrg # sub/foo.h: 278943345d3Smrg # ICC 7.1 will output 279943345d3Smrg # foo.o: sub/foo.c sub/foo.h 280943345d3Smrg # and will wrap long lines using \ : 281943345d3Smrg # foo.o: sub/foo.c ... \ 282943345d3Smrg # sub/foo.h ... \ 283943345d3Smrg # ... 284943345d3Smrg 285943345d3Smrg "$@" -MD -MF "$tmpdepfile" 286943345d3Smrg stat=$? 287943345d3Smrg if test $stat -eq 0; then : 288943345d3Smrg else 289943345d3Smrg rm -f "$tmpdepfile" 290943345d3Smrg exit $stat 291943345d3Smrg fi 292943345d3Smrg rm -f "$depfile" 293943345d3Smrg # Each line is of the form `foo.o: dependent.h', 294943345d3Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295943345d3Smrg # Do two passes, one to just change these to 296943345d3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297943345d3Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298943345d3Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299943345d3Smrg # correctly. Breaking it into two sed invocations is a workaround. 300943345d3Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301943345d3Smrg sed -e 's/$/ :/' >> "$depfile" 302943345d3Smrg rm -f "$tmpdepfile" 303943345d3Smrg ;; 304943345d3Smrg 305f67b85aaSmrghp2) 306f67b85aaSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307f67b85aaSmrg # compilers, which have integrated preprocessors. The correct option 308f67b85aaSmrg # to use with these is +Maked; it writes dependencies to a file named 309f67b85aaSmrg # 'foo.d', which lands next to the object file, wherever that 310f67b85aaSmrg # happens to be. 311f67b85aaSmrg # Much of this is similar to the tru64 case; see comments there. 312f67b85aaSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313f67b85aaSmrg test "x$dir" = "x$object" && dir= 314f67b85aaSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315f67b85aaSmrg if test "$libtool" = yes; then 316f67b85aaSmrg tmpdepfile1=$dir$base.d 317f67b85aaSmrg tmpdepfile2=$dir.libs/$base.d 318f67b85aaSmrg "$@" -Wc,+Maked 319f67b85aaSmrg else 320f67b85aaSmrg tmpdepfile1=$dir$base.d 321f67b85aaSmrg tmpdepfile2=$dir$base.d 322f67b85aaSmrg "$@" +Maked 323f67b85aaSmrg fi 324f67b85aaSmrg stat=$? 325f67b85aaSmrg if test $stat -eq 0; then : 326f67b85aaSmrg else 327f67b85aaSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328f67b85aaSmrg exit $stat 329f67b85aaSmrg fi 330f67b85aaSmrg 331f67b85aaSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332f67b85aaSmrg do 333f67b85aaSmrg test -f "$tmpdepfile" && break 334f67b85aaSmrg done 335f67b85aaSmrg if test -f "$tmpdepfile"; then 336f67b85aaSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337f67b85aaSmrg # Add `dependent.h:' lines. 3385e695a52Smrg sed -ne '2,${ 3395e695a52Smrg s/^ *// 3405e695a52Smrg s/ \\*$// 3415e695a52Smrg s/$/:/ 3425e695a52Smrg p 3435e695a52Smrg }' "$tmpdepfile" >> "$depfile" 344f67b85aaSmrg else 345f67b85aaSmrg echo "#dummy" > "$depfile" 346f67b85aaSmrg fi 347f67b85aaSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 348f67b85aaSmrg ;; 349f67b85aaSmrg 350943345d3Smrgtru64) 351943345d3Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352943345d3Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353943345d3Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354943345d3Smrg # dependencies in `foo.d' instead, so we check for that too. 355943345d3Smrg # Subdirectories are respected. 356943345d3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357943345d3Smrg test "x$dir" = "x$object" && dir= 358943345d3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359943345d3Smrg 360943345d3Smrg if test "$libtool" = yes; then 361943345d3Smrg # With Tru64 cc, shared objects can also be used to make a 362f67b85aaSmrg # static library. This mechanism is used in libtool 1.4 series to 363943345d3Smrg # handle both shared and static libraries in a single compilation. 364943345d3Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365943345d3Smrg # 366943345d3Smrg # With libtool 1.5 this exception was removed, and libtool now 367943345d3Smrg # generates 2 separate objects for the 2 libraries. These two 368f67b85aaSmrg # compilations output dependencies in $dir.libs/$base.o.d and 369943345d3Smrg # in $dir$base.o.d. We have to check for both files, because 370943345d3Smrg # one of the two compilations can be disabled. We should prefer 371943345d3Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372943345d3Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373943345d3Smrg # the former would cause a distcleancheck panic. 374943345d3Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375943345d3Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376943345d3Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377943345d3Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378943345d3Smrg "$@" -Wc,-MD 379943345d3Smrg else 380943345d3Smrg tmpdepfile1=$dir$base.o.d 381943345d3Smrg tmpdepfile2=$dir$base.d 382943345d3Smrg tmpdepfile3=$dir$base.d 383943345d3Smrg tmpdepfile4=$dir$base.d 384943345d3Smrg "$@" -MD 385943345d3Smrg fi 386943345d3Smrg 387943345d3Smrg stat=$? 388943345d3Smrg if test $stat -eq 0; then : 389943345d3Smrg else 390943345d3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391943345d3Smrg exit $stat 392943345d3Smrg fi 393943345d3Smrg 394943345d3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395943345d3Smrg do 396943345d3Smrg test -f "$tmpdepfile" && break 397943345d3Smrg done 398943345d3Smrg if test -f "$tmpdepfile"; then 399943345d3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400943345d3Smrg # That's a tab and a space in the []. 401943345d3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402943345d3Smrg else 403943345d3Smrg echo "#dummy" > "$depfile" 404943345d3Smrg fi 405943345d3Smrg rm -f "$tmpdepfile" 406943345d3Smrg ;; 407943345d3Smrg 408943345d3Smrg#nosideeffect) 409943345d3Smrg # This comment above is used by automake to tell side-effect 410943345d3Smrg # dependency tracking mechanisms from slower ones. 411943345d3Smrg 412943345d3Smrgdashmstdout) 413943345d3Smrg # Important note: in order to support this mode, a compiler *must* 414943345d3Smrg # always write the preprocessed file to stdout, regardless of -o. 415943345d3Smrg "$@" || exit $? 416943345d3Smrg 417943345d3Smrg # Remove the call to Libtool. 418943345d3Smrg if test "$libtool" = yes; then 4195e695a52Smrg while test "X$1" != 'X--mode=compile'; do 420943345d3Smrg shift 421943345d3Smrg done 422943345d3Smrg shift 423943345d3Smrg fi 424943345d3Smrg 425943345d3Smrg # Remove `-o $object'. 426943345d3Smrg IFS=" " 427943345d3Smrg for arg 428943345d3Smrg do 429943345d3Smrg case $arg in 430943345d3Smrg -o) 431943345d3Smrg shift 432943345d3Smrg ;; 433943345d3Smrg $object) 434943345d3Smrg shift 435943345d3Smrg ;; 436943345d3Smrg *) 437943345d3Smrg set fnord "$@" "$arg" 438943345d3Smrg shift # fnord 439943345d3Smrg shift # $arg 440943345d3Smrg ;; 441943345d3Smrg esac 442943345d3Smrg done 443943345d3Smrg 444943345d3Smrg test -z "$dashmflag" && dashmflag=-M 445943345d3Smrg # Require at least two characters before searching for `:' 446943345d3Smrg # in the target name. This is to cope with DOS-style filenames: 447943345d3Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448943345d3Smrg "$@" $dashmflag | 449943345d3Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450943345d3Smrg rm -f "$depfile" 451943345d3Smrg cat < "$tmpdepfile" > "$depfile" 452943345d3Smrg tr ' ' ' 453943345d3Smrg' < "$tmpdepfile" | \ 454943345d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455943345d3Smrg## correctly. Breaking it into two sed invocations is a workaround. 456943345d3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457943345d3Smrg rm -f "$tmpdepfile" 458943345d3Smrg ;; 459943345d3Smrg 460943345d3SmrgdashXmstdout) 461943345d3Smrg # This case only exists to satisfy depend.m4. It is never actually 462943345d3Smrg # run, as this mode is specially recognized in the preamble. 463943345d3Smrg exit 1 464943345d3Smrg ;; 465943345d3Smrg 466943345d3Smrgmakedepend) 467943345d3Smrg "$@" || exit $? 468943345d3Smrg # Remove any Libtool call 469943345d3Smrg if test "$libtool" = yes; then 4705e695a52Smrg while test "X$1" != 'X--mode=compile'; do 471943345d3Smrg shift 472943345d3Smrg done 473943345d3Smrg shift 474943345d3Smrg fi 475943345d3Smrg # X makedepend 476943345d3Smrg shift 4775e695a52Smrg cleared=no eat=no 4785e695a52Smrg for arg 4795e695a52Smrg do 480943345d3Smrg case $cleared in 481943345d3Smrg no) 482943345d3Smrg set ""; shift 483943345d3Smrg cleared=yes ;; 484943345d3Smrg esac 4855e695a52Smrg if test $eat = yes; then 4865e695a52Smrg eat=no 4875e695a52Smrg continue 4885e695a52Smrg fi 489943345d3Smrg case "$arg" in 490943345d3Smrg -D*|-I*) 491943345d3Smrg set fnord "$@" "$arg"; shift ;; 492943345d3Smrg # Strip any option that makedepend may not understand. Remove 493943345d3Smrg # the object too, otherwise makedepend will parse it as a source file. 4945e695a52Smrg -arch) 4955e695a52Smrg eat=yes ;; 496943345d3Smrg -*|$object) 497943345d3Smrg ;; 498943345d3Smrg *) 499943345d3Smrg set fnord "$@" "$arg"; shift ;; 500943345d3Smrg esac 501943345d3Smrg done 5025e695a52Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503943345d3Smrg touch "$tmpdepfile" 504943345d3Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505943345d3Smrg rm -f "$depfile" 506943345d3Smrg cat < "$tmpdepfile" > "$depfile" 507943345d3Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508943345d3Smrg' | \ 509943345d3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510943345d3Smrg## correctly. Breaking it into two sed invocations is a workaround. 511943345d3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512943345d3Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513943345d3Smrg ;; 514943345d3Smrg 515943345d3Smrgcpp) 516943345d3Smrg # Important note: in order to support this mode, a compiler *must* 517943345d3Smrg # always write the preprocessed file to stdout. 518943345d3Smrg "$@" || exit $? 519943345d3Smrg 520943345d3Smrg # Remove the call to Libtool. 521943345d3Smrg if test "$libtool" = yes; then 5225e695a52Smrg while test "X$1" != 'X--mode=compile'; do 523943345d3Smrg shift 524943345d3Smrg done 525943345d3Smrg shift 526943345d3Smrg fi 527943345d3Smrg 528943345d3Smrg # Remove `-o $object'. 529943345d3Smrg IFS=" " 530943345d3Smrg for arg 531943345d3Smrg do 532943345d3Smrg case $arg in 533943345d3Smrg -o) 534943345d3Smrg shift 535943345d3Smrg ;; 536943345d3Smrg $object) 537943345d3Smrg shift 538943345d3Smrg ;; 539943345d3Smrg *) 540943345d3Smrg set fnord "$@" "$arg" 541943345d3Smrg shift # fnord 542943345d3Smrg shift # $arg 543943345d3Smrg ;; 544943345d3Smrg esac 545943345d3Smrg done 546943345d3Smrg 547943345d3Smrg "$@" -E | 548943345d3Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549943345d3Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550943345d3Smrg sed '$ s: \\$::' > "$tmpdepfile" 551943345d3Smrg rm -f "$depfile" 552943345d3Smrg echo "$object : \\" > "$depfile" 553943345d3Smrg cat < "$tmpdepfile" >> "$depfile" 554943345d3Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555943345d3Smrg rm -f "$tmpdepfile" 556943345d3Smrg ;; 557943345d3Smrg 558943345d3Smrgmsvisualcpp) 559943345d3Smrg # Important note: in order to support this mode, a compiler *must* 5605e695a52Smrg # always write the preprocessed file to stdout. 561943345d3Smrg "$@" || exit $? 5625e695a52Smrg 5635e695a52Smrg # Remove the call to Libtool. 5645e695a52Smrg if test "$libtool" = yes; then 5655e695a52Smrg while test "X$1" != 'X--mode=compile'; do 5665e695a52Smrg shift 5675e695a52Smrg done 5685e695a52Smrg shift 5695e695a52Smrg fi 5705e695a52Smrg 571943345d3Smrg IFS=" " 572943345d3Smrg for arg 573943345d3Smrg do 574943345d3Smrg case "$arg" in 5755e695a52Smrg -o) 5765e695a52Smrg shift 5775e695a52Smrg ;; 5785e695a52Smrg $object) 5795e695a52Smrg shift 5805e695a52Smrg ;; 581943345d3Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582943345d3Smrg set fnord "$@" 583943345d3Smrg shift 584943345d3Smrg shift 585943345d3Smrg ;; 586943345d3Smrg *) 587943345d3Smrg set fnord "$@" "$arg" 588943345d3Smrg shift 589943345d3Smrg shift 590943345d3Smrg ;; 591943345d3Smrg esac 592943345d3Smrg done 5935e695a52Smrg "$@" -E 2>/dev/null | 5945e695a52Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595943345d3Smrg rm -f "$depfile" 596943345d3Smrg echo "$object : \\" > "$depfile" 5975e695a52Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598943345d3Smrg echo " " >> "$depfile" 5995e695a52Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600943345d3Smrg rm -f "$tmpdepfile" 601943345d3Smrg ;; 602943345d3Smrg 6035e695a52Smrgmsvcmsys) 6045e695a52Smrg # This case exists only to let depend.m4 do its work. It works by 6055e695a52Smrg # looking at the text of this script. This case will never be run, 6065e695a52Smrg # since it is checked for above. 6075e695a52Smrg exit 1 6085e695a52Smrg ;; 6095e695a52Smrg 610943345d3Smrgnone) 611943345d3Smrg exec "$@" 612943345d3Smrg ;; 613943345d3Smrg 614943345d3Smrg*) 615943345d3Smrg echo "Unknown depmode $depmode" 1>&2 616943345d3Smrg exit 1 617943345d3Smrg ;; 618943345d3Smrgesac 619943345d3Smrg 620943345d3Smrgexit 0 621943345d3Smrg 622943345d3Smrg# Local Variables: 623943345d3Smrg# mode: shell-script 624943345d3Smrg# sh-indentation: 2 625943345d3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626943345d3Smrg# time-stamp-start: "scriptversion=" 627943345d3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6285e695a52Smrg# time-stamp-time-zone: "UTC" 6295e695a52Smrg# time-stamp-end: "; # UTC" 630943345d3Smrg# End: 631