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