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