depcomp revision b290cf36
1191cded7Smrg#! /bin/sh 2191cded7Smrg# depcomp - compile a program generating dependencies as side-effects 3191cded7Smrg 4b290cf36Smrgscriptversion=2007-03-29.01 5191cded7Smrg 6b290cf36Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 7b290cf36Smrg# Foundation, Inc. 8191cded7Smrg 9191cded7Smrg# This program is free software; you can redistribute it and/or modify 10191cded7Smrg# it under the terms of the GNU General Public License as published by 11191cded7Smrg# the Free Software Foundation; either version 2, or (at your option) 12191cded7Smrg# any later version. 13191cded7Smrg 14191cded7Smrg# This program is distributed in the hope that it will be useful, 15191cded7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16191cded7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17191cded7Smrg# GNU General Public License for more details. 18191cded7Smrg 19191cded7Smrg# You should have received a copy of the GNU General Public License 20191cded7Smrg# along with this program; if not, write to the Free Software 21191cded7Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22191cded7Smrg# 02110-1301, USA. 23191cded7Smrg 24191cded7Smrg# As a special exception to the GNU General Public License, if you 25191cded7Smrg# distribute this file as part of a program that contains a 26191cded7Smrg# configuration script generated by Autoconf, you may include it under 27191cded7Smrg# the same distribution terms that you use for the rest of that program. 28191cded7Smrg 29191cded7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30191cded7Smrg 31191cded7Smrgcase $1 in 32191cded7Smrg '') 33191cded7Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34191cded7Smrg exit 1; 35191cded7Smrg ;; 36191cded7Smrg -h | --h*) 37191cded7Smrg cat <<\EOF 38191cded7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39191cded7Smrg 40191cded7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41191cded7Smrgas side-effects. 42191cded7Smrg 43191cded7SmrgEnvironment variables: 44191cded7Smrg depmode Dependency tracking mode. 45191cded7Smrg source Source file read by `PROGRAMS ARGS'. 46191cded7Smrg object Object file output by `PROGRAMS ARGS'. 47191cded7Smrg DEPDIR directory where to store dependencies. 48191cded7Smrg depfile Dependency file to output. 49191cded7Smrg tmpdepfile Temporary file to use when outputing dependencies. 50191cded7Smrg libtool Whether libtool is used (yes/no). 51191cded7Smrg 52191cded7SmrgReport bugs to <bug-automake@gnu.org>. 53191cded7SmrgEOF 54191cded7Smrg exit $? 55191cded7Smrg ;; 56191cded7Smrg -v | --v*) 57191cded7Smrg echo "depcomp $scriptversion" 58191cded7Smrg exit $? 59191cded7Smrg ;; 60191cded7Smrgesac 61191cded7Smrg 62191cded7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63191cded7Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64191cded7Smrg exit 1 65191cded7Smrgfi 66191cded7Smrg 67191cded7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68191cded7Smrgdepfile=${depfile-`echo "$object" | 69191cded7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70191cded7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71191cded7Smrg 72191cded7Smrgrm -f "$tmpdepfile" 73191cded7Smrg 74191cded7Smrg# Some modes work just like other modes, but use different flags. We 75191cded7Smrg# parameterize here, but still list the modes in the big case below, 76191cded7Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77191cded7Smrg# here, because this file can only contain one case statement. 78191cded7Smrgif test "$depmode" = hp; then 79191cded7Smrg # HP compiler uses -M and no extra arg. 80191cded7Smrg gccflag=-M 81191cded7Smrg depmode=gcc 82191cded7Smrgfi 83191cded7Smrg 84191cded7Smrgif test "$depmode" = dashXmstdout; then 85191cded7Smrg # This is just like dashmstdout with a different argument. 86191cded7Smrg dashmflag=-xM 87191cded7Smrg depmode=dashmstdout 88191cded7Smrgfi 89191cded7Smrg 90191cded7Smrgcase "$depmode" in 91191cded7Smrggcc3) 92191cded7Smrg## gcc 3 implements dependency tracking that does exactly what 93191cded7Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94191cded7Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 95b290cf36Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96b290cf36Smrg## the command line argument order; so add the flags where they 97b290cf36Smrg## appear in depend2.am. Note that the slowdown incurred here 98b290cf36Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99b290cf36Smrg for arg 100b290cf36Smrg do 101b290cf36Smrg case $arg in 102b290cf36Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103b290cf36Smrg *) set fnord "$@" "$arg" ;; 104b290cf36Smrg esac 105b290cf36Smrg shift # fnord 106b290cf36Smrg shift # $arg 107b290cf36Smrg done 108b290cf36Smrg "$@" 109191cded7Smrg stat=$? 110191cded7Smrg if test $stat -eq 0; then : 111191cded7Smrg else 112191cded7Smrg rm -f "$tmpdepfile" 113191cded7Smrg exit $stat 114191cded7Smrg fi 115191cded7Smrg mv "$tmpdepfile" "$depfile" 116191cded7Smrg ;; 117191cded7Smrg 118191cded7Smrggcc) 119191cded7Smrg## There are various ways to get dependency output from gcc. Here's 120191cded7Smrg## why we pick this rather obscure method: 121191cded7Smrg## - Don't want to use -MD because we'd like the dependencies to end 122191cded7Smrg## up in a subdir. Having to rename by hand is ugly. 123191cded7Smrg## (We might end up doing this anyway to support other compilers.) 124191cded7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125191cded7Smrg## -MM, not -M (despite what the docs say). 126191cded7Smrg## - Using -M directly means running the compiler twice (even worse 127191cded7Smrg## than renaming). 128191cded7Smrg if test -z "$gccflag"; then 129191cded7Smrg gccflag=-MD, 130191cded7Smrg fi 131191cded7Smrg "$@" -Wp,"$gccflag$tmpdepfile" 132191cded7Smrg stat=$? 133191cded7Smrg if test $stat -eq 0; then : 134191cded7Smrg else 135191cded7Smrg rm -f "$tmpdepfile" 136191cded7Smrg exit $stat 137191cded7Smrg fi 138191cded7Smrg rm -f "$depfile" 139191cded7Smrg echo "$object : \\" > "$depfile" 140191cded7Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141191cded7Smrg## The second -e expression handles DOS-style file names with drive letters. 142191cded7Smrg sed -e 's/^[^:]*: / /' \ 143191cded7Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144191cded7Smrg## This next piece of magic avoids the `deleted header file' problem. 145191cded7Smrg## The problem is that when a header file which appears in a .P file 146191cded7Smrg## is deleted, the dependency causes make to die (because there is 147191cded7Smrg## typically no way to rebuild the header). We avoid this by adding 148191cded7Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 149191cded7Smrg## this for us directly. 150191cded7Smrg tr ' ' ' 151191cded7Smrg' < "$tmpdepfile" | 152191cded7Smrg## Some versions of gcc put a space before the `:'. On the theory 153191cded7Smrg## that the space means something, we add a space to the output as 154191cded7Smrg## well. 155191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 156191cded7Smrg## correctly. Breaking it into two sed invocations is a workaround. 157191cded7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158191cded7Smrg rm -f "$tmpdepfile" 159191cded7Smrg ;; 160191cded7Smrg 161191cded7Smrghp) 162191cded7Smrg # This case exists only to let depend.m4 do its work. It works by 163191cded7Smrg # looking at the text of this script. This case will never be run, 164191cded7Smrg # since it is checked for above. 165191cded7Smrg exit 1 166191cded7Smrg ;; 167191cded7Smrg 168191cded7Smrgsgi) 169191cded7Smrg if test "$libtool" = yes; then 170191cded7Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171191cded7Smrg else 172191cded7Smrg "$@" -MDupdate "$tmpdepfile" 173191cded7Smrg fi 174191cded7Smrg stat=$? 175191cded7Smrg if test $stat -eq 0; then : 176191cded7Smrg else 177191cded7Smrg rm -f "$tmpdepfile" 178191cded7Smrg exit $stat 179191cded7Smrg fi 180191cded7Smrg rm -f "$depfile" 181191cded7Smrg 182191cded7Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183191cded7Smrg echo "$object : \\" > "$depfile" 184191cded7Smrg 185191cded7Smrg # Clip off the initial element (the dependent). Don't try to be 186191cded7Smrg # clever and replace this with sed code, as IRIX sed won't handle 187191cded7Smrg # lines with more than a fixed number of characters (4096 in 188191cded7Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189191cded7Smrg # the IRIX cc adds comments like `#:fec' to the end of the 190191cded7Smrg # dependency line. 191191cded7Smrg tr ' ' ' 192191cded7Smrg' < "$tmpdepfile" \ 193191cded7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194191cded7Smrg tr ' 195191cded7Smrg' ' ' >> $depfile 196191cded7Smrg echo >> $depfile 197191cded7Smrg 198191cded7Smrg # The second pass generates a dummy entry for each header file. 199191cded7Smrg tr ' ' ' 200191cded7Smrg' < "$tmpdepfile" \ 201191cded7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202191cded7Smrg >> $depfile 203191cded7Smrg else 204191cded7Smrg # The sourcefile does not contain any dependencies, so just 205191cded7Smrg # store a dummy comment line, to avoid errors with the Makefile 206191cded7Smrg # "include basename.Plo" scheme. 207191cded7Smrg echo "#dummy" > "$depfile" 208191cded7Smrg fi 209191cded7Smrg rm -f "$tmpdepfile" 210191cded7Smrg ;; 211191cded7Smrg 212191cded7Smrgaix) 213191cded7Smrg # The C for AIX Compiler uses -M and outputs the dependencies 214191cded7Smrg # in a .u file. In older versions, this file always lives in the 215191cded7Smrg # current directory. Also, the AIX compiler puts `$object:' at the 216191cded7Smrg # start of each line; $object doesn't have directory information. 217191cded7Smrg # Version 6 uses the directory in both cases. 218b290cf36Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 219b290cf36Smrg test "x$dir" = "x$object" && dir= 220b290cf36Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221191cded7Smrg if test "$libtool" = yes; then 222b290cf36Smrg tmpdepfile1=$dir$base.u 223b290cf36Smrg tmpdepfile2=$base.u 224b290cf36Smrg tmpdepfile3=$dir.libs/$base.u 225191cded7Smrg "$@" -Wc,-M 226191cded7Smrg else 227b290cf36Smrg tmpdepfile1=$dir$base.u 228b290cf36Smrg tmpdepfile2=$dir$base.u 229b290cf36Smrg tmpdepfile3=$dir$base.u 230191cded7Smrg "$@" -M 231191cded7Smrg fi 232191cded7Smrg stat=$? 233191cded7Smrg 234191cded7Smrg if test $stat -eq 0; then : 235191cded7Smrg else 236b290cf36Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237191cded7Smrg exit $stat 238191cded7Smrg fi 239191cded7Smrg 240b290cf36Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 241b290cf36Smrg do 242b290cf36Smrg test -f "$tmpdepfile" && break 243b290cf36Smrg done 244191cded7Smrg if test -f "$tmpdepfile"; then 245191cded7Smrg # Each line is of the form `foo.o: dependent.h'. 246191cded7Smrg # Do two passes, one to just change these to 247191cded7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 248b290cf36Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 249b290cf36Smrg # That's a tab and a space in the []. 250b290cf36Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251191cded7Smrg else 252191cded7Smrg # The sourcefile does not contain any dependencies, so just 253191cded7Smrg # store a dummy comment line, to avoid errors with the Makefile 254191cded7Smrg # "include basename.Plo" scheme. 255191cded7Smrg echo "#dummy" > "$depfile" 256191cded7Smrg fi 257191cded7Smrg rm -f "$tmpdepfile" 258191cded7Smrg ;; 259191cded7Smrg 260191cded7Smrgicc) 261191cded7Smrg # Intel's C compiler understands `-MD -MF file'. However on 262191cded7Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263191cded7Smrg # ICC 7.0 will fill foo.d with something like 264191cded7Smrg # foo.o: sub/foo.c 265191cded7Smrg # foo.o: sub/foo.h 266191cded7Smrg # which is wrong. We want: 267191cded7Smrg # sub/foo.o: sub/foo.c 268191cded7Smrg # sub/foo.o: sub/foo.h 269191cded7Smrg # sub/foo.c: 270191cded7Smrg # sub/foo.h: 271191cded7Smrg # ICC 7.1 will output 272191cded7Smrg # foo.o: sub/foo.c sub/foo.h 273191cded7Smrg # and will wrap long lines using \ : 274191cded7Smrg # foo.o: sub/foo.c ... \ 275191cded7Smrg # sub/foo.h ... \ 276191cded7Smrg # ... 277191cded7Smrg 278191cded7Smrg "$@" -MD -MF "$tmpdepfile" 279191cded7Smrg stat=$? 280191cded7Smrg if test $stat -eq 0; then : 281191cded7Smrg else 282191cded7Smrg rm -f "$tmpdepfile" 283191cded7Smrg exit $stat 284191cded7Smrg fi 285191cded7Smrg rm -f "$depfile" 286191cded7Smrg # Each line is of the form `foo.o: dependent.h', 287191cded7Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288191cded7Smrg # Do two passes, one to just change these to 289191cded7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 290191cded7Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291191cded7Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 292191cded7Smrg # correctly. Breaking it into two sed invocations is a workaround. 293191cded7Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294191cded7Smrg sed -e 's/$/ :/' >> "$depfile" 295191cded7Smrg rm -f "$tmpdepfile" 296191cded7Smrg ;; 297191cded7Smrg 298b290cf36Smrghp2) 299b290cf36Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 300b290cf36Smrg # compilers, which have integrated preprocessors. The correct option 301b290cf36Smrg # to use with these is +Maked; it writes dependencies to a file named 302b290cf36Smrg # 'foo.d', which lands next to the object file, wherever that 303b290cf36Smrg # happens to be. 304b290cf36Smrg # Much of this is similar to the tru64 case; see comments there. 305b290cf36Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 306b290cf36Smrg test "x$dir" = "x$object" && dir= 307b290cf36Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 308b290cf36Smrg if test "$libtool" = yes; then 309b290cf36Smrg tmpdepfile1=$dir$base.d 310b290cf36Smrg tmpdepfile2=$dir.libs/$base.d 311b290cf36Smrg "$@" -Wc,+Maked 312b290cf36Smrg else 313b290cf36Smrg tmpdepfile1=$dir$base.d 314b290cf36Smrg tmpdepfile2=$dir$base.d 315b290cf36Smrg "$@" +Maked 316b290cf36Smrg fi 317b290cf36Smrg stat=$? 318b290cf36Smrg if test $stat -eq 0; then : 319b290cf36Smrg else 320b290cf36Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 321b290cf36Smrg exit $stat 322b290cf36Smrg fi 323b290cf36Smrg 324b290cf36Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 325b290cf36Smrg do 326b290cf36Smrg test -f "$tmpdepfile" && break 327b290cf36Smrg done 328b290cf36Smrg if test -f "$tmpdepfile"; then 329b290cf36Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 330b290cf36Smrg # Add `dependent.h:' lines. 331b290cf36Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 332b290cf36Smrg else 333b290cf36Smrg echo "#dummy" > "$depfile" 334b290cf36Smrg fi 335b290cf36Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 336b290cf36Smrg ;; 337b290cf36Smrg 338191cded7Smrgtru64) 339191cded7Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 340191cded7Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341191cded7Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342191cded7Smrg # dependencies in `foo.d' instead, so we check for that too. 343191cded7Smrg # Subdirectories are respected. 344191cded7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345191cded7Smrg test "x$dir" = "x$object" && dir= 346191cded7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347191cded7Smrg 348191cded7Smrg if test "$libtool" = yes; then 349191cded7Smrg # With Tru64 cc, shared objects can also be used to make a 350b290cf36Smrg # static library. This mechanism is used in libtool 1.4 series to 351191cded7Smrg # handle both shared and static libraries in a single compilation. 352191cded7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353191cded7Smrg # 354191cded7Smrg # With libtool 1.5 this exception was removed, and libtool now 355191cded7Smrg # generates 2 separate objects for the 2 libraries. These two 356b290cf36Smrg # compilations output dependencies in $dir.libs/$base.o.d and 357191cded7Smrg # in $dir$base.o.d. We have to check for both files, because 358191cded7Smrg # one of the two compilations can be disabled. We should prefer 359191cded7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360191cded7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 361191cded7Smrg # the former would cause a distcleancheck panic. 362191cded7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363191cded7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364191cded7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365191cded7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366191cded7Smrg "$@" -Wc,-MD 367191cded7Smrg else 368191cded7Smrg tmpdepfile1=$dir$base.o.d 369191cded7Smrg tmpdepfile2=$dir$base.d 370191cded7Smrg tmpdepfile3=$dir$base.d 371191cded7Smrg tmpdepfile4=$dir$base.d 372191cded7Smrg "$@" -MD 373191cded7Smrg fi 374191cded7Smrg 375191cded7Smrg stat=$? 376191cded7Smrg if test $stat -eq 0; then : 377191cded7Smrg else 378191cded7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379191cded7Smrg exit $stat 380191cded7Smrg fi 381191cded7Smrg 382191cded7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383191cded7Smrg do 384191cded7Smrg test -f "$tmpdepfile" && break 385191cded7Smrg done 386191cded7Smrg if test -f "$tmpdepfile"; then 387191cded7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388191cded7Smrg # That's a tab and a space in the []. 389191cded7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390191cded7Smrg else 391191cded7Smrg echo "#dummy" > "$depfile" 392191cded7Smrg fi 393191cded7Smrg rm -f "$tmpdepfile" 394191cded7Smrg ;; 395191cded7Smrg 396191cded7Smrg#nosideeffect) 397191cded7Smrg # This comment above is used by automake to tell side-effect 398191cded7Smrg # dependency tracking mechanisms from slower ones. 399191cded7Smrg 400191cded7Smrgdashmstdout) 401191cded7Smrg # Important note: in order to support this mode, a compiler *must* 402191cded7Smrg # always write the preprocessed file to stdout, regardless of -o. 403191cded7Smrg "$@" || exit $? 404191cded7Smrg 405191cded7Smrg # Remove the call to Libtool. 406191cded7Smrg if test "$libtool" = yes; then 407191cded7Smrg while test $1 != '--mode=compile'; do 408191cded7Smrg shift 409191cded7Smrg done 410191cded7Smrg shift 411191cded7Smrg fi 412191cded7Smrg 413191cded7Smrg # Remove `-o $object'. 414191cded7Smrg IFS=" " 415191cded7Smrg for arg 416191cded7Smrg do 417191cded7Smrg case $arg in 418191cded7Smrg -o) 419191cded7Smrg shift 420191cded7Smrg ;; 421191cded7Smrg $object) 422191cded7Smrg shift 423191cded7Smrg ;; 424191cded7Smrg *) 425191cded7Smrg set fnord "$@" "$arg" 426191cded7Smrg shift # fnord 427191cded7Smrg shift # $arg 428191cded7Smrg ;; 429191cded7Smrg esac 430191cded7Smrg done 431191cded7Smrg 432191cded7Smrg test -z "$dashmflag" && dashmflag=-M 433191cded7Smrg # Require at least two characters before searching for `:' 434191cded7Smrg # in the target name. This is to cope with DOS-style filenames: 435191cded7Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436191cded7Smrg "$@" $dashmflag | 437191cded7Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438191cded7Smrg rm -f "$depfile" 439191cded7Smrg cat < "$tmpdepfile" > "$depfile" 440191cded7Smrg tr ' ' ' 441191cded7Smrg' < "$tmpdepfile" | \ 442191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 443191cded7Smrg## correctly. Breaking it into two sed invocations is a workaround. 444191cded7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445191cded7Smrg rm -f "$tmpdepfile" 446191cded7Smrg ;; 447191cded7Smrg 448191cded7SmrgdashXmstdout) 449191cded7Smrg # This case only exists to satisfy depend.m4. It is never actually 450191cded7Smrg # run, as this mode is specially recognized in the preamble. 451191cded7Smrg exit 1 452191cded7Smrg ;; 453191cded7Smrg 454191cded7Smrgmakedepend) 455191cded7Smrg "$@" || exit $? 456191cded7Smrg # Remove any Libtool call 457191cded7Smrg if test "$libtool" = yes; then 458191cded7Smrg while test $1 != '--mode=compile'; do 459191cded7Smrg shift 460191cded7Smrg done 461191cded7Smrg shift 462191cded7Smrg fi 463191cded7Smrg # X makedepend 464191cded7Smrg shift 465191cded7Smrg cleared=no 466191cded7Smrg for arg in "$@"; do 467191cded7Smrg case $cleared in 468191cded7Smrg no) 469191cded7Smrg set ""; shift 470191cded7Smrg cleared=yes ;; 471191cded7Smrg esac 472191cded7Smrg case "$arg" in 473191cded7Smrg -D*|-I*) 474191cded7Smrg set fnord "$@" "$arg"; shift ;; 475191cded7Smrg # Strip any option that makedepend may not understand. Remove 476191cded7Smrg # the object too, otherwise makedepend will parse it as a source file. 477191cded7Smrg -*|$object) 478191cded7Smrg ;; 479191cded7Smrg *) 480191cded7Smrg set fnord "$@" "$arg"; shift ;; 481191cded7Smrg esac 482191cded7Smrg done 483191cded7Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484191cded7Smrg touch "$tmpdepfile" 485191cded7Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486191cded7Smrg rm -f "$depfile" 487191cded7Smrg cat < "$tmpdepfile" > "$depfile" 488191cded7Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489191cded7Smrg' | \ 490191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 491191cded7Smrg## correctly. Breaking it into two sed invocations is a workaround. 492191cded7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493191cded7Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494191cded7Smrg ;; 495191cded7Smrg 496191cded7Smrgcpp) 497191cded7Smrg # Important note: in order to support this mode, a compiler *must* 498191cded7Smrg # always write the preprocessed file to stdout. 499191cded7Smrg "$@" || exit $? 500191cded7Smrg 501191cded7Smrg # Remove the call to Libtool. 502191cded7Smrg if test "$libtool" = yes; then 503191cded7Smrg while test $1 != '--mode=compile'; do 504191cded7Smrg shift 505191cded7Smrg done 506191cded7Smrg shift 507191cded7Smrg fi 508191cded7Smrg 509191cded7Smrg # Remove `-o $object'. 510191cded7Smrg IFS=" " 511191cded7Smrg for arg 512191cded7Smrg do 513191cded7Smrg case $arg in 514191cded7Smrg -o) 515191cded7Smrg shift 516191cded7Smrg ;; 517191cded7Smrg $object) 518191cded7Smrg shift 519191cded7Smrg ;; 520191cded7Smrg *) 521191cded7Smrg set fnord "$@" "$arg" 522191cded7Smrg shift # fnord 523191cded7Smrg shift # $arg 524191cded7Smrg ;; 525191cded7Smrg esac 526191cded7Smrg done 527191cded7Smrg 528191cded7Smrg "$@" -E | 529191cded7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530191cded7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531191cded7Smrg sed '$ s: \\$::' > "$tmpdepfile" 532191cded7Smrg rm -f "$depfile" 533191cded7Smrg echo "$object : \\" > "$depfile" 534191cded7Smrg cat < "$tmpdepfile" >> "$depfile" 535191cded7Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536191cded7Smrg rm -f "$tmpdepfile" 537191cded7Smrg ;; 538191cded7Smrg 539191cded7Smrgmsvisualcpp) 540191cded7Smrg # Important note: in order to support this mode, a compiler *must* 541191cded7Smrg # always write the preprocessed file to stdout, regardless of -o, 542191cded7Smrg # because we must use -o when running libtool. 543191cded7Smrg "$@" || exit $? 544191cded7Smrg IFS=" " 545191cded7Smrg for arg 546191cded7Smrg do 547191cded7Smrg case "$arg" in 548191cded7Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549191cded7Smrg set fnord "$@" 550191cded7Smrg shift 551191cded7Smrg shift 552191cded7Smrg ;; 553191cded7Smrg *) 554191cded7Smrg set fnord "$@" "$arg" 555191cded7Smrg shift 556191cded7Smrg shift 557191cded7Smrg ;; 558191cded7Smrg esac 559191cded7Smrg done 560191cded7Smrg "$@" -E | 561191cded7Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562191cded7Smrg rm -f "$depfile" 563191cded7Smrg echo "$object : \\" > "$depfile" 564191cded7Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565191cded7Smrg echo " " >> "$depfile" 566191cded7Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567191cded7Smrg rm -f "$tmpdepfile" 568191cded7Smrg ;; 569191cded7Smrg 570191cded7Smrgnone) 571191cded7Smrg exec "$@" 572191cded7Smrg ;; 573191cded7Smrg 574191cded7Smrg*) 575191cded7Smrg echo "Unknown depmode $depmode" 1>&2 576191cded7Smrg exit 1 577191cded7Smrg ;; 578191cded7Smrgesac 579191cded7Smrg 580191cded7Smrgexit 0 581191cded7Smrg 582191cded7Smrg# Local Variables: 583191cded7Smrg# mode: shell-script 584191cded7Smrg# sh-indentation: 2 585191cded7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586191cded7Smrg# time-stamp-start: "scriptversion=" 587191cded7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588191cded7Smrg# time-stamp-end: "$" 589191cded7Smrg# End: 590