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