depcomp revision 0bb88ba4
1fe5e51b7Smrg#! /bin/sh 2fe5e51b7Smrg# depcomp - compile a program generating dependencies as side-effects 3fe5e51b7Smrg 40bb88ba4Smrgscriptversion=2011-12-04.11; # UTC 5fe5e51b7Smrg 60bb88ba4Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 70bb88ba4Smrg# 2011 Free Software Foundation, Inc. 8fe5e51b7Smrg 9fe5e51b7Smrg# This program is free software; you can redistribute it and/or modify 10fe5e51b7Smrg# it under the terms of the GNU General Public License as published by 11fe5e51b7Smrg# the Free Software Foundation; either version 2, or (at your option) 12fe5e51b7Smrg# any later version. 13fe5e51b7Smrg 14fe5e51b7Smrg# This program is distributed in the hope that it will be useful, 15fe5e51b7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16fe5e51b7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17fe5e51b7Smrg# GNU General Public License for more details. 18fe5e51b7Smrg 19fe5e51b7Smrg# You should have received a copy of the GNU General Public License 200bb88ba4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21fe5e51b7Smrg 22fe5e51b7Smrg# As a special exception to the GNU General Public License, if you 23fe5e51b7Smrg# distribute this file as part of a program that contains a 24fe5e51b7Smrg# configuration script generated by Autoconf, you may include it under 25fe5e51b7Smrg# the same distribution terms that you use for the rest of that program. 26fe5e51b7Smrg 27fe5e51b7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28fe5e51b7Smrg 29fe5e51b7Smrgcase $1 in 30fe5e51b7Smrg '') 31fe5e51b7Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 32fe5e51b7Smrg exit 1; 33fe5e51b7Smrg ;; 34fe5e51b7Smrg -h | --h*) 35fe5e51b7Smrg cat <<\EOF 36fe5e51b7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 37fe5e51b7Smrg 38fe5e51b7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 39fe5e51b7Smrgas side-effects. 40fe5e51b7Smrg 41fe5e51b7SmrgEnvironment variables: 42fe5e51b7Smrg depmode Dependency tracking mode. 43fe5e51b7Smrg source Source file read by `PROGRAMS ARGS'. 44fe5e51b7Smrg object Object file output by `PROGRAMS ARGS'. 45fe5e51b7Smrg DEPDIR directory where to store dependencies. 46fe5e51b7Smrg depfile Dependency file to output. 470bb88ba4Smrg tmpdepfile Temporary file to use when outputting dependencies. 48fe5e51b7Smrg libtool Whether libtool is used (yes/no). 49fe5e51b7Smrg 50fe5e51b7SmrgReport bugs to <bug-automake@gnu.org>. 51fe5e51b7SmrgEOF 52fe5e51b7Smrg exit $? 53fe5e51b7Smrg ;; 54fe5e51b7Smrg -v | --v*) 55fe5e51b7Smrg echo "depcomp $scriptversion" 56fe5e51b7Smrg exit $? 57fe5e51b7Smrg ;; 58fe5e51b7Smrgesac 59fe5e51b7Smrg 60fe5e51b7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61fe5e51b7Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62fe5e51b7Smrg exit 1 63fe5e51b7Smrgfi 64fe5e51b7Smrg 65fe5e51b7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 66fe5e51b7Smrgdepfile=${depfile-`echo "$object" | 67fe5e51b7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68fe5e51b7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69fe5e51b7Smrg 70fe5e51b7Smrgrm -f "$tmpdepfile" 71fe5e51b7Smrg 72fe5e51b7Smrg# Some modes work just like other modes, but use different flags. We 73fe5e51b7Smrg# parameterize here, but still list the modes in the big case below, 74fe5e51b7Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75fe5e51b7Smrg# here, because this file can only contain one case statement. 76fe5e51b7Smrgif test "$depmode" = hp; then 77fe5e51b7Smrg # HP compiler uses -M and no extra arg. 78fe5e51b7Smrg gccflag=-M 79fe5e51b7Smrg depmode=gcc 80fe5e51b7Smrgfi 81fe5e51b7Smrg 82fe5e51b7Smrgif test "$depmode" = dashXmstdout; then 83fe5e51b7Smrg # This is just like dashmstdout with a different argument. 84fe5e51b7Smrg dashmflag=-xM 85fe5e51b7Smrg depmode=dashmstdout 86fe5e51b7Smrgfi 87fe5e51b7Smrg 880bb88ba4Smrgcygpath_u="cygpath -u -f -" 890bb88ba4Smrgif test "$depmode" = msvcmsys; then 900bb88ba4Smrg # This is just like msvisualcpp but w/o cygpath translation. 910bb88ba4Smrg # Just convert the backslash-escaped backslashes to single forward 920bb88ba4Smrg # slashes to satisfy depend.m4 930bb88ba4Smrg cygpath_u='sed s,\\\\,/,g' 940bb88ba4Smrg depmode=msvisualcpp 950bb88ba4Smrgfi 960bb88ba4Smrg 970bb88ba4Smrgif test "$depmode" = msvc7msys; then 980bb88ba4Smrg # This is just like msvc7 but w/o cygpath translation. 990bb88ba4Smrg # Just convert the backslash-escaped backslashes to single forward 1000bb88ba4Smrg # slashes to satisfy depend.m4 1010bb88ba4Smrg cygpath_u='sed s,\\\\,/,g' 1020bb88ba4Smrg depmode=msvc7 1030bb88ba4Smrgfi 1040bb88ba4Smrg 105fe5e51b7Smrgcase "$depmode" in 106fe5e51b7Smrggcc3) 107fe5e51b7Smrg## gcc 3 implements dependency tracking that does exactly what 108fe5e51b7Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 109fe5e51b7Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 110fe5e51b7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 111fe5e51b7Smrg## the command line argument order; so add the flags where they 112fe5e51b7Smrg## appear in depend2.am. Note that the slowdown incurred here 113fe5e51b7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 114fe5e51b7Smrg for arg 115fe5e51b7Smrg do 116fe5e51b7Smrg case $arg in 117fe5e51b7Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 118fe5e51b7Smrg *) set fnord "$@" "$arg" ;; 119fe5e51b7Smrg esac 120fe5e51b7Smrg shift # fnord 121fe5e51b7Smrg shift # $arg 122fe5e51b7Smrg done 123fe5e51b7Smrg "$@" 124fe5e51b7Smrg stat=$? 125fe5e51b7Smrg if test $stat -eq 0; then : 126fe5e51b7Smrg else 127fe5e51b7Smrg rm -f "$tmpdepfile" 128fe5e51b7Smrg exit $stat 129fe5e51b7Smrg fi 130fe5e51b7Smrg mv "$tmpdepfile" "$depfile" 131fe5e51b7Smrg ;; 132fe5e51b7Smrg 133fe5e51b7Smrggcc) 134fe5e51b7Smrg## There are various ways to get dependency output from gcc. Here's 135fe5e51b7Smrg## why we pick this rather obscure method: 136fe5e51b7Smrg## - Don't want to use -MD because we'd like the dependencies to end 137fe5e51b7Smrg## up in a subdir. Having to rename by hand is ugly. 138fe5e51b7Smrg## (We might end up doing this anyway to support other compilers.) 139fe5e51b7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140fe5e51b7Smrg## -MM, not -M (despite what the docs say). 141fe5e51b7Smrg## - Using -M directly means running the compiler twice (even worse 142fe5e51b7Smrg## than renaming). 143fe5e51b7Smrg if test -z "$gccflag"; then 144fe5e51b7Smrg gccflag=-MD, 145fe5e51b7Smrg fi 146fe5e51b7Smrg "$@" -Wp,"$gccflag$tmpdepfile" 147fe5e51b7Smrg stat=$? 148fe5e51b7Smrg if test $stat -eq 0; then : 149fe5e51b7Smrg else 150fe5e51b7Smrg rm -f "$tmpdepfile" 151fe5e51b7Smrg exit $stat 152fe5e51b7Smrg fi 153fe5e51b7Smrg rm -f "$depfile" 154fe5e51b7Smrg echo "$object : \\" > "$depfile" 155fe5e51b7Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156fe5e51b7Smrg## The second -e expression handles DOS-style file names with drive letters. 157fe5e51b7Smrg sed -e 's/^[^:]*: / /' \ 158fe5e51b7Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159fe5e51b7Smrg## This next piece of magic avoids the `deleted header file' problem. 160fe5e51b7Smrg## The problem is that when a header file which appears in a .P file 161fe5e51b7Smrg## is deleted, the dependency causes make to die (because there is 162fe5e51b7Smrg## typically no way to rebuild the header). We avoid this by adding 163fe5e51b7Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 164fe5e51b7Smrg## this for us directly. 165fe5e51b7Smrg tr ' ' ' 166fe5e51b7Smrg' < "$tmpdepfile" | 167fe5e51b7Smrg## Some versions of gcc put a space before the `:'. On the theory 168fe5e51b7Smrg## that the space means something, we add a space to the output as 1690bb88ba4Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 1700bb88ba4Smrg## to the object. Take care to not repeat it in the output. 171fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 172fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 1730bb88ba4Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1740bb88ba4Smrg | sed -e 's/$/ :/' >> "$depfile" 175fe5e51b7Smrg rm -f "$tmpdepfile" 176fe5e51b7Smrg ;; 177fe5e51b7Smrg 178fe5e51b7Smrghp) 179fe5e51b7Smrg # This case exists only to let depend.m4 do its work. It works by 180fe5e51b7Smrg # looking at the text of this script. This case will never be run, 181fe5e51b7Smrg # since it is checked for above. 182fe5e51b7Smrg exit 1 183fe5e51b7Smrg ;; 184fe5e51b7Smrg 185fe5e51b7Smrgsgi) 186fe5e51b7Smrg if test "$libtool" = yes; then 187fe5e51b7Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 188fe5e51b7Smrg else 189fe5e51b7Smrg "$@" -MDupdate "$tmpdepfile" 190fe5e51b7Smrg fi 191fe5e51b7Smrg stat=$? 192fe5e51b7Smrg if test $stat -eq 0; then : 193fe5e51b7Smrg else 194fe5e51b7Smrg rm -f "$tmpdepfile" 195fe5e51b7Smrg exit $stat 196fe5e51b7Smrg fi 197fe5e51b7Smrg rm -f "$depfile" 198fe5e51b7Smrg 199fe5e51b7Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 200fe5e51b7Smrg echo "$object : \\" > "$depfile" 201fe5e51b7Smrg 202fe5e51b7Smrg # Clip off the initial element (the dependent). Don't try to be 203fe5e51b7Smrg # clever and replace this with sed code, as IRIX sed won't handle 204fe5e51b7Smrg # lines with more than a fixed number of characters (4096 in 205fe5e51b7Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206fe5e51b7Smrg # the IRIX cc adds comments like `#:fec' to the end of the 207fe5e51b7Smrg # dependency line. 208fe5e51b7Smrg tr ' ' ' 209fe5e51b7Smrg' < "$tmpdepfile" \ 210fe5e51b7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211fe5e51b7Smrg tr ' 2120bb88ba4Smrg' ' ' >> "$depfile" 2130bb88ba4Smrg echo >> "$depfile" 214fe5e51b7Smrg 215fe5e51b7Smrg # The second pass generates a dummy entry for each header file. 216fe5e51b7Smrg tr ' ' ' 217fe5e51b7Smrg' < "$tmpdepfile" \ 218fe5e51b7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2190bb88ba4Smrg >> "$depfile" 220fe5e51b7Smrg else 221fe5e51b7Smrg # The sourcefile does not contain any dependencies, so just 222fe5e51b7Smrg # store a dummy comment line, to avoid errors with the Makefile 223fe5e51b7Smrg # "include basename.Plo" scheme. 224fe5e51b7Smrg echo "#dummy" > "$depfile" 225fe5e51b7Smrg fi 226fe5e51b7Smrg rm -f "$tmpdepfile" 227fe5e51b7Smrg ;; 228fe5e51b7Smrg 229fe5e51b7Smrgaix) 230fe5e51b7Smrg # The C for AIX Compiler uses -M and outputs the dependencies 231fe5e51b7Smrg # in a .u file. In older versions, this file always lives in the 232fe5e51b7Smrg # current directory. Also, the AIX compiler puts `$object:' at the 233fe5e51b7Smrg # start of each line; $object doesn't have directory information. 234fe5e51b7Smrg # Version 6 uses the directory in both cases. 235eda3803bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 236eda3803bSmrg test "x$dir" = "x$object" && dir= 237eda3803bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 238fe5e51b7Smrg if test "$libtool" = yes; then 239eda3803bSmrg tmpdepfile1=$dir$base.u 240eda3803bSmrg tmpdepfile2=$base.u 241eda3803bSmrg tmpdepfile3=$dir.libs/$base.u 242fe5e51b7Smrg "$@" -Wc,-M 243fe5e51b7Smrg else 244eda3803bSmrg tmpdepfile1=$dir$base.u 245eda3803bSmrg tmpdepfile2=$dir$base.u 246eda3803bSmrg tmpdepfile3=$dir$base.u 247fe5e51b7Smrg "$@" -M 248fe5e51b7Smrg fi 249fe5e51b7Smrg stat=$? 250fe5e51b7Smrg 251fe5e51b7Smrg if test $stat -eq 0; then : 252fe5e51b7Smrg else 253eda3803bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 254fe5e51b7Smrg exit $stat 255fe5e51b7Smrg fi 256fe5e51b7Smrg 257eda3803bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 258eda3803bSmrg do 259eda3803bSmrg test -f "$tmpdepfile" && break 260eda3803bSmrg done 261fe5e51b7Smrg if test -f "$tmpdepfile"; then 262fe5e51b7Smrg # Each line is of the form `foo.o: dependent.h'. 263fe5e51b7Smrg # Do two passes, one to just change these to 264fe5e51b7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 265eda3803bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 266eda3803bSmrg # That's a tab and a space in the []. 267eda3803bSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268fe5e51b7Smrg else 269fe5e51b7Smrg # The sourcefile does not contain any dependencies, so just 270fe5e51b7Smrg # store a dummy comment line, to avoid errors with the Makefile 271fe5e51b7Smrg # "include basename.Plo" scheme. 272fe5e51b7Smrg echo "#dummy" > "$depfile" 273fe5e51b7Smrg fi 274fe5e51b7Smrg rm -f "$tmpdepfile" 275fe5e51b7Smrg ;; 276fe5e51b7Smrg 277fe5e51b7Smrgicc) 278fe5e51b7Smrg # Intel's C compiler understands `-MD -MF file'. However on 279fe5e51b7Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280fe5e51b7Smrg # ICC 7.0 will fill foo.d with something like 281fe5e51b7Smrg # foo.o: sub/foo.c 282fe5e51b7Smrg # foo.o: sub/foo.h 283fe5e51b7Smrg # which is wrong. We want: 284fe5e51b7Smrg # sub/foo.o: sub/foo.c 285fe5e51b7Smrg # sub/foo.o: sub/foo.h 286fe5e51b7Smrg # sub/foo.c: 287fe5e51b7Smrg # sub/foo.h: 288fe5e51b7Smrg # ICC 7.1 will output 289fe5e51b7Smrg # foo.o: sub/foo.c sub/foo.h 290fe5e51b7Smrg # and will wrap long lines using \ : 291fe5e51b7Smrg # foo.o: sub/foo.c ... \ 292fe5e51b7Smrg # sub/foo.h ... \ 293fe5e51b7Smrg # ... 294fe5e51b7Smrg 295fe5e51b7Smrg "$@" -MD -MF "$tmpdepfile" 296fe5e51b7Smrg stat=$? 297fe5e51b7Smrg if test $stat -eq 0; then : 298fe5e51b7Smrg else 299fe5e51b7Smrg rm -f "$tmpdepfile" 300fe5e51b7Smrg exit $stat 301fe5e51b7Smrg fi 302fe5e51b7Smrg rm -f "$depfile" 303fe5e51b7Smrg # Each line is of the form `foo.o: dependent.h', 304fe5e51b7Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 305fe5e51b7Smrg # Do two passes, one to just change these to 306fe5e51b7Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 307fe5e51b7Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308fe5e51b7Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 309fe5e51b7Smrg # correctly. Breaking it into two sed invocations is a workaround. 310fe5e51b7Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311fe5e51b7Smrg sed -e 's/$/ :/' >> "$depfile" 312fe5e51b7Smrg rm -f "$tmpdepfile" 313fe5e51b7Smrg ;; 314fe5e51b7Smrg 315fe5e51b7Smrghp2) 316fe5e51b7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 317fe5e51b7Smrg # compilers, which have integrated preprocessors. The correct option 318fe5e51b7Smrg # to use with these is +Maked; it writes dependencies to a file named 319fe5e51b7Smrg # 'foo.d', which lands next to the object file, wherever that 320fe5e51b7Smrg # happens to be. 321fe5e51b7Smrg # Much of this is similar to the tru64 case; see comments there. 322fe5e51b7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 323fe5e51b7Smrg test "x$dir" = "x$object" && dir= 324fe5e51b7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 325fe5e51b7Smrg if test "$libtool" = yes; then 326fe5e51b7Smrg tmpdepfile1=$dir$base.d 327fe5e51b7Smrg tmpdepfile2=$dir.libs/$base.d 328fe5e51b7Smrg "$@" -Wc,+Maked 329fe5e51b7Smrg else 330fe5e51b7Smrg tmpdepfile1=$dir$base.d 331fe5e51b7Smrg tmpdepfile2=$dir$base.d 332fe5e51b7Smrg "$@" +Maked 333fe5e51b7Smrg fi 334fe5e51b7Smrg stat=$? 335fe5e51b7Smrg if test $stat -eq 0; then : 336fe5e51b7Smrg else 337fe5e51b7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 338fe5e51b7Smrg exit $stat 339fe5e51b7Smrg fi 340fe5e51b7Smrg 341fe5e51b7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 342fe5e51b7Smrg do 343fe5e51b7Smrg test -f "$tmpdepfile" && break 344fe5e51b7Smrg done 345fe5e51b7Smrg if test -f "$tmpdepfile"; then 346fe5e51b7Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 347fe5e51b7Smrg # Add `dependent.h:' lines. 3480bb88ba4Smrg sed -ne '2,${ 3490bb88ba4Smrg s/^ *// 3500bb88ba4Smrg s/ \\*$// 3510bb88ba4Smrg s/$/:/ 3520bb88ba4Smrg p 3530bb88ba4Smrg }' "$tmpdepfile" >> "$depfile" 354fe5e51b7Smrg else 355fe5e51b7Smrg echo "#dummy" > "$depfile" 356fe5e51b7Smrg fi 357fe5e51b7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 358fe5e51b7Smrg ;; 359fe5e51b7Smrg 360fe5e51b7Smrgtru64) 361fe5e51b7Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 362fe5e51b7Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363fe5e51b7Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364fe5e51b7Smrg # dependencies in `foo.d' instead, so we check for that too. 365fe5e51b7Smrg # Subdirectories are respected. 366fe5e51b7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367fe5e51b7Smrg test "x$dir" = "x$object" && dir= 368fe5e51b7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369fe5e51b7Smrg 370fe5e51b7Smrg if test "$libtool" = yes; then 371fe5e51b7Smrg # With Tru64 cc, shared objects can also be used to make a 372fe5e51b7Smrg # static library. This mechanism is used in libtool 1.4 series to 373fe5e51b7Smrg # handle both shared and static libraries in a single compilation. 374fe5e51b7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 375fe5e51b7Smrg # 376fe5e51b7Smrg # With libtool 1.5 this exception was removed, and libtool now 377fe5e51b7Smrg # generates 2 separate objects for the 2 libraries. These two 378fe5e51b7Smrg # compilations output dependencies in $dir.libs/$base.o.d and 379fe5e51b7Smrg # in $dir$base.o.d. We have to check for both files, because 380fe5e51b7Smrg # one of the two compilations can be disabled. We should prefer 381fe5e51b7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 382fe5e51b7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 383fe5e51b7Smrg # the former would cause a distcleancheck panic. 384fe5e51b7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 385fe5e51b7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 386fe5e51b7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 387fe5e51b7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388fe5e51b7Smrg "$@" -Wc,-MD 389fe5e51b7Smrg else 390fe5e51b7Smrg tmpdepfile1=$dir$base.o.d 391fe5e51b7Smrg tmpdepfile2=$dir$base.d 392fe5e51b7Smrg tmpdepfile3=$dir$base.d 393fe5e51b7Smrg tmpdepfile4=$dir$base.d 394fe5e51b7Smrg "$@" -MD 395fe5e51b7Smrg fi 396fe5e51b7Smrg 397fe5e51b7Smrg stat=$? 398fe5e51b7Smrg if test $stat -eq 0; then : 399fe5e51b7Smrg else 400fe5e51b7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401fe5e51b7Smrg exit $stat 402fe5e51b7Smrg fi 403fe5e51b7Smrg 404fe5e51b7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 405fe5e51b7Smrg do 406fe5e51b7Smrg test -f "$tmpdepfile" && break 407fe5e51b7Smrg done 408fe5e51b7Smrg if test -f "$tmpdepfile"; then 409fe5e51b7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410fe5e51b7Smrg # That's a tab and a space in the []. 411fe5e51b7Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412fe5e51b7Smrg else 413fe5e51b7Smrg echo "#dummy" > "$depfile" 414fe5e51b7Smrg fi 415fe5e51b7Smrg rm -f "$tmpdepfile" 416fe5e51b7Smrg ;; 417fe5e51b7Smrg 4180bb88ba4Smrgmsvc7) 4190bb88ba4Smrg if test "$libtool" = yes; then 4200bb88ba4Smrg showIncludes=-Wc,-showIncludes 4210bb88ba4Smrg else 4220bb88ba4Smrg showIncludes=-showIncludes 4230bb88ba4Smrg fi 4240bb88ba4Smrg "$@" $showIncludes > "$tmpdepfile" 4250bb88ba4Smrg stat=$? 4260bb88ba4Smrg grep -v '^Note: including file: ' "$tmpdepfile" 4270bb88ba4Smrg if test "$stat" = 0; then : 4280bb88ba4Smrg else 4290bb88ba4Smrg rm -f "$tmpdepfile" 4300bb88ba4Smrg exit $stat 4310bb88ba4Smrg fi 4320bb88ba4Smrg rm -f "$depfile" 4330bb88ba4Smrg echo "$object : \\" > "$depfile" 4340bb88ba4Smrg # The first sed program below extracts the file names and escapes 4350bb88ba4Smrg # backslashes for cygpath. The second sed program outputs the file 4360bb88ba4Smrg # name when reading, but also accumulates all include files in the 4370bb88ba4Smrg # hold buffer in order to output them again at the end. This only 4380bb88ba4Smrg # works with sed implementations that can handle large buffers. 4390bb88ba4Smrg sed < "$tmpdepfile" -n ' 4400bb88ba4Smrg/^Note: including file: *\(.*\)/ { 4410bb88ba4Smrg s//\1/ 4420bb88ba4Smrg s/\\/\\\\/g 4430bb88ba4Smrg p 4440bb88ba4Smrg}' | $cygpath_u | sort -u | sed -n ' 4450bb88ba4Smrgs/ /\\ /g 4460bb88ba4Smrgs/\(.*\)/ \1 \\/p 4470bb88ba4Smrgs/.\(.*\) \\/\1:/ 4480bb88ba4SmrgH 4490bb88ba4Smrg$ { 4500bb88ba4Smrg s/.*/ / 4510bb88ba4Smrg G 4520bb88ba4Smrg p 4530bb88ba4Smrg}' >> "$depfile" 4540bb88ba4Smrg rm -f "$tmpdepfile" 4550bb88ba4Smrg ;; 4560bb88ba4Smrg 4570bb88ba4Smrgmsvc7msys) 4580bb88ba4Smrg # This case exists only to let depend.m4 do its work. It works by 4590bb88ba4Smrg # looking at the text of this script. This case will never be run, 4600bb88ba4Smrg # since it is checked for above. 4610bb88ba4Smrg exit 1 4620bb88ba4Smrg ;; 4630bb88ba4Smrg 464fe5e51b7Smrg#nosideeffect) 465fe5e51b7Smrg # This comment above is used by automake to tell side-effect 466fe5e51b7Smrg # dependency tracking mechanisms from slower ones. 467fe5e51b7Smrg 468fe5e51b7Smrgdashmstdout) 469fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 470fe5e51b7Smrg # always write the preprocessed file to stdout, regardless of -o. 471fe5e51b7Smrg "$@" || exit $? 472fe5e51b7Smrg 473fe5e51b7Smrg # Remove the call to Libtool. 474fe5e51b7Smrg if test "$libtool" = yes; then 4750bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 476fe5e51b7Smrg shift 477fe5e51b7Smrg done 478fe5e51b7Smrg shift 479fe5e51b7Smrg fi 480fe5e51b7Smrg 481fe5e51b7Smrg # Remove `-o $object'. 482fe5e51b7Smrg IFS=" " 483fe5e51b7Smrg for arg 484fe5e51b7Smrg do 485fe5e51b7Smrg case $arg in 486fe5e51b7Smrg -o) 487fe5e51b7Smrg shift 488fe5e51b7Smrg ;; 489fe5e51b7Smrg $object) 490fe5e51b7Smrg shift 491fe5e51b7Smrg ;; 492fe5e51b7Smrg *) 493fe5e51b7Smrg set fnord "$@" "$arg" 494fe5e51b7Smrg shift # fnord 495fe5e51b7Smrg shift # $arg 496fe5e51b7Smrg ;; 497fe5e51b7Smrg esac 498fe5e51b7Smrg done 499fe5e51b7Smrg 500fe5e51b7Smrg test -z "$dashmflag" && dashmflag=-M 501fe5e51b7Smrg # Require at least two characters before searching for `:' 502fe5e51b7Smrg # in the target name. This is to cope with DOS-style filenames: 503fe5e51b7Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 504fe5e51b7Smrg "$@" $dashmflag | 505fe5e51b7Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 506fe5e51b7Smrg rm -f "$depfile" 507fe5e51b7Smrg cat < "$tmpdepfile" > "$depfile" 508fe5e51b7Smrg tr ' ' ' 509fe5e51b7Smrg' < "$tmpdepfile" | \ 510fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 511fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 512fe5e51b7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 513fe5e51b7Smrg rm -f "$tmpdepfile" 514fe5e51b7Smrg ;; 515fe5e51b7Smrg 516fe5e51b7SmrgdashXmstdout) 517fe5e51b7Smrg # This case only exists to satisfy depend.m4. It is never actually 518fe5e51b7Smrg # run, as this mode is specially recognized in the preamble. 519fe5e51b7Smrg exit 1 520fe5e51b7Smrg ;; 521fe5e51b7Smrg 522fe5e51b7Smrgmakedepend) 523fe5e51b7Smrg "$@" || exit $? 524fe5e51b7Smrg # Remove any Libtool call 525fe5e51b7Smrg if test "$libtool" = yes; then 5260bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 527fe5e51b7Smrg shift 528fe5e51b7Smrg done 529fe5e51b7Smrg shift 530fe5e51b7Smrg fi 531fe5e51b7Smrg # X makedepend 532fe5e51b7Smrg shift 5330bb88ba4Smrg cleared=no eat=no 5340bb88ba4Smrg for arg 5350bb88ba4Smrg do 536fe5e51b7Smrg case $cleared in 537fe5e51b7Smrg no) 538fe5e51b7Smrg set ""; shift 539fe5e51b7Smrg cleared=yes ;; 540fe5e51b7Smrg esac 5410bb88ba4Smrg if test $eat = yes; then 5420bb88ba4Smrg eat=no 5430bb88ba4Smrg continue 5440bb88ba4Smrg fi 545fe5e51b7Smrg case "$arg" in 546fe5e51b7Smrg -D*|-I*) 547fe5e51b7Smrg set fnord "$@" "$arg"; shift ;; 548fe5e51b7Smrg # Strip any option that makedepend may not understand. Remove 549fe5e51b7Smrg # the object too, otherwise makedepend will parse it as a source file. 5500bb88ba4Smrg -arch) 5510bb88ba4Smrg eat=yes ;; 552fe5e51b7Smrg -*|$object) 553fe5e51b7Smrg ;; 554fe5e51b7Smrg *) 555fe5e51b7Smrg set fnord "$@" "$arg"; shift ;; 556fe5e51b7Smrg esac 557fe5e51b7Smrg done 5580bb88ba4Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 559fe5e51b7Smrg touch "$tmpdepfile" 560fe5e51b7Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 561fe5e51b7Smrg rm -f "$depfile" 5620bb88ba4Smrg # makedepend may prepend the VPATH from the source file name to the object. 5630bb88ba4Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 5640bb88ba4Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565fe5e51b7Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566fe5e51b7Smrg' | \ 567fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 568fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 569fe5e51b7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 570fe5e51b7Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 571fe5e51b7Smrg ;; 572fe5e51b7Smrg 573fe5e51b7Smrgcpp) 574fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 575fe5e51b7Smrg # always write the preprocessed file to stdout. 576fe5e51b7Smrg "$@" || exit $? 577fe5e51b7Smrg 578fe5e51b7Smrg # Remove the call to Libtool. 579fe5e51b7Smrg if test "$libtool" = yes; then 5800bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 581fe5e51b7Smrg shift 582fe5e51b7Smrg done 583fe5e51b7Smrg shift 584fe5e51b7Smrg fi 585fe5e51b7Smrg 586fe5e51b7Smrg # Remove `-o $object'. 587fe5e51b7Smrg IFS=" " 588fe5e51b7Smrg for arg 589fe5e51b7Smrg do 590fe5e51b7Smrg case $arg in 591fe5e51b7Smrg -o) 592fe5e51b7Smrg shift 593fe5e51b7Smrg ;; 594fe5e51b7Smrg $object) 595fe5e51b7Smrg shift 596fe5e51b7Smrg ;; 597fe5e51b7Smrg *) 598fe5e51b7Smrg set fnord "$@" "$arg" 599fe5e51b7Smrg shift # fnord 600fe5e51b7Smrg shift # $arg 601fe5e51b7Smrg ;; 602fe5e51b7Smrg esac 603fe5e51b7Smrg done 604fe5e51b7Smrg 605fe5e51b7Smrg "$@" -E | 606fe5e51b7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 607fe5e51b7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608fe5e51b7Smrg sed '$ s: \\$::' > "$tmpdepfile" 609fe5e51b7Smrg rm -f "$depfile" 610fe5e51b7Smrg echo "$object : \\" > "$depfile" 611fe5e51b7Smrg cat < "$tmpdepfile" >> "$depfile" 612fe5e51b7Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 613fe5e51b7Smrg rm -f "$tmpdepfile" 614fe5e51b7Smrg ;; 615fe5e51b7Smrg 616fe5e51b7Smrgmsvisualcpp) 617fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 6180bb88ba4Smrg # always write the preprocessed file to stdout. 619fe5e51b7Smrg "$@" || exit $? 6200bb88ba4Smrg 6210bb88ba4Smrg # Remove the call to Libtool. 6220bb88ba4Smrg if test "$libtool" = yes; then 6230bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 6240bb88ba4Smrg shift 6250bb88ba4Smrg done 6260bb88ba4Smrg shift 6270bb88ba4Smrg fi 6280bb88ba4Smrg 629fe5e51b7Smrg IFS=" " 630fe5e51b7Smrg for arg 631fe5e51b7Smrg do 632fe5e51b7Smrg case "$arg" in 6330bb88ba4Smrg -o) 6340bb88ba4Smrg shift 6350bb88ba4Smrg ;; 6360bb88ba4Smrg $object) 6370bb88ba4Smrg shift 6380bb88ba4Smrg ;; 639fe5e51b7Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640fe5e51b7Smrg set fnord "$@" 641fe5e51b7Smrg shift 642fe5e51b7Smrg shift 643fe5e51b7Smrg ;; 644fe5e51b7Smrg *) 645fe5e51b7Smrg set fnord "$@" "$arg" 646fe5e51b7Smrg shift 647fe5e51b7Smrg shift 648fe5e51b7Smrg ;; 649fe5e51b7Smrg esac 650fe5e51b7Smrg done 6510bb88ba4Smrg "$@" -E 2>/dev/null | 6520bb88ba4Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 653fe5e51b7Smrg rm -f "$depfile" 654fe5e51b7Smrg echo "$object : \\" > "$depfile" 6550bb88ba4Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656fe5e51b7Smrg echo " " >> "$depfile" 6570bb88ba4Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 658fe5e51b7Smrg rm -f "$tmpdepfile" 659fe5e51b7Smrg ;; 660fe5e51b7Smrg 6610bb88ba4Smrgmsvcmsys) 6620bb88ba4Smrg # This case exists only to let depend.m4 do its work. It works by 6630bb88ba4Smrg # looking at the text of this script. This case will never be run, 6640bb88ba4Smrg # since it is checked for above. 6650bb88ba4Smrg exit 1 6660bb88ba4Smrg ;; 6670bb88ba4Smrg 668fe5e51b7Smrgnone) 669fe5e51b7Smrg exec "$@" 670fe5e51b7Smrg ;; 671fe5e51b7Smrg 672fe5e51b7Smrg*) 673fe5e51b7Smrg echo "Unknown depmode $depmode" 1>&2 674fe5e51b7Smrg exit 1 675fe5e51b7Smrg ;; 676fe5e51b7Smrgesac 677fe5e51b7Smrg 678fe5e51b7Smrgexit 0 679fe5e51b7Smrg 680fe5e51b7Smrg# Local Variables: 681fe5e51b7Smrg# mode: shell-script 682fe5e51b7Smrg# sh-indentation: 2 683fe5e51b7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 684fe5e51b7Smrg# time-stamp-start: "scriptversion=" 685fe5e51b7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6860bb88ba4Smrg# time-stamp-time-zone: "UTC" 6870bb88ba4Smrg# time-stamp-end: "; # UTC" 688fe5e51b7Smrg# End: 689