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