depcomp revision 2265a131
1444c061aSmrg#! /bin/sh 2444c061aSmrg# depcomp - compile a program generating dependencies as side-effects 3444c061aSmrg 42265a131Smrgscriptversion=2007-03-29.01 5444c061aSmrg 62265a131Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 72265a131Smrg# 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 20444c061aSmrg# along with this program; if not, write to the Free Software 21444c061aSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22444c061aSmrg# 02110-1301, USA. 23444c061aSmrg 24444c061aSmrg# As a special exception to the GNU General Public License, if you 25444c061aSmrg# distribute this file as part of a program that contains a 26444c061aSmrg# configuration script generated by Autoconf, you may include it under 27444c061aSmrg# the same distribution terms that you use for the rest of that program. 28444c061aSmrg 29444c061aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30444c061aSmrg 31444c061aSmrgcase $1 in 32444c061aSmrg '') 33444c061aSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34444c061aSmrg exit 1; 35444c061aSmrg ;; 36444c061aSmrg -h | --h*) 37444c061aSmrg cat <<\EOF 38444c061aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39444c061aSmrg 40444c061aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41444c061aSmrgas side-effects. 42444c061aSmrg 43444c061aSmrgEnvironment variables: 44444c061aSmrg depmode Dependency tracking mode. 45444c061aSmrg source Source file read by `PROGRAMS ARGS'. 46444c061aSmrg object Object file output by `PROGRAMS ARGS'. 47444c061aSmrg DEPDIR directory where to store dependencies. 48444c061aSmrg depfile Dependency file to output. 49444c061aSmrg tmpdepfile Temporary file to use when outputing dependencies. 50444c061aSmrg libtool Whether libtool is used (yes/no). 51444c061aSmrg 52444c061aSmrgReport bugs to <bug-automake@gnu.org>. 53444c061aSmrgEOF 54444c061aSmrg exit $? 55444c061aSmrg ;; 56444c061aSmrg -v | --v*) 57444c061aSmrg echo "depcomp $scriptversion" 58444c061aSmrg exit $? 59444c061aSmrg ;; 60444c061aSmrgesac 61444c061aSmrg 62444c061aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63444c061aSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64444c061aSmrg exit 1 65444c061aSmrgfi 66444c061aSmrg 67444c061aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68444c061aSmrgdepfile=${depfile-`echo "$object" | 69444c061aSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70444c061aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71444c061aSmrg 72444c061aSmrgrm -f "$tmpdepfile" 73444c061aSmrg 74444c061aSmrg# Some modes work just like other modes, but use different flags. We 75444c061aSmrg# parameterize here, but still list the modes in the big case below, 76444c061aSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77444c061aSmrg# here, because this file can only contain one case statement. 78444c061aSmrgif test "$depmode" = hp; then 79444c061aSmrg # HP compiler uses -M and no extra arg. 80444c061aSmrg gccflag=-M 81444c061aSmrg depmode=gcc 82444c061aSmrgfi 83444c061aSmrg 84444c061aSmrgif test "$depmode" = dashXmstdout; then 85444c061aSmrg # This is just like dashmstdout with a different argument. 86444c061aSmrg dashmflag=-xM 87444c061aSmrg depmode=dashmstdout 88444c061aSmrgfi 89444c061aSmrg 90444c061aSmrgcase "$depmode" in 91444c061aSmrggcc3) 92444c061aSmrg## gcc 3 implements dependency tracking that does exactly what 93444c061aSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94444c061aSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 952265a131Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 962265a131Smrg## the command line argument order; so add the flags where they 972265a131Smrg## appear in depend2.am. Note that the slowdown incurred here 982265a131Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 992265a131Smrg for arg 1002265a131Smrg do 1012265a131Smrg case $arg in 1022265a131Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1032265a131Smrg *) set fnord "$@" "$arg" ;; 1042265a131Smrg esac 1052265a131Smrg shift # fnord 1062265a131Smrg shift # $arg 1072265a131Smrg done 1082265a131Smrg "$@" 109444c061aSmrg stat=$? 110444c061aSmrg if test $stat -eq 0; then : 111444c061aSmrg else 112444c061aSmrg rm -f "$tmpdepfile" 113444c061aSmrg exit $stat 114444c061aSmrg fi 115444c061aSmrg mv "$tmpdepfile" "$depfile" 116444c061aSmrg ;; 117444c061aSmrg 118444c061aSmrggcc) 119444c061aSmrg## There are various ways to get dependency output from gcc. Here's 120444c061aSmrg## why we pick this rather obscure method: 121444c061aSmrg## - Don't want to use -MD because we'd like the dependencies to end 122444c061aSmrg## up in a subdir. Having to rename by hand is ugly. 123444c061aSmrg## (We might end up doing this anyway to support other compilers.) 124444c061aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125444c061aSmrg## -MM, not -M (despite what the docs say). 126444c061aSmrg## - Using -M directly means running the compiler twice (even worse 127444c061aSmrg## than renaming). 128444c061aSmrg if test -z "$gccflag"; then 129444c061aSmrg gccflag=-MD, 130444c061aSmrg fi 131444c061aSmrg "$@" -Wp,"$gccflag$tmpdepfile" 132444c061aSmrg stat=$? 133444c061aSmrg if test $stat -eq 0; then : 134444c061aSmrg else 135444c061aSmrg rm -f "$tmpdepfile" 136444c061aSmrg exit $stat 137444c061aSmrg fi 138444c061aSmrg rm -f "$depfile" 139444c061aSmrg echo "$object : \\" > "$depfile" 140444c061aSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141444c061aSmrg## The second -e expression handles DOS-style file names with drive letters. 142444c061aSmrg sed -e 's/^[^:]*: / /' \ 143444c061aSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144444c061aSmrg## This next piece of magic avoids the `deleted header file' problem. 145444c061aSmrg## The problem is that when a header file which appears in a .P file 146444c061aSmrg## is deleted, the dependency causes make to die (because there is 147444c061aSmrg## typically no way to rebuild the header). We avoid this by adding 148444c061aSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 149444c061aSmrg## this for us directly. 150444c061aSmrg tr ' ' ' 151444c061aSmrg' < "$tmpdepfile" | 152444c061aSmrg## Some versions of gcc put a space before the `:'. On the theory 153444c061aSmrg## that the space means something, we add a space to the output as 154444c061aSmrg## well. 155444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 156444c061aSmrg## correctly. Breaking it into two sed invocations is a workaround. 157444c061aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158444c061aSmrg rm -f "$tmpdepfile" 159444c061aSmrg ;; 160444c061aSmrg 161444c061aSmrghp) 162444c061aSmrg # This case exists only to let depend.m4 do its work. It works by 163444c061aSmrg # looking at the text of this script. This case will never be run, 164444c061aSmrg # since it is checked for above. 165444c061aSmrg exit 1 166444c061aSmrg ;; 167444c061aSmrg 168444c061aSmrgsgi) 169444c061aSmrg if test "$libtool" = yes; then 170444c061aSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171444c061aSmrg else 172444c061aSmrg "$@" -MDupdate "$tmpdepfile" 173444c061aSmrg fi 174444c061aSmrg stat=$? 175444c061aSmrg if test $stat -eq 0; then : 176444c061aSmrg else 177444c061aSmrg rm -f "$tmpdepfile" 178444c061aSmrg exit $stat 179444c061aSmrg fi 180444c061aSmrg rm -f "$depfile" 181444c061aSmrg 182444c061aSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183444c061aSmrg echo "$object : \\" > "$depfile" 184444c061aSmrg 185444c061aSmrg # Clip off the initial element (the dependent). Don't try to be 186444c061aSmrg # clever and replace this with sed code, as IRIX sed won't handle 187444c061aSmrg # lines with more than a fixed number of characters (4096 in 188444c061aSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189444c061aSmrg # the IRIX cc adds comments like `#:fec' to the end of the 190444c061aSmrg # dependency line. 191444c061aSmrg tr ' ' ' 192444c061aSmrg' < "$tmpdepfile" \ 193444c061aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194444c061aSmrg tr ' 195444c061aSmrg' ' ' >> $depfile 196444c061aSmrg echo >> $depfile 197444c061aSmrg 198444c061aSmrg # The second pass generates a dummy entry for each header file. 199444c061aSmrg tr ' ' ' 200444c061aSmrg' < "$tmpdepfile" \ 201444c061aSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202444c061aSmrg >> $depfile 203444c061aSmrg else 204444c061aSmrg # The sourcefile does not contain any dependencies, so just 205444c061aSmrg # store a dummy comment line, to avoid errors with the Makefile 206444c061aSmrg # "include basename.Plo" scheme. 207444c061aSmrg echo "#dummy" > "$depfile" 208444c061aSmrg fi 209444c061aSmrg rm -f "$tmpdepfile" 210444c061aSmrg ;; 211444c061aSmrg 212444c061aSmrgaix) 213444c061aSmrg # The C for AIX Compiler uses -M and outputs the dependencies 214444c061aSmrg # in a .u file. In older versions, this file always lives in the 215444c061aSmrg # current directory. Also, the AIX compiler puts `$object:' at the 216444c061aSmrg # start of each line; $object doesn't have directory information. 217444c061aSmrg # Version 6 uses the directory in both cases. 2182265a131Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2192265a131Smrg test "x$dir" = "x$object" && dir= 2202265a131Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221444c061aSmrg if test "$libtool" = yes; then 2222265a131Smrg tmpdepfile1=$dir$base.u 2232265a131Smrg tmpdepfile2=$base.u 2242265a131Smrg tmpdepfile3=$dir.libs/$base.u 225444c061aSmrg "$@" -Wc,-M 226444c061aSmrg else 2272265a131Smrg tmpdepfile1=$dir$base.u 2282265a131Smrg tmpdepfile2=$dir$base.u 2292265a131Smrg tmpdepfile3=$dir$base.u 230444c061aSmrg "$@" -M 231444c061aSmrg fi 232444c061aSmrg stat=$? 233444c061aSmrg 234444c061aSmrg if test $stat -eq 0; then : 235444c061aSmrg else 2362265a131Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237444c061aSmrg exit $stat 238444c061aSmrg fi 239444c061aSmrg 2402265a131Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2412265a131Smrg do 2422265a131Smrg test -f "$tmpdepfile" && break 2432265a131Smrg done 244444c061aSmrg if test -f "$tmpdepfile"; then 245444c061aSmrg # Each line is of the form `foo.o: dependent.h'. 246444c061aSmrg # Do two passes, one to just change these to 247444c061aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2482265a131Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2492265a131Smrg # That's a tab and a space in the []. 2502265a131Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251444c061aSmrg else 252444c061aSmrg # The sourcefile does not contain any dependencies, so just 253444c061aSmrg # store a dummy comment line, to avoid errors with the Makefile 254444c061aSmrg # "include basename.Plo" scheme. 255444c061aSmrg echo "#dummy" > "$depfile" 256444c061aSmrg fi 257444c061aSmrg rm -f "$tmpdepfile" 258444c061aSmrg ;; 259444c061aSmrg 260444c061aSmrgicc) 261444c061aSmrg # Intel's C compiler understands `-MD -MF file'. However on 262444c061aSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263444c061aSmrg # ICC 7.0 will fill foo.d with something like 264444c061aSmrg # foo.o: sub/foo.c 265444c061aSmrg # foo.o: sub/foo.h 266444c061aSmrg # which is wrong. We want: 267444c061aSmrg # sub/foo.o: sub/foo.c 268444c061aSmrg # sub/foo.o: sub/foo.h 269444c061aSmrg # sub/foo.c: 270444c061aSmrg # sub/foo.h: 271444c061aSmrg # ICC 7.1 will output 272444c061aSmrg # foo.o: sub/foo.c sub/foo.h 273444c061aSmrg # and will wrap long lines using \ : 274444c061aSmrg # foo.o: sub/foo.c ... \ 275444c061aSmrg # sub/foo.h ... \ 276444c061aSmrg # ... 277444c061aSmrg 278444c061aSmrg "$@" -MD -MF "$tmpdepfile" 279444c061aSmrg stat=$? 280444c061aSmrg if test $stat -eq 0; then : 281444c061aSmrg else 282444c061aSmrg rm -f "$tmpdepfile" 283444c061aSmrg exit $stat 284444c061aSmrg fi 285444c061aSmrg rm -f "$depfile" 286444c061aSmrg # Each line is of the form `foo.o: dependent.h', 287444c061aSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288444c061aSmrg # Do two passes, one to just change these to 289444c061aSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 290444c061aSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291444c061aSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 292444c061aSmrg # correctly. Breaking it into two sed invocations is a workaround. 293444c061aSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294444c061aSmrg sed -e 's/$/ :/' >> "$depfile" 295444c061aSmrg rm -f "$tmpdepfile" 296444c061aSmrg ;; 297444c061aSmrg 2982265a131Smrghp2) 2992265a131Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3002265a131Smrg # compilers, which have integrated preprocessors. The correct option 3012265a131Smrg # to use with these is +Maked; it writes dependencies to a file named 3022265a131Smrg # 'foo.d', which lands next to the object file, wherever that 3032265a131Smrg # happens to be. 3042265a131Smrg # Much of this is similar to the tru64 case; see comments there. 3052265a131Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3062265a131Smrg test "x$dir" = "x$object" && dir= 3072265a131Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3082265a131Smrg if test "$libtool" = yes; then 3092265a131Smrg tmpdepfile1=$dir$base.d 3102265a131Smrg tmpdepfile2=$dir.libs/$base.d 3112265a131Smrg "$@" -Wc,+Maked 3122265a131Smrg else 3132265a131Smrg tmpdepfile1=$dir$base.d 3142265a131Smrg tmpdepfile2=$dir$base.d 3152265a131Smrg "$@" +Maked 3162265a131Smrg fi 3172265a131Smrg stat=$? 3182265a131Smrg if test $stat -eq 0; then : 3192265a131Smrg else 3202265a131Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3212265a131Smrg exit $stat 3222265a131Smrg fi 3232265a131Smrg 3242265a131Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3252265a131Smrg do 3262265a131Smrg test -f "$tmpdepfile" && break 3272265a131Smrg done 3282265a131Smrg if test -f "$tmpdepfile"; then 3292265a131Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3302265a131Smrg # Add `dependent.h:' lines. 3312265a131Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3322265a131Smrg else 3332265a131Smrg echo "#dummy" > "$depfile" 3342265a131Smrg fi 3352265a131Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3362265a131Smrg ;; 3372265a131Smrg 338444c061aSmrgtru64) 339444c061aSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 340444c061aSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341444c061aSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342444c061aSmrg # dependencies in `foo.d' instead, so we check for that too. 343444c061aSmrg # Subdirectories are respected. 344444c061aSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345444c061aSmrg test "x$dir" = "x$object" && dir= 346444c061aSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347444c061aSmrg 348444c061aSmrg if test "$libtool" = yes; then 349444c061aSmrg # With Tru64 cc, shared objects can also be used to make a 3502265a131Smrg # static library. This mechanism is used in libtool 1.4 series to 351444c061aSmrg # handle both shared and static libraries in a single compilation. 352444c061aSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353444c061aSmrg # 354444c061aSmrg # With libtool 1.5 this exception was removed, and libtool now 355444c061aSmrg # generates 2 separate objects for the 2 libraries. These two 3562265a131Smrg # compilations output dependencies in $dir.libs/$base.o.d and 357444c061aSmrg # in $dir$base.o.d. We have to check for both files, because 358444c061aSmrg # one of the two compilations can be disabled. We should prefer 359444c061aSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360444c061aSmrg # automatically cleaned when .libs/ is deleted, while ignoring 361444c061aSmrg # the former would cause a distcleancheck panic. 362444c061aSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363444c061aSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364444c061aSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365444c061aSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366444c061aSmrg "$@" -Wc,-MD 367444c061aSmrg else 368444c061aSmrg tmpdepfile1=$dir$base.o.d 369444c061aSmrg tmpdepfile2=$dir$base.d 370444c061aSmrg tmpdepfile3=$dir$base.d 371444c061aSmrg tmpdepfile4=$dir$base.d 372444c061aSmrg "$@" -MD 373444c061aSmrg fi 374444c061aSmrg 375444c061aSmrg stat=$? 376444c061aSmrg if test $stat -eq 0; then : 377444c061aSmrg else 378444c061aSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379444c061aSmrg exit $stat 380444c061aSmrg fi 381444c061aSmrg 382444c061aSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383444c061aSmrg do 384444c061aSmrg test -f "$tmpdepfile" && break 385444c061aSmrg done 386444c061aSmrg if test -f "$tmpdepfile"; then 387444c061aSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388444c061aSmrg # That's a tab and a space in the []. 389444c061aSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390444c061aSmrg else 391444c061aSmrg echo "#dummy" > "$depfile" 392444c061aSmrg fi 393444c061aSmrg rm -f "$tmpdepfile" 394444c061aSmrg ;; 395444c061aSmrg 396444c061aSmrg#nosideeffect) 397444c061aSmrg # This comment above is used by automake to tell side-effect 398444c061aSmrg # dependency tracking mechanisms from slower ones. 399444c061aSmrg 400444c061aSmrgdashmstdout) 401444c061aSmrg # Important note: in order to support this mode, a compiler *must* 402444c061aSmrg # always write the preprocessed file to stdout, regardless of -o. 403444c061aSmrg "$@" || exit $? 404444c061aSmrg 405444c061aSmrg # Remove the call to Libtool. 406444c061aSmrg if test "$libtool" = yes; then 407444c061aSmrg while test $1 != '--mode=compile'; do 408444c061aSmrg shift 409444c061aSmrg done 410444c061aSmrg shift 411444c061aSmrg fi 412444c061aSmrg 413444c061aSmrg # Remove `-o $object'. 414444c061aSmrg IFS=" " 415444c061aSmrg for arg 416444c061aSmrg do 417444c061aSmrg case $arg in 418444c061aSmrg -o) 419444c061aSmrg shift 420444c061aSmrg ;; 421444c061aSmrg $object) 422444c061aSmrg shift 423444c061aSmrg ;; 424444c061aSmrg *) 425444c061aSmrg set fnord "$@" "$arg" 426444c061aSmrg shift # fnord 427444c061aSmrg shift # $arg 428444c061aSmrg ;; 429444c061aSmrg esac 430444c061aSmrg done 431444c061aSmrg 432444c061aSmrg test -z "$dashmflag" && dashmflag=-M 433444c061aSmrg # Require at least two characters before searching for `:' 434444c061aSmrg # in the target name. This is to cope with DOS-style filenames: 435444c061aSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436444c061aSmrg "$@" $dashmflag | 437444c061aSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438444c061aSmrg rm -f "$depfile" 439444c061aSmrg cat < "$tmpdepfile" > "$depfile" 440444c061aSmrg tr ' ' ' 441444c061aSmrg' < "$tmpdepfile" | \ 442444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 443444c061aSmrg## correctly. Breaking it into two sed invocations is a workaround. 444444c061aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445444c061aSmrg rm -f "$tmpdepfile" 446444c061aSmrg ;; 447444c061aSmrg 448444c061aSmrgdashXmstdout) 449444c061aSmrg # This case only exists to satisfy depend.m4. It is never actually 450444c061aSmrg # run, as this mode is specially recognized in the preamble. 451444c061aSmrg exit 1 452444c061aSmrg ;; 453444c061aSmrg 454444c061aSmrgmakedepend) 455444c061aSmrg "$@" || exit $? 456444c061aSmrg # Remove any Libtool call 457444c061aSmrg if test "$libtool" = yes; then 458444c061aSmrg while test $1 != '--mode=compile'; do 459444c061aSmrg shift 460444c061aSmrg done 461444c061aSmrg shift 462444c061aSmrg fi 463444c061aSmrg # X makedepend 464444c061aSmrg shift 465444c061aSmrg cleared=no 466444c061aSmrg for arg in "$@"; do 467444c061aSmrg case $cleared in 468444c061aSmrg no) 469444c061aSmrg set ""; shift 470444c061aSmrg cleared=yes ;; 471444c061aSmrg esac 472444c061aSmrg case "$arg" in 473444c061aSmrg -D*|-I*) 474444c061aSmrg set fnord "$@" "$arg"; shift ;; 475444c061aSmrg # Strip any option that makedepend may not understand. Remove 476444c061aSmrg # the object too, otherwise makedepend will parse it as a source file. 477444c061aSmrg -*|$object) 478444c061aSmrg ;; 479444c061aSmrg *) 480444c061aSmrg set fnord "$@" "$arg"; shift ;; 481444c061aSmrg esac 482444c061aSmrg done 483444c061aSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484444c061aSmrg touch "$tmpdepfile" 485444c061aSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486444c061aSmrg rm -f "$depfile" 487444c061aSmrg cat < "$tmpdepfile" > "$depfile" 488444c061aSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489444c061aSmrg' | \ 490444c061aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 491444c061aSmrg## correctly. Breaking it into two sed invocations is a workaround. 492444c061aSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493444c061aSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494444c061aSmrg ;; 495444c061aSmrg 496444c061aSmrgcpp) 497444c061aSmrg # Important note: in order to support this mode, a compiler *must* 498444c061aSmrg # always write the preprocessed file to stdout. 499444c061aSmrg "$@" || exit $? 500444c061aSmrg 501444c061aSmrg # Remove the call to Libtool. 502444c061aSmrg if test "$libtool" = yes; then 503444c061aSmrg while test $1 != '--mode=compile'; do 504444c061aSmrg shift 505444c061aSmrg done 506444c061aSmrg shift 507444c061aSmrg fi 508444c061aSmrg 509444c061aSmrg # Remove `-o $object'. 510444c061aSmrg IFS=" " 511444c061aSmrg for arg 512444c061aSmrg do 513444c061aSmrg case $arg in 514444c061aSmrg -o) 515444c061aSmrg shift 516444c061aSmrg ;; 517444c061aSmrg $object) 518444c061aSmrg shift 519444c061aSmrg ;; 520444c061aSmrg *) 521444c061aSmrg set fnord "$@" "$arg" 522444c061aSmrg shift # fnord 523444c061aSmrg shift # $arg 524444c061aSmrg ;; 525444c061aSmrg esac 526444c061aSmrg done 527444c061aSmrg 528444c061aSmrg "$@" -E | 529444c061aSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530444c061aSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531444c061aSmrg sed '$ s: \\$::' > "$tmpdepfile" 532444c061aSmrg rm -f "$depfile" 533444c061aSmrg echo "$object : \\" > "$depfile" 534444c061aSmrg cat < "$tmpdepfile" >> "$depfile" 535444c061aSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536444c061aSmrg rm -f "$tmpdepfile" 537444c061aSmrg ;; 538444c061aSmrg 539444c061aSmrgmsvisualcpp) 540444c061aSmrg # Important note: in order to support this mode, a compiler *must* 541444c061aSmrg # always write the preprocessed file to stdout, regardless of -o, 542444c061aSmrg # because we must use -o when running libtool. 543444c061aSmrg "$@" || exit $? 544444c061aSmrg IFS=" " 545444c061aSmrg for arg 546444c061aSmrg do 547444c061aSmrg case "$arg" in 548444c061aSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549444c061aSmrg set fnord "$@" 550444c061aSmrg shift 551444c061aSmrg shift 552444c061aSmrg ;; 553444c061aSmrg *) 554444c061aSmrg set fnord "$@" "$arg" 555444c061aSmrg shift 556444c061aSmrg shift 557444c061aSmrg ;; 558444c061aSmrg esac 559444c061aSmrg done 560444c061aSmrg "$@" -E | 561444c061aSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562444c061aSmrg rm -f "$depfile" 563444c061aSmrg echo "$object : \\" > "$depfile" 564444c061aSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565444c061aSmrg echo " " >> "$depfile" 566444c061aSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567444c061aSmrg rm -f "$tmpdepfile" 568444c061aSmrg ;; 569444c061aSmrg 570444c061aSmrgnone) 571444c061aSmrg exec "$@" 572444c061aSmrg ;; 573444c061aSmrg 574444c061aSmrg*) 575444c061aSmrg echo "Unknown depmode $depmode" 1>&2 576444c061aSmrg exit 1 577444c061aSmrg ;; 578444c061aSmrgesac 579444c061aSmrg 580444c061aSmrgexit 0 581444c061aSmrg 582444c061aSmrg# Local Variables: 583444c061aSmrg# mode: shell-script 584444c061aSmrg# sh-indentation: 2 585444c061aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586444c061aSmrg# time-stamp-start: "scriptversion=" 587444c061aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588444c061aSmrg# time-stamp-end: "$" 589444c061aSmrg# End: 590