depcomp revision a1d73b4b
1c06b6b69Smrg#! /bin/sh 2c06b6b69Smrg# depcomp - compile a program generating dependencies as side-effects 3c06b6b69Smrg 4a1d73b4bSmrgscriptversion=2011-12-04.11; # UTC 5c06b6b69Smrg 6a1d73b4bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 7a1d73b4bSmrg# 2011 Free Software Foundation, Inc. 8c06b6b69Smrg 9c06b6b69Smrg# This program is free software; you can redistribute it and/or modify 10c06b6b69Smrg# it under the terms of the GNU General Public License as published by 11c06b6b69Smrg# the Free Software Foundation; either version 2, or (at your option) 12c06b6b69Smrg# any later version. 13c06b6b69Smrg 14c06b6b69Smrg# This program is distributed in the hope that it will be useful, 15c06b6b69Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16c06b6b69Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17c06b6b69Smrg# GNU General Public License for more details. 18c06b6b69Smrg 19c06b6b69Smrg# You should have received a copy of the GNU General Public License 207d17d341Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21c06b6b69Smrg 22c06b6b69Smrg# As a special exception to the GNU General Public License, if you 23c06b6b69Smrg# distribute this file as part of a program that contains a 24c06b6b69Smrg# configuration script generated by Autoconf, you may include it under 25c06b6b69Smrg# the same distribution terms that you use for the rest of that program. 26c06b6b69Smrg 27c06b6b69Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28c06b6b69Smrg 29c06b6b69Smrgcase $1 in 30c06b6b69Smrg '') 31c06b6b69Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32c06b6b69Smrg exit 1; 33c06b6b69Smrg ;; 34c06b6b69Smrg -h | --h*) 35c06b6b69Smrg cat <<\EOF 36c06b6b69SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37c06b6b69Smrg 38c06b6b69SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39c06b6b69Smrgas side-effects. 40c06b6b69Smrg 41c06b6b69SmrgEnvironment variables: 42c06b6b69Smrg depmode Dependency tracking mode. 43c06b6b69Smrg source Source file read by `PROGRAMS ARGS'. 44c06b6b69Smrg object Object file output by `PROGRAMS ARGS'. 45c06b6b69Smrg DEPDIR directory where to store dependencies. 46c06b6b69Smrg depfile Dependency file to output. 47a1d73b4bSmrg tmpdepfile Temporary file to use when outputting dependencies. 48c06b6b69Smrg libtool Whether libtool is used (yes/no). 49c06b6b69Smrg 50c06b6b69SmrgReport bugs to <bug-automake@gnu.org>. 51c06b6b69SmrgEOF 52c06b6b69Smrg exit $? 53c06b6b69Smrg ;; 54c06b6b69Smrg -v | --v*) 55c06b6b69Smrg echo "depcomp $scriptversion" 56c06b6b69Smrg exit $? 57c06b6b69Smrg ;; 58c06b6b69Smrgesac 59c06b6b69Smrg 60c06b6b69Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61c06b6b69Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62c06b6b69Smrg exit 1 63c06b6b69Smrgfi 64c06b6b69Smrg 65c06b6b69Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66c06b6b69Smrgdepfile=${depfile-`echo "$object" | 67c06b6b69Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68c06b6b69Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69c06b6b69Smrg 70c06b6b69Smrgrm -f "$tmpdepfile" 71c06b6b69Smrg 72c06b6b69Smrg# Some modes work just like other modes, but use different flags. We 73c06b6b69Smrg# parameterize here, but still list the modes in the big case below, 74c06b6b69Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75c06b6b69Smrg# here, because this file can only contain one case statement. 76c06b6b69Smrgif test "$depmode" = hp; then 77c06b6b69Smrg # HP compiler uses -M and no extra arg. 78c06b6b69Smrg gccflag=-M 79c06b6b69Smrg depmode=gcc 80c06b6b69Smrgfi 81c06b6b69Smrg 82c06b6b69Smrgif test "$depmode" = dashXmstdout; then 83c06b6b69Smrg # This is just like dashmstdout with a different argument. 84c06b6b69Smrg dashmflag=-xM 85c06b6b69Smrg depmode=dashmstdout 86c06b6b69Smrgfi 87c06b6b69Smrg 887d17d341Smrgcygpath_u="cygpath -u -f -" 897d17d341Smrgif test "$depmode" = msvcmsys; then 907d17d341Smrg # This is just like msvisualcpp but w/o cygpath translation. 917d17d341Smrg # Just convert the backslash-escaped backslashes to single forward 927d17d341Smrg # slashes to satisfy depend.m4 93a1d73b4bSmrg cygpath_u='sed s,\\\\,/,g' 947d17d341Smrg depmode=msvisualcpp 957d17d341Smrgfi 967d17d341Smrg 97a1d73b4bSmrgif test "$depmode" = msvc7msys; then 98a1d73b4bSmrg # This is just like msvc7 but w/o cygpath translation. 99a1d73b4bSmrg # Just convert the backslash-escaped backslashes to single forward 100a1d73b4bSmrg # slashes to satisfy depend.m4 101a1d73b4bSmrg cygpath_u='sed s,\\\\,/,g' 102a1d73b4bSmrg depmode=msvc7 103a1d73b4bSmrgfi 104a1d73b4bSmrg 105c06b6b69Smrgcase "$depmode" in 106c06b6b69Smrggcc3) 107c06b6b69Smrg## gcc 3 implements dependency tracking that does exactly what 108c06b6b69Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 109c06b6b69Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1109f4658d1Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1119f4658d1Smrg## the command line argument order; so add the flags where they 1129f4658d1Smrg## appear in depend2.am. Note that the slowdown incurred here 1139f4658d1Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1149f4658d1Smrg for arg 1159f4658d1Smrg do 1169f4658d1Smrg case $arg in 1179f4658d1Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1189f4658d1Smrg *) set fnord "$@" "$arg" ;; 1199f4658d1Smrg esac 1209f4658d1Smrg shift # fnord 1219f4658d1Smrg shift # $arg 1229f4658d1Smrg done 1239f4658d1Smrg "$@" 124c06b6b69Smrg stat=$? 125c06b6b69Smrg if test $stat -eq 0; then : 126c06b6b69Smrg else 127c06b6b69Smrg rm -f "$tmpdepfile" 128c06b6b69Smrg exit $stat 129c06b6b69Smrg fi 130c06b6b69Smrg mv "$tmpdepfile" "$depfile" 131c06b6b69Smrg ;; 132c06b6b69Smrg 133c06b6b69Smrggcc) 134c06b6b69Smrg## There are various ways to get dependency output from gcc. Here's 135c06b6b69Smrg## why we pick this rather obscure method: 136c06b6b69Smrg## - Don't want to use -MD because we'd like the dependencies to end 137c06b6b69Smrg## up in a subdir. Having to rename by hand is ugly. 138c06b6b69Smrg## (We might end up doing this anyway to support other compilers.) 139c06b6b69Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140c06b6b69Smrg## -MM, not -M (despite what the docs say). 141c06b6b69Smrg## - Using -M directly means running the compiler twice (even worse 142c06b6b69Smrg## than renaming). 143c06b6b69Smrg if test -z "$gccflag"; then 144c06b6b69Smrg gccflag=-MD, 145c06b6b69Smrg fi 146c06b6b69Smrg "$@" -Wp,"$gccflag$tmpdepfile" 147c06b6b69Smrg stat=$? 148c06b6b69Smrg if test $stat -eq 0; then : 149c06b6b69Smrg else 150c06b6b69Smrg rm -f "$tmpdepfile" 151c06b6b69Smrg exit $stat 152c06b6b69Smrg fi 153c06b6b69Smrg rm -f "$depfile" 154c06b6b69Smrg echo "$object : \\" > "$depfile" 155c06b6b69Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156c06b6b69Smrg## The second -e expression handles DOS-style file names with drive letters. 157c06b6b69Smrg sed -e 's/^[^:]*: / /' \ 158c06b6b69Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159c06b6b69Smrg## This next piece of magic avoids the `deleted header file' problem. 160c06b6b69Smrg## The problem is that when a header file which appears in a .P file 161c06b6b69Smrg## is deleted, the dependency causes make to die (because there is 162c06b6b69Smrg## typically no way to rebuild the header). We avoid this by adding 163c06b6b69Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 164c06b6b69Smrg## this for us directly. 165c06b6b69Smrg tr ' ' ' 166c06b6b69Smrg' < "$tmpdepfile" | 167c06b6b69Smrg## Some versions of gcc put a space before the `:'. On the theory 168c06b6b69Smrg## that the space means something, we add a space to the output as 169a1d73b4bSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 170a1d73b4bSmrg## to the object. Take care to not repeat it in the output. 171c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 172c06b6b69Smrg## correctly. Breaking it into two sed invocations is a workaround. 173a1d73b4bSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 174a1d73b4bSmrg | sed -e 's/$/ :/' >> "$depfile" 175c06b6b69Smrg rm -f "$tmpdepfile" 176c06b6b69Smrg ;; 177c06b6b69Smrg 178c06b6b69Smrghp) 179c06b6b69Smrg # This case exists only to let depend.m4 do its work. It works by 180c06b6b69Smrg # looking at the text of this script. This case will never be run, 181c06b6b69Smrg # since it is checked for above. 182c06b6b69Smrg exit 1 183c06b6b69Smrg ;; 184c06b6b69Smrg 185c06b6b69Smrgsgi) 186c06b6b69Smrg if test "$libtool" = yes; then 187c06b6b69Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 188c06b6b69Smrg else 189c06b6b69Smrg "$@" -MDupdate "$tmpdepfile" 190c06b6b69Smrg fi 191c06b6b69Smrg stat=$? 192c06b6b69Smrg if test $stat -eq 0; then : 193c06b6b69Smrg else 194c06b6b69Smrg rm -f "$tmpdepfile" 195c06b6b69Smrg exit $stat 196c06b6b69Smrg fi 197c06b6b69Smrg rm -f "$depfile" 198c06b6b69Smrg 199c06b6b69Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 200c06b6b69Smrg echo "$object : \\" > "$depfile" 201c06b6b69Smrg 202c06b6b69Smrg # Clip off the initial element (the dependent). Don't try to be 203c06b6b69Smrg # clever and replace this with sed code, as IRIX sed won't handle 204c06b6b69Smrg # lines with more than a fixed number of characters (4096 in 205c06b6b69Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206c06b6b69Smrg # the IRIX cc adds comments like `#:fec' to the end of the 207c06b6b69Smrg # dependency line. 208c06b6b69Smrg tr ' ' ' 209c06b6b69Smrg' < "$tmpdepfile" \ 210c06b6b69Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211c06b6b69Smrg tr ' 2127d17d341Smrg' ' ' >> "$depfile" 2137d17d341Smrg echo >> "$depfile" 214c06b6b69Smrg 215c06b6b69Smrg # The second pass generates a dummy entry for each header file. 216c06b6b69Smrg tr ' ' ' 217c06b6b69Smrg' < "$tmpdepfile" \ 218c06b6b69Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2197d17d341Smrg >> "$depfile" 220c06b6b69Smrg else 221c06b6b69Smrg # The sourcefile does not contain any dependencies, so just 222c06b6b69Smrg # store a dummy comment line, to avoid errors with the Makefile 223c06b6b69Smrg # "include basename.Plo" scheme. 224c06b6b69Smrg echo "#dummy" > "$depfile" 225c06b6b69Smrg fi 226c06b6b69Smrg rm -f "$tmpdepfile" 227c06b6b69Smrg ;; 228c06b6b69Smrg 229c06b6b69Smrgaix) 230c06b6b69Smrg # The C for AIX Compiler uses -M and outputs the dependencies 231c06b6b69Smrg # in a .u file. In older versions, this file always lives in the 232c06b6b69Smrg # current directory. Also, the AIX compiler puts `$object:' at the 233c06b6b69Smrg # start of each line; $object doesn't have directory information. 234c06b6b69Smrg # Version 6 uses the directory in both cases. 2359f4658d1Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2369f4658d1Smrg test "x$dir" = "x$object" && dir= 2379f4658d1Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 238c06b6b69Smrg if test "$libtool" = yes; then 2399f4658d1Smrg tmpdepfile1=$dir$base.u 2409f4658d1Smrg tmpdepfile2=$base.u 2419f4658d1Smrg tmpdepfile3=$dir.libs/$base.u 242c06b6b69Smrg "$@" -Wc,-M 243c06b6b69Smrg else 2449f4658d1Smrg tmpdepfile1=$dir$base.u 2459f4658d1Smrg tmpdepfile2=$dir$base.u 2469f4658d1Smrg tmpdepfile3=$dir$base.u 247c06b6b69Smrg "$@" -M 248c06b6b69Smrg fi 249c06b6b69Smrg stat=$? 250c06b6b69Smrg 251c06b6b69Smrg if test $stat -eq 0; then : 252c06b6b69Smrg else 2539f4658d1Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 254c06b6b69Smrg exit $stat 255c06b6b69Smrg fi 256c06b6b69Smrg 2579f4658d1Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2589f4658d1Smrg do 2599f4658d1Smrg test -f "$tmpdepfile" && break 2609f4658d1Smrg done 261c06b6b69Smrg if test -f "$tmpdepfile"; then 262c06b6b69Smrg # Each line is of the form `foo.o: dependent.h'. 263c06b6b69Smrg # Do two passes, one to just change these to 264c06b6b69Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2659f4658d1Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2669f4658d1Smrg # That's a tab and a space in the []. 2679f4658d1Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268c06b6b69Smrg else 269c06b6b69Smrg # The sourcefile does not contain any dependencies, so just 270c06b6b69Smrg # store a dummy comment line, to avoid errors with the Makefile 271c06b6b69Smrg # "include basename.Plo" scheme. 272c06b6b69Smrg echo "#dummy" > "$depfile" 273c06b6b69Smrg fi 274c06b6b69Smrg rm -f "$tmpdepfile" 275c06b6b69Smrg ;; 276c06b6b69Smrg 277c06b6b69Smrgicc) 278c06b6b69Smrg # Intel's C compiler understands `-MD -MF file'. However on 279c06b6b69Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280c06b6b69Smrg # ICC 7.0 will fill foo.d with something like 281c06b6b69Smrg # foo.o: sub/foo.c 282c06b6b69Smrg # foo.o: sub/foo.h 283c06b6b69Smrg # which is wrong. We want: 284c06b6b69Smrg # sub/foo.o: sub/foo.c 285c06b6b69Smrg # sub/foo.o: sub/foo.h 286c06b6b69Smrg # sub/foo.c: 287c06b6b69Smrg # sub/foo.h: 288c06b6b69Smrg # ICC 7.1 will output 289c06b6b69Smrg # foo.o: sub/foo.c sub/foo.h 290c06b6b69Smrg # and will wrap long lines using \ : 291c06b6b69Smrg # foo.o: sub/foo.c ... \ 292c06b6b69Smrg # sub/foo.h ... \ 293c06b6b69Smrg # ... 294c06b6b69Smrg 295c06b6b69Smrg "$@" -MD -MF "$tmpdepfile" 296c06b6b69Smrg stat=$? 297c06b6b69Smrg if test $stat -eq 0; then : 298c06b6b69Smrg else 299c06b6b69Smrg rm -f "$tmpdepfile" 300c06b6b69Smrg exit $stat 301c06b6b69Smrg fi 302c06b6b69Smrg rm -f "$depfile" 303c06b6b69Smrg # Each line is of the form `foo.o: dependent.h', 304c06b6b69Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 305c06b6b69Smrg # Do two passes, one to just change these to 306c06b6b69Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 307c06b6b69Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308c06b6b69Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 309c06b6b69Smrg # correctly. Breaking it into two sed invocations is a workaround. 310c06b6b69Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311c06b6b69Smrg sed -e 's/$/ :/' >> "$depfile" 312c06b6b69Smrg rm -f "$tmpdepfile" 313c06b6b69Smrg ;; 314c06b6b69Smrg 3159f4658d1Smrghp2) 3169f4658d1Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3179f4658d1Smrg # compilers, which have integrated preprocessors. The correct option 3189f4658d1Smrg # to use with these is +Maked; it writes dependencies to a file named 3199f4658d1Smrg # 'foo.d', which lands next to the object file, wherever that 3209f4658d1Smrg # happens to be. 3219f4658d1Smrg # Much of this is similar to the tru64 case; see comments there. 3229f4658d1Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3239f4658d1Smrg test "x$dir" = "x$object" && dir= 3249f4658d1Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3259f4658d1Smrg if test "$libtool" = yes; then 3269f4658d1Smrg tmpdepfile1=$dir$base.d 3279f4658d1Smrg tmpdepfile2=$dir.libs/$base.d 3289f4658d1Smrg "$@" -Wc,+Maked 3299f4658d1Smrg else 3309f4658d1Smrg tmpdepfile1=$dir$base.d 3319f4658d1Smrg tmpdepfile2=$dir$base.d 3329f4658d1Smrg "$@" +Maked 3339f4658d1Smrg fi 3349f4658d1Smrg stat=$? 3359f4658d1Smrg if test $stat -eq 0; then : 3369f4658d1Smrg else 3379f4658d1Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3389f4658d1Smrg exit $stat 3399f4658d1Smrg fi 3409f4658d1Smrg 3419f4658d1Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3429f4658d1Smrg do 3439f4658d1Smrg test -f "$tmpdepfile" && break 3449f4658d1Smrg done 3459f4658d1Smrg if test -f "$tmpdepfile"; then 3469f4658d1Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3479f4658d1Smrg # Add `dependent.h:' lines. 3487d17d341Smrg sed -ne '2,${ 3497d17d341Smrg s/^ *// 3507d17d341Smrg s/ \\*$// 3517d17d341Smrg s/$/:/ 3527d17d341Smrg p 3537d17d341Smrg }' "$tmpdepfile" >> "$depfile" 3549f4658d1Smrg else 3559f4658d1Smrg echo "#dummy" > "$depfile" 3569f4658d1Smrg fi 3579f4658d1Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3589f4658d1Smrg ;; 3599f4658d1Smrg 360c06b6b69Smrgtru64) 361c06b6b69Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 362c06b6b69Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363c06b6b69Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364c06b6b69Smrg # dependencies in `foo.d' instead, so we check for that too. 365c06b6b69Smrg # Subdirectories are respected. 366c06b6b69Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367c06b6b69Smrg test "x$dir" = "x$object" && dir= 368c06b6b69Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369c06b6b69Smrg 370c06b6b69Smrg if test "$libtool" = yes; then 371c06b6b69Smrg # With Tru64 cc, shared objects can also be used to make a 3729f4658d1Smrg # static library. This mechanism is used in libtool 1.4 series to 373c06b6b69Smrg # handle both shared and static libraries in a single compilation. 374c06b6b69Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375c06b6b69Smrg # 376c06b6b69Smrg # With libtool 1.5 this exception was removed, and libtool now 377c06b6b69Smrg # generates 2 separate objects for the 2 libraries. These two 3789f4658d1Smrg # compilations output dependencies in $dir.libs/$base.o.d and 379c06b6b69Smrg # in $dir$base.o.d. We have to check for both files, because 380c06b6b69Smrg # one of the two compilations can be disabled. We should prefer 381c06b6b69Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382c06b6b69Smrg # automatically cleaned when .libs/ is deleted, while ignoring 383c06b6b69Smrg # the former would cause a distcleancheck panic. 384c06b6b69Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385c06b6b69Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386c06b6b69Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387c06b6b69Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388c06b6b69Smrg "$@" -Wc,-MD 389c06b6b69Smrg else 390c06b6b69Smrg tmpdepfile1=$dir$base.o.d 391c06b6b69Smrg tmpdepfile2=$dir$base.d 392c06b6b69Smrg tmpdepfile3=$dir$base.d 393c06b6b69Smrg tmpdepfile4=$dir$base.d 394c06b6b69Smrg "$@" -MD 395c06b6b69Smrg fi 396c06b6b69Smrg 397c06b6b69Smrg stat=$? 398c06b6b69Smrg if test $stat -eq 0; then : 399c06b6b69Smrg else 400c06b6b69Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401c06b6b69Smrg exit $stat 402c06b6b69Smrg fi 403c06b6b69Smrg 404c06b6b69Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405c06b6b69Smrg do 406c06b6b69Smrg test -f "$tmpdepfile" && break 407c06b6b69Smrg done 408c06b6b69Smrg if test -f "$tmpdepfile"; then 409c06b6b69Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410c06b6b69Smrg # That's a tab and a space in the []. 411c06b6b69Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412c06b6b69Smrg else 413c06b6b69Smrg echo "#dummy" > "$depfile" 414c06b6b69Smrg fi 415c06b6b69Smrg rm -f "$tmpdepfile" 416c06b6b69Smrg ;; 417c06b6b69Smrg 418a1d73b4bSmrgmsvc7) 419a1d73b4bSmrg if test "$libtool" = yes; then 420a1d73b4bSmrg showIncludes=-Wc,-showIncludes 421a1d73b4bSmrg else 422a1d73b4bSmrg showIncludes=-showIncludes 423a1d73b4bSmrg fi 424a1d73b4bSmrg "$@" $showIncludes > "$tmpdepfile" 425a1d73b4bSmrg stat=$? 426a1d73b4bSmrg grep -v '^Note: including file: ' "$tmpdepfile" 427a1d73b4bSmrg if test "$stat" = 0; then : 428a1d73b4bSmrg else 429a1d73b4bSmrg rm -f "$tmpdepfile" 430a1d73b4bSmrg exit $stat 431a1d73b4bSmrg fi 432a1d73b4bSmrg rm -f "$depfile" 433a1d73b4bSmrg echo "$object : \\" > "$depfile" 434a1d73b4bSmrg # The first sed program below extracts the file names and escapes 435a1d73b4bSmrg # backslashes for cygpath. The second sed program outputs the file 436a1d73b4bSmrg # name when reading, but also accumulates all include files in the 437a1d73b4bSmrg # hold buffer in order to output them again at the end. This only 438a1d73b4bSmrg # works with sed implementations that can handle large buffers. 439a1d73b4bSmrg sed < "$tmpdepfile" -n ' 440a1d73b4bSmrg/^Note: including file: *\(.*\)/ { 441a1d73b4bSmrg s//\1/ 442a1d73b4bSmrg s/\\/\\\\/g 443a1d73b4bSmrg p 444a1d73b4bSmrg}' | $cygpath_u | sort -u | sed -n ' 445a1d73b4bSmrgs/ /\\ /g 446a1d73b4bSmrgs/\(.*\)/ \1 \\/p 447a1d73b4bSmrgs/.\(.*\) \\/\1:/ 448a1d73b4bSmrgH 449a1d73b4bSmrg$ { 450a1d73b4bSmrg s/.*/ / 451a1d73b4bSmrg G 452a1d73b4bSmrg p 453a1d73b4bSmrg}' >> "$depfile" 454a1d73b4bSmrg rm -f "$tmpdepfile" 455a1d73b4bSmrg ;; 456a1d73b4bSmrg 457a1d73b4bSmrgmsvc7msys) 458a1d73b4bSmrg # This case exists only to let depend.m4 do its work. It works by 459a1d73b4bSmrg # looking at the text of this script. This case will never be run, 460a1d73b4bSmrg # since it is checked for above. 461a1d73b4bSmrg exit 1 462a1d73b4bSmrg ;; 463a1d73b4bSmrg 464c06b6b69Smrg#nosideeffect) 465c06b6b69Smrg # This comment above is used by automake to tell side-effect 466c06b6b69Smrg # dependency tracking mechanisms from slower ones. 467c06b6b69Smrg 468c06b6b69Smrgdashmstdout) 469c06b6b69Smrg # Important note: in order to support this mode, a compiler *must* 470c06b6b69Smrg # always write the preprocessed file to stdout, regardless of -o. 471c06b6b69Smrg "$@" || exit $? 472c06b6b69Smrg 473c06b6b69Smrg # Remove the call to Libtool. 474c06b6b69Smrg if test "$libtool" = yes; then 4757d17d341Smrg while test "X$1" != 'X--mode=compile'; do 476c06b6b69Smrg shift 477c06b6b69Smrg done 478c06b6b69Smrg shift 479c06b6b69Smrg fi 480c06b6b69Smrg 481c06b6b69Smrg # Remove `-o $object'. 482c06b6b69Smrg IFS=" " 483c06b6b69Smrg for arg 484c06b6b69Smrg do 485c06b6b69Smrg case $arg in 486c06b6b69Smrg -o) 487c06b6b69Smrg shift 488c06b6b69Smrg ;; 489c06b6b69Smrg $object) 490c06b6b69Smrg shift 491c06b6b69Smrg ;; 492c06b6b69Smrg *) 493c06b6b69Smrg set fnord "$@" "$arg" 494c06b6b69Smrg shift # fnord 495c06b6b69Smrg shift # $arg 496c06b6b69Smrg ;; 497c06b6b69Smrg esac 498c06b6b69Smrg done 499c06b6b69Smrg 500c06b6b69Smrg test -z "$dashmflag" && dashmflag=-M 501c06b6b69Smrg # Require at least two characters before searching for `:' 502c06b6b69Smrg # in the target name. This is to cope with DOS-style filenames: 503c06b6b69Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 504c06b6b69Smrg "$@" $dashmflag | 505c06b6b69Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 506c06b6b69Smrg rm -f "$depfile" 507c06b6b69Smrg cat < "$tmpdepfile" > "$depfile" 508c06b6b69Smrg tr ' ' ' 509c06b6b69Smrg' < "$tmpdepfile" | \ 510c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 511c06b6b69Smrg## correctly. Breaking it into two sed invocations is a workaround. 512c06b6b69Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 513c06b6b69Smrg rm -f "$tmpdepfile" 514c06b6b69Smrg ;; 515c06b6b69Smrg 516c06b6b69SmrgdashXmstdout) 517c06b6b69Smrg # This case only exists to satisfy depend.m4. It is never actually 518c06b6b69Smrg # run, as this mode is specially recognized in the preamble. 519c06b6b69Smrg exit 1 520c06b6b69Smrg ;; 521c06b6b69Smrg 522c06b6b69Smrgmakedepend) 523c06b6b69Smrg "$@" || exit $? 524c06b6b69Smrg # Remove any Libtool call 525c06b6b69Smrg if test "$libtool" = yes; then 5267d17d341Smrg while test "X$1" != 'X--mode=compile'; do 527c06b6b69Smrg shift 528c06b6b69Smrg done 529c06b6b69Smrg shift 530c06b6b69Smrg fi 531c06b6b69Smrg # X makedepend 532c06b6b69Smrg shift 5337d17d341Smrg cleared=no eat=no 5347d17d341Smrg for arg 5357d17d341Smrg do 536c06b6b69Smrg case $cleared in 537c06b6b69Smrg no) 538c06b6b69Smrg set ""; shift 539c06b6b69Smrg cleared=yes ;; 540c06b6b69Smrg esac 5417d17d341Smrg if test $eat = yes; then 5427d17d341Smrg eat=no 5437d17d341Smrg continue 5447d17d341Smrg fi 545c06b6b69Smrg case "$arg" in 546c06b6b69Smrg -D*|-I*) 547c06b6b69Smrg set fnord "$@" "$arg"; shift ;; 548c06b6b69Smrg # Strip any option that makedepend may not understand. Remove 549c06b6b69Smrg # the object too, otherwise makedepend will parse it as a source file. 5507d17d341Smrg -arch) 5517d17d341Smrg eat=yes ;; 552c06b6b69Smrg -*|$object) 553c06b6b69Smrg ;; 554c06b6b69Smrg *) 555c06b6b69Smrg set fnord "$@" "$arg"; shift ;; 556c06b6b69Smrg esac 557c06b6b69Smrg done 5587d17d341Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 559c06b6b69Smrg touch "$tmpdepfile" 560c06b6b69Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 561c06b6b69Smrg rm -f "$depfile" 562a1d73b4bSmrg # makedepend may prepend the VPATH from the source file name to the object. 563a1d73b4bSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 564a1d73b4bSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565c06b6b69Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566c06b6b69Smrg' | \ 567c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 568c06b6b69Smrg## correctly. Breaking it into two sed invocations is a workaround. 569c06b6b69Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 570c06b6b69Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 571c06b6b69Smrg ;; 572c06b6b69Smrg 573c06b6b69Smrgcpp) 574c06b6b69Smrg # Important note: in order to support this mode, a compiler *must* 575c06b6b69Smrg # always write the preprocessed file to stdout. 576c06b6b69Smrg "$@" || exit $? 577c06b6b69Smrg 578c06b6b69Smrg # Remove the call to Libtool. 579c06b6b69Smrg if test "$libtool" = yes; then 5807d17d341Smrg while test "X$1" != 'X--mode=compile'; do 581c06b6b69Smrg shift 582c06b6b69Smrg done 583c06b6b69Smrg shift 584c06b6b69Smrg fi 585c06b6b69Smrg 586c06b6b69Smrg # Remove `-o $object'. 587c06b6b69Smrg IFS=" " 588c06b6b69Smrg for arg 589c06b6b69Smrg do 590c06b6b69Smrg case $arg in 591c06b6b69Smrg -o) 592c06b6b69Smrg shift 593c06b6b69Smrg ;; 594c06b6b69Smrg $object) 595c06b6b69Smrg shift 596c06b6b69Smrg ;; 597c06b6b69Smrg *) 598c06b6b69Smrg set fnord "$@" "$arg" 599c06b6b69Smrg shift # fnord 600c06b6b69Smrg shift # $arg 601c06b6b69Smrg ;; 602c06b6b69Smrg esac 603c06b6b69Smrg done 604c06b6b69Smrg 605c06b6b69Smrg "$@" -E | 606c06b6b69Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607c06b6b69Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608c06b6b69Smrg sed '$ s: \\$::' > "$tmpdepfile" 609c06b6b69Smrg rm -f "$depfile" 610c06b6b69Smrg echo "$object : \\" > "$depfile" 611c06b6b69Smrg cat < "$tmpdepfile" >> "$depfile" 612c06b6b69Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 613c06b6b69Smrg rm -f "$tmpdepfile" 614c06b6b69Smrg ;; 615c06b6b69Smrg 616c06b6b69Smrgmsvisualcpp) 617c06b6b69Smrg # Important note: in order to support this mode, a compiler *must* 6187d17d341Smrg # always write the preprocessed file to stdout. 619c06b6b69Smrg "$@" || exit $? 6207d17d341Smrg 6217d17d341Smrg # Remove the call to Libtool. 6227d17d341Smrg if test "$libtool" = yes; then 6237d17d341Smrg while test "X$1" != 'X--mode=compile'; do 6247d17d341Smrg shift 6257d17d341Smrg done 6267d17d341Smrg shift 6277d17d341Smrg fi 6287d17d341Smrg 629c06b6b69Smrg IFS=" " 630c06b6b69Smrg for arg 631c06b6b69Smrg do 632c06b6b69Smrg case "$arg" in 6337d17d341Smrg -o) 6347d17d341Smrg shift 6357d17d341Smrg ;; 6367d17d341Smrg $object) 6377d17d341Smrg shift 6387d17d341Smrg ;; 639c06b6b69Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640c06b6b69Smrg set fnord "$@" 641c06b6b69Smrg shift 642c06b6b69Smrg shift 643c06b6b69Smrg ;; 644c06b6b69Smrg *) 645c06b6b69Smrg set fnord "$@" "$arg" 646c06b6b69Smrg shift 647c06b6b69Smrg shift 648c06b6b69Smrg ;; 649c06b6b69Smrg esac 650c06b6b69Smrg done 6517d17d341Smrg "$@" -E 2>/dev/null | 6527d17d341Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 653c06b6b69Smrg rm -f "$depfile" 654c06b6b69Smrg echo "$object : \\" > "$depfile" 6557d17d341Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656c06b6b69Smrg echo " " >> "$depfile" 6577d17d341Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 658c06b6b69Smrg rm -f "$tmpdepfile" 659c06b6b69Smrg ;; 660c06b6b69Smrg 6617d17d341Smrgmsvcmsys) 6627d17d341Smrg # This case exists only to let depend.m4 do its work. It works by 6637d17d341Smrg # looking at the text of this script. This case will never be run, 6647d17d341Smrg # since it is checked for above. 6657d17d341Smrg exit 1 6667d17d341Smrg ;; 6677d17d341Smrg 668c06b6b69Smrgnone) 669c06b6b69Smrg exec "$@" 670c06b6b69Smrg ;; 671c06b6b69Smrg 672c06b6b69Smrg*) 673c06b6b69Smrg echo "Unknown depmode $depmode" 1>&2 674c06b6b69Smrg exit 1 675c06b6b69Smrg ;; 676c06b6b69Smrgesac 677c06b6b69Smrg 678c06b6b69Smrgexit 0 679c06b6b69Smrg 680c06b6b69Smrg# Local Variables: 681c06b6b69Smrg# mode: shell-script 682c06b6b69Smrg# sh-indentation: 2 683c06b6b69Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 684c06b6b69Smrg# time-stamp-start: "scriptversion=" 685c06b6b69Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6867d17d341Smrg# time-stamp-time-zone: "UTC" 6877d17d341Smrg# time-stamp-end: "; # UTC" 688c06b6b69Smrg# End: 689