depcomp revision 6dbd43aa
167f05d30Smrg#! /bin/sh 267f05d30Smrg# depcomp - compile a program generating dependencies as side-effects 3fffe5102Smrg 46dbd43aaSmrgscriptversion=2011-12-04.11; # UTC 5fffe5102Smrg 66dbd43aaSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 76dbd43aaSmrg# 2011 Free Software Foundation, Inc. 867f05d30Smrg 967f05d30Smrg# This program is free software; you can redistribute it and/or modify 1067f05d30Smrg# it under the terms of the GNU General Public License as published by 1167f05d30Smrg# the Free Software Foundation; either version 2, or (at your option) 1267f05d30Smrg# any later version. 1367f05d30Smrg 1467f05d30Smrg# This program is distributed in the hope that it will be useful, 1567f05d30Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1667f05d30Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1767f05d30Smrg# GNU General Public License for more details. 1867f05d30Smrg 1967f05d30Smrg# You should have received a copy of the GNU General Public License 20fffe5102Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 2167f05d30Smrg 2267f05d30Smrg# As a special exception to the GNU General Public License, if you 2367f05d30Smrg# distribute this file as part of a program that contains a 2467f05d30Smrg# configuration script generated by Autoconf, you may include it under 2567f05d30Smrg# the same distribution terms that you use for the rest of that program. 2667f05d30Smrg 2767f05d30Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 2867f05d30Smrg 29fffe5102Smrgcase $1 in 30fffe5102Smrg '') 31fffe5102Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32fffe5102Smrg exit 1; 33fffe5102Smrg ;; 34fffe5102Smrg -h | --h*) 35fffe5102Smrg cat <<\EOF 36fffe5102SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37fffe5102Smrg 38fffe5102SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39fffe5102Smrgas side-effects. 40fffe5102Smrg 41fffe5102SmrgEnvironment variables: 42fffe5102Smrg depmode Dependency tracking mode. 43fffe5102Smrg source Source file read by `PROGRAMS ARGS'. 44fffe5102Smrg object Object file output by `PROGRAMS ARGS'. 45fffe5102Smrg DEPDIR directory where to store dependencies. 46fffe5102Smrg depfile Dependency file to output. 476dbd43aaSmrg tmpdepfile Temporary file to use when outputting dependencies. 48fffe5102Smrg libtool Whether libtool is used (yes/no). 49fffe5102Smrg 50fffe5102SmrgReport bugs to <bug-automake@gnu.org>. 51fffe5102SmrgEOF 52fffe5102Smrg exit $? 53fffe5102Smrg ;; 54fffe5102Smrg -v | --v*) 55fffe5102Smrg echo "depcomp $scriptversion" 56fffe5102Smrg exit $? 57fffe5102Smrg ;; 58fffe5102Smrgesac 59fffe5102Smrg 6067f05d30Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 6167f05d30Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 6267f05d30Smrg exit 1 6367f05d30Smrgfi 6467f05d30Smrg 65fffe5102Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66fffe5102Smrgdepfile=${depfile-`echo "$object" | 67fffe5102Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 6867f05d30Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 6967f05d30Smrg 7067f05d30Smrgrm -f "$tmpdepfile" 7167f05d30Smrg 7267f05d30Smrg# Some modes work just like other modes, but use different flags. We 7367f05d30Smrg# parameterize here, but still list the modes in the big case below, 7467f05d30Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 7567f05d30Smrg# here, because this file can only contain one case statement. 7667f05d30Smrgif test "$depmode" = hp; then 7767f05d30Smrg # HP compiler uses -M and no extra arg. 7867f05d30Smrg gccflag=-M 7967f05d30Smrg depmode=gcc 8067f05d30Smrgfi 8167f05d30Smrg 8267f05d30Smrgif test "$depmode" = dashXmstdout; then 8367f05d30Smrg # This is just like dashmstdout with a different argument. 8467f05d30Smrg dashmflag=-xM 8567f05d30Smrg depmode=dashmstdout 8667f05d30Smrgfi 8767f05d30Smrg 88fffe5102Smrgcygpath_u="cygpath -u -f -" 89fffe5102Smrgif test "$depmode" = msvcmsys; then 90fffe5102Smrg # This is just like msvisualcpp but w/o cygpath translation. 91fffe5102Smrg # Just convert the backslash-escaped backslashes to single forward 92fffe5102Smrg # slashes to satisfy depend.m4 936dbd43aaSmrg cygpath_u='sed s,\\\\,/,g' 94fffe5102Smrg depmode=msvisualcpp 95fffe5102Smrgfi 96fffe5102Smrg 976dbd43aaSmrgif test "$depmode" = msvc7msys; then 986dbd43aaSmrg # This is just like msvc7 but w/o cygpath translation. 996dbd43aaSmrg # Just convert the backslash-escaped backslashes to single forward 1006dbd43aaSmrg # slashes to satisfy depend.m4 1016dbd43aaSmrg cygpath_u='sed s,\\\\,/,g' 1026dbd43aaSmrg depmode=msvc7 1036dbd43aaSmrgfi 1046dbd43aaSmrg 10567f05d30Smrgcase "$depmode" in 10667f05d30Smrggcc3) 10767f05d30Smrg## gcc 3 implements dependency tracking that does exactly what 10867f05d30Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 10967f05d30Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 110fffe5102Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 111fffe5102Smrg## the command line argument order; so add the flags where they 112fffe5102Smrg## appear in depend2.am. Note that the slowdown incurred here 113fffe5102Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 114fffe5102Smrg for arg 115fffe5102Smrg do 116fffe5102Smrg case $arg in 117fffe5102Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 118fffe5102Smrg *) set fnord "$@" "$arg" ;; 119fffe5102Smrg esac 120fffe5102Smrg shift # fnord 121fffe5102Smrg shift # $arg 122fffe5102Smrg done 123fffe5102Smrg "$@" 12467f05d30Smrg stat=$? 12567f05d30Smrg if test $stat -eq 0; then : 12667f05d30Smrg else 12767f05d30Smrg rm -f "$tmpdepfile" 12867f05d30Smrg exit $stat 12967f05d30Smrg fi 13067f05d30Smrg mv "$tmpdepfile" "$depfile" 13167f05d30Smrg ;; 13267f05d30Smrg 13367f05d30Smrggcc) 13467f05d30Smrg## There are various ways to get dependency output from gcc. Here's 13567f05d30Smrg## why we pick this rather obscure method: 13667f05d30Smrg## - Don't want to use -MD because we'd like the dependencies to end 13767f05d30Smrg## up in a subdir. Having to rename by hand is ugly. 13867f05d30Smrg## (We might end up doing this anyway to support other compilers.) 13967f05d30Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 14067f05d30Smrg## -MM, not -M (despite what the docs say). 14167f05d30Smrg## - Using -M directly means running the compiler twice (even worse 14267f05d30Smrg## than renaming). 14367f05d30Smrg if test -z "$gccflag"; then 14467f05d30Smrg gccflag=-MD, 14567f05d30Smrg fi 14667f05d30Smrg "$@" -Wp,"$gccflag$tmpdepfile" 14767f05d30Smrg stat=$? 14867f05d30Smrg if test $stat -eq 0; then : 14967f05d30Smrg else 15067f05d30Smrg rm -f "$tmpdepfile" 15167f05d30Smrg exit $stat 15267f05d30Smrg fi 15367f05d30Smrg rm -f "$depfile" 15467f05d30Smrg echo "$object : \\" > "$depfile" 15567f05d30Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 15667f05d30Smrg## The second -e expression handles DOS-style file names with drive letters. 15767f05d30Smrg sed -e 's/^[^:]*: / /' \ 15867f05d30Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 15967f05d30Smrg## This next piece of magic avoids the `deleted header file' problem. 16067f05d30Smrg## The problem is that when a header file which appears in a .P file 16167f05d30Smrg## is deleted, the dependency causes make to die (because there is 16267f05d30Smrg## typically no way to rebuild the header). We avoid this by adding 16367f05d30Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 16467f05d30Smrg## this for us directly. 16567f05d30Smrg tr ' ' ' 16667f05d30Smrg' < "$tmpdepfile" | 16767f05d30Smrg## Some versions of gcc put a space before the `:'. On the theory 16867f05d30Smrg## that the space means something, we add a space to the output as 1696dbd43aaSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 1706dbd43aaSmrg## to the object. Take care to not repeat it in the output. 17167f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 17267f05d30Smrg## correctly. Breaking it into two sed invocations is a workaround. 1736dbd43aaSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1746dbd43aaSmrg | sed -e 's/$/ :/' >> "$depfile" 17567f05d30Smrg rm -f "$tmpdepfile" 17667f05d30Smrg ;; 17767f05d30Smrg 17867f05d30Smrghp) 17967f05d30Smrg # This case exists only to let depend.m4 do its work. It works by 18067f05d30Smrg # looking at the text of this script. This case will never be run, 18167f05d30Smrg # since it is checked for above. 18267f05d30Smrg exit 1 18367f05d30Smrg ;; 18467f05d30Smrg 18567f05d30Smrgsgi) 18667f05d30Smrg if test "$libtool" = yes; then 18767f05d30Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 18867f05d30Smrg else 18967f05d30Smrg "$@" -MDupdate "$tmpdepfile" 19067f05d30Smrg fi 19167f05d30Smrg stat=$? 19267f05d30Smrg if test $stat -eq 0; then : 19367f05d30Smrg else 19467f05d30Smrg rm -f "$tmpdepfile" 19567f05d30Smrg exit $stat 19667f05d30Smrg fi 19767f05d30Smrg rm -f "$depfile" 19867f05d30Smrg 19967f05d30Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 20067f05d30Smrg echo "$object : \\" > "$depfile" 20167f05d30Smrg 20267f05d30Smrg # Clip off the initial element (the dependent). Don't try to be 20367f05d30Smrg # clever and replace this with sed code, as IRIX sed won't handle 20467f05d30Smrg # lines with more than a fixed number of characters (4096 in 20567f05d30Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 20667f05d30Smrg # the IRIX cc adds comments like `#:fec' to the end of the 20767f05d30Smrg # dependency line. 20867f05d30Smrg tr ' ' ' 20967f05d30Smrg' < "$tmpdepfile" \ 21067f05d30Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 21167f05d30Smrg tr ' 212fffe5102Smrg' ' ' >> "$depfile" 213fffe5102Smrg echo >> "$depfile" 21467f05d30Smrg 21567f05d30Smrg # The second pass generates a dummy entry for each header file. 21667f05d30Smrg tr ' ' ' 21767f05d30Smrg' < "$tmpdepfile" \ 21867f05d30Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 219fffe5102Smrg >> "$depfile" 22067f05d30Smrg else 22167f05d30Smrg # The sourcefile does not contain any dependencies, so just 22267f05d30Smrg # store a dummy comment line, to avoid errors with the Makefile 22367f05d30Smrg # "include basename.Plo" scheme. 22467f05d30Smrg echo "#dummy" > "$depfile" 22567f05d30Smrg fi 22667f05d30Smrg rm -f "$tmpdepfile" 22767f05d30Smrg ;; 22867f05d30Smrg 22967f05d30Smrgaix) 23067f05d30Smrg # The C for AIX Compiler uses -M and outputs the dependencies 23167f05d30Smrg # in a .u file. In older versions, this file always lives in the 23267f05d30Smrg # current directory. Also, the AIX compiler puts `$object:' at the 23367f05d30Smrg # start of each line; $object doesn't have directory information. 23467f05d30Smrg # Version 6 uses the directory in both cases. 235fffe5102Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 236fffe5102Smrg test "x$dir" = "x$object" && dir= 237fffe5102Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 23867f05d30Smrg if test "$libtool" = yes; then 239fffe5102Smrg tmpdepfile1=$dir$base.u 240fffe5102Smrg tmpdepfile2=$base.u 241fffe5102Smrg tmpdepfile3=$dir.libs/$base.u 24267f05d30Smrg "$@" -Wc,-M 24367f05d30Smrg else 244fffe5102Smrg tmpdepfile1=$dir$base.u 245fffe5102Smrg tmpdepfile2=$dir$base.u 246fffe5102Smrg tmpdepfile3=$dir$base.u 24767f05d30Smrg "$@" -M 24867f05d30Smrg fi 24967f05d30Smrg stat=$? 25067f05d30Smrg 25167f05d30Smrg if test $stat -eq 0; then : 25267f05d30Smrg else 253fffe5102Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 25467f05d30Smrg exit $stat 25567f05d30Smrg fi 25667f05d30Smrg 257fffe5102Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 258fffe5102Smrg do 259fffe5102Smrg test -f "$tmpdepfile" && break 260fffe5102Smrg done 26167f05d30Smrg if test -f "$tmpdepfile"; then 26267f05d30Smrg # Each line is of the form `foo.o: dependent.h'. 26367f05d30Smrg # Do two passes, one to just change these to 26467f05d30Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 265fffe5102Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 266fffe5102Smrg # That's a tab and a space in the []. 267fffe5102Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 26867f05d30Smrg else 26967f05d30Smrg # The sourcefile does not contain any dependencies, so just 27067f05d30Smrg # store a dummy comment line, to avoid errors with the Makefile 27167f05d30Smrg # "include basename.Plo" scheme. 27267f05d30Smrg echo "#dummy" > "$depfile" 27367f05d30Smrg fi 27467f05d30Smrg rm -f "$tmpdepfile" 27567f05d30Smrg ;; 27667f05d30Smrg 27767f05d30Smrgicc) 27867f05d30Smrg # Intel's C compiler understands `-MD -MF file'. However on 27967f05d30Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 28067f05d30Smrg # ICC 7.0 will fill foo.d with something like 28167f05d30Smrg # foo.o: sub/foo.c 28267f05d30Smrg # foo.o: sub/foo.h 28367f05d30Smrg # which is wrong. We want: 28467f05d30Smrg # sub/foo.o: sub/foo.c 28567f05d30Smrg # sub/foo.o: sub/foo.h 28667f05d30Smrg # sub/foo.c: 28767f05d30Smrg # sub/foo.h: 28867f05d30Smrg # ICC 7.1 will output 28967f05d30Smrg # foo.o: sub/foo.c sub/foo.h 29067f05d30Smrg # and will wrap long lines using \ : 29167f05d30Smrg # foo.o: sub/foo.c ... \ 29267f05d30Smrg # sub/foo.h ... \ 29367f05d30Smrg # ... 29467f05d30Smrg 29567f05d30Smrg "$@" -MD -MF "$tmpdepfile" 29667f05d30Smrg stat=$? 29767f05d30Smrg if test $stat -eq 0; then : 29867f05d30Smrg else 29967f05d30Smrg rm -f "$tmpdepfile" 30067f05d30Smrg exit $stat 30167f05d30Smrg fi 30267f05d30Smrg rm -f "$depfile" 30367f05d30Smrg # Each line is of the form `foo.o: dependent.h', 30467f05d30Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 30567f05d30Smrg # Do two passes, one to just change these to 30667f05d30Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 30767f05d30Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 30867f05d30Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 30967f05d30Smrg # correctly. Breaking it into two sed invocations is a workaround. 31067f05d30Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 31167f05d30Smrg sed -e 's/$/ :/' >> "$depfile" 31267f05d30Smrg rm -f "$tmpdepfile" 31367f05d30Smrg ;; 31467f05d30Smrg 315fffe5102Smrghp2) 316fffe5102Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 317fffe5102Smrg # compilers, which have integrated preprocessors. The correct option 318fffe5102Smrg # to use with these is +Maked; it writes dependencies to a file named 319fffe5102Smrg # 'foo.d', which lands next to the object file, wherever that 320fffe5102Smrg # happens to be. 321fffe5102Smrg # Much of this is similar to the tru64 case; see comments there. 322fffe5102Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 323fffe5102Smrg test "x$dir" = "x$object" && dir= 324fffe5102Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 325fffe5102Smrg if test "$libtool" = yes; then 326fffe5102Smrg tmpdepfile1=$dir$base.d 327fffe5102Smrg tmpdepfile2=$dir.libs/$base.d 328fffe5102Smrg "$@" -Wc,+Maked 329fffe5102Smrg else 330fffe5102Smrg tmpdepfile1=$dir$base.d 331fffe5102Smrg tmpdepfile2=$dir$base.d 332fffe5102Smrg "$@" +Maked 333fffe5102Smrg fi 334fffe5102Smrg stat=$? 335fffe5102Smrg if test $stat -eq 0; then : 336fffe5102Smrg else 337fffe5102Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 338fffe5102Smrg exit $stat 339fffe5102Smrg fi 340fffe5102Smrg 341fffe5102Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 342fffe5102Smrg do 343fffe5102Smrg test -f "$tmpdepfile" && break 344fffe5102Smrg done 345fffe5102Smrg if test -f "$tmpdepfile"; then 346fffe5102Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 347fffe5102Smrg # Add `dependent.h:' lines. 348fffe5102Smrg sed -ne '2,${ 349fffe5102Smrg s/^ *// 350fffe5102Smrg s/ \\*$// 351fffe5102Smrg s/$/:/ 352fffe5102Smrg p 353fffe5102Smrg }' "$tmpdepfile" >> "$depfile" 354fffe5102Smrg else 355fffe5102Smrg echo "#dummy" > "$depfile" 356fffe5102Smrg fi 357fffe5102Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 358fffe5102Smrg ;; 359fffe5102Smrg 36067f05d30Smrgtru64) 36167f05d30Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 36267f05d30Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 36367f05d30Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 36467f05d30Smrg # dependencies in `foo.d' instead, so we check for that too. 36567f05d30Smrg # Subdirectories are respected. 36667f05d30Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 36767f05d30Smrg test "x$dir" = "x$object" && dir= 36867f05d30Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 36967f05d30Smrg 37067f05d30Smrg if test "$libtool" = yes; then 371fffe5102Smrg # With Tru64 cc, shared objects can also be used to make a 372fffe5102Smrg # static library. This mechanism is used in libtool 1.4 series to 373fffe5102Smrg # handle both shared and static libraries in a single compilation. 374fffe5102Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375fffe5102Smrg # 376fffe5102Smrg # With libtool 1.5 this exception was removed, and libtool now 377fffe5102Smrg # generates 2 separate objects for the 2 libraries. These two 378fffe5102Smrg # compilations output dependencies in $dir.libs/$base.o.d and 379fffe5102Smrg # in $dir$base.o.d. We have to check for both files, because 380fffe5102Smrg # one of the two compilations can be disabled. We should prefer 381fffe5102Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382fffe5102Smrg # automatically cleaned when .libs/ is deleted, while ignoring 383fffe5102Smrg # the former would cause a distcleancheck panic. 384fffe5102Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385fffe5102Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386fffe5102Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387fffe5102Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 38867f05d30Smrg "$@" -Wc,-MD 38967f05d30Smrg else 390fffe5102Smrg tmpdepfile1=$dir$base.o.d 391fffe5102Smrg tmpdepfile2=$dir$base.d 392fffe5102Smrg tmpdepfile3=$dir$base.d 393fffe5102Smrg tmpdepfile4=$dir$base.d 39467f05d30Smrg "$@" -MD 39567f05d30Smrg fi 39667f05d30Smrg 39767f05d30Smrg stat=$? 39867f05d30Smrg if test $stat -eq 0; then : 39967f05d30Smrg else 400fffe5102Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 40167f05d30Smrg exit $stat 40267f05d30Smrg fi 40367f05d30Smrg 404fffe5102Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405fffe5102Smrg do 406fffe5102Smrg test -f "$tmpdepfile" && break 407fffe5102Smrg done 40867f05d30Smrg if test -f "$tmpdepfile"; then 40967f05d30Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 41067f05d30Smrg # That's a tab and a space in the []. 41167f05d30Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 41267f05d30Smrg else 41367f05d30Smrg echo "#dummy" > "$depfile" 41467f05d30Smrg fi 41567f05d30Smrg rm -f "$tmpdepfile" 41667f05d30Smrg ;; 41767f05d30Smrg 4186dbd43aaSmrgmsvc7) 4196dbd43aaSmrg if test "$libtool" = yes; then 4206dbd43aaSmrg showIncludes=-Wc,-showIncludes 4216dbd43aaSmrg else 4226dbd43aaSmrg showIncludes=-showIncludes 4236dbd43aaSmrg fi 4246dbd43aaSmrg "$@" $showIncludes > "$tmpdepfile" 4256dbd43aaSmrg stat=$? 4266dbd43aaSmrg grep -v '^Note: including file: ' "$tmpdepfile" 4276dbd43aaSmrg if test "$stat" = 0; then : 4286dbd43aaSmrg else 4296dbd43aaSmrg rm -f "$tmpdepfile" 4306dbd43aaSmrg exit $stat 4316dbd43aaSmrg fi 4326dbd43aaSmrg rm -f "$depfile" 4336dbd43aaSmrg echo "$object : \\" > "$depfile" 4346dbd43aaSmrg # The first sed program below extracts the file names and escapes 4356dbd43aaSmrg # backslashes for cygpath. The second sed program outputs the file 4366dbd43aaSmrg # name when reading, but also accumulates all include files in the 4376dbd43aaSmrg # hold buffer in order to output them again at the end. This only 4386dbd43aaSmrg # works with sed implementations that can handle large buffers. 4396dbd43aaSmrg sed < "$tmpdepfile" -n ' 4406dbd43aaSmrg/^Note: including file: *\(.*\)/ { 4416dbd43aaSmrg s//\1/ 4426dbd43aaSmrg s/\\/\\\\/g 4436dbd43aaSmrg p 4446dbd43aaSmrg}' | $cygpath_u | sort -u | sed -n ' 4456dbd43aaSmrgs/ /\\ /g 4466dbd43aaSmrgs/\(.*\)/ \1 \\/p 4476dbd43aaSmrgs/.\(.*\) \\/\1:/ 4486dbd43aaSmrgH 4496dbd43aaSmrg$ { 4506dbd43aaSmrg s/.*/ / 4516dbd43aaSmrg G 4526dbd43aaSmrg p 4536dbd43aaSmrg}' >> "$depfile" 4546dbd43aaSmrg rm -f "$tmpdepfile" 4556dbd43aaSmrg ;; 4566dbd43aaSmrg 4576dbd43aaSmrgmsvc7msys) 4586dbd43aaSmrg # This case exists only to let depend.m4 do its work. It works by 4596dbd43aaSmrg # looking at the text of this script. This case will never be run, 4606dbd43aaSmrg # since it is checked for above. 4616dbd43aaSmrg exit 1 4626dbd43aaSmrg ;; 4636dbd43aaSmrg 46467f05d30Smrg#nosideeffect) 46567f05d30Smrg # This comment above is used by automake to tell side-effect 46667f05d30Smrg # dependency tracking mechanisms from slower ones. 46767f05d30Smrg 46867f05d30Smrgdashmstdout) 46967f05d30Smrg # Important note: in order to support this mode, a compiler *must* 47067f05d30Smrg # always write the preprocessed file to stdout, regardless of -o. 47167f05d30Smrg "$@" || exit $? 47267f05d30Smrg 47367f05d30Smrg # Remove the call to Libtool. 47467f05d30Smrg if test "$libtool" = yes; then 475fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 47667f05d30Smrg shift 47767f05d30Smrg done 47867f05d30Smrg shift 47967f05d30Smrg fi 48067f05d30Smrg 48167f05d30Smrg # Remove `-o $object'. 48267f05d30Smrg IFS=" " 48367f05d30Smrg for arg 48467f05d30Smrg do 48567f05d30Smrg case $arg in 48667f05d30Smrg -o) 48767f05d30Smrg shift 48867f05d30Smrg ;; 48967f05d30Smrg $object) 49067f05d30Smrg shift 49167f05d30Smrg ;; 49267f05d30Smrg *) 49367f05d30Smrg set fnord "$@" "$arg" 49467f05d30Smrg shift # fnord 49567f05d30Smrg shift # $arg 49667f05d30Smrg ;; 49767f05d30Smrg esac 49867f05d30Smrg done 49967f05d30Smrg 50067f05d30Smrg test -z "$dashmflag" && dashmflag=-M 50167f05d30Smrg # Require at least two characters before searching for `:' 50267f05d30Smrg # in the target name. This is to cope with DOS-style filenames: 50367f05d30Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 50467f05d30Smrg "$@" $dashmflag | 50567f05d30Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 50667f05d30Smrg rm -f "$depfile" 50767f05d30Smrg cat < "$tmpdepfile" > "$depfile" 50867f05d30Smrg tr ' ' ' 50967f05d30Smrg' < "$tmpdepfile" | \ 51067f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 51167f05d30Smrg## correctly. Breaking it into two sed invocations is a workaround. 51267f05d30Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 51367f05d30Smrg rm -f "$tmpdepfile" 51467f05d30Smrg ;; 51567f05d30Smrg 51667f05d30SmrgdashXmstdout) 51767f05d30Smrg # This case only exists to satisfy depend.m4. It is never actually 51867f05d30Smrg # run, as this mode is specially recognized in the preamble. 51967f05d30Smrg exit 1 52067f05d30Smrg ;; 52167f05d30Smrg 52267f05d30Smrgmakedepend) 52367f05d30Smrg "$@" || exit $? 52467f05d30Smrg # Remove any Libtool call 52567f05d30Smrg if test "$libtool" = yes; then 526fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 52767f05d30Smrg shift 52867f05d30Smrg done 52967f05d30Smrg shift 53067f05d30Smrg fi 53167f05d30Smrg # X makedepend 53267f05d30Smrg shift 533fffe5102Smrg cleared=no eat=no 534fffe5102Smrg for arg 535fffe5102Smrg do 53667f05d30Smrg case $cleared in 53767f05d30Smrg no) 53867f05d30Smrg set ""; shift 53967f05d30Smrg cleared=yes ;; 54067f05d30Smrg esac 541fffe5102Smrg if test $eat = yes; then 542fffe5102Smrg eat=no 543fffe5102Smrg continue 544fffe5102Smrg fi 54567f05d30Smrg case "$arg" in 54667f05d30Smrg -D*|-I*) 54767f05d30Smrg set fnord "$@" "$arg"; shift ;; 54867f05d30Smrg # Strip any option that makedepend may not understand. Remove 54967f05d30Smrg # the object too, otherwise makedepend will parse it as a source file. 550fffe5102Smrg -arch) 551fffe5102Smrg eat=yes ;; 55267f05d30Smrg -*|$object) 55367f05d30Smrg ;; 55467f05d30Smrg *) 55567f05d30Smrg set fnord "$@" "$arg"; shift ;; 55667f05d30Smrg esac 55767f05d30Smrg done 558fffe5102Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 55967f05d30Smrg touch "$tmpdepfile" 56067f05d30Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 56167f05d30Smrg rm -f "$depfile" 5626dbd43aaSmrg # makedepend may prepend the VPATH from the source file name to the object. 5636dbd43aaSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 5646dbd43aaSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 56567f05d30Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 56667f05d30Smrg' | \ 56767f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 56867f05d30Smrg## correctly. Breaking it into two sed invocations is a workaround. 56967f05d30Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 57067f05d30Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 57167f05d30Smrg ;; 57267f05d30Smrg 57367f05d30Smrgcpp) 57467f05d30Smrg # Important note: in order to support this mode, a compiler *must* 57567f05d30Smrg # always write the preprocessed file to stdout. 57667f05d30Smrg "$@" || exit $? 57767f05d30Smrg 57867f05d30Smrg # Remove the call to Libtool. 57967f05d30Smrg if test "$libtool" = yes; then 580fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 58167f05d30Smrg shift 58267f05d30Smrg done 58367f05d30Smrg shift 58467f05d30Smrg fi 58567f05d30Smrg 58667f05d30Smrg # Remove `-o $object'. 58767f05d30Smrg IFS=" " 58867f05d30Smrg for arg 58967f05d30Smrg do 59067f05d30Smrg case $arg in 59167f05d30Smrg -o) 59267f05d30Smrg shift 59367f05d30Smrg ;; 59467f05d30Smrg $object) 59567f05d30Smrg shift 59667f05d30Smrg ;; 59767f05d30Smrg *) 59867f05d30Smrg set fnord "$@" "$arg" 59967f05d30Smrg shift # fnord 60067f05d30Smrg shift # $arg 60167f05d30Smrg ;; 60267f05d30Smrg esac 60367f05d30Smrg done 60467f05d30Smrg 60567f05d30Smrg "$@" -E | 606fffe5102Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607fffe5102Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 60867f05d30Smrg sed '$ s: \\$::' > "$tmpdepfile" 60967f05d30Smrg rm -f "$depfile" 61067f05d30Smrg echo "$object : \\" > "$depfile" 61167f05d30Smrg cat < "$tmpdepfile" >> "$depfile" 61267f05d30Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 61367f05d30Smrg rm -f "$tmpdepfile" 61467f05d30Smrg ;; 61567f05d30Smrg 61667f05d30Smrgmsvisualcpp) 61767f05d30Smrg # Important note: in order to support this mode, a compiler *must* 618fffe5102Smrg # always write the preprocessed file to stdout. 61967f05d30Smrg "$@" || exit $? 620fffe5102Smrg 621fffe5102Smrg # Remove the call to Libtool. 622fffe5102Smrg if test "$libtool" = yes; then 623fffe5102Smrg while test "X$1" != 'X--mode=compile'; do 624fffe5102Smrg shift 625fffe5102Smrg done 626fffe5102Smrg shift 627fffe5102Smrg fi 628fffe5102Smrg 62967f05d30Smrg IFS=" " 63067f05d30Smrg for arg 63167f05d30Smrg do 63267f05d30Smrg case "$arg" in 633fffe5102Smrg -o) 634fffe5102Smrg shift 635fffe5102Smrg ;; 636fffe5102Smrg $object) 637fffe5102Smrg shift 638fffe5102Smrg ;; 63967f05d30Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 64067f05d30Smrg set fnord "$@" 64167f05d30Smrg shift 64267f05d30Smrg shift 64367f05d30Smrg ;; 64467f05d30Smrg *) 64567f05d30Smrg set fnord "$@" "$arg" 64667f05d30Smrg shift 64767f05d30Smrg shift 64867f05d30Smrg ;; 64967f05d30Smrg esac 65067f05d30Smrg done 651fffe5102Smrg "$@" -E 2>/dev/null | 652fffe5102Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 65367f05d30Smrg rm -f "$depfile" 65467f05d30Smrg echo "$object : \\" > "$depfile" 655fffe5102Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 65667f05d30Smrg echo " " >> "$depfile" 657fffe5102Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 65867f05d30Smrg rm -f "$tmpdepfile" 65967f05d30Smrg ;; 66067f05d30Smrg 661fffe5102Smrgmsvcmsys) 662fffe5102Smrg # This case exists only to let depend.m4 do its work. It works by 663fffe5102Smrg # looking at the text of this script. This case will never be run, 664fffe5102Smrg # since it is checked for above. 665fffe5102Smrg exit 1 666fffe5102Smrg ;; 667fffe5102Smrg 66867f05d30Smrgnone) 66967f05d30Smrg exec "$@" 67067f05d30Smrg ;; 67167f05d30Smrg 67267f05d30Smrg*) 67367f05d30Smrg echo "Unknown depmode $depmode" 1>&2 67467f05d30Smrg exit 1 67567f05d30Smrg ;; 67667f05d30Smrgesac 67767f05d30Smrg 67867f05d30Smrgexit 0 679fffe5102Smrg 680fffe5102Smrg# Local Variables: 681fffe5102Smrg# mode: shell-script 682fffe5102Smrg# sh-indentation: 2 683fffe5102Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 684fffe5102Smrg# time-stamp-start: "scriptversion=" 685fffe5102Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 686fffe5102Smrg# time-stamp-time-zone: "UTC" 687fffe5102Smrg# time-stamp-end: "; # UTC" 688fffe5102Smrg# End: 689