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