depcomp revision 765486e8
17d5e3a19Smrg#! /bin/sh 27d5e3a19Smrg# depcomp - compile a program generating dependencies as side-effects 37d5e3a19Smrg 4765486e8Smrgscriptversion=2009-04-28.21; # UTC 57d5e3a19Smrg 6765486e8Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 7765486e8Smrg# Software Foundation, Inc. 87d5e3a19Smrg 97d5e3a19Smrg# This program is free software; you can redistribute it and/or modify 107d5e3a19Smrg# it under the terms of the GNU General Public License as published by 117d5e3a19Smrg# the Free Software Foundation; either version 2, or (at your option) 127d5e3a19Smrg# any later version. 137d5e3a19Smrg 147d5e3a19Smrg# This program is distributed in the hope that it will be useful, 157d5e3a19Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 167d5e3a19Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177d5e3a19Smrg# GNU General Public License for more details. 187d5e3a19Smrg 197d5e3a19Smrg# You should have received a copy of the GNU General Public License 20765486e8Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 217d5e3a19Smrg 227d5e3a19Smrg# As a special exception to the GNU General Public License, if you 237d5e3a19Smrg# distribute this file as part of a program that contains a 247d5e3a19Smrg# configuration script generated by Autoconf, you may include it under 257d5e3a19Smrg# the same distribution terms that you use for the rest of that program. 267d5e3a19Smrg 277d5e3a19Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 287d5e3a19Smrg 297d5e3a19Smrgcase $1 in 307d5e3a19Smrg '') 317d5e3a19Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 327d5e3a19Smrg exit 1; 337d5e3a19Smrg ;; 347d5e3a19Smrg -h | --h*) 357d5e3a19Smrg cat <<\EOF 367d5e3a19SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 377d5e3a19Smrg 387d5e3a19SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 397d5e3a19Smrgas side-effects. 407d5e3a19Smrg 417d5e3a19SmrgEnvironment variables: 427d5e3a19Smrg depmode Dependency tracking mode. 437d5e3a19Smrg source Source file read by `PROGRAMS ARGS'. 447d5e3a19Smrg object Object file output by `PROGRAMS ARGS'. 457d5e3a19Smrg DEPDIR directory where to store dependencies. 467d5e3a19Smrg depfile Dependency file to output. 477d5e3a19Smrg tmpdepfile Temporary file to use when outputing dependencies. 487d5e3a19Smrg libtool Whether libtool is used (yes/no). 497d5e3a19Smrg 507d5e3a19SmrgReport bugs to <bug-automake@gnu.org>. 517d5e3a19SmrgEOF 527d5e3a19Smrg exit $? 537d5e3a19Smrg ;; 547d5e3a19Smrg -v | --v*) 557d5e3a19Smrg echo "depcomp $scriptversion" 567d5e3a19Smrg exit $? 577d5e3a19Smrg ;; 587d5e3a19Smrgesac 597d5e3a19Smrg 607d5e3a19Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 617d5e3a19Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 627d5e3a19Smrg exit 1 637d5e3a19Smrgfi 647d5e3a19Smrg 657d5e3a19Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 667d5e3a19Smrgdepfile=${depfile-`echo "$object" | 677d5e3a19Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 687d5e3a19Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 697d5e3a19Smrg 707d5e3a19Smrgrm -f "$tmpdepfile" 717d5e3a19Smrg 727d5e3a19Smrg# Some modes work just like other modes, but use different flags. We 737d5e3a19Smrg# parameterize here, but still list the modes in the big case below, 747d5e3a19Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 757d5e3a19Smrg# here, because this file can only contain one case statement. 767d5e3a19Smrgif test "$depmode" = hp; then 777d5e3a19Smrg # HP compiler uses -M and no extra arg. 787d5e3a19Smrg gccflag=-M 797d5e3a19Smrg depmode=gcc 807d5e3a19Smrgfi 817d5e3a19Smrg 827d5e3a19Smrgif test "$depmode" = dashXmstdout; then 837d5e3a19Smrg # This is just like dashmstdout with a different argument. 847d5e3a19Smrg dashmflag=-xM 857d5e3a19Smrg depmode=dashmstdout 867d5e3a19Smrgfi 877d5e3a19Smrg 88765486e8Smrgcygpath_u="cygpath -u -f -" 89765486e8Smrgif test "$depmode" = msvcmsys; then 90765486e8Smrg # This is just like msvisualcpp but w/o cygpath translation. 91765486e8Smrg # Just convert the backslash-escaped backslashes to single forward 92765486e8Smrg # slashes to satisfy depend.m4 93765486e8Smrg cygpath_u="sed s,\\\\\\\\,/,g" 94765486e8Smrg depmode=msvisualcpp 95765486e8Smrgfi 96765486e8Smrg 977d5e3a19Smrgcase "$depmode" in 987d5e3a19Smrggcc3) 997d5e3a19Smrg## gcc 3 implements dependency tracking that does exactly what 1007d5e3a19Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1017d5e3a19Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1027d5e3a19Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1037d5e3a19Smrg## the command line argument order; so add the flags where they 1047d5e3a19Smrg## appear in depend2.am. Note that the slowdown incurred here 1057d5e3a19Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1067d5e3a19Smrg for arg 1077d5e3a19Smrg do 1087d5e3a19Smrg case $arg in 1097d5e3a19Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1107d5e3a19Smrg *) set fnord "$@" "$arg" ;; 1117d5e3a19Smrg esac 1127d5e3a19Smrg shift # fnord 1137d5e3a19Smrg shift # $arg 1147d5e3a19Smrg done 1157d5e3a19Smrg "$@" 1167d5e3a19Smrg stat=$? 1177d5e3a19Smrg if test $stat -eq 0; then : 1187d5e3a19Smrg else 1197d5e3a19Smrg rm -f "$tmpdepfile" 1207d5e3a19Smrg exit $stat 1217d5e3a19Smrg fi 1227d5e3a19Smrg mv "$tmpdepfile" "$depfile" 1237d5e3a19Smrg ;; 1247d5e3a19Smrg 1257d5e3a19Smrggcc) 1267d5e3a19Smrg## There are various ways to get dependency output from gcc. Here's 1277d5e3a19Smrg## why we pick this rather obscure method: 1287d5e3a19Smrg## - Don't want to use -MD because we'd like the dependencies to end 1297d5e3a19Smrg## up in a subdir. Having to rename by hand is ugly. 1307d5e3a19Smrg## (We might end up doing this anyway to support other compilers.) 1317d5e3a19Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1327d5e3a19Smrg## -MM, not -M (despite what the docs say). 1337d5e3a19Smrg## - Using -M directly means running the compiler twice (even worse 1347d5e3a19Smrg## than renaming). 1357d5e3a19Smrg if test -z "$gccflag"; then 1367d5e3a19Smrg gccflag=-MD, 1377d5e3a19Smrg fi 1387d5e3a19Smrg "$@" -Wp,"$gccflag$tmpdepfile" 1397d5e3a19Smrg stat=$? 1407d5e3a19Smrg if test $stat -eq 0; then : 1417d5e3a19Smrg else 1427d5e3a19Smrg rm -f "$tmpdepfile" 1437d5e3a19Smrg exit $stat 1447d5e3a19Smrg fi 1457d5e3a19Smrg rm -f "$depfile" 1467d5e3a19Smrg echo "$object : \\" > "$depfile" 1477d5e3a19Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1487d5e3a19Smrg## The second -e expression handles DOS-style file names with drive letters. 1497d5e3a19Smrg sed -e 's/^[^:]*: / /' \ 1507d5e3a19Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1517d5e3a19Smrg## This next piece of magic avoids the `deleted header file' problem. 1527d5e3a19Smrg## The problem is that when a header file which appears in a .P file 1537d5e3a19Smrg## is deleted, the dependency causes make to die (because there is 1547d5e3a19Smrg## typically no way to rebuild the header). We avoid this by adding 1557d5e3a19Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 1567d5e3a19Smrg## this for us directly. 1577d5e3a19Smrg tr ' ' ' 1587d5e3a19Smrg' < "$tmpdepfile" | 1597d5e3a19Smrg## Some versions of gcc put a space before the `:'. On the theory 1607d5e3a19Smrg## that the space means something, we add a space to the output as 1617d5e3a19Smrg## well. 1627d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 1637d5e3a19Smrg## correctly. Breaking it into two sed invocations is a workaround. 1647d5e3a19Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1657d5e3a19Smrg rm -f "$tmpdepfile" 1667d5e3a19Smrg ;; 1677d5e3a19Smrg 1687d5e3a19Smrghp) 1697d5e3a19Smrg # This case exists only to let depend.m4 do its work. It works by 1707d5e3a19Smrg # looking at the text of this script. This case will never be run, 1717d5e3a19Smrg # since it is checked for above. 1727d5e3a19Smrg exit 1 1737d5e3a19Smrg ;; 1747d5e3a19Smrg 1757d5e3a19Smrgsgi) 1767d5e3a19Smrg if test "$libtool" = yes; then 1777d5e3a19Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1787d5e3a19Smrg else 1797d5e3a19Smrg "$@" -MDupdate "$tmpdepfile" 1807d5e3a19Smrg fi 1817d5e3a19Smrg stat=$? 1827d5e3a19Smrg if test $stat -eq 0; then : 1837d5e3a19Smrg else 1847d5e3a19Smrg rm -f "$tmpdepfile" 1857d5e3a19Smrg exit $stat 1867d5e3a19Smrg fi 1877d5e3a19Smrg rm -f "$depfile" 1887d5e3a19Smrg 1897d5e3a19Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1907d5e3a19Smrg echo "$object : \\" > "$depfile" 1917d5e3a19Smrg 1927d5e3a19Smrg # Clip off the initial element (the dependent). Don't try to be 1937d5e3a19Smrg # clever and replace this with sed code, as IRIX sed won't handle 1947d5e3a19Smrg # lines with more than a fixed number of characters (4096 in 1957d5e3a19Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1967d5e3a19Smrg # the IRIX cc adds comments like `#:fec' to the end of the 1977d5e3a19Smrg # dependency line. 1987d5e3a19Smrg tr ' ' ' 1997d5e3a19Smrg' < "$tmpdepfile" \ 2007d5e3a19Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2017d5e3a19Smrg tr ' 202765486e8Smrg' ' ' >> "$depfile" 203765486e8Smrg echo >> "$depfile" 2047d5e3a19Smrg 2057d5e3a19Smrg # The second pass generates a dummy entry for each header file. 2067d5e3a19Smrg tr ' ' ' 2077d5e3a19Smrg' < "$tmpdepfile" \ 2087d5e3a19Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 209765486e8Smrg >> "$depfile" 2107d5e3a19Smrg else 2117d5e3a19Smrg # The sourcefile does not contain any dependencies, so just 2127d5e3a19Smrg # store a dummy comment line, to avoid errors with the Makefile 2137d5e3a19Smrg # "include basename.Plo" scheme. 2147d5e3a19Smrg echo "#dummy" > "$depfile" 2157d5e3a19Smrg fi 2167d5e3a19Smrg rm -f "$tmpdepfile" 2177d5e3a19Smrg ;; 2187d5e3a19Smrg 2197d5e3a19Smrgaix) 2207d5e3a19Smrg # The C for AIX Compiler uses -M and outputs the dependencies 2217d5e3a19Smrg # in a .u file. In older versions, this file always lives in the 2227d5e3a19Smrg # current directory. Also, the AIX compiler puts `$object:' at the 2237d5e3a19Smrg # start of each line; $object doesn't have directory information. 2247d5e3a19Smrg # Version 6 uses the directory in both cases. 2251568b75bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2261568b75bSmrg test "x$dir" = "x$object" && dir= 2271568b75bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2287d5e3a19Smrg if test "$libtool" = yes; then 2291568b75bSmrg tmpdepfile1=$dir$base.u 2301568b75bSmrg tmpdepfile2=$base.u 2311568b75bSmrg tmpdepfile3=$dir.libs/$base.u 2327d5e3a19Smrg "$@" -Wc,-M 2337d5e3a19Smrg else 2341568b75bSmrg tmpdepfile1=$dir$base.u 2351568b75bSmrg tmpdepfile2=$dir$base.u 2361568b75bSmrg tmpdepfile3=$dir$base.u 2377d5e3a19Smrg "$@" -M 2387d5e3a19Smrg fi 2397d5e3a19Smrg stat=$? 2407d5e3a19Smrg 2417d5e3a19Smrg if test $stat -eq 0; then : 2427d5e3a19Smrg else 2431568b75bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2447d5e3a19Smrg exit $stat 2457d5e3a19Smrg fi 2467d5e3a19Smrg 2471568b75bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2481568b75bSmrg do 2491568b75bSmrg test -f "$tmpdepfile" && break 2501568b75bSmrg done 2517d5e3a19Smrg if test -f "$tmpdepfile"; then 2527d5e3a19Smrg # Each line is of the form `foo.o: dependent.h'. 2537d5e3a19Smrg # Do two passes, one to just change these to 2547d5e3a19Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2551568b75bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2561568b75bSmrg # That's a tab and a space in the []. 2571568b75bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2587d5e3a19Smrg else 2597d5e3a19Smrg # The sourcefile does not contain any dependencies, so just 2607d5e3a19Smrg # store a dummy comment line, to avoid errors with the Makefile 2617d5e3a19Smrg # "include basename.Plo" scheme. 2627d5e3a19Smrg echo "#dummy" > "$depfile" 2637d5e3a19Smrg fi 2647d5e3a19Smrg rm -f "$tmpdepfile" 2657d5e3a19Smrg ;; 2667d5e3a19Smrg 2677d5e3a19Smrgicc) 2687d5e3a19Smrg # Intel's C compiler understands `-MD -MF file'. However on 2697d5e3a19Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2707d5e3a19Smrg # ICC 7.0 will fill foo.d with something like 2717d5e3a19Smrg # foo.o: sub/foo.c 2727d5e3a19Smrg # foo.o: sub/foo.h 2737d5e3a19Smrg # which is wrong. We want: 2747d5e3a19Smrg # sub/foo.o: sub/foo.c 2757d5e3a19Smrg # sub/foo.o: sub/foo.h 2767d5e3a19Smrg # sub/foo.c: 2777d5e3a19Smrg # sub/foo.h: 2787d5e3a19Smrg # ICC 7.1 will output 2797d5e3a19Smrg # foo.o: sub/foo.c sub/foo.h 2807d5e3a19Smrg # and will wrap long lines using \ : 2817d5e3a19Smrg # foo.o: sub/foo.c ... \ 2827d5e3a19Smrg # sub/foo.h ... \ 2837d5e3a19Smrg # ... 2847d5e3a19Smrg 2857d5e3a19Smrg "$@" -MD -MF "$tmpdepfile" 2867d5e3a19Smrg stat=$? 2877d5e3a19Smrg if test $stat -eq 0; then : 2887d5e3a19Smrg else 2897d5e3a19Smrg rm -f "$tmpdepfile" 2907d5e3a19Smrg exit $stat 2917d5e3a19Smrg fi 2927d5e3a19Smrg rm -f "$depfile" 2937d5e3a19Smrg # Each line is of the form `foo.o: dependent.h', 2947d5e3a19Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2957d5e3a19Smrg # Do two passes, one to just change these to 2967d5e3a19Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2977d5e3a19Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2987d5e3a19Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 2997d5e3a19Smrg # correctly. Breaking it into two sed invocations is a workaround. 3007d5e3a19Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3017d5e3a19Smrg sed -e 's/$/ :/' >> "$depfile" 3027d5e3a19Smrg rm -f "$tmpdepfile" 3037d5e3a19Smrg ;; 3047d5e3a19Smrg 3057d5e3a19Smrghp2) 3067d5e3a19Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3077d5e3a19Smrg # compilers, which have integrated preprocessors. The correct option 3087d5e3a19Smrg # to use with these is +Maked; it writes dependencies to a file named 3097d5e3a19Smrg # 'foo.d', which lands next to the object file, wherever that 3107d5e3a19Smrg # happens to be. 3117d5e3a19Smrg # Much of this is similar to the tru64 case; see comments there. 3127d5e3a19Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3137d5e3a19Smrg test "x$dir" = "x$object" && dir= 3147d5e3a19Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3157d5e3a19Smrg if test "$libtool" = yes; then 3167d5e3a19Smrg tmpdepfile1=$dir$base.d 3177d5e3a19Smrg tmpdepfile2=$dir.libs/$base.d 3187d5e3a19Smrg "$@" -Wc,+Maked 3197d5e3a19Smrg else 3207d5e3a19Smrg tmpdepfile1=$dir$base.d 3217d5e3a19Smrg tmpdepfile2=$dir$base.d 3227d5e3a19Smrg "$@" +Maked 3237d5e3a19Smrg fi 3247d5e3a19Smrg stat=$? 3257d5e3a19Smrg if test $stat -eq 0; then : 3267d5e3a19Smrg else 3277d5e3a19Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3287d5e3a19Smrg exit $stat 3297d5e3a19Smrg fi 3307d5e3a19Smrg 3317d5e3a19Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3327d5e3a19Smrg do 3337d5e3a19Smrg test -f "$tmpdepfile" && break 3347d5e3a19Smrg done 3357d5e3a19Smrg if test -f "$tmpdepfile"; then 3367d5e3a19Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3377d5e3a19Smrg # Add `dependent.h:' lines. 338765486e8Smrg sed -ne '2,${ 339765486e8Smrg s/^ *// 340765486e8Smrg s/ \\*$// 341765486e8Smrg s/$/:/ 342765486e8Smrg p 343765486e8Smrg }' "$tmpdepfile" >> "$depfile" 3447d5e3a19Smrg else 3457d5e3a19Smrg echo "#dummy" > "$depfile" 3467d5e3a19Smrg fi 3477d5e3a19Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3487d5e3a19Smrg ;; 3497d5e3a19Smrg 3507d5e3a19Smrgtru64) 3517d5e3a19Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 3527d5e3a19Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3537d5e3a19Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3547d5e3a19Smrg # dependencies in `foo.d' instead, so we check for that too. 3557d5e3a19Smrg # Subdirectories are respected. 3567d5e3a19Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3577d5e3a19Smrg test "x$dir" = "x$object" && dir= 3587d5e3a19Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3597d5e3a19Smrg 3607d5e3a19Smrg if test "$libtool" = yes; then 3617d5e3a19Smrg # With Tru64 cc, shared objects can also be used to make a 3627d5e3a19Smrg # static library. This mechanism is used in libtool 1.4 series to 3637d5e3a19Smrg # handle both shared and static libraries in a single compilation. 3647d5e3a19Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3657d5e3a19Smrg # 3667d5e3a19Smrg # With libtool 1.5 this exception was removed, and libtool now 3677d5e3a19Smrg # generates 2 separate objects for the 2 libraries. These two 3687d5e3a19Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3697d5e3a19Smrg # in $dir$base.o.d. We have to check for both files, because 3707d5e3a19Smrg # one of the two compilations can be disabled. We should prefer 3717d5e3a19Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3727d5e3a19Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3737d5e3a19Smrg # the former would cause a distcleancheck panic. 3747d5e3a19Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3757d5e3a19Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3767d5e3a19Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3777d5e3a19Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3787d5e3a19Smrg "$@" -Wc,-MD 3797d5e3a19Smrg else 3807d5e3a19Smrg tmpdepfile1=$dir$base.o.d 3817d5e3a19Smrg tmpdepfile2=$dir$base.d 3827d5e3a19Smrg tmpdepfile3=$dir$base.d 3837d5e3a19Smrg tmpdepfile4=$dir$base.d 3847d5e3a19Smrg "$@" -MD 3857d5e3a19Smrg fi 3867d5e3a19Smrg 3877d5e3a19Smrg stat=$? 3887d5e3a19Smrg if test $stat -eq 0; then : 3897d5e3a19Smrg else 3907d5e3a19Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3917d5e3a19Smrg exit $stat 3927d5e3a19Smrg fi 3937d5e3a19Smrg 3947d5e3a19Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3957d5e3a19Smrg do 3967d5e3a19Smrg test -f "$tmpdepfile" && break 3977d5e3a19Smrg done 3987d5e3a19Smrg if test -f "$tmpdepfile"; then 3997d5e3a19Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4007d5e3a19Smrg # That's a tab and a space in the []. 4017d5e3a19Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4027d5e3a19Smrg else 4037d5e3a19Smrg echo "#dummy" > "$depfile" 4047d5e3a19Smrg fi 4057d5e3a19Smrg rm -f "$tmpdepfile" 4067d5e3a19Smrg ;; 4077d5e3a19Smrg 4087d5e3a19Smrg#nosideeffect) 4097d5e3a19Smrg # This comment above is used by automake to tell side-effect 4107d5e3a19Smrg # dependency tracking mechanisms from slower ones. 4117d5e3a19Smrg 4127d5e3a19Smrgdashmstdout) 4137d5e3a19Smrg # Important note: in order to support this mode, a compiler *must* 4147d5e3a19Smrg # always write the preprocessed file to stdout, regardless of -o. 4157d5e3a19Smrg "$@" || exit $? 4167d5e3a19Smrg 4177d5e3a19Smrg # Remove the call to Libtool. 4187d5e3a19Smrg if test "$libtool" = yes; then 419765486e8Smrg while test "X$1" != 'X--mode=compile'; do 4207d5e3a19Smrg shift 4217d5e3a19Smrg done 4227d5e3a19Smrg shift 4237d5e3a19Smrg fi 4247d5e3a19Smrg 4257d5e3a19Smrg # Remove `-o $object'. 4267d5e3a19Smrg IFS=" " 4277d5e3a19Smrg for arg 4287d5e3a19Smrg do 4297d5e3a19Smrg case $arg in 4307d5e3a19Smrg -o) 4317d5e3a19Smrg shift 4327d5e3a19Smrg ;; 4337d5e3a19Smrg $object) 4347d5e3a19Smrg shift 4357d5e3a19Smrg ;; 4367d5e3a19Smrg *) 4377d5e3a19Smrg set fnord "$@" "$arg" 4387d5e3a19Smrg shift # fnord 4397d5e3a19Smrg shift # $arg 4407d5e3a19Smrg ;; 4417d5e3a19Smrg esac 4427d5e3a19Smrg done 4437d5e3a19Smrg 4447d5e3a19Smrg test -z "$dashmflag" && dashmflag=-M 4457d5e3a19Smrg # Require at least two characters before searching for `:' 4467d5e3a19Smrg # in the target name. This is to cope with DOS-style filenames: 4477d5e3a19Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4487d5e3a19Smrg "$@" $dashmflag | 4497d5e3a19Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4507d5e3a19Smrg rm -f "$depfile" 4517d5e3a19Smrg cat < "$tmpdepfile" > "$depfile" 4527d5e3a19Smrg tr ' ' ' 4537d5e3a19Smrg' < "$tmpdepfile" | \ 4547d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 4557d5e3a19Smrg## correctly. Breaking it into two sed invocations is a workaround. 4567d5e3a19Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4577d5e3a19Smrg rm -f "$tmpdepfile" 4587d5e3a19Smrg ;; 4597d5e3a19Smrg 4607d5e3a19SmrgdashXmstdout) 4617d5e3a19Smrg # This case only exists to satisfy depend.m4. It is never actually 4627d5e3a19Smrg # run, as this mode is specially recognized in the preamble. 4637d5e3a19Smrg exit 1 4647d5e3a19Smrg ;; 4657d5e3a19Smrg 4667d5e3a19Smrgmakedepend) 4677d5e3a19Smrg "$@" || exit $? 4687d5e3a19Smrg # Remove any Libtool call 4697d5e3a19Smrg if test "$libtool" = yes; then 470765486e8Smrg while test "X$1" != 'X--mode=compile'; do 4717d5e3a19Smrg shift 4727d5e3a19Smrg done 4737d5e3a19Smrg shift 4747d5e3a19Smrg fi 4757d5e3a19Smrg # X makedepend 4767d5e3a19Smrg shift 477765486e8Smrg cleared=no eat=no 478765486e8Smrg for arg 479765486e8Smrg do 4807d5e3a19Smrg case $cleared in 4817d5e3a19Smrg no) 4827d5e3a19Smrg set ""; shift 4837d5e3a19Smrg cleared=yes ;; 4847d5e3a19Smrg esac 485765486e8Smrg if test $eat = yes; then 486765486e8Smrg eat=no 487765486e8Smrg continue 488765486e8Smrg fi 4897d5e3a19Smrg case "$arg" in 4907d5e3a19Smrg -D*|-I*) 4917d5e3a19Smrg set fnord "$@" "$arg"; shift ;; 4927d5e3a19Smrg # Strip any option that makedepend may not understand. Remove 4937d5e3a19Smrg # the object too, otherwise makedepend will parse it as a source file. 494765486e8Smrg -arch) 495765486e8Smrg eat=yes ;; 4967d5e3a19Smrg -*|$object) 4977d5e3a19Smrg ;; 4987d5e3a19Smrg *) 4997d5e3a19Smrg set fnord "$@" "$arg"; shift ;; 5007d5e3a19Smrg esac 5017d5e3a19Smrg done 502765486e8Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5037d5e3a19Smrg touch "$tmpdepfile" 5047d5e3a19Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5057d5e3a19Smrg rm -f "$depfile" 5067d5e3a19Smrg cat < "$tmpdepfile" > "$depfile" 5077d5e3a19Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 5087d5e3a19Smrg' | \ 5097d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 5107d5e3a19Smrg## correctly. Breaking it into two sed invocations is a workaround. 5117d5e3a19Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5127d5e3a19Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5137d5e3a19Smrg ;; 5147d5e3a19Smrg 5157d5e3a19Smrgcpp) 5167d5e3a19Smrg # Important note: in order to support this mode, a compiler *must* 5177d5e3a19Smrg # always write the preprocessed file to stdout. 5187d5e3a19Smrg "$@" || exit $? 5197d5e3a19Smrg 5207d5e3a19Smrg # Remove the call to Libtool. 5217d5e3a19Smrg if test "$libtool" = yes; then 522765486e8Smrg while test "X$1" != 'X--mode=compile'; do 5237d5e3a19Smrg shift 5247d5e3a19Smrg done 5257d5e3a19Smrg shift 5267d5e3a19Smrg fi 5277d5e3a19Smrg 5287d5e3a19Smrg # Remove `-o $object'. 5297d5e3a19Smrg IFS=" " 5307d5e3a19Smrg for arg 5317d5e3a19Smrg do 5327d5e3a19Smrg case $arg in 5337d5e3a19Smrg -o) 5347d5e3a19Smrg shift 5357d5e3a19Smrg ;; 5367d5e3a19Smrg $object) 5377d5e3a19Smrg shift 5387d5e3a19Smrg ;; 5397d5e3a19Smrg *) 5407d5e3a19Smrg set fnord "$@" "$arg" 5417d5e3a19Smrg shift # fnord 5427d5e3a19Smrg shift # $arg 5437d5e3a19Smrg ;; 5447d5e3a19Smrg esac 5457d5e3a19Smrg done 5467d5e3a19Smrg 5477d5e3a19Smrg "$@" -E | 5487d5e3a19Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5497d5e3a19Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5507d5e3a19Smrg sed '$ s: \\$::' > "$tmpdepfile" 5517d5e3a19Smrg rm -f "$depfile" 5527d5e3a19Smrg echo "$object : \\" > "$depfile" 5537d5e3a19Smrg cat < "$tmpdepfile" >> "$depfile" 5547d5e3a19Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5557d5e3a19Smrg rm -f "$tmpdepfile" 5567d5e3a19Smrg ;; 5577d5e3a19Smrg 5587d5e3a19Smrgmsvisualcpp) 5597d5e3a19Smrg # Important note: in order to support this mode, a compiler *must* 560765486e8Smrg # always write the preprocessed file to stdout. 5617d5e3a19Smrg "$@" || exit $? 562765486e8Smrg 563765486e8Smrg # Remove the call to Libtool. 564765486e8Smrg if test "$libtool" = yes; then 565765486e8Smrg while test "X$1" != 'X--mode=compile'; do 566765486e8Smrg shift 567765486e8Smrg done 568765486e8Smrg shift 569765486e8Smrg fi 570765486e8Smrg 5717d5e3a19Smrg IFS=" " 5727d5e3a19Smrg for arg 5737d5e3a19Smrg do 5747d5e3a19Smrg case "$arg" in 575765486e8Smrg -o) 576765486e8Smrg shift 577765486e8Smrg ;; 578765486e8Smrg $object) 579765486e8Smrg shift 580765486e8Smrg ;; 5817d5e3a19Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5827d5e3a19Smrg set fnord "$@" 5837d5e3a19Smrg shift 5847d5e3a19Smrg shift 5857d5e3a19Smrg ;; 5867d5e3a19Smrg *) 5877d5e3a19Smrg set fnord "$@" "$arg" 5887d5e3a19Smrg shift 5897d5e3a19Smrg shift 5907d5e3a19Smrg ;; 5917d5e3a19Smrg esac 5927d5e3a19Smrg done 593765486e8Smrg "$@" -E 2>/dev/null | 594765486e8Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5957d5e3a19Smrg rm -f "$depfile" 5967d5e3a19Smrg echo "$object : \\" > "$depfile" 597765486e8Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5987d5e3a19Smrg echo " " >> "$depfile" 599765486e8Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6007d5e3a19Smrg rm -f "$tmpdepfile" 6017d5e3a19Smrg ;; 6027d5e3a19Smrg 603765486e8Smrgmsvcmsys) 604765486e8Smrg # This case exists only to let depend.m4 do its work. It works by 605765486e8Smrg # looking at the text of this script. This case will never be run, 606765486e8Smrg # since it is checked for above. 607765486e8Smrg exit 1 608765486e8Smrg ;; 609765486e8Smrg 6107d5e3a19Smrgnone) 6117d5e3a19Smrg exec "$@" 6127d5e3a19Smrg ;; 6137d5e3a19Smrg 6147d5e3a19Smrg*) 6157d5e3a19Smrg echo "Unknown depmode $depmode" 1>&2 6167d5e3a19Smrg exit 1 6177d5e3a19Smrg ;; 6187d5e3a19Smrgesac 6197d5e3a19Smrg 6207d5e3a19Smrgexit 0 6217d5e3a19Smrg 6227d5e3a19Smrg# Local Variables: 6237d5e3a19Smrg# mode: shell-script 6247d5e3a19Smrg# sh-indentation: 2 6257d5e3a19Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6267d5e3a19Smrg# time-stamp-start: "scriptversion=" 6277d5e3a19Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 628765486e8Smrg# time-stamp-time-zone: "UTC" 629765486e8Smrg# time-stamp-end: "; # UTC" 6307d5e3a19Smrg# End: 631