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