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