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