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