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