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