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