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