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