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