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