depcomp revision 4b9470b1
1d983712dSmrg#! /bin/sh 2d983712dSmrg# depcomp - compile a program generating dependencies as side-effects 3d983712dSmrg 44b9470b1Smrgscriptversion=2011-12-04.11; # UTC 5d983712dSmrg 64b9470b1Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 74b9470b1Smrg# 2011 Free Software Foundation, Inc. 8d983712dSmrg 9d983712dSmrg# This program is free software; you can redistribute it and/or modify 10d983712dSmrg# it under the terms of the GNU General Public License as published by 11d983712dSmrg# the Free Software Foundation; either version 2, or (at your option) 12d983712dSmrg# any later version. 13d983712dSmrg 14d983712dSmrg# This program is distributed in the hope that it will be useful, 15d983712dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16d983712dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17d983712dSmrg# GNU General Public License for more details. 18d983712dSmrg 19d983712dSmrg# You should have received a copy of the GNU General Public License 204b9470b1Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21d983712dSmrg 22d983712dSmrg# As a special exception to the GNU General Public License, if you 23d983712dSmrg# distribute this file as part of a program that contains a 24d983712dSmrg# configuration script generated by Autoconf, you may include it under 25d983712dSmrg# the same distribution terms that you use for the rest of that program. 26d983712dSmrg 27d983712dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28d983712dSmrg 29d983712dSmrgcase $1 in 30d983712dSmrg '') 31d983712dSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32d983712dSmrg exit 1; 33d983712dSmrg ;; 34d983712dSmrg -h | --h*) 35d983712dSmrg cat <<\EOF 36d983712dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37d983712dSmrg 38d983712dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39d983712dSmrgas side-effects. 40d983712dSmrg 41d983712dSmrgEnvironment variables: 42d983712dSmrg depmode Dependency tracking mode. 43d983712dSmrg source Source file read by `PROGRAMS ARGS'. 44d983712dSmrg object Object file output by `PROGRAMS ARGS'. 45d983712dSmrg DEPDIR directory where to store dependencies. 46d983712dSmrg depfile Dependency file to output. 474b9470b1Smrg tmpdepfile Temporary file to use when outputting dependencies. 48d983712dSmrg libtool Whether libtool is used (yes/no). 49d983712dSmrg 50d983712dSmrgReport bugs to <bug-automake@gnu.org>. 51d983712dSmrgEOF 52d983712dSmrg exit $? 53d983712dSmrg ;; 54d983712dSmrg -v | --v*) 55d983712dSmrg echo "depcomp $scriptversion" 56d983712dSmrg exit $? 57d983712dSmrg ;; 58d983712dSmrgesac 59d983712dSmrg 60d983712dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61d983712dSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62d983712dSmrg exit 1 63d983712dSmrgfi 64d983712dSmrg 65d983712dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66d983712dSmrgdepfile=${depfile-`echo "$object" | 67d983712dSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68d983712dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69d983712dSmrg 70d983712dSmrgrm -f "$tmpdepfile" 71d983712dSmrg 72d983712dSmrg# Some modes work just like other modes, but use different flags. We 73d983712dSmrg# parameterize here, but still list the modes in the big case below, 74d983712dSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75d983712dSmrg# here, because this file can only contain one case statement. 76d983712dSmrgif test "$depmode" = hp; then 77d983712dSmrg # HP compiler uses -M and no extra arg. 78d983712dSmrg gccflag=-M 79d983712dSmrg depmode=gcc 80d983712dSmrgfi 81d983712dSmrg 82d983712dSmrgif test "$depmode" = dashXmstdout; then 83d983712dSmrg # This is just like dashmstdout with a different argument. 84d983712dSmrg dashmflag=-xM 85d983712dSmrg depmode=dashmstdout 86d983712dSmrgfi 87d983712dSmrg 884b9470b1Smrgcygpath_u="cygpath -u -f -" 894b9470b1Smrgif test "$depmode" = msvcmsys; then 904b9470b1Smrg # This is just like msvisualcpp but w/o cygpath translation. 914b9470b1Smrg # Just convert the backslash-escaped backslashes to single forward 924b9470b1Smrg # slashes to satisfy depend.m4 934b9470b1Smrg cygpath_u='sed s,\\\\,/,g' 944b9470b1Smrg depmode=msvisualcpp 954b9470b1Smrgfi 964b9470b1Smrg 974b9470b1Smrgif test "$depmode" = msvc7msys; then 984b9470b1Smrg # This is just like msvc7 but w/o cygpath translation. 994b9470b1Smrg # Just convert the backslash-escaped backslashes to single forward 1004b9470b1Smrg # slashes to satisfy depend.m4 1014b9470b1Smrg cygpath_u='sed s,\\\\,/,g' 1024b9470b1Smrg depmode=msvc7 1034b9470b1Smrgfi 1044b9470b1Smrg 105d983712dSmrgcase "$depmode" in 106d983712dSmrggcc3) 107d983712dSmrg## gcc 3 implements dependency tracking that does exactly what 108d983712dSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 109d983712dSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 110962c3257Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 111962c3257Smrg## the command line argument order; so add the flags where they 112962c3257Smrg## appear in depend2.am. Note that the slowdown incurred here 113962c3257Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 114962c3257Smrg for arg 115962c3257Smrg do 116962c3257Smrg case $arg in 117962c3257Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 118962c3257Smrg *) set fnord "$@" "$arg" ;; 119962c3257Smrg esac 120962c3257Smrg shift # fnord 121962c3257Smrg shift # $arg 122962c3257Smrg done 123962c3257Smrg "$@" 124d983712dSmrg stat=$? 125d983712dSmrg if test $stat -eq 0; then : 126d983712dSmrg else 127d983712dSmrg rm -f "$tmpdepfile" 128d983712dSmrg exit $stat 129d983712dSmrg fi 130d983712dSmrg mv "$tmpdepfile" "$depfile" 131d983712dSmrg ;; 132d983712dSmrg 133d983712dSmrggcc) 134d983712dSmrg## There are various ways to get dependency output from gcc. Here's 135d983712dSmrg## why we pick this rather obscure method: 136d983712dSmrg## - Don't want to use -MD because we'd like the dependencies to end 137d983712dSmrg## up in a subdir. Having to rename by hand is ugly. 138d983712dSmrg## (We might end up doing this anyway to support other compilers.) 139d983712dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140d983712dSmrg## -MM, not -M (despite what the docs say). 141d983712dSmrg## - Using -M directly means running the compiler twice (even worse 142d983712dSmrg## than renaming). 143d983712dSmrg if test -z "$gccflag"; then 144d983712dSmrg gccflag=-MD, 145d983712dSmrg fi 146d983712dSmrg "$@" -Wp,"$gccflag$tmpdepfile" 147d983712dSmrg stat=$? 148d983712dSmrg if test $stat -eq 0; then : 149d983712dSmrg else 150d983712dSmrg rm -f "$tmpdepfile" 151d983712dSmrg exit $stat 152d983712dSmrg fi 153d983712dSmrg rm -f "$depfile" 154d983712dSmrg echo "$object : \\" > "$depfile" 155d983712dSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156d983712dSmrg## The second -e expression handles DOS-style file names with drive letters. 157d983712dSmrg sed -e 's/^[^:]*: / /' \ 158d983712dSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159d983712dSmrg## This next piece of magic avoids the `deleted header file' problem. 160d983712dSmrg## The problem is that when a header file which appears in a .P file 161d983712dSmrg## is deleted, the dependency causes make to die (because there is 162d983712dSmrg## typically no way to rebuild the header). We avoid this by adding 163d983712dSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 164d983712dSmrg## this for us directly. 165d983712dSmrg tr ' ' ' 166d983712dSmrg' < "$tmpdepfile" | 167d983712dSmrg## Some versions of gcc put a space before the `:'. On the theory 168d983712dSmrg## that the space means something, we add a space to the output as 1694b9470b1Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 1704b9470b1Smrg## to the object. Take care to not repeat it in the output. 171d983712dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 172d983712dSmrg## correctly. Breaking it into two sed invocations is a workaround. 1734b9470b1Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1744b9470b1Smrg | sed -e 's/$/ :/' >> "$depfile" 175d983712dSmrg rm -f "$tmpdepfile" 176d983712dSmrg ;; 177d983712dSmrg 178d983712dSmrghp) 179d983712dSmrg # This case exists only to let depend.m4 do its work. It works by 180d983712dSmrg # looking at the text of this script. This case will never be run, 181d983712dSmrg # since it is checked for above. 182d983712dSmrg exit 1 183d983712dSmrg ;; 184d983712dSmrg 185d983712dSmrgsgi) 186d983712dSmrg if test "$libtool" = yes; then 187d983712dSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 188d983712dSmrg else 189d983712dSmrg "$@" -MDupdate "$tmpdepfile" 190d983712dSmrg fi 191d983712dSmrg stat=$? 192d983712dSmrg if test $stat -eq 0; then : 193d983712dSmrg else 194d983712dSmrg rm -f "$tmpdepfile" 195d983712dSmrg exit $stat 196d983712dSmrg fi 197d983712dSmrg rm -f "$depfile" 198d983712dSmrg 199d983712dSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 200d983712dSmrg echo "$object : \\" > "$depfile" 201d983712dSmrg 202d983712dSmrg # Clip off the initial element (the dependent). Don't try to be 203d983712dSmrg # clever and replace this with sed code, as IRIX sed won't handle 204d983712dSmrg # lines with more than a fixed number of characters (4096 in 205d983712dSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206d983712dSmrg # the IRIX cc adds comments like `#:fec' to the end of the 207d983712dSmrg # dependency line. 208d983712dSmrg tr ' ' ' 209d983712dSmrg' < "$tmpdepfile" \ 210d983712dSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211d983712dSmrg tr ' 2124b9470b1Smrg' ' ' >> "$depfile" 2134b9470b1Smrg echo >> "$depfile" 214d983712dSmrg 215d983712dSmrg # The second pass generates a dummy entry for each header file. 216d983712dSmrg tr ' ' ' 217d983712dSmrg' < "$tmpdepfile" \ 218d983712dSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2194b9470b1Smrg >> "$depfile" 220d983712dSmrg else 221d983712dSmrg # The sourcefile does not contain any dependencies, so just 222d983712dSmrg # store a dummy comment line, to avoid errors with the Makefile 223d983712dSmrg # "include basename.Plo" scheme. 224d983712dSmrg echo "#dummy" > "$depfile" 225d983712dSmrg fi 226d983712dSmrg rm -f "$tmpdepfile" 227d983712dSmrg ;; 228d983712dSmrg 229d983712dSmrgaix) 230d983712dSmrg # The C for AIX Compiler uses -M and outputs the dependencies 231d983712dSmrg # in a .u file. In older versions, this file always lives in the 232d983712dSmrg # current directory. Also, the AIX compiler puts `$object:' at the 233d983712dSmrg # start of each line; $object doesn't have directory information. 234d983712dSmrg # Version 6 uses the directory in both cases. 235962c3257Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 236962c3257Smrg test "x$dir" = "x$object" && dir= 237962c3257Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 238d983712dSmrg if test "$libtool" = yes; then 239962c3257Smrg tmpdepfile1=$dir$base.u 240962c3257Smrg tmpdepfile2=$base.u 241962c3257Smrg tmpdepfile3=$dir.libs/$base.u 242d983712dSmrg "$@" -Wc,-M 243d983712dSmrg else 244962c3257Smrg tmpdepfile1=$dir$base.u 245962c3257Smrg tmpdepfile2=$dir$base.u 246962c3257Smrg tmpdepfile3=$dir$base.u 247d983712dSmrg "$@" -M 248d983712dSmrg fi 249d983712dSmrg stat=$? 250d983712dSmrg 251d983712dSmrg if test $stat -eq 0; then : 252d983712dSmrg else 253962c3257Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 254d983712dSmrg exit $stat 255d983712dSmrg fi 256d983712dSmrg 257962c3257Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 258962c3257Smrg do 259962c3257Smrg test -f "$tmpdepfile" && break 260962c3257Smrg done 261d983712dSmrg if test -f "$tmpdepfile"; then 262d983712dSmrg # Each line is of the form `foo.o: dependent.h'. 263d983712dSmrg # Do two passes, one to just change these to 264d983712dSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 265962c3257Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 266962c3257Smrg # That's a tab and a space in the []. 267962c3257Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268d983712dSmrg else 269d983712dSmrg # The sourcefile does not contain any dependencies, so just 270d983712dSmrg # store a dummy comment line, to avoid errors with the Makefile 271d983712dSmrg # "include basename.Plo" scheme. 272d983712dSmrg echo "#dummy" > "$depfile" 273d983712dSmrg fi 274d983712dSmrg rm -f "$tmpdepfile" 275d983712dSmrg ;; 276d983712dSmrg 277d983712dSmrgicc) 278d983712dSmrg # Intel's C compiler understands `-MD -MF file'. However on 279d983712dSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280d983712dSmrg # ICC 7.0 will fill foo.d with something like 281d983712dSmrg # foo.o: sub/foo.c 282d983712dSmrg # foo.o: sub/foo.h 283d983712dSmrg # which is wrong. We want: 284d983712dSmrg # sub/foo.o: sub/foo.c 285d983712dSmrg # sub/foo.o: sub/foo.h 286d983712dSmrg # sub/foo.c: 287d983712dSmrg # sub/foo.h: 288d983712dSmrg # ICC 7.1 will output 289d983712dSmrg # foo.o: sub/foo.c sub/foo.h 290d983712dSmrg # and will wrap long lines using \ : 291d983712dSmrg # foo.o: sub/foo.c ... \ 292d983712dSmrg # sub/foo.h ... \ 293d983712dSmrg # ... 294d983712dSmrg 295d983712dSmrg "$@" -MD -MF "$tmpdepfile" 296d983712dSmrg stat=$? 297d983712dSmrg if test $stat -eq 0; then : 298d983712dSmrg else 299d983712dSmrg rm -f "$tmpdepfile" 300d983712dSmrg exit $stat 301d983712dSmrg fi 302d983712dSmrg rm -f "$depfile" 303d983712dSmrg # Each line is of the form `foo.o: dependent.h', 304d983712dSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 305d983712dSmrg # Do two passes, one to just change these to 306d983712dSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 307d983712dSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308d983712dSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 309d983712dSmrg # correctly. Breaking it into two sed invocations is a workaround. 310d983712dSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311d983712dSmrg sed -e 's/$/ :/' >> "$depfile" 312d983712dSmrg rm -f "$tmpdepfile" 313d983712dSmrg ;; 314d983712dSmrg 315962c3257Smrghp2) 316962c3257Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 317962c3257Smrg # compilers, which have integrated preprocessors. The correct option 318962c3257Smrg # to use with these is +Maked; it writes dependencies to a file named 319962c3257Smrg # 'foo.d', which lands next to the object file, wherever that 320962c3257Smrg # happens to be. 321962c3257Smrg # Much of this is similar to the tru64 case; see comments there. 322962c3257Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 323962c3257Smrg test "x$dir" = "x$object" && dir= 324962c3257Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 325962c3257Smrg if test "$libtool" = yes; then 326962c3257Smrg tmpdepfile1=$dir$base.d 327962c3257Smrg tmpdepfile2=$dir.libs/$base.d 328962c3257Smrg "$@" -Wc,+Maked 329962c3257Smrg else 330962c3257Smrg tmpdepfile1=$dir$base.d 331962c3257Smrg tmpdepfile2=$dir$base.d 332962c3257Smrg "$@" +Maked 333962c3257Smrg fi 334962c3257Smrg stat=$? 335962c3257Smrg if test $stat -eq 0; then : 336962c3257Smrg else 337962c3257Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 338962c3257Smrg exit $stat 339962c3257Smrg fi 340962c3257Smrg 341962c3257Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 342962c3257Smrg do 343962c3257Smrg test -f "$tmpdepfile" && break 344962c3257Smrg done 345962c3257Smrg if test -f "$tmpdepfile"; then 346962c3257Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 347962c3257Smrg # Add `dependent.h:' lines. 3484b9470b1Smrg sed -ne '2,${ 3494b9470b1Smrg s/^ *// 3504b9470b1Smrg s/ \\*$// 3514b9470b1Smrg s/$/:/ 3524b9470b1Smrg p 3534b9470b1Smrg }' "$tmpdepfile" >> "$depfile" 354962c3257Smrg else 355962c3257Smrg echo "#dummy" > "$depfile" 356962c3257Smrg fi 357962c3257Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 358962c3257Smrg ;; 359962c3257Smrg 360d983712dSmrgtru64) 361d983712dSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 362d983712dSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363d983712dSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364d983712dSmrg # dependencies in `foo.d' instead, so we check for that too. 365d983712dSmrg # Subdirectories are respected. 366d983712dSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367d983712dSmrg test "x$dir" = "x$object" && dir= 368d983712dSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369d983712dSmrg 370d983712dSmrg if test "$libtool" = yes; then 371d983712dSmrg # With Tru64 cc, shared objects can also be used to make a 372962c3257Smrg # static library. This mechanism is used in libtool 1.4 series to 373d983712dSmrg # handle both shared and static libraries in a single compilation. 374d983712dSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375d983712dSmrg # 376d983712dSmrg # With libtool 1.5 this exception was removed, and libtool now 377d983712dSmrg # generates 2 separate objects for the 2 libraries. These two 378962c3257Smrg # compilations output dependencies in $dir.libs/$base.o.d and 379d983712dSmrg # in $dir$base.o.d. We have to check for both files, because 380d983712dSmrg # one of the two compilations can be disabled. We should prefer 381d983712dSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382d983712dSmrg # automatically cleaned when .libs/ is deleted, while ignoring 383d983712dSmrg # the former would cause a distcleancheck panic. 384d983712dSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385d983712dSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386d983712dSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387d983712dSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388d983712dSmrg "$@" -Wc,-MD 389d983712dSmrg else 390d983712dSmrg tmpdepfile1=$dir$base.o.d 391d983712dSmrg tmpdepfile2=$dir$base.d 392d983712dSmrg tmpdepfile3=$dir$base.d 393d983712dSmrg tmpdepfile4=$dir$base.d 394d983712dSmrg "$@" -MD 395d983712dSmrg fi 396d983712dSmrg 397d983712dSmrg stat=$? 398d983712dSmrg if test $stat -eq 0; then : 399d983712dSmrg else 400d983712dSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401d983712dSmrg exit $stat 402d983712dSmrg fi 403d983712dSmrg 404d983712dSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405d983712dSmrg do 406d983712dSmrg test -f "$tmpdepfile" && break 407d983712dSmrg done 408d983712dSmrg if test -f "$tmpdepfile"; then 409d983712dSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410d983712dSmrg # That's a tab and a space in the []. 411d983712dSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412d983712dSmrg else 413d983712dSmrg echo "#dummy" > "$depfile" 414d983712dSmrg fi 415d983712dSmrg rm -f "$tmpdepfile" 416d983712dSmrg ;; 417d983712dSmrg 4184b9470b1Smrgmsvc7) 4194b9470b1Smrg if test "$libtool" = yes; then 4204b9470b1Smrg showIncludes=-Wc,-showIncludes 4214b9470b1Smrg else 4224b9470b1Smrg showIncludes=-showIncludes 4234b9470b1Smrg fi 4244b9470b1Smrg "$@" $showIncludes > "$tmpdepfile" 4254b9470b1Smrg stat=$? 4264b9470b1Smrg grep -v '^Note: including file: ' "$tmpdepfile" 4274b9470b1Smrg if test "$stat" = 0; then : 4284b9470b1Smrg else 4294b9470b1Smrg rm -f "$tmpdepfile" 4304b9470b1Smrg exit $stat 4314b9470b1Smrg fi 4324b9470b1Smrg rm -f "$depfile" 4334b9470b1Smrg echo "$object : \\" > "$depfile" 4344b9470b1Smrg # The first sed program below extracts the file names and escapes 4354b9470b1Smrg # backslashes for cygpath. The second sed program outputs the file 4364b9470b1Smrg # name when reading, but also accumulates all include files in the 4374b9470b1Smrg # hold buffer in order to output them again at the end. This only 4384b9470b1Smrg # works with sed implementations that can handle large buffers. 4394b9470b1Smrg sed < "$tmpdepfile" -n ' 4404b9470b1Smrg/^Note: including file: *\(.*\)/ { 4414b9470b1Smrg s//\1/ 4424b9470b1Smrg s/\\/\\\\/g 4434b9470b1Smrg p 4444b9470b1Smrg}' | $cygpath_u | sort -u | sed -n ' 4454b9470b1Smrgs/ /\\ /g 4464b9470b1Smrgs/\(.*\)/ \1 \\/p 4474b9470b1Smrgs/.\(.*\) \\/\1:/ 4484b9470b1SmrgH 4494b9470b1Smrg$ { 4504b9470b1Smrg s/.*/ / 4514b9470b1Smrg G 4524b9470b1Smrg p 4534b9470b1Smrg}' >> "$depfile" 4544b9470b1Smrg rm -f "$tmpdepfile" 4554b9470b1Smrg ;; 4564b9470b1Smrg 4574b9470b1Smrgmsvc7msys) 4584b9470b1Smrg # This case exists only to let depend.m4 do its work. It works by 4594b9470b1Smrg # looking at the text of this script. This case will never be run, 4604b9470b1Smrg # since it is checked for above. 4614b9470b1Smrg exit 1 4624b9470b1Smrg ;; 4634b9470b1Smrg 464d983712dSmrg#nosideeffect) 465d983712dSmrg # This comment above is used by automake to tell side-effect 466d983712dSmrg # dependency tracking mechanisms from slower ones. 467d983712dSmrg 468d983712dSmrgdashmstdout) 469d983712dSmrg # Important note: in order to support this mode, a compiler *must* 470d983712dSmrg # always write the preprocessed file to stdout, regardless of -o. 471d983712dSmrg "$@" || exit $? 472d983712dSmrg 473d983712dSmrg # Remove the call to Libtool. 474d983712dSmrg if test "$libtool" = yes; then 4754b9470b1Smrg while test "X$1" != 'X--mode=compile'; do 476d983712dSmrg shift 477d983712dSmrg done 478d983712dSmrg shift 479d983712dSmrg fi 480d983712dSmrg 481d983712dSmrg # Remove `-o $object'. 482d983712dSmrg IFS=" " 483d983712dSmrg for arg 484d983712dSmrg do 485d983712dSmrg case $arg in 486d983712dSmrg -o) 487d983712dSmrg shift 488d983712dSmrg ;; 489d983712dSmrg $object) 490d983712dSmrg shift 491d983712dSmrg ;; 492d983712dSmrg *) 493d983712dSmrg set fnord "$@" "$arg" 494d983712dSmrg shift # fnord 495d983712dSmrg shift # $arg 496d983712dSmrg ;; 497d983712dSmrg esac 498d983712dSmrg done 499d983712dSmrg 500d983712dSmrg test -z "$dashmflag" && dashmflag=-M 501d983712dSmrg # Require at least two characters before searching for `:' 502d983712dSmrg # in the target name. This is to cope with DOS-style filenames: 503d983712dSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 504d983712dSmrg "$@" $dashmflag | 505d983712dSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 506d983712dSmrg rm -f "$depfile" 507d983712dSmrg cat < "$tmpdepfile" > "$depfile" 508d983712dSmrg tr ' ' ' 509d983712dSmrg' < "$tmpdepfile" | \ 510d983712dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 511d983712dSmrg## correctly. Breaking it into two sed invocations is a workaround. 512d983712dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 513d983712dSmrg rm -f "$tmpdepfile" 514d983712dSmrg ;; 515d983712dSmrg 516d983712dSmrgdashXmstdout) 517d983712dSmrg # This case only exists to satisfy depend.m4. It is never actually 518d983712dSmrg # run, as this mode is specially recognized in the preamble. 519d983712dSmrg exit 1 520d983712dSmrg ;; 521d983712dSmrg 522d983712dSmrgmakedepend) 523d983712dSmrg "$@" || exit $? 524d983712dSmrg # Remove any Libtool call 525d983712dSmrg if test "$libtool" = yes; then 5264b9470b1Smrg while test "X$1" != 'X--mode=compile'; do 527d983712dSmrg shift 528d983712dSmrg done 529d983712dSmrg shift 530d983712dSmrg fi 531d983712dSmrg # X makedepend 532d983712dSmrg shift 5334b9470b1Smrg cleared=no eat=no 5344b9470b1Smrg for arg 5354b9470b1Smrg do 536d983712dSmrg case $cleared in 537d983712dSmrg no) 538d983712dSmrg set ""; shift 539d983712dSmrg cleared=yes ;; 540d983712dSmrg esac 5414b9470b1Smrg if test $eat = yes; then 5424b9470b1Smrg eat=no 5434b9470b1Smrg continue 5444b9470b1Smrg fi 545d983712dSmrg case "$arg" in 546d983712dSmrg -D*|-I*) 547d983712dSmrg set fnord "$@" "$arg"; shift ;; 548d983712dSmrg # Strip any option that makedepend may not understand. Remove 549d983712dSmrg # the object too, otherwise makedepend will parse it as a source file. 5504b9470b1Smrg -arch) 5514b9470b1Smrg eat=yes ;; 552d983712dSmrg -*|$object) 553d983712dSmrg ;; 554d983712dSmrg *) 555d983712dSmrg set fnord "$@" "$arg"; shift ;; 556d983712dSmrg esac 557d983712dSmrg done 5584b9470b1Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 559d983712dSmrg touch "$tmpdepfile" 560d983712dSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 561d983712dSmrg rm -f "$depfile" 5624b9470b1Smrg # makedepend may prepend the VPATH from the source file name to the object. 5634b9470b1Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 5644b9470b1Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565d983712dSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566d983712dSmrg' | \ 567d983712dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 568d983712dSmrg## correctly. Breaking it into two sed invocations is a workaround. 569d983712dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 570d983712dSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 571d983712dSmrg ;; 572d983712dSmrg 573d983712dSmrgcpp) 574d983712dSmrg # Important note: in order to support this mode, a compiler *must* 575d983712dSmrg # always write the preprocessed file to stdout. 576d983712dSmrg "$@" || exit $? 577d983712dSmrg 578d983712dSmrg # Remove the call to Libtool. 579d983712dSmrg if test "$libtool" = yes; then 5804b9470b1Smrg while test "X$1" != 'X--mode=compile'; do 581d983712dSmrg shift 582d983712dSmrg done 583d983712dSmrg shift 584d983712dSmrg fi 585d983712dSmrg 586d983712dSmrg # Remove `-o $object'. 587d983712dSmrg IFS=" " 588d983712dSmrg for arg 589d983712dSmrg do 590d983712dSmrg case $arg in 591d983712dSmrg -o) 592d983712dSmrg shift 593d983712dSmrg ;; 594d983712dSmrg $object) 595d983712dSmrg shift 596d983712dSmrg ;; 597d983712dSmrg *) 598d983712dSmrg set fnord "$@" "$arg" 599d983712dSmrg shift # fnord 600d983712dSmrg shift # $arg 601d983712dSmrg ;; 602d983712dSmrg esac 603d983712dSmrg done 604d983712dSmrg 605d983712dSmrg "$@" -E | 606d983712dSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607d983712dSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608d983712dSmrg sed '$ s: \\$::' > "$tmpdepfile" 609d983712dSmrg rm -f "$depfile" 610d983712dSmrg echo "$object : \\" > "$depfile" 611d983712dSmrg cat < "$tmpdepfile" >> "$depfile" 612d983712dSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 613d983712dSmrg rm -f "$tmpdepfile" 614d983712dSmrg ;; 615d983712dSmrg 616d983712dSmrgmsvisualcpp) 617d983712dSmrg # Important note: in order to support this mode, a compiler *must* 6184b9470b1Smrg # always write the preprocessed file to stdout. 619d983712dSmrg "$@" || exit $? 6204b9470b1Smrg 6214b9470b1Smrg # Remove the call to Libtool. 6224b9470b1Smrg if test "$libtool" = yes; then 6234b9470b1Smrg while test "X$1" != 'X--mode=compile'; do 6244b9470b1Smrg shift 6254b9470b1Smrg done 6264b9470b1Smrg shift 6274b9470b1Smrg fi 6284b9470b1Smrg 629d983712dSmrg IFS=" " 630d983712dSmrg for arg 631d983712dSmrg do 632d983712dSmrg case "$arg" in 6334b9470b1Smrg -o) 6344b9470b1Smrg shift 6354b9470b1Smrg ;; 6364b9470b1Smrg $object) 6374b9470b1Smrg shift 6384b9470b1Smrg ;; 639d983712dSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640d983712dSmrg set fnord "$@" 641d983712dSmrg shift 642d983712dSmrg shift 643d983712dSmrg ;; 644d983712dSmrg *) 645d983712dSmrg set fnord "$@" "$arg" 646d983712dSmrg shift 647d983712dSmrg shift 648d983712dSmrg ;; 649d983712dSmrg esac 650d983712dSmrg done 6514b9470b1Smrg "$@" -E 2>/dev/null | 6524b9470b1Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 653d983712dSmrg rm -f "$depfile" 654d983712dSmrg echo "$object : \\" > "$depfile" 6554b9470b1Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656d983712dSmrg echo " " >> "$depfile" 6574b9470b1Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 658d983712dSmrg rm -f "$tmpdepfile" 659d983712dSmrg ;; 660d983712dSmrg 6614b9470b1Smrgmsvcmsys) 6624b9470b1Smrg # This case exists only to let depend.m4 do its work. It works by 6634b9470b1Smrg # looking at the text of this script. This case will never be run, 6644b9470b1Smrg # since it is checked for above. 6654b9470b1Smrg exit 1 6664b9470b1Smrg ;; 6674b9470b1Smrg 668d983712dSmrgnone) 669d983712dSmrg exec "$@" 670d983712dSmrg ;; 671d983712dSmrg 672d983712dSmrg*) 673d983712dSmrg echo "Unknown depmode $depmode" 1>&2 674d983712dSmrg exit 1 675d983712dSmrg ;; 676d983712dSmrgesac 677d983712dSmrg 678d983712dSmrgexit 0 679d983712dSmrg 680d983712dSmrg# Local Variables: 681d983712dSmrg# mode: shell-script 682d983712dSmrg# sh-indentation: 2 683d983712dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 684d983712dSmrg# time-stamp-start: "scriptversion=" 685d983712dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6864b9470b1Smrg# time-stamp-time-zone: "UTC" 6874b9470b1Smrg# time-stamp-end: "; # UTC" 688d983712dSmrg# End: 689