depcomp revision 2ae83157
1444c061aSmrg#! /bin/sh 2444c061aSmrg# depcomp - compile a program generating dependencies as side-effects 3444c061aSmrg 42ae83157Smrgscriptversion=2009-04-28.21; # UTC 5444c061aSmrg 62ae83157Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 72ae83157Smrg# Software Foundation, Inc. 8444c061aSmrg 9444c061aSmrg# This program is free software; you can redistribute it and/or modify 10444c061aSmrg# it under the terms of the GNU General Public License as published by 11444c061aSmrg# the Free Software Foundation; either version 2, or (at your option) 12444c061aSmrg# any later version. 13444c061aSmrg 14444c061aSmrg# This program is distributed in the hope that it will be useful, 15444c061aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16444c061aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17444c061aSmrg# GNU General Public License for more details. 18444c061aSmrg 19444c061aSmrg# You should have received a copy of the GNU General Public License 202ae83157Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21444c061aSmrg 22444c061aSmrg# As a special exception to the GNU General Public License, if you 23444c061aSmrg# distribute this file as part of a program that contains a 24444c061aSmrg# configuration script generated by Autoconf, you may include it under 25444c061aSmrg# the same distribution terms that you use for the rest of that program. 26444c061aSmrg 27444c061aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28444c061aSmrg 29444c061aSmrgcase $1 in 30444c061aSmrg '') 31444c061aSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32444c061aSmrg exit 1; 33444c061aSmrg ;; 34444c061aSmrg -h | --h*) 35444c061aSmrg cat <<\EOF 36444c061aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37444c061aSmrg 38444c061aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39444c061aSmrgas side-effects. 40444c061aSmrg 41444c061aSmrgEnvironment variables: 42444c061aSmrg depmode Dependency tracking mode. 43444c061aSmrg source Source file read by `PROGRAMS ARGS'. 44444c061aSmrg object Object file output by `PROGRAMS ARGS'. 45444c061aSmrg DEPDIR directory where to store dependencies. 46444c061aSmrg depfile Dependency file to output. 47444c061aSmrg tmpdepfile Temporary file to use when outputing dependencies. 48444c061aSmrg libtool Whether libtool is used (yes/no). 49444c061aSmrg 50444c061aSmrgReport bugs to <bug-automake@gnu.org>. 51444c061aSmrgEOF 52444c061aSmrg exit $? 53444c061aSmrg ;; 54444c061aSmrg -v | --v*) 55444c061aSmrg echo "depcomp $scriptversion" 56444c061aSmrg exit $? 57444c061aSmrg ;; 58444c061aSmrgesac 59444c061aSmrg 60444c061aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61444c061aSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62444c061aSmrg exit 1 63444c061aSmrgfi 64444c061aSmrg 65444c061aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66444c061aSmrgdepfile=${depfile-`echo "$object" | 67444c061aSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68444c061aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69444c061aSmrg 70444c061aSmrgrm -f "$tmpdepfile" 71444c061aSmrg 72444c061aSmrg# Some modes work just like other modes, but use different flags. We 73444c061aSmrg# parameterize here, but still list the modes in the big case below, 74444c061aSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75444c061aSmrg# here, because this file can only contain one case statement. 76444c061aSmrgif test "$depmode" = hp; then 77444c061aSmrg # HP compiler uses -M and no extra arg. 78444c061aSmrg gccflag=-M 79444c061aSmrg depmode=gcc 80444c061aSmrgfi 81444c061aSmrg 82444c061aSmrgif test "$depmode" = dashXmstdout; then 83444c061aSmrg # This is just like dashmstdout with a different argument. 84444c061aSmrg dashmflag=-xM 85444c061aSmrg depmode=dashmstdout 86444c061aSmrgfi 87444c061aSmrg 882ae83157Smrgcygpath_u="cygpath -u -f -" 892ae83157Smrgif test "$depmode" = msvcmsys; then 902ae83157Smrg # This is just like msvisualcpp but w/o cygpath translation. 912ae83157Smrg # Just convert the backslash-escaped backslashes to single forward 922ae83157Smrg # slashes to satisfy depend.m4 932ae83157Smrg cygpath_u="sed s,\\\\\\\\,/,g" 942ae83157Smrg depmode=msvisualcpp 952ae83157Smrgfi 962ae83157Smrg 97444c061aSmrgcase "$depmode" in 98444c061aSmrggcc3) 99444c061aSmrg## gcc 3 implements dependency tracking that does exactly what 100444c061aSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101444c061aSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1022265a131Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1032265a131Smrg## the command line argument order; so add the flags where they 1042265a131Smrg## appear in depend2.am. Note that the slowdown incurred here 1052265a131Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1062265a131Smrg for arg 1072265a131Smrg do 1082265a131Smrg case $arg in 1092265a131Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1102265a131Smrg *) set fnord "$@" "$arg" ;; 1112265a131Smrg esac 1122265a131Smrg shift # fnord 1132265a131Smrg shift # $arg 1142265a131Smrg done 1152265a131Smrg "$@" 116444c061aSmrg stat=$? 117444c061aSmrg if test $stat -eq 0; then : 118444c061aSmrg else 119444c061aSmrg rm -f "$tmpdepfile" 120444c061aSmrg exit $stat 121444c061aSmrg fi 122444c061aSmrg mv "$tmpdepfile" "$depfile" 123444c061aSmrg ;; 124444c061aSmrg 125444c061aSmrggcc) 126444c061aSmrg## There are various ways to get dependency output from gcc. Here's 127444c061aSmrg## why we pick this rather obscure method: 128444c061aSmrg## - Don't want to use -MD because we'd like the dependencies to end 129444c061aSmrg## up in a subdir. Having to rename by hand is ugly. 130444c061aSmrg## (We might end up doing this anyway to support other compilers.) 131444c061aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132444c061aSmrg## -MM, not -M (despite what the docs say). 133444c061aSmrg## - Using -M directly means running the compiler twice (even worse 134444c061aSmrg## than renaming). 135444c061aSmrg if test -z "$gccflag"; then 136444c061aSmrg gccflag=-MD, 137444c061aSmrg fi 138444c061aSmrg "$@" -Wp,"$gccflag$tmpdepfile" 139444c061aSmrg stat=$? 140444c061aSmrg if test $stat -eq 0; then : 141444c061aSmrg else 142444c061aSmrg rm -f "$tmpdepfile" 143444c061aSmrg exit $stat 144444c061aSmrg fi 145444c061aSmrg rm -f "$depfile" 146444c061aSmrg echo "$object : \\" > "$depfile" 147444c061aSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148444c061aSmrg## The second -e expression handles DOS-style file names with drive letters. 149444c061aSmrg sed -e 's/^[^:]*: / /' \ 150444c061aSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151444c061aSmrg## This next piece of magic avoids the `deleted header file' problem. 152444c061aSmrg## The problem is that when a header file which appears in a .P file 153444c061aSmrg## is deleted, the dependency causes make to die (because there is 154444c061aSmrg## typically no way to rebuild the header). We avoid this by adding 155444c061aSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 156444c061aSmrg## this for us directly. 157444c061aSmrg tr ' ' ' 158444c061aSmrg' < "$tmpdepfile" | 159444c061aSmrg## Some versions of gcc put a space before the `:'. On the theory 160444c061aSmrg## that the space means something, we add a space to the output as 161444c061aSmrg## well. 162444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 163444c061aSmrg## correctly. Breaking it into two sed invocations is a workaround. 164444c061aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165444c061aSmrg rm -f "$tmpdepfile" 166444c061aSmrg ;; 167444c061aSmrg 168444c061aSmrghp) 169444c061aSmrg # This case exists only to let depend.m4 do its work. It works by 170444c061aSmrg # looking at the text of this script. This case will never be run, 171444c061aSmrg # since it is checked for above. 172444c061aSmrg exit 1 173444c061aSmrg ;; 174444c061aSmrg 175444c061aSmrgsgi) 176444c061aSmrg if test "$libtool" = yes; then 177444c061aSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178444c061aSmrg else 179444c061aSmrg "$@" -MDupdate "$tmpdepfile" 180444c061aSmrg fi 181444c061aSmrg stat=$? 182444c061aSmrg if test $stat -eq 0; then : 183444c061aSmrg else 184444c061aSmrg rm -f "$tmpdepfile" 185444c061aSmrg exit $stat 186444c061aSmrg fi 187444c061aSmrg rm -f "$depfile" 188444c061aSmrg 189444c061aSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190444c061aSmrg echo "$object : \\" > "$depfile" 191444c061aSmrg 192444c061aSmrg # Clip off the initial element (the dependent). Don't try to be 193444c061aSmrg # clever and replace this with sed code, as IRIX sed won't handle 194444c061aSmrg # lines with more than a fixed number of characters (4096 in 195444c061aSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196444c061aSmrg # the IRIX cc adds comments like `#:fec' to the end of the 197444c061aSmrg # dependency line. 198444c061aSmrg tr ' ' ' 199444c061aSmrg' < "$tmpdepfile" \ 200444c061aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201444c061aSmrg tr ' 2022ae83157Smrg' ' ' >> "$depfile" 2032ae83157Smrg echo >> "$depfile" 204444c061aSmrg 205444c061aSmrg # The second pass generates a dummy entry for each header file. 206444c061aSmrg tr ' ' ' 207444c061aSmrg' < "$tmpdepfile" \ 208444c061aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2092ae83157Smrg >> "$depfile" 210444c061aSmrg else 211444c061aSmrg # The sourcefile does not contain any dependencies, so just 212444c061aSmrg # store a dummy comment line, to avoid errors with the Makefile 213444c061aSmrg # "include basename.Plo" scheme. 214444c061aSmrg echo "#dummy" > "$depfile" 215444c061aSmrg fi 216444c061aSmrg rm -f "$tmpdepfile" 217444c061aSmrg ;; 218444c061aSmrg 219444c061aSmrgaix) 220444c061aSmrg # The C for AIX Compiler uses -M and outputs the dependencies 221444c061aSmrg # in a .u file. In older versions, this file always lives in the 222444c061aSmrg # current directory. Also, the AIX compiler puts `$object:' at the 223444c061aSmrg # start of each line; $object doesn't have directory information. 224444c061aSmrg # Version 6 uses the directory in both cases. 2252265a131Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2262265a131Smrg test "x$dir" = "x$object" && dir= 2272265a131Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228444c061aSmrg if test "$libtool" = yes; then 2292265a131Smrg tmpdepfile1=$dir$base.u 2302265a131Smrg tmpdepfile2=$base.u 2312265a131Smrg tmpdepfile3=$dir.libs/$base.u 232444c061aSmrg "$@" -Wc,-M 233444c061aSmrg else 2342265a131Smrg tmpdepfile1=$dir$base.u 2352265a131Smrg tmpdepfile2=$dir$base.u 2362265a131Smrg tmpdepfile3=$dir$base.u 237444c061aSmrg "$@" -M 238444c061aSmrg fi 239444c061aSmrg stat=$? 240444c061aSmrg 241444c061aSmrg if test $stat -eq 0; then : 242444c061aSmrg else 2432265a131Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244444c061aSmrg exit $stat 245444c061aSmrg fi 246444c061aSmrg 2472265a131Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2482265a131Smrg do 2492265a131Smrg test -f "$tmpdepfile" && break 2502265a131Smrg done 251444c061aSmrg if test -f "$tmpdepfile"; then 252444c061aSmrg # Each line is of the form `foo.o: dependent.h'. 253444c061aSmrg # Do two passes, one to just change these to 254444c061aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2552265a131Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2562265a131Smrg # That's a tab and a space in the []. 2572265a131Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258444c061aSmrg else 259444c061aSmrg # The sourcefile does not contain any dependencies, so just 260444c061aSmrg # store a dummy comment line, to avoid errors with the Makefile 261444c061aSmrg # "include basename.Plo" scheme. 262444c061aSmrg echo "#dummy" > "$depfile" 263444c061aSmrg fi 264444c061aSmrg rm -f "$tmpdepfile" 265444c061aSmrg ;; 266444c061aSmrg 267444c061aSmrgicc) 268444c061aSmrg # Intel's C compiler understands `-MD -MF file'. However on 269444c061aSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270444c061aSmrg # ICC 7.0 will fill foo.d with something like 271444c061aSmrg # foo.o: sub/foo.c 272444c061aSmrg # foo.o: sub/foo.h 273444c061aSmrg # which is wrong. We want: 274444c061aSmrg # sub/foo.o: sub/foo.c 275444c061aSmrg # sub/foo.o: sub/foo.h 276444c061aSmrg # sub/foo.c: 277444c061aSmrg # sub/foo.h: 278444c061aSmrg # ICC 7.1 will output 279444c061aSmrg # foo.o: sub/foo.c sub/foo.h 280444c061aSmrg # and will wrap long lines using \ : 281444c061aSmrg # foo.o: sub/foo.c ... \ 282444c061aSmrg # sub/foo.h ... \ 283444c061aSmrg # ... 284444c061aSmrg 285444c061aSmrg "$@" -MD -MF "$tmpdepfile" 286444c061aSmrg stat=$? 287444c061aSmrg if test $stat -eq 0; then : 288444c061aSmrg else 289444c061aSmrg rm -f "$tmpdepfile" 290444c061aSmrg exit $stat 291444c061aSmrg fi 292444c061aSmrg rm -f "$depfile" 293444c061aSmrg # Each line is of the form `foo.o: dependent.h', 294444c061aSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295444c061aSmrg # Do two passes, one to just change these to 296444c061aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 297444c061aSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298444c061aSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 299444c061aSmrg # correctly. Breaking it into two sed invocations is a workaround. 300444c061aSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301444c061aSmrg sed -e 's/$/ :/' >> "$depfile" 302444c061aSmrg rm -f "$tmpdepfile" 303444c061aSmrg ;; 304444c061aSmrg 3052265a131Smrghp2) 3062265a131Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3072265a131Smrg # compilers, which have integrated preprocessors. The correct option 3082265a131Smrg # to use with these is +Maked; it writes dependencies to a file named 3092265a131Smrg # 'foo.d', which lands next to the object file, wherever that 3102265a131Smrg # happens to be. 3112265a131Smrg # Much of this is similar to the tru64 case; see comments there. 3122265a131Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3132265a131Smrg test "x$dir" = "x$object" && dir= 3142265a131Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3152265a131Smrg if test "$libtool" = yes; then 3162265a131Smrg tmpdepfile1=$dir$base.d 3172265a131Smrg tmpdepfile2=$dir.libs/$base.d 3182265a131Smrg "$@" -Wc,+Maked 3192265a131Smrg else 3202265a131Smrg tmpdepfile1=$dir$base.d 3212265a131Smrg tmpdepfile2=$dir$base.d 3222265a131Smrg "$@" +Maked 3232265a131Smrg fi 3242265a131Smrg stat=$? 3252265a131Smrg if test $stat -eq 0; then : 3262265a131Smrg else 3272265a131Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3282265a131Smrg exit $stat 3292265a131Smrg fi 3302265a131Smrg 3312265a131Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3322265a131Smrg do 3332265a131Smrg test -f "$tmpdepfile" && break 3342265a131Smrg done 3352265a131Smrg if test -f "$tmpdepfile"; then 3362265a131Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3372265a131Smrg # Add `dependent.h:' lines. 3382ae83157Smrg sed -ne '2,${ 3392ae83157Smrg s/^ *// 3402ae83157Smrg s/ \\*$// 3412ae83157Smrg s/$/:/ 3422ae83157Smrg p 3432ae83157Smrg }' "$tmpdepfile" >> "$depfile" 3442265a131Smrg else 3452265a131Smrg echo "#dummy" > "$depfile" 3462265a131Smrg fi 3472265a131Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3482265a131Smrg ;; 3492265a131Smrg 350444c061aSmrgtru64) 351444c061aSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 352444c061aSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353444c061aSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354444c061aSmrg # dependencies in `foo.d' instead, so we check for that too. 355444c061aSmrg # Subdirectories are respected. 356444c061aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357444c061aSmrg test "x$dir" = "x$object" && dir= 358444c061aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359444c061aSmrg 360444c061aSmrg if test "$libtool" = yes; then 361444c061aSmrg # With Tru64 cc, shared objects can also be used to make a 3622265a131Smrg # static library. This mechanism is used in libtool 1.4 series to 363444c061aSmrg # handle both shared and static libraries in a single compilation. 364444c061aSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365444c061aSmrg # 366444c061aSmrg # With libtool 1.5 this exception was removed, and libtool now 367444c061aSmrg # generates 2 separate objects for the 2 libraries. These two 3682265a131Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369444c061aSmrg # in $dir$base.o.d. We have to check for both files, because 370444c061aSmrg # one of the two compilations can be disabled. We should prefer 371444c061aSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372444c061aSmrg # automatically cleaned when .libs/ is deleted, while ignoring 373444c061aSmrg # the former would cause a distcleancheck panic. 374444c061aSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375444c061aSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376444c061aSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377444c061aSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378444c061aSmrg "$@" -Wc,-MD 379444c061aSmrg else 380444c061aSmrg tmpdepfile1=$dir$base.o.d 381444c061aSmrg tmpdepfile2=$dir$base.d 382444c061aSmrg tmpdepfile3=$dir$base.d 383444c061aSmrg tmpdepfile4=$dir$base.d 384444c061aSmrg "$@" -MD 385444c061aSmrg fi 386444c061aSmrg 387444c061aSmrg stat=$? 388444c061aSmrg if test $stat -eq 0; then : 389444c061aSmrg else 390444c061aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391444c061aSmrg exit $stat 392444c061aSmrg fi 393444c061aSmrg 394444c061aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395444c061aSmrg do 396444c061aSmrg test -f "$tmpdepfile" && break 397444c061aSmrg done 398444c061aSmrg if test -f "$tmpdepfile"; then 399444c061aSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400444c061aSmrg # That's a tab and a space in the []. 401444c061aSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402444c061aSmrg else 403444c061aSmrg echo "#dummy" > "$depfile" 404444c061aSmrg fi 405444c061aSmrg rm -f "$tmpdepfile" 406444c061aSmrg ;; 407444c061aSmrg 408444c061aSmrg#nosideeffect) 409444c061aSmrg # This comment above is used by automake to tell side-effect 410444c061aSmrg # dependency tracking mechanisms from slower ones. 411444c061aSmrg 412444c061aSmrgdashmstdout) 413444c061aSmrg # Important note: in order to support this mode, a compiler *must* 414444c061aSmrg # always write the preprocessed file to stdout, regardless of -o. 415444c061aSmrg "$@" || exit $? 416444c061aSmrg 417444c061aSmrg # Remove the call to Libtool. 418444c061aSmrg if test "$libtool" = yes; then 4192ae83157Smrg while test "X$1" != 'X--mode=compile'; do 420444c061aSmrg shift 421444c061aSmrg done 422444c061aSmrg shift 423444c061aSmrg fi 424444c061aSmrg 425444c061aSmrg # Remove `-o $object'. 426444c061aSmrg IFS=" " 427444c061aSmrg for arg 428444c061aSmrg do 429444c061aSmrg case $arg in 430444c061aSmrg -o) 431444c061aSmrg shift 432444c061aSmrg ;; 433444c061aSmrg $object) 434444c061aSmrg shift 435444c061aSmrg ;; 436444c061aSmrg *) 437444c061aSmrg set fnord "$@" "$arg" 438444c061aSmrg shift # fnord 439444c061aSmrg shift # $arg 440444c061aSmrg ;; 441444c061aSmrg esac 442444c061aSmrg done 443444c061aSmrg 444444c061aSmrg test -z "$dashmflag" && dashmflag=-M 445444c061aSmrg # Require at least two characters before searching for `:' 446444c061aSmrg # in the target name. This is to cope with DOS-style filenames: 447444c061aSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448444c061aSmrg "$@" $dashmflag | 449444c061aSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450444c061aSmrg rm -f "$depfile" 451444c061aSmrg cat < "$tmpdepfile" > "$depfile" 452444c061aSmrg tr ' ' ' 453444c061aSmrg' < "$tmpdepfile" | \ 454444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 455444c061aSmrg## correctly. Breaking it into two sed invocations is a workaround. 456444c061aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457444c061aSmrg rm -f "$tmpdepfile" 458444c061aSmrg ;; 459444c061aSmrg 460444c061aSmrgdashXmstdout) 461444c061aSmrg # This case only exists to satisfy depend.m4. It is never actually 462444c061aSmrg # run, as this mode is specially recognized in the preamble. 463444c061aSmrg exit 1 464444c061aSmrg ;; 465444c061aSmrg 466444c061aSmrgmakedepend) 467444c061aSmrg "$@" || exit $? 468444c061aSmrg # Remove any Libtool call 469444c061aSmrg if test "$libtool" = yes; then 4702ae83157Smrg while test "X$1" != 'X--mode=compile'; do 471444c061aSmrg shift 472444c061aSmrg done 473444c061aSmrg shift 474444c061aSmrg fi 475444c061aSmrg # X makedepend 476444c061aSmrg shift 4772ae83157Smrg cleared=no eat=no 4782ae83157Smrg for arg 4792ae83157Smrg do 480444c061aSmrg case $cleared in 481444c061aSmrg no) 482444c061aSmrg set ""; shift 483444c061aSmrg cleared=yes ;; 484444c061aSmrg esac 4852ae83157Smrg if test $eat = yes; then 4862ae83157Smrg eat=no 4872ae83157Smrg continue 4882ae83157Smrg fi 489444c061aSmrg case "$arg" in 490444c061aSmrg -D*|-I*) 491444c061aSmrg set fnord "$@" "$arg"; shift ;; 492444c061aSmrg # Strip any option that makedepend may not understand. Remove 493444c061aSmrg # the object too, otherwise makedepend will parse it as a source file. 4942ae83157Smrg -arch) 4952ae83157Smrg eat=yes ;; 496444c061aSmrg -*|$object) 497444c061aSmrg ;; 498444c061aSmrg *) 499444c061aSmrg set fnord "$@" "$arg"; shift ;; 500444c061aSmrg esac 501444c061aSmrg done 5022ae83157Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503444c061aSmrg touch "$tmpdepfile" 504444c061aSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505444c061aSmrg rm -f "$depfile" 506444c061aSmrg cat < "$tmpdepfile" > "$depfile" 507444c061aSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508444c061aSmrg' | \ 509444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 510444c061aSmrg## correctly. Breaking it into two sed invocations is a workaround. 511444c061aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512444c061aSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513444c061aSmrg ;; 514444c061aSmrg 515444c061aSmrgcpp) 516444c061aSmrg # Important note: in order to support this mode, a compiler *must* 517444c061aSmrg # always write the preprocessed file to stdout. 518444c061aSmrg "$@" || exit $? 519444c061aSmrg 520444c061aSmrg # Remove the call to Libtool. 521444c061aSmrg if test "$libtool" = yes; then 5222ae83157Smrg while test "X$1" != 'X--mode=compile'; do 523444c061aSmrg shift 524444c061aSmrg done 525444c061aSmrg shift 526444c061aSmrg fi 527444c061aSmrg 528444c061aSmrg # Remove `-o $object'. 529444c061aSmrg IFS=" " 530444c061aSmrg for arg 531444c061aSmrg do 532444c061aSmrg case $arg in 533444c061aSmrg -o) 534444c061aSmrg shift 535444c061aSmrg ;; 536444c061aSmrg $object) 537444c061aSmrg shift 538444c061aSmrg ;; 539444c061aSmrg *) 540444c061aSmrg set fnord "$@" "$arg" 541444c061aSmrg shift # fnord 542444c061aSmrg shift # $arg 543444c061aSmrg ;; 544444c061aSmrg esac 545444c061aSmrg done 546444c061aSmrg 547444c061aSmrg "$@" -E | 548444c061aSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549444c061aSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550444c061aSmrg sed '$ s: \\$::' > "$tmpdepfile" 551444c061aSmrg rm -f "$depfile" 552444c061aSmrg echo "$object : \\" > "$depfile" 553444c061aSmrg cat < "$tmpdepfile" >> "$depfile" 554444c061aSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555444c061aSmrg rm -f "$tmpdepfile" 556444c061aSmrg ;; 557444c061aSmrg 558444c061aSmrgmsvisualcpp) 559444c061aSmrg # Important note: in order to support this mode, a compiler *must* 5602ae83157Smrg # always write the preprocessed file to stdout. 561444c061aSmrg "$@" || exit $? 5622ae83157Smrg 5632ae83157Smrg # Remove the call to Libtool. 5642ae83157Smrg if test "$libtool" = yes; then 5652ae83157Smrg while test "X$1" != 'X--mode=compile'; do 5662ae83157Smrg shift 5672ae83157Smrg done 5682ae83157Smrg shift 5692ae83157Smrg fi 5702ae83157Smrg 571444c061aSmrg IFS=" " 572444c061aSmrg for arg 573444c061aSmrg do 574444c061aSmrg case "$arg" in 5752ae83157Smrg -o) 5762ae83157Smrg shift 5772ae83157Smrg ;; 5782ae83157Smrg $object) 5792ae83157Smrg shift 5802ae83157Smrg ;; 581444c061aSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582444c061aSmrg set fnord "$@" 583444c061aSmrg shift 584444c061aSmrg shift 585444c061aSmrg ;; 586444c061aSmrg *) 587444c061aSmrg set fnord "$@" "$arg" 588444c061aSmrg shift 589444c061aSmrg shift 590444c061aSmrg ;; 591444c061aSmrg esac 592444c061aSmrg done 5932ae83157Smrg "$@" -E 2>/dev/null | 5942ae83157Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595444c061aSmrg rm -f "$depfile" 596444c061aSmrg echo "$object : \\" > "$depfile" 5972ae83157Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598444c061aSmrg echo " " >> "$depfile" 5992ae83157Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600444c061aSmrg rm -f "$tmpdepfile" 601444c061aSmrg ;; 602444c061aSmrg 6032ae83157Smrgmsvcmsys) 6042ae83157Smrg # This case exists only to let depend.m4 do its work. It works by 6052ae83157Smrg # looking at the text of this script. This case will never be run, 6062ae83157Smrg # since it is checked for above. 6072ae83157Smrg exit 1 6082ae83157Smrg ;; 6092ae83157Smrg 610444c061aSmrgnone) 611444c061aSmrg exec "$@" 612444c061aSmrg ;; 613444c061aSmrg 614444c061aSmrg*) 615444c061aSmrg echo "Unknown depmode $depmode" 1>&2 616444c061aSmrg exit 1 617444c061aSmrg ;; 618444c061aSmrgesac 619444c061aSmrg 620444c061aSmrgexit 0 621444c061aSmrg 622444c061aSmrg# Local Variables: 623444c061aSmrg# mode: shell-script 624444c061aSmrg# sh-indentation: 2 625444c061aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626444c061aSmrg# time-stamp-start: "scriptversion=" 627444c061aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6282ae83157Smrg# time-stamp-time-zone: "UTC" 6292ae83157Smrg# time-stamp-end: "; # UTC" 630444c061aSmrg# End: 631