depcomp revision b3eb03f3
1010cdda0Smrg#! /bin/sh 2010cdda0Smrg# depcomp - compile a program generating dependencies as side-effects 3b3eb03f3Smrg 4b3eb03f3Smrgscriptversion=2009-04-28.21; # UTC 5b3eb03f3Smrg 6b3eb03f3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7b3eb03f3Smrg# Software Foundation, Inc. 8010cdda0Smrg 9010cdda0Smrg# This program is free software; you can redistribute it and/or modify 10010cdda0Smrg# it under the terms of the GNU General Public License as published by 11010cdda0Smrg# the Free Software Foundation; either version 2, or (at your option) 12010cdda0Smrg# any later version. 13010cdda0Smrg 14010cdda0Smrg# This program is distributed in the hope that it will be useful, 15010cdda0Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16010cdda0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17010cdda0Smrg# GNU General Public License for more details. 18010cdda0Smrg 19010cdda0Smrg# You should have received a copy of the GNU General Public License 20b3eb03f3Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21010cdda0Smrg 22010cdda0Smrg# As a special exception to the GNU General Public License, if you 23010cdda0Smrg# distribute this file as part of a program that contains a 24010cdda0Smrg# configuration script generated by Autoconf, you may include it under 25010cdda0Smrg# the same distribution terms that you use for the rest of that program. 26010cdda0Smrg 27010cdda0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28010cdda0Smrg 29b3eb03f3Smrgcase $1 in 30b3eb03f3Smrg '') 31b3eb03f3Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32b3eb03f3Smrg exit 1; 33b3eb03f3Smrg ;; 34b3eb03f3Smrg -h | --h*) 35b3eb03f3Smrg cat <<\EOF 36b3eb03f3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37b3eb03f3Smrg 38b3eb03f3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39b3eb03f3Smrgas side-effects. 40b3eb03f3Smrg 41b3eb03f3SmrgEnvironment variables: 42b3eb03f3Smrg depmode Dependency tracking mode. 43b3eb03f3Smrg source Source file read by `PROGRAMS ARGS'. 44b3eb03f3Smrg object Object file output by `PROGRAMS ARGS'. 45b3eb03f3Smrg DEPDIR directory where to store dependencies. 46b3eb03f3Smrg depfile Dependency file to output. 47b3eb03f3Smrg tmpdepfile Temporary file to use when outputing dependencies. 48b3eb03f3Smrg libtool Whether libtool is used (yes/no). 49b3eb03f3Smrg 50b3eb03f3SmrgReport bugs to <bug-automake@gnu.org>. 51b3eb03f3SmrgEOF 52b3eb03f3Smrg exit $? 53b3eb03f3Smrg ;; 54b3eb03f3Smrg -v | --v*) 55b3eb03f3Smrg echo "depcomp $scriptversion" 56b3eb03f3Smrg exit $? 57b3eb03f3Smrg ;; 58b3eb03f3Smrgesac 59b3eb03f3Smrg 60010cdda0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61010cdda0Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62010cdda0Smrg exit 1 63010cdda0Smrgfi 64010cdda0Smrg 65b3eb03f3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66b3eb03f3Smrgdepfile=${depfile-`echo "$object" | 67b3eb03f3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68010cdda0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69010cdda0Smrg 70010cdda0Smrgrm -f "$tmpdepfile" 71010cdda0Smrg 72010cdda0Smrg# Some modes work just like other modes, but use different flags. We 73010cdda0Smrg# parameterize here, but still list the modes in the big case below, 74010cdda0Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75010cdda0Smrg# here, because this file can only contain one case statement. 76010cdda0Smrgif test "$depmode" = hp; then 77010cdda0Smrg # HP compiler uses -M and no extra arg. 78010cdda0Smrg gccflag=-M 79010cdda0Smrg depmode=gcc 80010cdda0Smrgfi 81010cdda0Smrg 82010cdda0Smrgif test "$depmode" = dashXmstdout; then 83010cdda0Smrg # This is just like dashmstdout with a different argument. 84010cdda0Smrg dashmflag=-xM 85010cdda0Smrg depmode=dashmstdout 86010cdda0Smrgfi 87010cdda0Smrg 88b3eb03f3Smrgcygpath_u="cygpath -u -f -" 89b3eb03f3Smrgif test "$depmode" = msvcmsys; then 90b3eb03f3Smrg # This is just like msvisualcpp but w/o cygpath translation. 91b3eb03f3Smrg # Just convert the backslash-escaped backslashes to single forward 92b3eb03f3Smrg # slashes to satisfy depend.m4 93b3eb03f3Smrg cygpath_u="sed s,\\\\\\\\,/,g" 94b3eb03f3Smrg depmode=msvisualcpp 95b3eb03f3Smrgfi 96b3eb03f3Smrg 97010cdda0Smrgcase "$depmode" in 98010cdda0Smrggcc3) 99010cdda0Smrg## gcc 3 implements dependency tracking that does exactly what 100010cdda0Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101010cdda0Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 102b3eb03f3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 103b3eb03f3Smrg## the command line argument order; so add the flags where they 104b3eb03f3Smrg## appear in depend2.am. Note that the slowdown incurred here 105b3eb03f3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 106b3eb03f3Smrg for arg 107b3eb03f3Smrg do 108b3eb03f3Smrg case $arg in 109b3eb03f3Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 110b3eb03f3Smrg *) set fnord "$@" "$arg" ;; 111b3eb03f3Smrg esac 112b3eb03f3Smrg shift # fnord 113b3eb03f3Smrg shift # $arg 114b3eb03f3Smrg done 115b3eb03f3Smrg "$@" 116010cdda0Smrg stat=$? 117010cdda0Smrg if test $stat -eq 0; then : 118010cdda0Smrg else 119010cdda0Smrg rm -f "$tmpdepfile" 120010cdda0Smrg exit $stat 121010cdda0Smrg fi 122010cdda0Smrg mv "$tmpdepfile" "$depfile" 123010cdda0Smrg ;; 124010cdda0Smrg 125010cdda0Smrggcc) 126010cdda0Smrg## There are various ways to get dependency output from gcc. Here's 127010cdda0Smrg## why we pick this rather obscure method: 128010cdda0Smrg## - Don't want to use -MD because we'd like the dependencies to end 129010cdda0Smrg## up in a subdir. Having to rename by hand is ugly. 130010cdda0Smrg## (We might end up doing this anyway to support other compilers.) 131010cdda0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132010cdda0Smrg## -MM, not -M (despite what the docs say). 133010cdda0Smrg## - Using -M directly means running the compiler twice (even worse 134010cdda0Smrg## than renaming). 135010cdda0Smrg if test -z "$gccflag"; then 136010cdda0Smrg gccflag=-MD, 137010cdda0Smrg fi 138010cdda0Smrg "$@" -Wp,"$gccflag$tmpdepfile" 139010cdda0Smrg stat=$? 140010cdda0Smrg if test $stat -eq 0; then : 141010cdda0Smrg else 142010cdda0Smrg rm -f "$tmpdepfile" 143010cdda0Smrg exit $stat 144010cdda0Smrg fi 145010cdda0Smrg rm -f "$depfile" 146010cdda0Smrg echo "$object : \\" > "$depfile" 147010cdda0Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148010cdda0Smrg## The second -e expression handles DOS-style file names with drive letters. 149010cdda0Smrg sed -e 's/^[^:]*: / /' \ 150010cdda0Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151010cdda0Smrg## This next piece of magic avoids the `deleted header file' problem. 152010cdda0Smrg## The problem is that when a header file which appears in a .P file 153010cdda0Smrg## is deleted, the dependency causes make to die (because there is 154010cdda0Smrg## typically no way to rebuild the header). We avoid this by adding 155010cdda0Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 156010cdda0Smrg## this for us directly. 157010cdda0Smrg tr ' ' ' 158010cdda0Smrg' < "$tmpdepfile" | 159010cdda0Smrg## Some versions of gcc put a space before the `:'. On the theory 160010cdda0Smrg## that the space means something, we add a space to the output as 161010cdda0Smrg## well. 162010cdda0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 163010cdda0Smrg## correctly. Breaking it into two sed invocations is a workaround. 164010cdda0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165010cdda0Smrg rm -f "$tmpdepfile" 166010cdda0Smrg ;; 167010cdda0Smrg 168010cdda0Smrghp) 169010cdda0Smrg # This case exists only to let depend.m4 do its work. It works by 170010cdda0Smrg # looking at the text of this script. This case will never be run, 171010cdda0Smrg # since it is checked for above. 172010cdda0Smrg exit 1 173010cdda0Smrg ;; 174010cdda0Smrg 175010cdda0Smrgsgi) 176010cdda0Smrg if test "$libtool" = yes; then 177010cdda0Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178010cdda0Smrg else 179010cdda0Smrg "$@" -MDupdate "$tmpdepfile" 180010cdda0Smrg fi 181010cdda0Smrg stat=$? 182010cdda0Smrg if test $stat -eq 0; then : 183010cdda0Smrg else 184010cdda0Smrg rm -f "$tmpdepfile" 185010cdda0Smrg exit $stat 186010cdda0Smrg fi 187010cdda0Smrg rm -f "$depfile" 188010cdda0Smrg 189010cdda0Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190010cdda0Smrg echo "$object : \\" > "$depfile" 191010cdda0Smrg 192010cdda0Smrg # Clip off the initial element (the dependent). Don't try to be 193010cdda0Smrg # clever and replace this with sed code, as IRIX sed won't handle 194010cdda0Smrg # lines with more than a fixed number of characters (4096 in 195010cdda0Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196010cdda0Smrg # the IRIX cc adds comments like `#:fec' to the end of the 197010cdda0Smrg # dependency line. 198010cdda0Smrg tr ' ' ' 199010cdda0Smrg' < "$tmpdepfile" \ 200010cdda0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201010cdda0Smrg tr ' 202b3eb03f3Smrg' ' ' >> "$depfile" 203b3eb03f3Smrg echo >> "$depfile" 204010cdda0Smrg 205010cdda0Smrg # The second pass generates a dummy entry for each header file. 206010cdda0Smrg tr ' ' ' 207010cdda0Smrg' < "$tmpdepfile" \ 208010cdda0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209b3eb03f3Smrg >> "$depfile" 210010cdda0Smrg else 211010cdda0Smrg # The sourcefile does not contain any dependencies, so just 212010cdda0Smrg # store a dummy comment line, to avoid errors with the Makefile 213010cdda0Smrg # "include basename.Plo" scheme. 214010cdda0Smrg echo "#dummy" > "$depfile" 215010cdda0Smrg fi 216010cdda0Smrg rm -f "$tmpdepfile" 217010cdda0Smrg ;; 218010cdda0Smrg 219010cdda0Smrgaix) 220010cdda0Smrg # The C for AIX Compiler uses -M and outputs the dependencies 221010cdda0Smrg # in a .u file. In older versions, this file always lives in the 222010cdda0Smrg # current directory. Also, the AIX compiler puts `$object:' at the 223010cdda0Smrg # start of each line; $object doesn't have directory information. 224010cdda0Smrg # Version 6 uses the directory in both cases. 225b3eb03f3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 226b3eb03f3Smrg test "x$dir" = "x$object" && dir= 227b3eb03f3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228010cdda0Smrg if test "$libtool" = yes; then 229b3eb03f3Smrg tmpdepfile1=$dir$base.u 230b3eb03f3Smrg tmpdepfile2=$base.u 231b3eb03f3Smrg tmpdepfile3=$dir.libs/$base.u 232010cdda0Smrg "$@" -Wc,-M 233010cdda0Smrg else 234b3eb03f3Smrg tmpdepfile1=$dir$base.u 235b3eb03f3Smrg tmpdepfile2=$dir$base.u 236b3eb03f3Smrg tmpdepfile3=$dir$base.u 237010cdda0Smrg "$@" -M 238010cdda0Smrg fi 239010cdda0Smrg stat=$? 240010cdda0Smrg 241010cdda0Smrg if test $stat -eq 0; then : 242010cdda0Smrg else 243b3eb03f3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244010cdda0Smrg exit $stat 245010cdda0Smrg fi 246010cdda0Smrg 247b3eb03f3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 248b3eb03f3Smrg do 249b3eb03f3Smrg test -f "$tmpdepfile" && break 250b3eb03f3Smrg done 251010cdda0Smrg if test -f "$tmpdepfile"; then 252010cdda0Smrg # Each line is of the form `foo.o: dependent.h'. 253010cdda0Smrg # Do two passes, one to just change these to 254010cdda0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 255b3eb03f3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 256b3eb03f3Smrg # That's a tab and a space in the []. 257b3eb03f3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258010cdda0Smrg else 259010cdda0Smrg # The sourcefile does not contain any dependencies, so just 260010cdda0Smrg # store a dummy comment line, to avoid errors with the Makefile 261010cdda0Smrg # "include basename.Plo" scheme. 262010cdda0Smrg echo "#dummy" > "$depfile" 263010cdda0Smrg fi 264010cdda0Smrg rm -f "$tmpdepfile" 265010cdda0Smrg ;; 266010cdda0Smrg 267010cdda0Smrgicc) 268010cdda0Smrg # Intel's C compiler understands `-MD -MF file'. However on 269010cdda0Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270010cdda0Smrg # ICC 7.0 will fill foo.d with something like 271010cdda0Smrg # foo.o: sub/foo.c 272010cdda0Smrg # foo.o: sub/foo.h 273010cdda0Smrg # which is wrong. We want: 274010cdda0Smrg # sub/foo.o: sub/foo.c 275010cdda0Smrg # sub/foo.o: sub/foo.h 276010cdda0Smrg # sub/foo.c: 277010cdda0Smrg # sub/foo.h: 278010cdda0Smrg # ICC 7.1 will output 279010cdda0Smrg # foo.o: sub/foo.c sub/foo.h 280010cdda0Smrg # and will wrap long lines using \ : 281010cdda0Smrg # foo.o: sub/foo.c ... \ 282010cdda0Smrg # sub/foo.h ... \ 283010cdda0Smrg # ... 284010cdda0Smrg 285010cdda0Smrg "$@" -MD -MF "$tmpdepfile" 286010cdda0Smrg stat=$? 287010cdda0Smrg if test $stat -eq 0; then : 288010cdda0Smrg else 289010cdda0Smrg rm -f "$tmpdepfile" 290010cdda0Smrg exit $stat 291010cdda0Smrg fi 292010cdda0Smrg rm -f "$depfile" 293010cdda0Smrg # Each line is of the form `foo.o: dependent.h', 294010cdda0Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295010cdda0Smrg # Do two passes, one to just change these to 296010cdda0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 297010cdda0Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298010cdda0Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 299010cdda0Smrg # correctly. Breaking it into two sed invocations is a workaround. 300010cdda0Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301010cdda0Smrg sed -e 's/$/ :/' >> "$depfile" 302010cdda0Smrg rm -f "$tmpdepfile" 303010cdda0Smrg ;; 304010cdda0Smrg 305b3eb03f3Smrghp2) 306b3eb03f3Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 307b3eb03f3Smrg # compilers, which have integrated preprocessors. The correct option 308b3eb03f3Smrg # to use with these is +Maked; it writes dependencies to a file named 309b3eb03f3Smrg # 'foo.d', which lands next to the object file, wherever that 310b3eb03f3Smrg # happens to be. 311b3eb03f3Smrg # Much of this is similar to the tru64 case; see comments there. 312b3eb03f3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 313b3eb03f3Smrg test "x$dir" = "x$object" && dir= 314b3eb03f3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 315b3eb03f3Smrg if test "$libtool" = yes; then 316b3eb03f3Smrg tmpdepfile1=$dir$base.d 317b3eb03f3Smrg tmpdepfile2=$dir.libs/$base.d 318b3eb03f3Smrg "$@" -Wc,+Maked 319b3eb03f3Smrg else 320b3eb03f3Smrg tmpdepfile1=$dir$base.d 321b3eb03f3Smrg tmpdepfile2=$dir$base.d 322b3eb03f3Smrg "$@" +Maked 323b3eb03f3Smrg fi 324b3eb03f3Smrg stat=$? 325b3eb03f3Smrg if test $stat -eq 0; then : 326b3eb03f3Smrg else 327b3eb03f3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 328b3eb03f3Smrg exit $stat 329b3eb03f3Smrg fi 330b3eb03f3Smrg 331b3eb03f3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 332b3eb03f3Smrg do 333b3eb03f3Smrg test -f "$tmpdepfile" && break 334b3eb03f3Smrg done 335b3eb03f3Smrg if test -f "$tmpdepfile"; then 336b3eb03f3Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 337b3eb03f3Smrg # Add `dependent.h:' lines. 338b3eb03f3Smrg sed -ne '2,${ 339b3eb03f3Smrg s/^ *// 340b3eb03f3Smrg s/ \\*$// 341b3eb03f3Smrg s/$/:/ 342b3eb03f3Smrg p 343b3eb03f3Smrg }' "$tmpdepfile" >> "$depfile" 344b3eb03f3Smrg else 345b3eb03f3Smrg echo "#dummy" > "$depfile" 346b3eb03f3Smrg fi 347b3eb03f3Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 348b3eb03f3Smrg ;; 349b3eb03f3Smrg 350010cdda0Smrgtru64) 351010cdda0Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 352010cdda0Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353010cdda0Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354010cdda0Smrg # dependencies in `foo.d' instead, so we check for that too. 355010cdda0Smrg # Subdirectories are respected. 356010cdda0Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357010cdda0Smrg test "x$dir" = "x$object" && dir= 358010cdda0Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359010cdda0Smrg 360010cdda0Smrg if test "$libtool" = yes; then 361b3eb03f3Smrg # With Tru64 cc, shared objects can also be used to make a 362b3eb03f3Smrg # static library. This mechanism is used in libtool 1.4 series to 363b3eb03f3Smrg # handle both shared and static libraries in a single compilation. 364b3eb03f3Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365b3eb03f3Smrg # 366b3eb03f3Smrg # With libtool 1.5 this exception was removed, and libtool now 367b3eb03f3Smrg # generates 2 separate objects for the 2 libraries. These two 368b3eb03f3Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369b3eb03f3Smrg # in $dir$base.o.d. We have to check for both files, because 370b3eb03f3Smrg # one of the two compilations can be disabled. We should prefer 371b3eb03f3Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372b3eb03f3Smrg # automatically cleaned when .libs/ is deleted, while ignoring 373b3eb03f3Smrg # the former would cause a distcleancheck panic. 374b3eb03f3Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375b3eb03f3Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376b3eb03f3Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377b3eb03f3Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378010cdda0Smrg "$@" -Wc,-MD 379010cdda0Smrg else 380b3eb03f3Smrg tmpdepfile1=$dir$base.o.d 381b3eb03f3Smrg tmpdepfile2=$dir$base.d 382b3eb03f3Smrg tmpdepfile3=$dir$base.d 383b3eb03f3Smrg tmpdepfile4=$dir$base.d 384010cdda0Smrg "$@" -MD 385010cdda0Smrg fi 386010cdda0Smrg 387010cdda0Smrg stat=$? 388010cdda0Smrg if test $stat -eq 0; then : 389010cdda0Smrg else 390b3eb03f3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391010cdda0Smrg exit $stat 392010cdda0Smrg fi 393010cdda0Smrg 394b3eb03f3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395b3eb03f3Smrg do 396b3eb03f3Smrg test -f "$tmpdepfile" && break 397b3eb03f3Smrg done 398010cdda0Smrg if test -f "$tmpdepfile"; then 399010cdda0Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400010cdda0Smrg # That's a tab and a space in the []. 401010cdda0Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402010cdda0Smrg else 403010cdda0Smrg echo "#dummy" > "$depfile" 404010cdda0Smrg fi 405010cdda0Smrg rm -f "$tmpdepfile" 406010cdda0Smrg ;; 407010cdda0Smrg 408010cdda0Smrg#nosideeffect) 409010cdda0Smrg # This comment above is used by automake to tell side-effect 410010cdda0Smrg # dependency tracking mechanisms from slower ones. 411010cdda0Smrg 412010cdda0Smrgdashmstdout) 413010cdda0Smrg # Important note: in order to support this mode, a compiler *must* 414010cdda0Smrg # always write the preprocessed file to stdout, regardless of -o. 415010cdda0Smrg "$@" || exit $? 416010cdda0Smrg 417010cdda0Smrg # Remove the call to Libtool. 418010cdda0Smrg if test "$libtool" = yes; then 419b3eb03f3Smrg while test "X$1" != 'X--mode=compile'; do 420010cdda0Smrg shift 421010cdda0Smrg done 422010cdda0Smrg shift 423010cdda0Smrg fi 424010cdda0Smrg 425010cdda0Smrg # Remove `-o $object'. 426010cdda0Smrg IFS=" " 427010cdda0Smrg for arg 428010cdda0Smrg do 429010cdda0Smrg case $arg in 430010cdda0Smrg -o) 431010cdda0Smrg shift 432010cdda0Smrg ;; 433010cdda0Smrg $object) 434010cdda0Smrg shift 435010cdda0Smrg ;; 436010cdda0Smrg *) 437010cdda0Smrg set fnord "$@" "$arg" 438010cdda0Smrg shift # fnord 439010cdda0Smrg shift # $arg 440010cdda0Smrg ;; 441010cdda0Smrg esac 442010cdda0Smrg done 443010cdda0Smrg 444010cdda0Smrg test -z "$dashmflag" && dashmflag=-M 445010cdda0Smrg # Require at least two characters before searching for `:' 446010cdda0Smrg # in the target name. This is to cope with DOS-style filenames: 447010cdda0Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448010cdda0Smrg "$@" $dashmflag | 449010cdda0Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450010cdda0Smrg rm -f "$depfile" 451010cdda0Smrg cat < "$tmpdepfile" > "$depfile" 452010cdda0Smrg tr ' ' ' 453010cdda0Smrg' < "$tmpdepfile" | \ 454010cdda0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 455010cdda0Smrg## correctly. Breaking it into two sed invocations is a workaround. 456010cdda0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457010cdda0Smrg rm -f "$tmpdepfile" 458010cdda0Smrg ;; 459010cdda0Smrg 460010cdda0SmrgdashXmstdout) 461010cdda0Smrg # This case only exists to satisfy depend.m4. It is never actually 462010cdda0Smrg # run, as this mode is specially recognized in the preamble. 463010cdda0Smrg exit 1 464010cdda0Smrg ;; 465010cdda0Smrg 466010cdda0Smrgmakedepend) 467010cdda0Smrg "$@" || exit $? 468010cdda0Smrg # Remove any Libtool call 469010cdda0Smrg if test "$libtool" = yes; then 470b3eb03f3Smrg while test "X$1" != 'X--mode=compile'; do 471010cdda0Smrg shift 472010cdda0Smrg done 473010cdda0Smrg shift 474010cdda0Smrg fi 475010cdda0Smrg # X makedepend 476010cdda0Smrg shift 477b3eb03f3Smrg cleared=no eat=no 478b3eb03f3Smrg for arg 479b3eb03f3Smrg do 480010cdda0Smrg case $cleared in 481010cdda0Smrg no) 482010cdda0Smrg set ""; shift 483010cdda0Smrg cleared=yes ;; 484010cdda0Smrg esac 485b3eb03f3Smrg if test $eat = yes; then 486b3eb03f3Smrg eat=no 487b3eb03f3Smrg continue 488b3eb03f3Smrg fi 489010cdda0Smrg case "$arg" in 490010cdda0Smrg -D*|-I*) 491010cdda0Smrg set fnord "$@" "$arg"; shift ;; 492010cdda0Smrg # Strip any option that makedepend may not understand. Remove 493010cdda0Smrg # the object too, otherwise makedepend will parse it as a source file. 494b3eb03f3Smrg -arch) 495b3eb03f3Smrg eat=yes ;; 496010cdda0Smrg -*|$object) 497010cdda0Smrg ;; 498010cdda0Smrg *) 499010cdda0Smrg set fnord "$@" "$arg"; shift ;; 500010cdda0Smrg esac 501010cdda0Smrg done 502b3eb03f3Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503010cdda0Smrg touch "$tmpdepfile" 504010cdda0Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505010cdda0Smrg rm -f "$depfile" 506010cdda0Smrg cat < "$tmpdepfile" > "$depfile" 507010cdda0Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508010cdda0Smrg' | \ 509010cdda0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 510010cdda0Smrg## correctly. Breaking it into two sed invocations is a workaround. 511010cdda0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512010cdda0Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513010cdda0Smrg ;; 514010cdda0Smrg 515010cdda0Smrgcpp) 516010cdda0Smrg # Important note: in order to support this mode, a compiler *must* 517010cdda0Smrg # always write the preprocessed file to stdout. 518010cdda0Smrg "$@" || exit $? 519010cdda0Smrg 520010cdda0Smrg # Remove the call to Libtool. 521010cdda0Smrg if test "$libtool" = yes; then 522b3eb03f3Smrg while test "X$1" != 'X--mode=compile'; do 523010cdda0Smrg shift 524010cdda0Smrg done 525010cdda0Smrg shift 526010cdda0Smrg fi 527010cdda0Smrg 528010cdda0Smrg # Remove `-o $object'. 529010cdda0Smrg IFS=" " 530010cdda0Smrg for arg 531010cdda0Smrg do 532010cdda0Smrg case $arg in 533010cdda0Smrg -o) 534010cdda0Smrg shift 535010cdda0Smrg ;; 536010cdda0Smrg $object) 537010cdda0Smrg shift 538010cdda0Smrg ;; 539010cdda0Smrg *) 540010cdda0Smrg set fnord "$@" "$arg" 541010cdda0Smrg shift # fnord 542010cdda0Smrg shift # $arg 543010cdda0Smrg ;; 544010cdda0Smrg esac 545010cdda0Smrg done 546010cdda0Smrg 547010cdda0Smrg "$@" -E | 548b3eb03f3Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549b3eb03f3Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550010cdda0Smrg sed '$ s: \\$::' > "$tmpdepfile" 551010cdda0Smrg rm -f "$depfile" 552010cdda0Smrg echo "$object : \\" > "$depfile" 553010cdda0Smrg cat < "$tmpdepfile" >> "$depfile" 554010cdda0Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555010cdda0Smrg rm -f "$tmpdepfile" 556010cdda0Smrg ;; 557010cdda0Smrg 558010cdda0Smrgmsvisualcpp) 559010cdda0Smrg # Important note: in order to support this mode, a compiler *must* 560b3eb03f3Smrg # always write the preprocessed file to stdout. 561010cdda0Smrg "$@" || exit $? 562b3eb03f3Smrg 563b3eb03f3Smrg # Remove the call to Libtool. 564b3eb03f3Smrg if test "$libtool" = yes; then 565b3eb03f3Smrg while test "X$1" != 'X--mode=compile'; do 566b3eb03f3Smrg shift 567b3eb03f3Smrg done 568b3eb03f3Smrg shift 569b3eb03f3Smrg fi 570b3eb03f3Smrg 571010cdda0Smrg IFS=" " 572010cdda0Smrg for arg 573010cdda0Smrg do 574010cdda0Smrg case "$arg" in 575b3eb03f3Smrg -o) 576b3eb03f3Smrg shift 577b3eb03f3Smrg ;; 578b3eb03f3Smrg $object) 579b3eb03f3Smrg shift 580b3eb03f3Smrg ;; 581010cdda0Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582010cdda0Smrg set fnord "$@" 583010cdda0Smrg shift 584010cdda0Smrg shift 585010cdda0Smrg ;; 586010cdda0Smrg *) 587010cdda0Smrg set fnord "$@" "$arg" 588010cdda0Smrg shift 589010cdda0Smrg shift 590010cdda0Smrg ;; 591010cdda0Smrg esac 592010cdda0Smrg done 593b3eb03f3Smrg "$@" -E 2>/dev/null | 594b3eb03f3Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595010cdda0Smrg rm -f "$depfile" 596010cdda0Smrg echo "$object : \\" > "$depfile" 597b3eb03f3Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598010cdda0Smrg echo " " >> "$depfile" 599b3eb03f3Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600010cdda0Smrg rm -f "$tmpdepfile" 601010cdda0Smrg ;; 602010cdda0Smrg 603b3eb03f3Smrgmsvcmsys) 604b3eb03f3Smrg # This case exists only to let depend.m4 do its work. It works by 605b3eb03f3Smrg # looking at the text of this script. This case will never be run, 606b3eb03f3Smrg # since it is checked for above. 607b3eb03f3Smrg exit 1 608b3eb03f3Smrg ;; 609b3eb03f3Smrg 610010cdda0Smrgnone) 611010cdda0Smrg exec "$@" 612010cdda0Smrg ;; 613010cdda0Smrg 614010cdda0Smrg*) 615010cdda0Smrg echo "Unknown depmode $depmode" 1>&2 616010cdda0Smrg exit 1 617010cdda0Smrg ;; 618010cdda0Smrgesac 619010cdda0Smrg 620010cdda0Smrgexit 0 621b3eb03f3Smrg 622b3eb03f3Smrg# Local Variables: 623b3eb03f3Smrg# mode: shell-script 624b3eb03f3Smrg# sh-indentation: 2 625b3eb03f3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626b3eb03f3Smrg# time-stamp-start: "scriptversion=" 627b3eb03f3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628b3eb03f3Smrg# time-stamp-time-zone: "UTC" 629b3eb03f3Smrg# time-stamp-end: "; # UTC" 630b3eb03f3Smrg# End: 631