depcomp revision 90b17f1b
17e6fb56fSmrg#! /bin/sh 27e6fb56fSmrg# depcomp - compile a program generating dependencies as side-effects 37e6fb56fSmrg 490b17f1bSmrgscriptversion=2012-03-27.16; # UTC 57e6fb56fSmrg 690b17f1bSmrg# Copyright (C) 1999-2012 Free Software Foundation, Inc. 77e6fb56fSmrg 87e6fb56fSmrg# This program is free software; you can redistribute it and/or modify 97e6fb56fSmrg# it under the terms of the GNU General Public License as published by 107e6fb56fSmrg# the Free Software Foundation; either version 2, or (at your option) 117e6fb56fSmrg# any later version. 127e6fb56fSmrg 137e6fb56fSmrg# This program is distributed in the hope that it will be useful, 147e6fb56fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 157e6fb56fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 167e6fb56fSmrg# GNU General Public License for more details. 177e6fb56fSmrg 187e6fb56fSmrg# You should have received a copy of the GNU General Public License 197e6fb56fSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 207e6fb56fSmrg 217e6fb56fSmrg# As a special exception to the GNU General Public License, if you 227e6fb56fSmrg# distribute this file as part of a program that contains a 237e6fb56fSmrg# configuration script generated by Autoconf, you may include it under 247e6fb56fSmrg# the same distribution terms that you use for the rest of that program. 257e6fb56fSmrg 267e6fb56fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 277e6fb56fSmrg 287e6fb56fSmrgcase $1 in 297e6fb56fSmrg '') 3090b17f1bSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 317e6fb56fSmrg exit 1; 327e6fb56fSmrg ;; 337e6fb56fSmrg -h | --h*) 347e6fb56fSmrg cat <<\EOF 357e6fb56fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 367e6fb56fSmrg 377e6fb56fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 387e6fb56fSmrgas side-effects. 397e6fb56fSmrg 407e6fb56fSmrgEnvironment variables: 417e6fb56fSmrg depmode Dependency tracking mode. 4290b17f1bSmrg source Source file read by 'PROGRAMS ARGS'. 4390b17f1bSmrg object Object file output by 'PROGRAMS ARGS'. 447e6fb56fSmrg DEPDIR directory where to store dependencies. 457e6fb56fSmrg depfile Dependency file to output. 4690b17f1bSmrg tmpdepfile Temporary file to use when outputting dependencies. 477e6fb56fSmrg libtool Whether libtool is used (yes/no). 487e6fb56fSmrg 497e6fb56fSmrgReport bugs to <bug-automake@gnu.org>. 507e6fb56fSmrgEOF 517e6fb56fSmrg exit $? 527e6fb56fSmrg ;; 537e6fb56fSmrg -v | --v*) 547e6fb56fSmrg echo "depcomp $scriptversion" 557e6fb56fSmrg exit $? 567e6fb56fSmrg ;; 577e6fb56fSmrgesac 587e6fb56fSmrg 5990b17f1bSmrg# A tabulation character. 6090b17f1bSmrgtab=' ' 6190b17f1bSmrg# A newline character. 6290b17f1bSmrgnl=' 6390b17f1bSmrg' 6490b17f1bSmrg 657e6fb56fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 667e6fb56fSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 677e6fb56fSmrg exit 1 687e6fb56fSmrgfi 697e6fb56fSmrg 707e6fb56fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 717e6fb56fSmrgdepfile=${depfile-`echo "$object" | 727e6fb56fSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 737e6fb56fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 747e6fb56fSmrg 757e6fb56fSmrgrm -f "$tmpdepfile" 767e6fb56fSmrg 777e6fb56fSmrg# Some modes work just like other modes, but use different flags. We 787e6fb56fSmrg# parameterize here, but still list the modes in the big case below, 797e6fb56fSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 807e6fb56fSmrg# here, because this file can only contain one case statement. 817e6fb56fSmrgif test "$depmode" = hp; then 827e6fb56fSmrg # HP compiler uses -M and no extra arg. 837e6fb56fSmrg gccflag=-M 847e6fb56fSmrg depmode=gcc 857e6fb56fSmrgfi 867e6fb56fSmrg 877e6fb56fSmrgif test "$depmode" = dashXmstdout; then 887e6fb56fSmrg # This is just like dashmstdout with a different argument. 897e6fb56fSmrg dashmflag=-xM 907e6fb56fSmrg depmode=dashmstdout 917e6fb56fSmrgfi 927e6fb56fSmrg 937e6fb56fSmrgcygpath_u="cygpath -u -f -" 947e6fb56fSmrgif test "$depmode" = msvcmsys; then 957e6fb56fSmrg # This is just like msvisualcpp but w/o cygpath translation. 967e6fb56fSmrg # Just convert the backslash-escaped backslashes to single forward 977e6fb56fSmrg # slashes to satisfy depend.m4 9890b17f1bSmrg cygpath_u='sed s,\\\\,/,g' 997e6fb56fSmrg depmode=msvisualcpp 1007e6fb56fSmrgfi 1017e6fb56fSmrg 10290b17f1bSmrgif test "$depmode" = msvc7msys; then 10390b17f1bSmrg # This is just like msvc7 but w/o cygpath translation. 10490b17f1bSmrg # Just convert the backslash-escaped backslashes to single forward 10590b17f1bSmrg # slashes to satisfy depend.m4 10690b17f1bSmrg cygpath_u='sed s,\\\\,/,g' 10790b17f1bSmrg depmode=msvc7 10890b17f1bSmrgfi 10990b17f1bSmrg 11090b17f1bSmrgif test "$depmode" = xlc; then 11190b17f1bSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. 11290b17f1bSmrg gccflag=-qmakedep=gcc,-MF 11390b17f1bSmrg depmode=gcc 11490b17f1bSmrgfi 11590b17f1bSmrg 1167e6fb56fSmrgcase "$depmode" in 1177e6fb56fSmrggcc3) 1187e6fb56fSmrg## gcc 3 implements dependency tracking that does exactly what 1197e6fb56fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1207e6fb56fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 1217e6fb56fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1227e6fb56fSmrg## the command line argument order; so add the flags where they 1237e6fb56fSmrg## appear in depend2.am. Note that the slowdown incurred here 1247e6fb56fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1257e6fb56fSmrg for arg 1267e6fb56fSmrg do 1277e6fb56fSmrg case $arg in 1287e6fb56fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1297e6fb56fSmrg *) set fnord "$@" "$arg" ;; 1307e6fb56fSmrg esac 1317e6fb56fSmrg shift # fnord 1327e6fb56fSmrg shift # $arg 1337e6fb56fSmrg done 1347e6fb56fSmrg "$@" 1357e6fb56fSmrg stat=$? 1367e6fb56fSmrg if test $stat -eq 0; then : 1377e6fb56fSmrg else 1387e6fb56fSmrg rm -f "$tmpdepfile" 1397e6fb56fSmrg exit $stat 1407e6fb56fSmrg fi 1417e6fb56fSmrg mv "$tmpdepfile" "$depfile" 1427e6fb56fSmrg ;; 1437e6fb56fSmrg 1447e6fb56fSmrggcc) 1457e6fb56fSmrg## There are various ways to get dependency output from gcc. Here's 1467e6fb56fSmrg## why we pick this rather obscure method: 1477e6fb56fSmrg## - Don't want to use -MD because we'd like the dependencies to end 1487e6fb56fSmrg## up in a subdir. Having to rename by hand is ugly. 1497e6fb56fSmrg## (We might end up doing this anyway to support other compilers.) 1507e6fb56fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1517e6fb56fSmrg## -MM, not -M (despite what the docs say). 1527e6fb56fSmrg## - Using -M directly means running the compiler twice (even worse 1537e6fb56fSmrg## than renaming). 1547e6fb56fSmrg if test -z "$gccflag"; then 1557e6fb56fSmrg gccflag=-MD, 1567e6fb56fSmrg fi 1577e6fb56fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 1587e6fb56fSmrg stat=$? 1597e6fb56fSmrg if test $stat -eq 0; then : 1607e6fb56fSmrg else 1617e6fb56fSmrg rm -f "$tmpdepfile" 1627e6fb56fSmrg exit $stat 1637e6fb56fSmrg fi 1647e6fb56fSmrg rm -f "$depfile" 1657e6fb56fSmrg echo "$object : \\" > "$depfile" 1667e6fb56fSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1677e6fb56fSmrg## The second -e expression handles DOS-style file names with drive letters. 1687e6fb56fSmrg sed -e 's/^[^:]*: / /' \ 1697e6fb56fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 17090b17f1bSmrg## This next piece of magic avoids the "deleted header file" problem. 1717e6fb56fSmrg## The problem is that when a header file which appears in a .P file 1727e6fb56fSmrg## is deleted, the dependency causes make to die (because there is 1737e6fb56fSmrg## typically no way to rebuild the header). We avoid this by adding 1747e6fb56fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 1757e6fb56fSmrg## this for us directly. 17690b17f1bSmrg tr ' ' "$nl" < "$tmpdepfile" | 17790b17f1bSmrg## Some versions of gcc put a space before the ':'. On the theory 1787e6fb56fSmrg## that the space means something, we add a space to the output as 17990b17f1bSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 18090b17f1bSmrg## to the object. Take care to not repeat it in the output. 1817e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 1827e6fb56fSmrg## correctly. Breaking it into two sed invocations is a workaround. 18390b17f1bSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 18490b17f1bSmrg | sed -e 's/$/ :/' >> "$depfile" 1857e6fb56fSmrg rm -f "$tmpdepfile" 1867e6fb56fSmrg ;; 1877e6fb56fSmrg 1887e6fb56fSmrghp) 1897e6fb56fSmrg # This case exists only to let depend.m4 do its work. It works by 1907e6fb56fSmrg # looking at the text of this script. This case will never be run, 1917e6fb56fSmrg # since it is checked for above. 1927e6fb56fSmrg exit 1 1937e6fb56fSmrg ;; 1947e6fb56fSmrg 1957e6fb56fSmrgsgi) 1967e6fb56fSmrg if test "$libtool" = yes; then 1977e6fb56fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 1987e6fb56fSmrg else 1997e6fb56fSmrg "$@" -MDupdate "$tmpdepfile" 2007e6fb56fSmrg fi 2017e6fb56fSmrg stat=$? 2027e6fb56fSmrg if test $stat -eq 0; then : 2037e6fb56fSmrg else 2047e6fb56fSmrg rm -f "$tmpdepfile" 2057e6fb56fSmrg exit $stat 2067e6fb56fSmrg fi 2077e6fb56fSmrg rm -f "$depfile" 2087e6fb56fSmrg 2097e6fb56fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 2107e6fb56fSmrg echo "$object : \\" > "$depfile" 2117e6fb56fSmrg 2127e6fb56fSmrg # Clip off the initial element (the dependent). Don't try to be 2137e6fb56fSmrg # clever and replace this with sed code, as IRIX sed won't handle 2147e6fb56fSmrg # lines with more than a fixed number of characters (4096 in 2157e6fb56fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 21690b17f1bSmrg # the IRIX cc adds comments like '#:fec' to the end of the 2177e6fb56fSmrg # dependency line. 21890b17f1bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 2197e6fb56fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 22090b17f1bSmrg tr "$nl" ' ' >> "$depfile" 2217e6fb56fSmrg echo >> "$depfile" 2227e6fb56fSmrg 2237e6fb56fSmrg # The second pass generates a dummy entry for each header file. 22490b17f1bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 2257e6fb56fSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2267e6fb56fSmrg >> "$depfile" 2277e6fb56fSmrg else 2287e6fb56fSmrg # The sourcefile does not contain any dependencies, so just 2297e6fb56fSmrg # store a dummy comment line, to avoid errors with the Makefile 2307e6fb56fSmrg # "include basename.Plo" scheme. 2317e6fb56fSmrg echo "#dummy" > "$depfile" 2327e6fb56fSmrg fi 2337e6fb56fSmrg rm -f "$tmpdepfile" 2347e6fb56fSmrg ;; 2357e6fb56fSmrg 23690b17f1bSmrgxlc) 23790b17f1bSmrg # This case exists only to let depend.m4 do its work. It works by 23890b17f1bSmrg # looking at the text of this script. This case will never be run, 23990b17f1bSmrg # since it is checked for above. 24090b17f1bSmrg exit 1 24190b17f1bSmrg ;; 24290b17f1bSmrg 2437e6fb56fSmrgaix) 2447e6fb56fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 2457e6fb56fSmrg # in a .u file. In older versions, this file always lives in the 24690b17f1bSmrg # current directory. Also, the AIX compiler puts '$object:' at the 2477e6fb56fSmrg # start of each line; $object doesn't have directory information. 2487e6fb56fSmrg # Version 6 uses the directory in both cases. 2497e6fb56fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2507e6fb56fSmrg test "x$dir" = "x$object" && dir= 2517e6fb56fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2527e6fb56fSmrg if test "$libtool" = yes; then 2537e6fb56fSmrg tmpdepfile1=$dir$base.u 2547e6fb56fSmrg tmpdepfile2=$base.u 2557e6fb56fSmrg tmpdepfile3=$dir.libs/$base.u 2567e6fb56fSmrg "$@" -Wc,-M 2577e6fb56fSmrg else 2587e6fb56fSmrg tmpdepfile1=$dir$base.u 2597e6fb56fSmrg tmpdepfile2=$dir$base.u 2607e6fb56fSmrg tmpdepfile3=$dir$base.u 2617e6fb56fSmrg "$@" -M 2627e6fb56fSmrg fi 2637e6fb56fSmrg stat=$? 2647e6fb56fSmrg 2657e6fb56fSmrg if test $stat -eq 0; then : 2667e6fb56fSmrg else 2677e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2687e6fb56fSmrg exit $stat 2697e6fb56fSmrg fi 2707e6fb56fSmrg 2717e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2727e6fb56fSmrg do 2737e6fb56fSmrg test -f "$tmpdepfile" && break 2747e6fb56fSmrg done 2757e6fb56fSmrg if test -f "$tmpdepfile"; then 27690b17f1bSmrg # Each line is of the form 'foo.o: dependent.h'. 2777e6fb56fSmrg # Do two passes, one to just change these to 27890b17f1bSmrg # '$object: dependent.h' and one to simply 'dependent.h:'. 2797e6fb56fSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 28090b17f1bSmrg sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2817e6fb56fSmrg else 2827e6fb56fSmrg # The sourcefile does not contain any dependencies, so just 2837e6fb56fSmrg # store a dummy comment line, to avoid errors with the Makefile 2847e6fb56fSmrg # "include basename.Plo" scheme. 2857e6fb56fSmrg echo "#dummy" > "$depfile" 2867e6fb56fSmrg fi 2877e6fb56fSmrg rm -f "$tmpdepfile" 2887e6fb56fSmrg ;; 2897e6fb56fSmrg 2907e6fb56fSmrgicc) 29190b17f1bSmrg # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. 29290b17f1bSmrg # However on 29390b17f1bSmrg # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2947e6fb56fSmrg # ICC 7.0 will fill foo.d with something like 2957e6fb56fSmrg # foo.o: sub/foo.c 2967e6fb56fSmrg # foo.o: sub/foo.h 29790b17f1bSmrg # which is wrong. We want 2987e6fb56fSmrg # sub/foo.o: sub/foo.c 2997e6fb56fSmrg # sub/foo.o: sub/foo.h 3007e6fb56fSmrg # sub/foo.c: 3017e6fb56fSmrg # sub/foo.h: 3027e6fb56fSmrg # ICC 7.1 will output 3037e6fb56fSmrg # foo.o: sub/foo.c sub/foo.h 30490b17f1bSmrg # and will wrap long lines using '\': 3057e6fb56fSmrg # foo.o: sub/foo.c ... \ 3067e6fb56fSmrg # sub/foo.h ... \ 3077e6fb56fSmrg # ... 30890b17f1bSmrg # tcc 0.9.26 (FIXME still under development at the moment of writing) 30990b17f1bSmrg # will emit a similar output, but also prepend the continuation lines 31090b17f1bSmrg # with horizontal tabulation characters. 3117e6fb56fSmrg "$@" -MD -MF "$tmpdepfile" 3127e6fb56fSmrg stat=$? 3137e6fb56fSmrg if test $stat -eq 0; then : 3147e6fb56fSmrg else 3157e6fb56fSmrg rm -f "$tmpdepfile" 3167e6fb56fSmrg exit $stat 3177e6fb56fSmrg fi 3187e6fb56fSmrg rm -f "$depfile" 31990b17f1bSmrg # Each line is of the form 'foo.o: dependent.h', 32090b17f1bSmrg # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. 3217e6fb56fSmrg # Do two passes, one to just change these to 32290b17f1bSmrg # '$object: dependent.h' and one to simply 'dependent.h:'. 32390b17f1bSmrg sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ 32490b17f1bSmrg < "$tmpdepfile" > "$depfile" 32590b17f1bSmrg sed ' 32690b17f1bSmrg s/[ '"$tab"'][ '"$tab"']*/ /g 32790b17f1bSmrg s/^ *// 32890b17f1bSmrg s/ *\\*$// 32990b17f1bSmrg s/^[^:]*: *// 33090b17f1bSmrg /^$/d 33190b17f1bSmrg /:$/d 33290b17f1bSmrg s/$/ :/ 33390b17f1bSmrg ' < "$tmpdepfile" >> "$depfile" 3347e6fb56fSmrg rm -f "$tmpdepfile" 3357e6fb56fSmrg ;; 3367e6fb56fSmrg 3377e6fb56fSmrghp2) 3387e6fb56fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3397e6fb56fSmrg # compilers, which have integrated preprocessors. The correct option 3407e6fb56fSmrg # to use with these is +Maked; it writes dependencies to a file named 3417e6fb56fSmrg # 'foo.d', which lands next to the object file, wherever that 3427e6fb56fSmrg # happens to be. 3437e6fb56fSmrg # Much of this is similar to the tru64 case; see comments there. 3447e6fb56fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3457e6fb56fSmrg test "x$dir" = "x$object" && dir= 3467e6fb56fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3477e6fb56fSmrg if test "$libtool" = yes; then 3487e6fb56fSmrg tmpdepfile1=$dir$base.d 3497e6fb56fSmrg tmpdepfile2=$dir.libs/$base.d 3507e6fb56fSmrg "$@" -Wc,+Maked 3517e6fb56fSmrg else 3527e6fb56fSmrg tmpdepfile1=$dir$base.d 3537e6fb56fSmrg tmpdepfile2=$dir$base.d 3547e6fb56fSmrg "$@" +Maked 3557e6fb56fSmrg fi 3567e6fb56fSmrg stat=$? 3577e6fb56fSmrg if test $stat -eq 0; then : 3587e6fb56fSmrg else 3597e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3607e6fb56fSmrg exit $stat 3617e6fb56fSmrg fi 3627e6fb56fSmrg 3637e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3647e6fb56fSmrg do 3657e6fb56fSmrg test -f "$tmpdepfile" && break 3667e6fb56fSmrg done 3677e6fb56fSmrg if test -f "$tmpdepfile"; then 3687e6fb56fSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 36990b17f1bSmrg # Add 'dependent.h:' lines. 3707e6fb56fSmrg sed -ne '2,${ 3717e6fb56fSmrg s/^ *// 3727e6fb56fSmrg s/ \\*$// 3737e6fb56fSmrg s/$/:/ 3747e6fb56fSmrg p 3757e6fb56fSmrg }' "$tmpdepfile" >> "$depfile" 3767e6fb56fSmrg else 3777e6fb56fSmrg echo "#dummy" > "$depfile" 3787e6fb56fSmrg fi 3797e6fb56fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3807e6fb56fSmrg ;; 3817e6fb56fSmrg 3827e6fb56fSmrgtru64) 3837e6fb56fSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 38490b17f1bSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 3857e6fb56fSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 38690b17f1bSmrg # dependencies in 'foo.d' instead, so we check for that too. 3877e6fb56fSmrg # Subdirectories are respected. 3887e6fb56fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3897e6fb56fSmrg test "x$dir" = "x$object" && dir= 3907e6fb56fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3917e6fb56fSmrg 3927e6fb56fSmrg if test "$libtool" = yes; then 3937e6fb56fSmrg # With Tru64 cc, shared objects can also be used to make a 3947e6fb56fSmrg # static library. This mechanism is used in libtool 1.4 series to 3957e6fb56fSmrg # handle both shared and static libraries in a single compilation. 3967e6fb56fSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3977e6fb56fSmrg # 3987e6fb56fSmrg # With libtool 1.5 this exception was removed, and libtool now 3997e6fb56fSmrg # generates 2 separate objects for the 2 libraries. These two 4007e6fb56fSmrg # compilations output dependencies in $dir.libs/$base.o.d and 4017e6fb56fSmrg # in $dir$base.o.d. We have to check for both files, because 4027e6fb56fSmrg # one of the two compilations can be disabled. We should prefer 4037e6fb56fSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 4047e6fb56fSmrg # automatically cleaned when .libs/ is deleted, while ignoring 4057e6fb56fSmrg # the former would cause a distcleancheck panic. 4067e6fb56fSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 4077e6fb56fSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 4087e6fb56fSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 4097e6fb56fSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 4107e6fb56fSmrg "$@" -Wc,-MD 4117e6fb56fSmrg else 4127e6fb56fSmrg tmpdepfile1=$dir$base.o.d 4137e6fb56fSmrg tmpdepfile2=$dir$base.d 4147e6fb56fSmrg tmpdepfile3=$dir$base.d 4157e6fb56fSmrg tmpdepfile4=$dir$base.d 4167e6fb56fSmrg "$@" -MD 4177e6fb56fSmrg fi 4187e6fb56fSmrg 4197e6fb56fSmrg stat=$? 4207e6fb56fSmrg if test $stat -eq 0; then : 4217e6fb56fSmrg else 4227e6fb56fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4237e6fb56fSmrg exit $stat 4247e6fb56fSmrg fi 4257e6fb56fSmrg 4267e6fb56fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4277e6fb56fSmrg do 4287e6fb56fSmrg test -f "$tmpdepfile" && break 4297e6fb56fSmrg done 4307e6fb56fSmrg if test -f "$tmpdepfile"; then 4317e6fb56fSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 43290b17f1bSmrg sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4337e6fb56fSmrg else 4347e6fb56fSmrg echo "#dummy" > "$depfile" 4357e6fb56fSmrg fi 4367e6fb56fSmrg rm -f "$tmpdepfile" 4377e6fb56fSmrg ;; 4387e6fb56fSmrg 43990b17f1bSmrgmsvc7) 44090b17f1bSmrg if test "$libtool" = yes; then 44190b17f1bSmrg showIncludes=-Wc,-showIncludes 44290b17f1bSmrg else 44390b17f1bSmrg showIncludes=-showIncludes 44490b17f1bSmrg fi 44590b17f1bSmrg "$@" $showIncludes > "$tmpdepfile" 44690b17f1bSmrg stat=$? 44790b17f1bSmrg grep -v '^Note: including file: ' "$tmpdepfile" 44890b17f1bSmrg if test "$stat" = 0; then : 44990b17f1bSmrg else 45090b17f1bSmrg rm -f "$tmpdepfile" 45190b17f1bSmrg exit $stat 45290b17f1bSmrg fi 45390b17f1bSmrg rm -f "$depfile" 45490b17f1bSmrg echo "$object : \\" > "$depfile" 45590b17f1bSmrg # The first sed program below extracts the file names and escapes 45690b17f1bSmrg # backslashes for cygpath. The second sed program outputs the file 45790b17f1bSmrg # name when reading, but also accumulates all include files in the 45890b17f1bSmrg # hold buffer in order to output them again at the end. This only 45990b17f1bSmrg # works with sed implementations that can handle large buffers. 46090b17f1bSmrg sed < "$tmpdepfile" -n ' 46190b17f1bSmrg/^Note: including file: *\(.*\)/ { 46290b17f1bSmrg s//\1/ 46390b17f1bSmrg s/\\/\\\\/g 46490b17f1bSmrg p 46590b17f1bSmrg}' | $cygpath_u | sort -u | sed -n ' 46690b17f1bSmrgs/ /\\ /g 46790b17f1bSmrgs/\(.*\)/'"$tab"'\1 \\/p 46890b17f1bSmrgs/.\(.*\) \\/\1:/ 46990b17f1bSmrgH 47090b17f1bSmrg$ { 47190b17f1bSmrg s/.*/'"$tab"'/ 47290b17f1bSmrg G 47390b17f1bSmrg p 47490b17f1bSmrg}' >> "$depfile" 47590b17f1bSmrg rm -f "$tmpdepfile" 47690b17f1bSmrg ;; 47790b17f1bSmrg 47890b17f1bSmrgmsvc7msys) 47990b17f1bSmrg # This case exists only to let depend.m4 do its work. It works by 48090b17f1bSmrg # looking at the text of this script. This case will never be run, 48190b17f1bSmrg # since it is checked for above. 48290b17f1bSmrg exit 1 48390b17f1bSmrg ;; 48490b17f1bSmrg 4857e6fb56fSmrg#nosideeffect) 4867e6fb56fSmrg # This comment above is used by automake to tell side-effect 4877e6fb56fSmrg # dependency tracking mechanisms from slower ones. 4887e6fb56fSmrg 4897e6fb56fSmrgdashmstdout) 4907e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 4917e6fb56fSmrg # always write the preprocessed file to stdout, regardless of -o. 4927e6fb56fSmrg "$@" || exit $? 4937e6fb56fSmrg 4947e6fb56fSmrg # Remove the call to Libtool. 4957e6fb56fSmrg if test "$libtool" = yes; then 4967e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 4977e6fb56fSmrg shift 4987e6fb56fSmrg done 4997e6fb56fSmrg shift 5007e6fb56fSmrg fi 5017e6fb56fSmrg 50290b17f1bSmrg # Remove '-o $object'. 5037e6fb56fSmrg IFS=" " 5047e6fb56fSmrg for arg 5057e6fb56fSmrg do 5067e6fb56fSmrg case $arg in 5077e6fb56fSmrg -o) 5087e6fb56fSmrg shift 5097e6fb56fSmrg ;; 5107e6fb56fSmrg $object) 5117e6fb56fSmrg shift 5127e6fb56fSmrg ;; 5137e6fb56fSmrg *) 5147e6fb56fSmrg set fnord "$@" "$arg" 5157e6fb56fSmrg shift # fnord 5167e6fb56fSmrg shift # $arg 5177e6fb56fSmrg ;; 5187e6fb56fSmrg esac 5197e6fb56fSmrg done 5207e6fb56fSmrg 5217e6fb56fSmrg test -z "$dashmflag" && dashmflag=-M 52290b17f1bSmrg # Require at least two characters before searching for ':' 5237e6fb56fSmrg # in the target name. This is to cope with DOS-style filenames: 52490b17f1bSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 5257e6fb56fSmrg "$@" $dashmflag | 52690b17f1bSmrg sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" 5277e6fb56fSmrg rm -f "$depfile" 5287e6fb56fSmrg cat < "$tmpdepfile" > "$depfile" 52990b17f1bSmrg tr ' ' "$nl" < "$tmpdepfile" | \ 5307e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 5317e6fb56fSmrg## correctly. Breaking it into two sed invocations is a workaround. 5327e6fb56fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5337e6fb56fSmrg rm -f "$tmpdepfile" 5347e6fb56fSmrg ;; 5357e6fb56fSmrg 5367e6fb56fSmrgdashXmstdout) 5377e6fb56fSmrg # This case only exists to satisfy depend.m4. It is never actually 5387e6fb56fSmrg # run, as this mode is specially recognized in the preamble. 5397e6fb56fSmrg exit 1 5407e6fb56fSmrg ;; 5417e6fb56fSmrg 5427e6fb56fSmrgmakedepend) 5437e6fb56fSmrg "$@" || exit $? 5447e6fb56fSmrg # Remove any Libtool call 5457e6fb56fSmrg if test "$libtool" = yes; then 5467e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 5477e6fb56fSmrg shift 5487e6fb56fSmrg done 5497e6fb56fSmrg shift 5507e6fb56fSmrg fi 5517e6fb56fSmrg # X makedepend 5527e6fb56fSmrg shift 5537e6fb56fSmrg cleared=no eat=no 5547e6fb56fSmrg for arg 5557e6fb56fSmrg do 5567e6fb56fSmrg case $cleared in 5577e6fb56fSmrg no) 5587e6fb56fSmrg set ""; shift 5597e6fb56fSmrg cleared=yes ;; 5607e6fb56fSmrg esac 5617e6fb56fSmrg if test $eat = yes; then 5627e6fb56fSmrg eat=no 5637e6fb56fSmrg continue 5647e6fb56fSmrg fi 5657e6fb56fSmrg case "$arg" in 5667e6fb56fSmrg -D*|-I*) 5677e6fb56fSmrg set fnord "$@" "$arg"; shift ;; 5687e6fb56fSmrg # Strip any option that makedepend may not understand. Remove 5697e6fb56fSmrg # the object too, otherwise makedepend will parse it as a source file. 5707e6fb56fSmrg -arch) 5717e6fb56fSmrg eat=yes ;; 5727e6fb56fSmrg -*|$object) 5737e6fb56fSmrg ;; 5747e6fb56fSmrg *) 5757e6fb56fSmrg set fnord "$@" "$arg"; shift ;; 5767e6fb56fSmrg esac 5777e6fb56fSmrg done 5787e6fb56fSmrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 5797e6fb56fSmrg touch "$tmpdepfile" 5807e6fb56fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5817e6fb56fSmrg rm -f "$depfile" 58290b17f1bSmrg # makedepend may prepend the VPATH from the source file name to the object. 58390b17f1bSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 58490b17f1bSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 58590b17f1bSmrg sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ 5867e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 5877e6fb56fSmrg## correctly. Breaking it into two sed invocations is a workaround. 5887e6fb56fSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5897e6fb56fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 5907e6fb56fSmrg ;; 5917e6fb56fSmrg 5927e6fb56fSmrgcpp) 5937e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 5947e6fb56fSmrg # always write the preprocessed file to stdout. 5957e6fb56fSmrg "$@" || exit $? 5967e6fb56fSmrg 5977e6fb56fSmrg # Remove the call to Libtool. 5987e6fb56fSmrg if test "$libtool" = yes; then 5997e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 6007e6fb56fSmrg shift 6017e6fb56fSmrg done 6027e6fb56fSmrg shift 6037e6fb56fSmrg fi 6047e6fb56fSmrg 60590b17f1bSmrg # Remove '-o $object'. 6067e6fb56fSmrg IFS=" " 6077e6fb56fSmrg for arg 6087e6fb56fSmrg do 6097e6fb56fSmrg case $arg in 6107e6fb56fSmrg -o) 6117e6fb56fSmrg shift 6127e6fb56fSmrg ;; 6137e6fb56fSmrg $object) 6147e6fb56fSmrg shift 6157e6fb56fSmrg ;; 6167e6fb56fSmrg *) 6177e6fb56fSmrg set fnord "$@" "$arg" 6187e6fb56fSmrg shift # fnord 6197e6fb56fSmrg shift # $arg 6207e6fb56fSmrg ;; 6217e6fb56fSmrg esac 6227e6fb56fSmrg done 6237e6fb56fSmrg 6247e6fb56fSmrg "$@" -E | 6257e6fb56fSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 6267e6fb56fSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 6277e6fb56fSmrg sed '$ s: \\$::' > "$tmpdepfile" 6287e6fb56fSmrg rm -f "$depfile" 6297e6fb56fSmrg echo "$object : \\" > "$depfile" 6307e6fb56fSmrg cat < "$tmpdepfile" >> "$depfile" 6317e6fb56fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 6327e6fb56fSmrg rm -f "$tmpdepfile" 6337e6fb56fSmrg ;; 6347e6fb56fSmrg 6357e6fb56fSmrgmsvisualcpp) 6367e6fb56fSmrg # Important note: in order to support this mode, a compiler *must* 6377e6fb56fSmrg # always write the preprocessed file to stdout. 6387e6fb56fSmrg "$@" || exit $? 6397e6fb56fSmrg 6407e6fb56fSmrg # Remove the call to Libtool. 6417e6fb56fSmrg if test "$libtool" = yes; then 6427e6fb56fSmrg while test "X$1" != 'X--mode=compile'; do 6437e6fb56fSmrg shift 6447e6fb56fSmrg done 6457e6fb56fSmrg shift 6467e6fb56fSmrg fi 6477e6fb56fSmrg 6487e6fb56fSmrg IFS=" " 6497e6fb56fSmrg for arg 6507e6fb56fSmrg do 6517e6fb56fSmrg case "$arg" in 6527e6fb56fSmrg -o) 6537e6fb56fSmrg shift 6547e6fb56fSmrg ;; 6557e6fb56fSmrg $object) 6567e6fb56fSmrg shift 6577e6fb56fSmrg ;; 6587e6fb56fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 6597e6fb56fSmrg set fnord "$@" 6607e6fb56fSmrg shift 6617e6fb56fSmrg shift 6627e6fb56fSmrg ;; 6637e6fb56fSmrg *) 6647e6fb56fSmrg set fnord "$@" "$arg" 6657e6fb56fSmrg shift 6667e6fb56fSmrg shift 6677e6fb56fSmrg ;; 6687e6fb56fSmrg esac 6697e6fb56fSmrg done 6707e6fb56fSmrg "$@" -E 2>/dev/null | 6717e6fb56fSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 6727e6fb56fSmrg rm -f "$depfile" 6737e6fb56fSmrg echo "$object : \\" > "$depfile" 67490b17f1bSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 67590b17f1bSmrg echo "$tab" >> "$depfile" 6767e6fb56fSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6777e6fb56fSmrg rm -f "$tmpdepfile" 6787e6fb56fSmrg ;; 6797e6fb56fSmrg 6807e6fb56fSmrgmsvcmsys) 6817e6fb56fSmrg # This case exists only to let depend.m4 do its work. It works by 6827e6fb56fSmrg # looking at the text of this script. This case will never be run, 6837e6fb56fSmrg # since it is checked for above. 6847e6fb56fSmrg exit 1 6857e6fb56fSmrg ;; 6867e6fb56fSmrg 6877e6fb56fSmrgnone) 6887e6fb56fSmrg exec "$@" 6897e6fb56fSmrg ;; 6907e6fb56fSmrg 6917e6fb56fSmrg*) 6927e6fb56fSmrg echo "Unknown depmode $depmode" 1>&2 6937e6fb56fSmrg exit 1 6947e6fb56fSmrg ;; 6957e6fb56fSmrgesac 6967e6fb56fSmrg 6977e6fb56fSmrgexit 0 6987e6fb56fSmrg 6997e6fb56fSmrg# Local Variables: 7007e6fb56fSmrg# mode: shell-script 7017e6fb56fSmrg# sh-indentation: 2 7027e6fb56fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 7037e6fb56fSmrg# time-stamp-start: "scriptversion=" 7047e6fb56fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7057e6fb56fSmrg# time-stamp-time-zone: "UTC" 7067e6fb56fSmrg# time-stamp-end: "; # UTC" 7077e6fb56fSmrg# End: 708