depcomp revision 7da8b7e3
17da8b7e3Smrg#! /bin/sh 27da8b7e3Smrg# depcomp - compile a program generating dependencies as side-effects 37da8b7e3Smrg 47da8b7e3Smrgscriptversion=2005-07-09.11 57da8b7e3Smrg 67da8b7e3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 77da8b7e3Smrg 87da8b7e3Smrg# This program is free software; you can redistribute it and/or modify 97da8b7e3Smrg# it under the terms of the GNU General Public License as published by 107da8b7e3Smrg# the Free Software Foundation; either version 2, or (at your option) 117da8b7e3Smrg# any later version. 127da8b7e3Smrg 137da8b7e3Smrg# This program is distributed in the hope that it will be useful, 147da8b7e3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 157da8b7e3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 167da8b7e3Smrg# GNU General Public License for more details. 177da8b7e3Smrg 187da8b7e3Smrg# You should have received a copy of the GNU General Public License 197da8b7e3Smrg# along with this program; if not, write to the Free Software 207da8b7e3Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 217da8b7e3Smrg# 02110-1301, USA. 227da8b7e3Smrg 237da8b7e3Smrg# As a special exception to the GNU General Public License, if you 247da8b7e3Smrg# distribute this file as part of a program that contains a 257da8b7e3Smrg# configuration script generated by Autoconf, you may include it under 267da8b7e3Smrg# the same distribution terms that you use for the rest of that program. 277da8b7e3Smrg 287da8b7e3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 297da8b7e3Smrg 307da8b7e3Smrgcase $1 in 317da8b7e3Smrg '') 327da8b7e3Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 337da8b7e3Smrg exit 1; 347da8b7e3Smrg ;; 357da8b7e3Smrg -h | --h*) 367da8b7e3Smrg cat <<\EOF 377da8b7e3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 387da8b7e3Smrg 397da8b7e3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 407da8b7e3Smrgas side-effects. 417da8b7e3Smrg 427da8b7e3SmrgEnvironment variables: 437da8b7e3Smrg depmode Dependency tracking mode. 447da8b7e3Smrg source Source file read by `PROGRAMS ARGS'. 457da8b7e3Smrg object Object file output by `PROGRAMS ARGS'. 467da8b7e3Smrg DEPDIR directory where to store dependencies. 477da8b7e3Smrg depfile Dependency file to output. 487da8b7e3Smrg tmpdepfile Temporary file to use when outputing dependencies. 497da8b7e3Smrg libtool Whether libtool is used (yes/no). 507da8b7e3Smrg 517da8b7e3SmrgReport bugs to <bug-automake@gnu.org>. 527da8b7e3SmrgEOF 537da8b7e3Smrg exit $? 547da8b7e3Smrg ;; 557da8b7e3Smrg -v | --v*) 567da8b7e3Smrg echo "depcomp $scriptversion" 577da8b7e3Smrg exit $? 587da8b7e3Smrg ;; 597da8b7e3Smrgesac 607da8b7e3Smrg 617da8b7e3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 627da8b7e3Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 637da8b7e3Smrg exit 1 647da8b7e3Smrgfi 657da8b7e3Smrg 667da8b7e3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 677da8b7e3Smrgdepfile=${depfile-`echo "$object" | 687da8b7e3Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 697da8b7e3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 707da8b7e3Smrg 717da8b7e3Smrgrm -f "$tmpdepfile" 727da8b7e3Smrg 737da8b7e3Smrg# Some modes work just like other modes, but use different flags. We 747da8b7e3Smrg# parameterize here, but still list the modes in the big case below, 757da8b7e3Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 767da8b7e3Smrg# here, because this file can only contain one case statement. 777da8b7e3Smrgif test "$depmode" = hp; then 787da8b7e3Smrg # HP compiler uses -M and no extra arg. 797da8b7e3Smrg gccflag=-M 807da8b7e3Smrg depmode=gcc 817da8b7e3Smrgfi 827da8b7e3Smrg 837da8b7e3Smrgif test "$depmode" = dashXmstdout; then 847da8b7e3Smrg # This is just like dashmstdout with a different argument. 857da8b7e3Smrg dashmflag=-xM 867da8b7e3Smrg depmode=dashmstdout 877da8b7e3Smrgfi 887da8b7e3Smrg 897da8b7e3Smrgcase "$depmode" in 907da8b7e3Smrggcc3) 917da8b7e3Smrg## gcc 3 implements dependency tracking that does exactly what 927da8b7e3Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 937da8b7e3Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 947da8b7e3Smrg "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 957da8b7e3Smrg stat=$? 967da8b7e3Smrg if test $stat -eq 0; then : 977da8b7e3Smrg else 987da8b7e3Smrg rm -f "$tmpdepfile" 997da8b7e3Smrg exit $stat 1007da8b7e3Smrg fi 1017da8b7e3Smrg mv "$tmpdepfile" "$depfile" 1027da8b7e3Smrg ;; 1037da8b7e3Smrg 1047da8b7e3Smrggcc) 1057da8b7e3Smrg## There are various ways to get dependency output from gcc. Here's 1067da8b7e3Smrg## why we pick this rather obscure method: 1077da8b7e3Smrg## - Don't want to use -MD because we'd like the dependencies to end 1087da8b7e3Smrg## up in a subdir. Having to rename by hand is ugly. 1097da8b7e3Smrg## (We might end up doing this anyway to support other compilers.) 1107da8b7e3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1117da8b7e3Smrg## -MM, not -M (despite what the docs say). 1127da8b7e3Smrg## - Using -M directly means running the compiler twice (even worse 1137da8b7e3Smrg## than renaming). 1147da8b7e3Smrg if test -z "$gccflag"; then 1157da8b7e3Smrg gccflag=-MD, 1167da8b7e3Smrg fi 1177da8b7e3Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1187da8b7e3Smrg stat=$? 1197da8b7e3Smrg if test $stat -eq 0; then : 1207da8b7e3Smrg else 1217da8b7e3Smrg rm -f "$tmpdepfile" 1227da8b7e3Smrg exit $stat 1237da8b7e3Smrg fi 1247da8b7e3Smrg rm -f "$depfile" 1257da8b7e3Smrg echo "$object : \\" > "$depfile" 1267da8b7e3Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1277da8b7e3Smrg## The second -e expression handles DOS-style file names with drive letters. 1287da8b7e3Smrg sed -e 's/^[^:]*: / /' \ 1297da8b7e3Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1307da8b7e3Smrg## This next piece of magic avoids the `deleted header file' problem. 1317da8b7e3Smrg## The problem is that when a header file which appears in a .P file 1327da8b7e3Smrg## is deleted, the dependency causes make to die (because there is 1337da8b7e3Smrg## typically no way to rebuild the header). We avoid this by adding 1347da8b7e3Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1357da8b7e3Smrg## this for us directly. 1367da8b7e3Smrg tr ' ' ' 1377da8b7e3Smrg' < "$tmpdepfile" | 1387da8b7e3Smrg## Some versions of gcc put a space before the `:'. On the theory 1397da8b7e3Smrg## that the space means something, we add a space to the output as 1407da8b7e3Smrg## well. 1417da8b7e3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1427da8b7e3Smrg## correctly. Breaking it into two sed invocations is a workaround. 1437da8b7e3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1447da8b7e3Smrg rm -f "$tmpdepfile" 1457da8b7e3Smrg ;; 1467da8b7e3Smrg 1477da8b7e3Smrghp) 1487da8b7e3Smrg # This case exists only to let depend.m4 do its work. It works by 1497da8b7e3Smrg # looking at the text of this script. This case will never be run, 1507da8b7e3Smrg # since it is checked for above. 1517da8b7e3Smrg exit 1 1527da8b7e3Smrg ;; 1537da8b7e3Smrg 1547da8b7e3Smrgsgi) 1557da8b7e3Smrg if test "$libtool" = yes; then 1567da8b7e3Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1577da8b7e3Smrg else 1587da8b7e3Smrg "$@" -MDupdate "$tmpdepfile" 1597da8b7e3Smrg fi 1607da8b7e3Smrg stat=$? 1617da8b7e3Smrg if test $stat -eq 0; then : 1627da8b7e3Smrg else 1637da8b7e3Smrg rm -f "$tmpdepfile" 1647da8b7e3Smrg exit $stat 1657da8b7e3Smrg fi 1667da8b7e3Smrg rm -f "$depfile" 1677da8b7e3Smrg 1687da8b7e3Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1697da8b7e3Smrg echo "$object : \\" > "$depfile" 1707da8b7e3Smrg 1717da8b7e3Smrg # Clip off the initial element (the dependent). Don't try to be 1727da8b7e3Smrg # clever and replace this with sed code, as IRIX sed won't handle 1737da8b7e3Smrg # lines with more than a fixed number of characters (4096 in 1747da8b7e3Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1757da8b7e3Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1767da8b7e3Smrg # dependency line. 1777da8b7e3Smrg tr ' ' ' 1787da8b7e3Smrg' < "$tmpdepfile" \ 1797da8b7e3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1807da8b7e3Smrg tr ' 1817da8b7e3Smrg' ' ' >> $depfile 1827da8b7e3Smrg echo >> $depfile 1837da8b7e3Smrg 1847da8b7e3Smrg # The second pass generates a dummy entry for each header file. 1857da8b7e3Smrg tr ' ' ' 1867da8b7e3Smrg' < "$tmpdepfile" \ 1877da8b7e3Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 1887da8b7e3Smrg >> $depfile 1897da8b7e3Smrg else 1907da8b7e3Smrg # The sourcefile does not contain any dependencies, so just 1917da8b7e3Smrg # store a dummy comment line, to avoid errors with the Makefile 1927da8b7e3Smrg # "include basename.Plo" scheme. 1937da8b7e3Smrg echo "#dummy" > "$depfile" 1947da8b7e3Smrg fi 1957da8b7e3Smrg rm -f "$tmpdepfile" 1967da8b7e3Smrg ;; 1977da8b7e3Smrg 1987da8b7e3Smrgaix) 1997da8b7e3Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2007da8b7e3Smrg # in a .u file. In older versions, this file always lives in the 2017da8b7e3Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2027da8b7e3Smrg # start of each line; $object doesn't have directory information. 2037da8b7e3Smrg # Version 6 uses the directory in both cases. 2047da8b7e3Smrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2057da8b7e3Smrg tmpdepfile="$stripped.u" 2067da8b7e3Smrg if test "$libtool" = yes; then 2077da8b7e3Smrg "$@" -Wc,-M 2087da8b7e3Smrg else 2097da8b7e3Smrg "$@" -M 2107da8b7e3Smrg fi 2117da8b7e3Smrg stat=$? 2127da8b7e3Smrg 2137da8b7e3Smrg if test -f "$tmpdepfile"; then : 2147da8b7e3Smrg else 2157da8b7e3Smrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 2167da8b7e3Smrg tmpdepfile="$stripped.u" 2177da8b7e3Smrg fi 2187da8b7e3Smrg 2197da8b7e3Smrg if test $stat -eq 0; then : 2207da8b7e3Smrg else 2217da8b7e3Smrg rm -f "$tmpdepfile" 2227da8b7e3Smrg exit $stat 2237da8b7e3Smrg fi 2247da8b7e3Smrg 2257da8b7e3Smrg if test -f "$tmpdepfile"; then 2267da8b7e3Smrg outname="$stripped.o" 2277da8b7e3Smrg # Each line is of the form `foo.o: dependent.h'. 2287da8b7e3Smrg # Do two passes, one to just change these to 2297da8b7e3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2307da8b7e3Smrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2317da8b7e3Smrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2327da8b7e3Smrg else 2337da8b7e3Smrg # The sourcefile does not contain any dependencies, so just 2347da8b7e3Smrg # store a dummy comment line, to avoid errors with the Makefile 2357da8b7e3Smrg # "include basename.Plo" scheme. 2367da8b7e3Smrg echo "#dummy" > "$depfile" 2377da8b7e3Smrg fi 2387da8b7e3Smrg rm -f "$tmpdepfile" 2397da8b7e3Smrg ;; 2407da8b7e3Smrg 2417da8b7e3Smrgicc) 2427da8b7e3Smrg # Intel's C compiler understands `-MD -MF file'. However on 2437da8b7e3Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2447da8b7e3Smrg # ICC 7.0 will fill foo.d with something like 2457da8b7e3Smrg # foo.o: sub/foo.c 2467da8b7e3Smrg # foo.o: sub/foo.h 2477da8b7e3Smrg # which is wrong. We want: 2487da8b7e3Smrg # sub/foo.o: sub/foo.c 2497da8b7e3Smrg # sub/foo.o: sub/foo.h 2507da8b7e3Smrg # sub/foo.c: 2517da8b7e3Smrg # sub/foo.h: 2527da8b7e3Smrg # ICC 7.1 will output 2537da8b7e3Smrg # foo.o: sub/foo.c sub/foo.h 2547da8b7e3Smrg # and will wrap long lines using \ : 2557da8b7e3Smrg # foo.o: sub/foo.c ... \ 2567da8b7e3Smrg # sub/foo.h ... \ 2577da8b7e3Smrg # ... 2587da8b7e3Smrg 2597da8b7e3Smrg "$@" -MD -MF "$tmpdepfile" 2607da8b7e3Smrg stat=$? 2617da8b7e3Smrg if test $stat -eq 0; then : 2627da8b7e3Smrg else 2637da8b7e3Smrg rm -f "$tmpdepfile" 2647da8b7e3Smrg exit $stat 2657da8b7e3Smrg fi 2667da8b7e3Smrg rm -f "$depfile" 2677da8b7e3Smrg # Each line is of the form `foo.o: dependent.h', 2687da8b7e3Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2697da8b7e3Smrg # Do two passes, one to just change these to 2707da8b7e3Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2717da8b7e3Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2727da8b7e3Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2737da8b7e3Smrg # correctly. Breaking it into two sed invocations is a workaround. 2747da8b7e3Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2757da8b7e3Smrg sed -e 's/$/ :/' >> "$depfile" 2767da8b7e3Smrg rm -f "$tmpdepfile" 2777da8b7e3Smrg ;; 2787da8b7e3Smrg 2797da8b7e3Smrgtru64) 2807da8b7e3Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 2817da8b7e3Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 2827da8b7e3Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 2837da8b7e3Smrg # dependencies in `foo.d' instead, so we check for that too. 2847da8b7e3Smrg # Subdirectories are respected. 2857da8b7e3Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2867da8b7e3Smrg test "x$dir" = "x$object" && dir= 2877da8b7e3Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2887da8b7e3Smrg 2897da8b7e3Smrg if test "$libtool" = yes; then 2907da8b7e3Smrg # With Tru64 cc, shared objects can also be used to make a 2917da8b7e3Smrg # static library. This mecanism is used in libtool 1.4 series to 2927da8b7e3Smrg # handle both shared and static libraries in a single compilation. 2937da8b7e3Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 2947da8b7e3Smrg # 2957da8b7e3Smrg # With libtool 1.5 this exception was removed, and libtool now 2967da8b7e3Smrg # generates 2 separate objects for the 2 libraries. These two 2977da8b7e3Smrg # compilations output dependencies in in $dir.libs/$base.o.d and 2987da8b7e3Smrg # in $dir$base.o.d. We have to check for both files, because 2997da8b7e3Smrg # one of the two compilations can be disabled. We should prefer 3007da8b7e3Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3017da8b7e3Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3027da8b7e3Smrg # the former would cause a distcleancheck panic. 3037da8b7e3Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3047da8b7e3Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3057da8b7e3Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3067da8b7e3Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3077da8b7e3Smrg "$@" -Wc,-MD 3087da8b7e3Smrg else 3097da8b7e3Smrg tmpdepfile1=$dir$base.o.d 3107da8b7e3Smrg tmpdepfile2=$dir$base.d 3117da8b7e3Smrg tmpdepfile3=$dir$base.d 3127da8b7e3Smrg tmpdepfile4=$dir$base.d 3137da8b7e3Smrg "$@" -MD 3147da8b7e3Smrg fi 3157da8b7e3Smrg 3167da8b7e3Smrg stat=$? 3177da8b7e3Smrg if test $stat -eq 0; then : 3187da8b7e3Smrg else 3197da8b7e3Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3207da8b7e3Smrg exit $stat 3217da8b7e3Smrg fi 3227da8b7e3Smrg 3237da8b7e3Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3247da8b7e3Smrg do 3257da8b7e3Smrg test -f "$tmpdepfile" && break 3267da8b7e3Smrg done 3277da8b7e3Smrg if test -f "$tmpdepfile"; then 3287da8b7e3Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3297da8b7e3Smrg # That's a tab and a space in the []. 3307da8b7e3Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3317da8b7e3Smrg else 3327da8b7e3Smrg echo "#dummy" > "$depfile" 3337da8b7e3Smrg fi 3347da8b7e3Smrg rm -f "$tmpdepfile" 3357da8b7e3Smrg ;; 3367da8b7e3Smrg 3377da8b7e3Smrg#nosideeffect) 3387da8b7e3Smrg # This comment above is used by automake to tell side-effect 3397da8b7e3Smrg # dependency tracking mechanisms from slower ones. 3407da8b7e3Smrg 3417da8b7e3Smrgdashmstdout) 3427da8b7e3Smrg # Important note: in order to support this mode, a compiler *must* 3437da8b7e3Smrg # always write the preprocessed file to stdout, regardless of -o. 3447da8b7e3Smrg "$@" || exit $? 3457da8b7e3Smrg 3467da8b7e3Smrg # Remove the call to Libtool. 3477da8b7e3Smrg if test "$libtool" = yes; then 3487da8b7e3Smrg while test $1 != '--mode=compile'; do 3497da8b7e3Smrg shift 3507da8b7e3Smrg done 3517da8b7e3Smrg shift 3527da8b7e3Smrg fi 3537da8b7e3Smrg 3547da8b7e3Smrg # Remove `-o $object'. 3557da8b7e3Smrg IFS=" " 3567da8b7e3Smrg for arg 3577da8b7e3Smrg do 3587da8b7e3Smrg case $arg in 3597da8b7e3Smrg -o) 3607da8b7e3Smrg shift 3617da8b7e3Smrg ;; 3627da8b7e3Smrg $object) 3637da8b7e3Smrg shift 3647da8b7e3Smrg ;; 3657da8b7e3Smrg *) 3667da8b7e3Smrg set fnord "$@" "$arg" 3677da8b7e3Smrg shift # fnord 3687da8b7e3Smrg shift # $arg 3697da8b7e3Smrg ;; 3707da8b7e3Smrg esac 3717da8b7e3Smrg done 3727da8b7e3Smrg 3737da8b7e3Smrg test -z "$dashmflag" && dashmflag=-M 3747da8b7e3Smrg # Require at least two characters before searching for `:' 3757da8b7e3Smrg # in the target name. This is to cope with DOS-style filenames: 3767da8b7e3Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 3777da8b7e3Smrg "$@" $dashmflag | 3787da8b7e3Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 3797da8b7e3Smrg rm -f "$depfile" 3807da8b7e3Smrg cat < "$tmpdepfile" > "$depfile" 3817da8b7e3Smrg tr ' ' ' 3827da8b7e3Smrg' < "$tmpdepfile" | \ 3837da8b7e3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 3847da8b7e3Smrg## correctly. Breaking it into two sed invocations is a workaround. 3857da8b7e3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 3867da8b7e3Smrg rm -f "$tmpdepfile" 3877da8b7e3Smrg ;; 3887da8b7e3Smrg 3897da8b7e3SmrgdashXmstdout) 3907da8b7e3Smrg # This case only exists to satisfy depend.m4. It is never actually 3917da8b7e3Smrg # run, as this mode is specially recognized in the preamble. 3927da8b7e3Smrg exit 1 3937da8b7e3Smrg ;; 3947da8b7e3Smrg 3957da8b7e3Smrgmakedepend) 3967da8b7e3Smrg "$@" || exit $? 3977da8b7e3Smrg # Remove any Libtool call 3987da8b7e3Smrg if test "$libtool" = yes; then 3997da8b7e3Smrg while test $1 != '--mode=compile'; do 4007da8b7e3Smrg shift 4017da8b7e3Smrg done 4027da8b7e3Smrg shift 4037da8b7e3Smrg fi 4047da8b7e3Smrg # X makedepend 4057da8b7e3Smrg shift 4067da8b7e3Smrg cleared=no 4077da8b7e3Smrg for arg in "$@"; do 4087da8b7e3Smrg case $cleared in 4097da8b7e3Smrg no) 4107da8b7e3Smrg set ""; shift 4117da8b7e3Smrg cleared=yes ;; 4127da8b7e3Smrg esac 4137da8b7e3Smrg case "$arg" in 4147da8b7e3Smrg -D*|-I*) 4157da8b7e3Smrg set fnord "$@" "$arg"; shift ;; 4167da8b7e3Smrg # Strip any option that makedepend may not understand. Remove 4177da8b7e3Smrg # the object too, otherwise makedepend will parse it as a source file. 4187da8b7e3Smrg -*|$object) 4197da8b7e3Smrg ;; 4207da8b7e3Smrg *) 4217da8b7e3Smrg set fnord "$@" "$arg"; shift ;; 4227da8b7e3Smrg esac 4237da8b7e3Smrg done 4247da8b7e3Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 4257da8b7e3Smrg touch "$tmpdepfile" 4267da8b7e3Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4277da8b7e3Smrg rm -f "$depfile" 4287da8b7e3Smrg cat < "$tmpdepfile" > "$depfile" 4297da8b7e3Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 4307da8b7e3Smrg' | \ 4317da8b7e3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4327da8b7e3Smrg## correctly. Breaking it into two sed invocations is a workaround. 4337da8b7e3Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4347da8b7e3Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 4357da8b7e3Smrg ;; 4367da8b7e3Smrg 4377da8b7e3Smrgcpp) 4387da8b7e3Smrg # Important note: in order to support this mode, a compiler *must* 4397da8b7e3Smrg # always write the preprocessed file to stdout. 4407da8b7e3Smrg "$@" || exit $? 4417da8b7e3Smrg 4427da8b7e3Smrg # Remove the call to Libtool. 4437da8b7e3Smrg if test "$libtool" = yes; then 4447da8b7e3Smrg while test $1 != '--mode=compile'; do 4457da8b7e3Smrg shift 4467da8b7e3Smrg done 4477da8b7e3Smrg shift 4487da8b7e3Smrg fi 4497da8b7e3Smrg 4507da8b7e3Smrg # Remove `-o $object'. 4517da8b7e3Smrg IFS=" " 4527da8b7e3Smrg for arg 4537da8b7e3Smrg do 4547da8b7e3Smrg case $arg in 4557da8b7e3Smrg -o) 4567da8b7e3Smrg shift 4577da8b7e3Smrg ;; 4587da8b7e3Smrg $object) 4597da8b7e3Smrg shift 4607da8b7e3Smrg ;; 4617da8b7e3Smrg *) 4627da8b7e3Smrg set fnord "$@" "$arg" 4637da8b7e3Smrg shift # fnord 4647da8b7e3Smrg shift # $arg 4657da8b7e3Smrg ;; 4667da8b7e3Smrg esac 4677da8b7e3Smrg done 4687da8b7e3Smrg 4697da8b7e3Smrg "$@" -E | 4707da8b7e3Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 4717da8b7e3Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 4727da8b7e3Smrg sed '$ s: \\$::' > "$tmpdepfile" 4737da8b7e3Smrg rm -f "$depfile" 4747da8b7e3Smrg echo "$object : \\" > "$depfile" 4757da8b7e3Smrg cat < "$tmpdepfile" >> "$depfile" 4767da8b7e3Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 4777da8b7e3Smrg rm -f "$tmpdepfile" 4787da8b7e3Smrg ;; 4797da8b7e3Smrg 4807da8b7e3Smrgmsvisualcpp) 4817da8b7e3Smrg # Important note: in order to support this mode, a compiler *must* 4827da8b7e3Smrg # always write the preprocessed file to stdout, regardless of -o, 4837da8b7e3Smrg # because we must use -o when running libtool. 4847da8b7e3Smrg "$@" || exit $? 4857da8b7e3Smrg IFS=" " 4867da8b7e3Smrg for arg 4877da8b7e3Smrg do 4887da8b7e3Smrg case "$arg" in 4897da8b7e3Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 4907da8b7e3Smrg set fnord "$@" 4917da8b7e3Smrg shift 4927da8b7e3Smrg shift 4937da8b7e3Smrg ;; 4947da8b7e3Smrg *) 4957da8b7e3Smrg set fnord "$@" "$arg" 4967da8b7e3Smrg shift 4977da8b7e3Smrg shift 4987da8b7e3Smrg ;; 4997da8b7e3Smrg esac 5007da8b7e3Smrg done 5017da8b7e3Smrg "$@" -E | 5027da8b7e3Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5037da8b7e3Smrg rm -f "$depfile" 5047da8b7e3Smrg echo "$object : \\" > "$depfile" 5057da8b7e3Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5067da8b7e3Smrg echo " " >> "$depfile" 5077da8b7e3Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5087da8b7e3Smrg rm -f "$tmpdepfile" 5097da8b7e3Smrg ;; 5107da8b7e3Smrg 5117da8b7e3Smrgnone) 5127da8b7e3Smrg exec "$@" 5137da8b7e3Smrg ;; 5147da8b7e3Smrg 5157da8b7e3Smrg*) 5167da8b7e3Smrg echo "Unknown depmode $depmode" 1>&2 5177da8b7e3Smrg exit 1 5187da8b7e3Smrg ;; 5197da8b7e3Smrgesac 5207da8b7e3Smrg 5217da8b7e3Smrgexit 0 5227da8b7e3Smrg 5237da8b7e3Smrg# Local Variables: 5247da8b7e3Smrg# mode: shell-script 5257da8b7e3Smrg# sh-indentation: 2 5267da8b7e3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 5277da8b7e3Smrg# time-stamp-start: "scriptversion=" 5287da8b7e3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 5297da8b7e3Smrg# time-stamp-end: "$" 5307da8b7e3Smrg# End: 531