depcomp revision 44dda7b2
1ff559fabSmrg#! /bin/sh 2ff559fabSmrg# depcomp - compile a program generating dependencies as side-effects 3ff559fabSmrg 444dda7b2Smrgscriptversion=2009-04-28.21; # UTC 5ff559fabSmrg 644dda7b2Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 744dda7b2Smrg# Software Foundation, Inc. 8ff559fabSmrg 9ff559fabSmrg# This program is free software; you can redistribute it and/or modify 10ff559fabSmrg# it under the terms of the GNU General Public License as published by 11ff559fabSmrg# the Free Software Foundation; either version 2, or (at your option) 12ff559fabSmrg# any later version. 13ff559fabSmrg 14ff559fabSmrg# This program is distributed in the hope that it will be useful, 15ff559fabSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16ff559fabSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17ff559fabSmrg# GNU General Public License for more details. 18ff559fabSmrg 19ff559fabSmrg# You should have received a copy of the GNU General Public License 2044dda7b2Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21ff559fabSmrg 22ff559fabSmrg# As a special exception to the GNU General Public License, if you 23ff559fabSmrg# distribute this file as part of a program that contains a 24ff559fabSmrg# configuration script generated by Autoconf, you may include it under 25ff559fabSmrg# the same distribution terms that you use for the rest of that program. 26ff559fabSmrg 27ff559fabSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28ff559fabSmrg 29ff559fabSmrgcase $1 in 30ff559fabSmrg '') 31ff559fabSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32ff559fabSmrg exit 1; 33ff559fabSmrg ;; 34ff559fabSmrg -h | --h*) 35ff559fabSmrg cat <<\EOF 36ff559fabSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37ff559fabSmrg 38ff559fabSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39ff559fabSmrgas side-effects. 40ff559fabSmrg 41ff559fabSmrgEnvironment variables: 42ff559fabSmrg depmode Dependency tracking mode. 43ff559fabSmrg source Source file read by `PROGRAMS ARGS'. 44ff559fabSmrg object Object file output by `PROGRAMS ARGS'. 45ff559fabSmrg DEPDIR directory where to store dependencies. 46ff559fabSmrg depfile Dependency file to output. 47ff559fabSmrg tmpdepfile Temporary file to use when outputing dependencies. 48ff559fabSmrg libtool Whether libtool is used (yes/no). 49ff559fabSmrg 50ff559fabSmrgReport bugs to <bug-automake@gnu.org>. 51ff559fabSmrgEOF 52ff559fabSmrg exit $? 53ff559fabSmrg ;; 54ff559fabSmrg -v | --v*) 55ff559fabSmrg echo "depcomp $scriptversion" 56ff559fabSmrg exit $? 57ff559fabSmrg ;; 58ff559fabSmrgesac 59ff559fabSmrg 60ff559fabSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61ff559fabSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62ff559fabSmrg exit 1 63ff559fabSmrgfi 64ff559fabSmrg 65ff559fabSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66ff559fabSmrgdepfile=${depfile-`echo "$object" | 67ff559fabSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68ff559fabSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69ff559fabSmrg 70ff559fabSmrgrm -f "$tmpdepfile" 71ff559fabSmrg 72ff559fabSmrg# Some modes work just like other modes, but use different flags. We 73ff559fabSmrg# parameterize here, but still list the modes in the big case below, 74ff559fabSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75ff559fabSmrg# here, because this file can only contain one case statement. 76ff559fabSmrgif test "$depmode" = hp; then 77ff559fabSmrg # HP compiler uses -M and no extra arg. 78ff559fabSmrg gccflag=-M 79ff559fabSmrg depmode=gcc 80ff559fabSmrgfi 81ff559fabSmrg 82ff559fabSmrgif test "$depmode" = dashXmstdout; then 83ff559fabSmrg # This is just like dashmstdout with a different argument. 84ff559fabSmrg dashmflag=-xM 85ff559fabSmrg depmode=dashmstdout 86ff559fabSmrgfi 87ff559fabSmrg 8844dda7b2Smrgcygpath_u="cygpath -u -f -" 8944dda7b2Smrgif test "$depmode" = msvcmsys; then 9044dda7b2Smrg # This is just like msvisualcpp but w/o cygpath translation. 9144dda7b2Smrg # Just convert the backslash-escaped backslashes to single forward 9244dda7b2Smrg # slashes to satisfy depend.m4 9344dda7b2Smrg cygpath_u="sed s,\\\\\\\\,/,g" 9444dda7b2Smrg depmode=msvisualcpp 9544dda7b2Smrgfi 9644dda7b2Smrg 97ff559fabSmrgcase "$depmode" in 98ff559fabSmrggcc3) 99ff559fabSmrg## gcc 3 implements dependency tracking that does exactly what 100ff559fabSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 101ff559fabSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1027a3b38f7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1037a3b38f7Smrg## the command line argument order; so add the flags where they 1047a3b38f7Smrg## appear in depend2.am. Note that the slowdown incurred here 1057a3b38f7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1067a3b38f7Smrg for arg 1077a3b38f7Smrg do 1087a3b38f7Smrg case $arg in 1097a3b38f7Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1107a3b38f7Smrg *) set fnord "$@" "$arg" ;; 1117a3b38f7Smrg esac 1127a3b38f7Smrg shift # fnord 1137a3b38f7Smrg shift # $arg 1147a3b38f7Smrg done 1157a3b38f7Smrg "$@" 116ff559fabSmrg stat=$? 117ff559fabSmrg if test $stat -eq 0; then : 118ff559fabSmrg else 119ff559fabSmrg rm -f "$tmpdepfile" 120ff559fabSmrg exit $stat 121ff559fabSmrg fi 122ff559fabSmrg mv "$tmpdepfile" "$depfile" 123ff559fabSmrg ;; 124ff559fabSmrg 125ff559fabSmrggcc) 126ff559fabSmrg## There are various ways to get dependency output from gcc. Here's 127ff559fabSmrg## why we pick this rather obscure method: 128ff559fabSmrg## - Don't want to use -MD because we'd like the dependencies to end 129ff559fabSmrg## up in a subdir. Having to rename by hand is ugly. 130ff559fabSmrg## (We might end up doing this anyway to support other compilers.) 131ff559fabSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 132ff559fabSmrg## -MM, not -M (despite what the docs say). 133ff559fabSmrg## - Using -M directly means running the compiler twice (even worse 134ff559fabSmrg## than renaming). 135ff559fabSmrg if test -z "$gccflag"; then 136ff559fabSmrg gccflag=-MD, 137ff559fabSmrg fi 138ff559fabSmrg "$@" -Wp,"$gccflag$tmpdepfile" 139ff559fabSmrg stat=$? 140ff559fabSmrg if test $stat -eq 0; then : 141ff559fabSmrg else 142ff559fabSmrg rm -f "$tmpdepfile" 143ff559fabSmrg exit $stat 144ff559fabSmrg fi 145ff559fabSmrg rm -f "$depfile" 146ff559fabSmrg echo "$object : \\" > "$depfile" 147ff559fabSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 148ff559fabSmrg## The second -e expression handles DOS-style file names with drive letters. 149ff559fabSmrg sed -e 's/^[^:]*: / /' \ 150ff559fabSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 151ff559fabSmrg## This next piece of magic avoids the `deleted header file' problem. 152ff559fabSmrg## The problem is that when a header file which appears in a .P file 153ff559fabSmrg## is deleted, the dependency causes make to die (because there is 154ff559fabSmrg## typically no way to rebuild the header). We avoid this by adding 155ff559fabSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 156ff559fabSmrg## this for us directly. 157ff559fabSmrg tr ' ' ' 158ff559fabSmrg' < "$tmpdepfile" | 159ff559fabSmrg## Some versions of gcc put a space before the `:'. On the theory 160ff559fabSmrg## that the space means something, we add a space to the output as 161ff559fabSmrg## well. 162ff559fabSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 163ff559fabSmrg## correctly. Breaking it into two sed invocations is a workaround. 164ff559fabSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 165ff559fabSmrg rm -f "$tmpdepfile" 166ff559fabSmrg ;; 167ff559fabSmrg 168ff559fabSmrghp) 169ff559fabSmrg # This case exists only to let depend.m4 do its work. It works by 170ff559fabSmrg # looking at the text of this script. This case will never be run, 171ff559fabSmrg # since it is checked for above. 172ff559fabSmrg exit 1 173ff559fabSmrg ;; 174ff559fabSmrg 175ff559fabSmrgsgi) 176ff559fabSmrg if test "$libtool" = yes; then 177ff559fabSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 178ff559fabSmrg else 179ff559fabSmrg "$@" -MDupdate "$tmpdepfile" 180ff559fabSmrg fi 181ff559fabSmrg stat=$? 182ff559fabSmrg if test $stat -eq 0; then : 183ff559fabSmrg else 184ff559fabSmrg rm -f "$tmpdepfile" 185ff559fabSmrg exit $stat 186ff559fabSmrg fi 187ff559fabSmrg rm -f "$depfile" 188ff559fabSmrg 189ff559fabSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 190ff559fabSmrg echo "$object : \\" > "$depfile" 191ff559fabSmrg 192ff559fabSmrg # Clip off the initial element (the dependent). Don't try to be 193ff559fabSmrg # clever and replace this with sed code, as IRIX sed won't handle 194ff559fabSmrg # lines with more than a fixed number of characters (4096 in 195ff559fabSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 196ff559fabSmrg # the IRIX cc adds comments like `#:fec' to the end of the 197ff559fabSmrg # dependency line. 198ff559fabSmrg tr ' ' ' 199ff559fabSmrg' < "$tmpdepfile" \ 200ff559fabSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 201ff559fabSmrg tr ' 20244dda7b2Smrg' ' ' >> "$depfile" 20344dda7b2Smrg echo >> "$depfile" 204ff559fabSmrg 205ff559fabSmrg # The second pass generates a dummy entry for each header file. 206ff559fabSmrg tr ' ' ' 207ff559fabSmrg' < "$tmpdepfile" \ 208ff559fabSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 20944dda7b2Smrg >> "$depfile" 210ff559fabSmrg else 211ff559fabSmrg # The sourcefile does not contain any dependencies, so just 212ff559fabSmrg # store a dummy comment line, to avoid errors with the Makefile 213ff559fabSmrg # "include basename.Plo" scheme. 214ff559fabSmrg echo "#dummy" > "$depfile" 215ff559fabSmrg fi 216ff559fabSmrg rm -f "$tmpdepfile" 217ff559fabSmrg ;; 218ff559fabSmrg 219ff559fabSmrgaix) 220ff559fabSmrg # The C for AIX Compiler uses -M and outputs the dependencies 221ff559fabSmrg # in a .u file. In older versions, this file always lives in the 222ff559fabSmrg # current directory. Also, the AIX compiler puts `$object:' at the 223ff559fabSmrg # start of each line; $object doesn't have directory information. 224ff559fabSmrg # Version 6 uses the directory in both cases. 2257a3b38f7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2267a3b38f7Smrg test "x$dir" = "x$object" && dir= 2277a3b38f7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 228ff559fabSmrg if test "$libtool" = yes; then 2297a3b38f7Smrg tmpdepfile1=$dir$base.u 2307a3b38f7Smrg tmpdepfile2=$base.u 2317a3b38f7Smrg tmpdepfile3=$dir.libs/$base.u 232ff559fabSmrg "$@" -Wc,-M 233ff559fabSmrg else 2347a3b38f7Smrg tmpdepfile1=$dir$base.u 2357a3b38f7Smrg tmpdepfile2=$dir$base.u 2367a3b38f7Smrg tmpdepfile3=$dir$base.u 237ff559fabSmrg "$@" -M 238ff559fabSmrg fi 239ff559fabSmrg stat=$? 240ff559fabSmrg 241ff559fabSmrg if test $stat -eq 0; then : 242ff559fabSmrg else 2437a3b38f7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 244ff559fabSmrg exit $stat 245ff559fabSmrg fi 246ff559fabSmrg 2477a3b38f7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2487a3b38f7Smrg do 2497a3b38f7Smrg test -f "$tmpdepfile" && break 2507a3b38f7Smrg done 251ff559fabSmrg if test -f "$tmpdepfile"; then 252ff559fabSmrg # Each line is of the form `foo.o: dependent.h'. 253ff559fabSmrg # Do two passes, one to just change these to 254ff559fabSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 2557a3b38f7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2567a3b38f7Smrg # That's a tab and a space in the []. 2577a3b38f7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 258ff559fabSmrg else 259ff559fabSmrg # The sourcefile does not contain any dependencies, so just 260ff559fabSmrg # store a dummy comment line, to avoid errors with the Makefile 261ff559fabSmrg # "include basename.Plo" scheme. 262ff559fabSmrg echo "#dummy" > "$depfile" 263ff559fabSmrg fi 264ff559fabSmrg rm -f "$tmpdepfile" 265ff559fabSmrg ;; 266ff559fabSmrg 267ff559fabSmrgicc) 268ff559fabSmrg # Intel's C compiler understands `-MD -MF file'. However on 269ff559fabSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 270ff559fabSmrg # ICC 7.0 will fill foo.d with something like 271ff559fabSmrg # foo.o: sub/foo.c 272ff559fabSmrg # foo.o: sub/foo.h 273ff559fabSmrg # which is wrong. We want: 274ff559fabSmrg # sub/foo.o: sub/foo.c 275ff559fabSmrg # sub/foo.o: sub/foo.h 276ff559fabSmrg # sub/foo.c: 277ff559fabSmrg # sub/foo.h: 278ff559fabSmrg # ICC 7.1 will output 279ff559fabSmrg # foo.o: sub/foo.c sub/foo.h 280ff559fabSmrg # and will wrap long lines using \ : 281ff559fabSmrg # foo.o: sub/foo.c ... \ 282ff559fabSmrg # sub/foo.h ... \ 283ff559fabSmrg # ... 284ff559fabSmrg 285ff559fabSmrg "$@" -MD -MF "$tmpdepfile" 286ff559fabSmrg stat=$? 287ff559fabSmrg if test $stat -eq 0; then : 288ff559fabSmrg else 289ff559fabSmrg rm -f "$tmpdepfile" 290ff559fabSmrg exit $stat 291ff559fabSmrg fi 292ff559fabSmrg rm -f "$depfile" 293ff559fabSmrg # Each line is of the form `foo.o: dependent.h', 294ff559fabSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 295ff559fabSmrg # Do two passes, one to just change these to 296ff559fabSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 297ff559fabSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 298ff559fabSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 299ff559fabSmrg # correctly. Breaking it into two sed invocations is a workaround. 300ff559fabSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 301ff559fabSmrg sed -e 's/$/ :/' >> "$depfile" 302ff559fabSmrg rm -f "$tmpdepfile" 303ff559fabSmrg ;; 304ff559fabSmrg 3057a3b38f7Smrghp2) 3067a3b38f7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3077a3b38f7Smrg # compilers, which have integrated preprocessors. The correct option 3087a3b38f7Smrg # to use with these is +Maked; it writes dependencies to a file named 3097a3b38f7Smrg # 'foo.d', which lands next to the object file, wherever that 3107a3b38f7Smrg # happens to be. 3117a3b38f7Smrg # Much of this is similar to the tru64 case; see comments there. 3127a3b38f7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3137a3b38f7Smrg test "x$dir" = "x$object" && dir= 3147a3b38f7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3157a3b38f7Smrg if test "$libtool" = yes; then 3167a3b38f7Smrg tmpdepfile1=$dir$base.d 3177a3b38f7Smrg tmpdepfile2=$dir.libs/$base.d 3187a3b38f7Smrg "$@" -Wc,+Maked 3197a3b38f7Smrg else 3207a3b38f7Smrg tmpdepfile1=$dir$base.d 3217a3b38f7Smrg tmpdepfile2=$dir$base.d 3227a3b38f7Smrg "$@" +Maked 3237a3b38f7Smrg fi 3247a3b38f7Smrg stat=$? 3257a3b38f7Smrg if test $stat -eq 0; then : 3267a3b38f7Smrg else 3277a3b38f7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3287a3b38f7Smrg exit $stat 3297a3b38f7Smrg fi 3307a3b38f7Smrg 3317a3b38f7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3327a3b38f7Smrg do 3337a3b38f7Smrg test -f "$tmpdepfile" && break 3347a3b38f7Smrg done 3357a3b38f7Smrg if test -f "$tmpdepfile"; then 3367a3b38f7Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3377a3b38f7Smrg # Add `dependent.h:' lines. 33844dda7b2Smrg sed -ne '2,${ 33944dda7b2Smrg s/^ *// 34044dda7b2Smrg s/ \\*$// 34144dda7b2Smrg s/$/:/ 34244dda7b2Smrg p 34344dda7b2Smrg }' "$tmpdepfile" >> "$depfile" 3447a3b38f7Smrg else 3457a3b38f7Smrg echo "#dummy" > "$depfile" 3467a3b38f7Smrg fi 3477a3b38f7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3487a3b38f7Smrg ;; 3497a3b38f7Smrg 350ff559fabSmrgtru64) 351ff559fabSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 352ff559fabSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 353ff559fabSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 354ff559fabSmrg # dependencies in `foo.d' instead, so we check for that too. 355ff559fabSmrg # Subdirectories are respected. 356ff559fabSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 357ff559fabSmrg test "x$dir" = "x$object" && dir= 358ff559fabSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 359ff559fabSmrg 360ff559fabSmrg if test "$libtool" = yes; then 361ff559fabSmrg # With Tru64 cc, shared objects can also be used to make a 3627a3b38f7Smrg # static library. This mechanism is used in libtool 1.4 series to 363ff559fabSmrg # handle both shared and static libraries in a single compilation. 364ff559fabSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 365ff559fabSmrg # 366ff559fabSmrg # With libtool 1.5 this exception was removed, and libtool now 367ff559fabSmrg # generates 2 separate objects for the 2 libraries. These two 3687a3b38f7Smrg # compilations output dependencies in $dir.libs/$base.o.d and 369ff559fabSmrg # in $dir$base.o.d. We have to check for both files, because 370ff559fabSmrg # one of the two compilations can be disabled. We should prefer 371ff559fabSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 372ff559fabSmrg # automatically cleaned when .libs/ is deleted, while ignoring 373ff559fabSmrg # the former would cause a distcleancheck panic. 374ff559fabSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 375ff559fabSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 376ff559fabSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 377ff559fabSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 378ff559fabSmrg "$@" -Wc,-MD 379ff559fabSmrg else 380ff559fabSmrg tmpdepfile1=$dir$base.o.d 381ff559fabSmrg tmpdepfile2=$dir$base.d 382ff559fabSmrg tmpdepfile3=$dir$base.d 383ff559fabSmrg tmpdepfile4=$dir$base.d 384ff559fabSmrg "$@" -MD 385ff559fabSmrg fi 386ff559fabSmrg 387ff559fabSmrg stat=$? 388ff559fabSmrg if test $stat -eq 0; then : 389ff559fabSmrg else 390ff559fabSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 391ff559fabSmrg exit $stat 392ff559fabSmrg fi 393ff559fabSmrg 394ff559fabSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 395ff559fabSmrg do 396ff559fabSmrg test -f "$tmpdepfile" && break 397ff559fabSmrg done 398ff559fabSmrg if test -f "$tmpdepfile"; then 399ff559fabSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 400ff559fabSmrg # That's a tab and a space in the []. 401ff559fabSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 402ff559fabSmrg else 403ff559fabSmrg echo "#dummy" > "$depfile" 404ff559fabSmrg fi 405ff559fabSmrg rm -f "$tmpdepfile" 406ff559fabSmrg ;; 407ff559fabSmrg 408ff559fabSmrg#nosideeffect) 409ff559fabSmrg # This comment above is used by automake to tell side-effect 410ff559fabSmrg # dependency tracking mechanisms from slower ones. 411ff559fabSmrg 412ff559fabSmrgdashmstdout) 413ff559fabSmrg # Important note: in order to support this mode, a compiler *must* 414ff559fabSmrg # always write the preprocessed file to stdout, regardless of -o. 415ff559fabSmrg "$@" || exit $? 416ff559fabSmrg 417ff559fabSmrg # Remove the call to Libtool. 418ff559fabSmrg if test "$libtool" = yes; then 41944dda7b2Smrg while test "X$1" != 'X--mode=compile'; do 420ff559fabSmrg shift 421ff559fabSmrg done 422ff559fabSmrg shift 423ff559fabSmrg fi 424ff559fabSmrg 425ff559fabSmrg # Remove `-o $object'. 426ff559fabSmrg IFS=" " 427ff559fabSmrg for arg 428ff559fabSmrg do 429ff559fabSmrg case $arg in 430ff559fabSmrg -o) 431ff559fabSmrg shift 432ff559fabSmrg ;; 433ff559fabSmrg $object) 434ff559fabSmrg shift 435ff559fabSmrg ;; 436ff559fabSmrg *) 437ff559fabSmrg set fnord "$@" "$arg" 438ff559fabSmrg shift # fnord 439ff559fabSmrg shift # $arg 440ff559fabSmrg ;; 441ff559fabSmrg esac 442ff559fabSmrg done 443ff559fabSmrg 444ff559fabSmrg test -z "$dashmflag" && dashmflag=-M 445ff559fabSmrg # Require at least two characters before searching for `:' 446ff559fabSmrg # in the target name. This is to cope with DOS-style filenames: 447ff559fabSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 448ff559fabSmrg "$@" $dashmflag | 449ff559fabSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 450ff559fabSmrg rm -f "$depfile" 451ff559fabSmrg cat < "$tmpdepfile" > "$depfile" 452ff559fabSmrg tr ' ' ' 453ff559fabSmrg' < "$tmpdepfile" | \ 454ff559fabSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 455ff559fabSmrg## correctly. Breaking it into two sed invocations is a workaround. 456ff559fabSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 457ff559fabSmrg rm -f "$tmpdepfile" 458ff559fabSmrg ;; 459ff559fabSmrg 460ff559fabSmrgdashXmstdout) 461ff559fabSmrg # This case only exists to satisfy depend.m4. It is never actually 462ff559fabSmrg # run, as this mode is specially recognized in the preamble. 463ff559fabSmrg exit 1 464ff559fabSmrg ;; 465ff559fabSmrg 466ff559fabSmrgmakedepend) 467ff559fabSmrg "$@" || exit $? 468ff559fabSmrg # Remove any Libtool call 469ff559fabSmrg if test "$libtool" = yes; then 47044dda7b2Smrg while test "X$1" != 'X--mode=compile'; do 471ff559fabSmrg shift 472ff559fabSmrg done 473ff559fabSmrg shift 474ff559fabSmrg fi 475ff559fabSmrg # X makedepend 476ff559fabSmrg shift 47744dda7b2Smrg cleared=no eat=no 47844dda7b2Smrg for arg 47944dda7b2Smrg do 480ff559fabSmrg case $cleared in 481ff559fabSmrg no) 482ff559fabSmrg set ""; shift 483ff559fabSmrg cleared=yes ;; 484ff559fabSmrg esac 48544dda7b2Smrg if test $eat = yes; then 48644dda7b2Smrg eat=no 48744dda7b2Smrg continue 48844dda7b2Smrg fi 489ff559fabSmrg case "$arg" in 490ff559fabSmrg -D*|-I*) 491ff559fabSmrg set fnord "$@" "$arg"; shift ;; 492ff559fabSmrg # Strip any option that makedepend may not understand. Remove 493ff559fabSmrg # the object too, otherwise makedepend will parse it as a source file. 49444dda7b2Smrg -arch) 49544dda7b2Smrg eat=yes ;; 496ff559fabSmrg -*|$object) 497ff559fabSmrg ;; 498ff559fabSmrg *) 499ff559fabSmrg set fnord "$@" "$arg"; shift ;; 500ff559fabSmrg esac 501ff559fabSmrg done 50244dda7b2Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 503ff559fabSmrg touch "$tmpdepfile" 504ff559fabSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 505ff559fabSmrg rm -f "$depfile" 506ff559fabSmrg cat < "$tmpdepfile" > "$depfile" 507ff559fabSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 508ff559fabSmrg' | \ 509ff559fabSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 510ff559fabSmrg## correctly. Breaking it into two sed invocations is a workaround. 511ff559fabSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 512ff559fabSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 513ff559fabSmrg ;; 514ff559fabSmrg 515ff559fabSmrgcpp) 516ff559fabSmrg # Important note: in order to support this mode, a compiler *must* 517ff559fabSmrg # always write the preprocessed file to stdout. 518ff559fabSmrg "$@" || exit $? 519ff559fabSmrg 520ff559fabSmrg # Remove the call to Libtool. 521ff559fabSmrg if test "$libtool" = yes; then 52244dda7b2Smrg while test "X$1" != 'X--mode=compile'; do 523ff559fabSmrg shift 524ff559fabSmrg done 525ff559fabSmrg shift 526ff559fabSmrg fi 527ff559fabSmrg 528ff559fabSmrg # Remove `-o $object'. 529ff559fabSmrg IFS=" " 530ff559fabSmrg for arg 531ff559fabSmrg do 532ff559fabSmrg case $arg in 533ff559fabSmrg -o) 534ff559fabSmrg shift 535ff559fabSmrg ;; 536ff559fabSmrg $object) 537ff559fabSmrg shift 538ff559fabSmrg ;; 539ff559fabSmrg *) 540ff559fabSmrg set fnord "$@" "$arg" 541ff559fabSmrg shift # fnord 542ff559fabSmrg shift # $arg 543ff559fabSmrg ;; 544ff559fabSmrg esac 545ff559fabSmrg done 546ff559fabSmrg 547ff559fabSmrg "$@" -E | 548ff559fabSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 549ff559fabSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 550ff559fabSmrg sed '$ s: \\$::' > "$tmpdepfile" 551ff559fabSmrg rm -f "$depfile" 552ff559fabSmrg echo "$object : \\" > "$depfile" 553ff559fabSmrg cat < "$tmpdepfile" >> "$depfile" 554ff559fabSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 555ff559fabSmrg rm -f "$tmpdepfile" 556ff559fabSmrg ;; 557ff559fabSmrg 558ff559fabSmrgmsvisualcpp) 559ff559fabSmrg # Important note: in order to support this mode, a compiler *must* 56044dda7b2Smrg # always write the preprocessed file to stdout. 561ff559fabSmrg "$@" || exit $? 56244dda7b2Smrg 56344dda7b2Smrg # Remove the call to Libtool. 56444dda7b2Smrg if test "$libtool" = yes; then 56544dda7b2Smrg while test "X$1" != 'X--mode=compile'; do 56644dda7b2Smrg shift 56744dda7b2Smrg done 56844dda7b2Smrg shift 56944dda7b2Smrg fi 57044dda7b2Smrg 571ff559fabSmrg IFS=" " 572ff559fabSmrg for arg 573ff559fabSmrg do 574ff559fabSmrg case "$arg" in 57544dda7b2Smrg -o) 57644dda7b2Smrg shift 57744dda7b2Smrg ;; 57844dda7b2Smrg $object) 57944dda7b2Smrg shift 58044dda7b2Smrg ;; 581ff559fabSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 582ff559fabSmrg set fnord "$@" 583ff559fabSmrg shift 584ff559fabSmrg shift 585ff559fabSmrg ;; 586ff559fabSmrg *) 587ff559fabSmrg set fnord "$@" "$arg" 588ff559fabSmrg shift 589ff559fabSmrg shift 590ff559fabSmrg ;; 591ff559fabSmrg esac 592ff559fabSmrg done 59344dda7b2Smrg "$@" -E 2>/dev/null | 59444dda7b2Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 595ff559fabSmrg rm -f "$depfile" 596ff559fabSmrg echo "$object : \\" > "$depfile" 59744dda7b2Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 598ff559fabSmrg echo " " >> "$depfile" 59944dda7b2Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 600ff559fabSmrg rm -f "$tmpdepfile" 601ff559fabSmrg ;; 602ff559fabSmrg 60344dda7b2Smrgmsvcmsys) 60444dda7b2Smrg # This case exists only to let depend.m4 do its work. It works by 60544dda7b2Smrg # looking at the text of this script. This case will never be run, 60644dda7b2Smrg # since it is checked for above. 60744dda7b2Smrg exit 1 60844dda7b2Smrg ;; 60944dda7b2Smrg 610ff559fabSmrgnone) 611ff559fabSmrg exec "$@" 612ff559fabSmrg ;; 613ff559fabSmrg 614ff559fabSmrg*) 615ff559fabSmrg echo "Unknown depmode $depmode" 1>&2 616ff559fabSmrg exit 1 617ff559fabSmrg ;; 618ff559fabSmrgesac 619ff559fabSmrg 620ff559fabSmrgexit 0 621ff559fabSmrg 622ff559fabSmrg# Local Variables: 623ff559fabSmrg# mode: shell-script 624ff559fabSmrg# sh-indentation: 2 625ff559fabSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 626ff559fabSmrg# time-stamp-start: "scriptversion=" 627ff559fabSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 62844dda7b2Smrg# time-stamp-time-zone: "UTC" 62944dda7b2Smrg# time-stamp-end: "; # UTC" 630ff559fabSmrg# End: 631