depcomp revision acd6767f
1fe5e51b7Smrg#! /bin/sh 2fe5e51b7Smrg# depcomp - compile a program generating dependencies as side-effects 3fe5e51b7Smrg 4acd6767fSmrgscriptversion=2012-03-27.16; # UTC 5fe5e51b7Smrg 6acd6767fSmrg# Copyright (C) 1999-2012 Free Software Foundation, Inc. 7fe5e51b7Smrg 8fe5e51b7Smrg# This program is free software; you can redistribute it and/or modify 9fe5e51b7Smrg# it under the terms of the GNU General Public License as published by 10fe5e51b7Smrg# the Free Software Foundation; either version 2, or (at your option) 11fe5e51b7Smrg# any later version. 12fe5e51b7Smrg 13fe5e51b7Smrg# This program is distributed in the hope that it will be useful, 14fe5e51b7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 15fe5e51b7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16fe5e51b7Smrg# GNU General Public License for more details. 17fe5e51b7Smrg 18fe5e51b7Smrg# You should have received a copy of the GNU General Public License 190bb88ba4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 20fe5e51b7Smrg 21fe5e51b7Smrg# As a special exception to the GNU General Public License, if you 22fe5e51b7Smrg# distribute this file as part of a program that contains a 23fe5e51b7Smrg# configuration script generated by Autoconf, you may include it under 24fe5e51b7Smrg# the same distribution terms that you use for the rest of that program. 25fe5e51b7Smrg 26fe5e51b7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27fe5e51b7Smrg 28fe5e51b7Smrgcase $1 in 29fe5e51b7Smrg '') 30acd6767fSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 31fe5e51b7Smrg exit 1; 32fe5e51b7Smrg ;; 33fe5e51b7Smrg -h | --h*) 34fe5e51b7Smrg cat <<\EOF 35fe5e51b7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36fe5e51b7Smrg 37fe5e51b7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 38fe5e51b7Smrgas side-effects. 39fe5e51b7Smrg 40fe5e51b7SmrgEnvironment variables: 41fe5e51b7Smrg depmode Dependency tracking mode. 42acd6767fSmrg source Source file read by 'PROGRAMS ARGS'. 43acd6767fSmrg object Object file output by 'PROGRAMS ARGS'. 44fe5e51b7Smrg DEPDIR directory where to store dependencies. 45fe5e51b7Smrg depfile Dependency file to output. 460bb88ba4Smrg tmpdepfile Temporary file to use when outputting dependencies. 47fe5e51b7Smrg libtool Whether libtool is used (yes/no). 48fe5e51b7Smrg 49fe5e51b7SmrgReport bugs to <bug-automake@gnu.org>. 50fe5e51b7SmrgEOF 51fe5e51b7Smrg exit $? 52fe5e51b7Smrg ;; 53fe5e51b7Smrg -v | --v*) 54fe5e51b7Smrg echo "depcomp $scriptversion" 55fe5e51b7Smrg exit $? 56fe5e51b7Smrg ;; 57fe5e51b7Smrgesac 58fe5e51b7Smrg 59acd6767fSmrg# A tabulation character. 60acd6767fSmrgtab=' ' 61acd6767fSmrg# A newline character. 62acd6767fSmrgnl=' 63acd6767fSmrg' 64acd6767fSmrg 65fe5e51b7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 66fe5e51b7Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 67fe5e51b7Smrg exit 1 68fe5e51b7Smrgfi 69fe5e51b7Smrg 70fe5e51b7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 71fe5e51b7Smrgdepfile=${depfile-`echo "$object" | 72fe5e51b7Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 73fe5e51b7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 74fe5e51b7Smrg 75fe5e51b7Smrgrm -f "$tmpdepfile" 76fe5e51b7Smrg 77fe5e51b7Smrg# Some modes work just like other modes, but use different flags. We 78fe5e51b7Smrg# parameterize here, but still list the modes in the big case below, 79fe5e51b7Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 80fe5e51b7Smrg# here, because this file can only contain one case statement. 81fe5e51b7Smrgif test "$depmode" = hp; then 82fe5e51b7Smrg # HP compiler uses -M and no extra arg. 83fe5e51b7Smrg gccflag=-M 84fe5e51b7Smrg depmode=gcc 85fe5e51b7Smrgfi 86fe5e51b7Smrg 87fe5e51b7Smrgif test "$depmode" = dashXmstdout; then 88fe5e51b7Smrg # This is just like dashmstdout with a different argument. 89fe5e51b7Smrg dashmflag=-xM 90fe5e51b7Smrg depmode=dashmstdout 91fe5e51b7Smrgfi 92fe5e51b7Smrg 930bb88ba4Smrgcygpath_u="cygpath -u -f -" 940bb88ba4Smrgif test "$depmode" = msvcmsys; then 950bb88ba4Smrg # This is just like msvisualcpp but w/o cygpath translation. 960bb88ba4Smrg # Just convert the backslash-escaped backslashes to single forward 970bb88ba4Smrg # slashes to satisfy depend.m4 980bb88ba4Smrg cygpath_u='sed s,\\\\,/,g' 990bb88ba4Smrg depmode=msvisualcpp 1000bb88ba4Smrgfi 1010bb88ba4Smrg 1020bb88ba4Smrgif test "$depmode" = msvc7msys; then 1030bb88ba4Smrg # This is just like msvc7 but w/o cygpath translation. 1040bb88ba4Smrg # Just convert the backslash-escaped backslashes to single forward 1050bb88ba4Smrg # slashes to satisfy depend.m4 1060bb88ba4Smrg cygpath_u='sed s,\\\\,/,g' 1070bb88ba4Smrg depmode=msvc7 1080bb88ba4Smrgfi 1090bb88ba4Smrg 110acd6767fSmrgif test "$depmode" = xlc; then 111acd6767fSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. 112acd6767fSmrg gccflag=-qmakedep=gcc,-MF 113acd6767fSmrg depmode=gcc 114acd6767fSmrgfi 115acd6767fSmrg 116fe5e51b7Smrgcase "$depmode" in 117fe5e51b7Smrggcc3) 118fe5e51b7Smrg## gcc 3 implements dependency tracking that does exactly what 119fe5e51b7Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 120fe5e51b7Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 121fe5e51b7Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 122fe5e51b7Smrg## the command line argument order; so add the flags where they 123fe5e51b7Smrg## appear in depend2.am. Note that the slowdown incurred here 124fe5e51b7Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 125fe5e51b7Smrg for arg 126fe5e51b7Smrg do 127fe5e51b7Smrg case $arg in 128fe5e51b7Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 129fe5e51b7Smrg *) set fnord "$@" "$arg" ;; 130fe5e51b7Smrg esac 131fe5e51b7Smrg shift # fnord 132fe5e51b7Smrg shift # $arg 133fe5e51b7Smrg done 134fe5e51b7Smrg "$@" 135fe5e51b7Smrg stat=$? 136fe5e51b7Smrg if test $stat -eq 0; then : 137fe5e51b7Smrg else 138fe5e51b7Smrg rm -f "$tmpdepfile" 139fe5e51b7Smrg exit $stat 140fe5e51b7Smrg fi 141fe5e51b7Smrg mv "$tmpdepfile" "$depfile" 142fe5e51b7Smrg ;; 143fe5e51b7Smrg 144fe5e51b7Smrggcc) 145fe5e51b7Smrg## There are various ways to get dependency output from gcc. Here's 146fe5e51b7Smrg## why we pick this rather obscure method: 147fe5e51b7Smrg## - Don't want to use -MD because we'd like the dependencies to end 148fe5e51b7Smrg## up in a subdir. Having to rename by hand is ugly. 149fe5e51b7Smrg## (We might end up doing this anyway to support other compilers.) 150fe5e51b7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 151fe5e51b7Smrg## -MM, not -M (despite what the docs say). 152fe5e51b7Smrg## - Using -M directly means running the compiler twice (even worse 153fe5e51b7Smrg## than renaming). 154fe5e51b7Smrg if test -z "$gccflag"; then 155fe5e51b7Smrg gccflag=-MD, 156fe5e51b7Smrg fi 157fe5e51b7Smrg "$@" -Wp,"$gccflag$tmpdepfile" 158fe5e51b7Smrg stat=$? 159fe5e51b7Smrg if test $stat -eq 0; then : 160fe5e51b7Smrg else 161fe5e51b7Smrg rm -f "$tmpdepfile" 162fe5e51b7Smrg exit $stat 163fe5e51b7Smrg fi 164fe5e51b7Smrg rm -f "$depfile" 165fe5e51b7Smrg echo "$object : \\" > "$depfile" 166fe5e51b7Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 167fe5e51b7Smrg## The second -e expression handles DOS-style file names with drive letters. 168fe5e51b7Smrg sed -e 's/^[^:]*: / /' \ 169fe5e51b7Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 170acd6767fSmrg## This next piece of magic avoids the "deleted header file" problem. 171fe5e51b7Smrg## The problem is that when a header file which appears in a .P file 172fe5e51b7Smrg## is deleted, the dependency causes make to die (because there is 173fe5e51b7Smrg## typically no way to rebuild the header). We avoid this by adding 174fe5e51b7Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 175fe5e51b7Smrg## this for us directly. 176acd6767fSmrg tr ' ' "$nl" < "$tmpdepfile" | 177acd6767fSmrg## Some versions of gcc put a space before the ':'. On the theory 178fe5e51b7Smrg## that the space means something, we add a space to the output as 1790bb88ba4Smrg## well. hp depmode also adds that space, but also prefixes the VPATH 1800bb88ba4Smrg## to the object. Take care to not repeat it in the output. 181fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 182fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 1830bb88ba4Smrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1840bb88ba4Smrg | sed -e 's/$/ :/' >> "$depfile" 185fe5e51b7Smrg rm -f "$tmpdepfile" 186fe5e51b7Smrg ;; 187fe5e51b7Smrg 188fe5e51b7Smrghp) 189fe5e51b7Smrg # This case exists only to let depend.m4 do its work. It works by 190fe5e51b7Smrg # looking at the text of this script. This case will never be run, 191fe5e51b7Smrg # since it is checked for above. 192fe5e51b7Smrg exit 1 193fe5e51b7Smrg ;; 194fe5e51b7Smrg 195fe5e51b7Smrgsgi) 196fe5e51b7Smrg if test "$libtool" = yes; then 197fe5e51b7Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 198fe5e51b7Smrg else 199fe5e51b7Smrg "$@" -MDupdate "$tmpdepfile" 200fe5e51b7Smrg fi 201fe5e51b7Smrg stat=$? 202fe5e51b7Smrg if test $stat -eq 0; then : 203fe5e51b7Smrg else 204fe5e51b7Smrg rm -f "$tmpdepfile" 205fe5e51b7Smrg exit $stat 206fe5e51b7Smrg fi 207fe5e51b7Smrg rm -f "$depfile" 208fe5e51b7Smrg 209fe5e51b7Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 210fe5e51b7Smrg echo "$object : \\" > "$depfile" 211fe5e51b7Smrg 212fe5e51b7Smrg # Clip off the initial element (the dependent). Don't try to be 213fe5e51b7Smrg # clever and replace this with sed code, as IRIX sed won't handle 214fe5e51b7Smrg # lines with more than a fixed number of characters (4096 in 215fe5e51b7Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 216acd6767fSmrg # the IRIX cc adds comments like '#:fec' to the end of the 217fe5e51b7Smrg # dependency line. 218acd6767fSmrg tr ' ' "$nl" < "$tmpdepfile" \ 219fe5e51b7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 220acd6767fSmrg tr "$nl" ' ' >> "$depfile" 2210bb88ba4Smrg echo >> "$depfile" 222fe5e51b7Smrg 223fe5e51b7Smrg # The second pass generates a dummy entry for each header file. 224acd6767fSmrg tr ' ' "$nl" < "$tmpdepfile" \ 225fe5e51b7Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2260bb88ba4Smrg >> "$depfile" 227fe5e51b7Smrg else 228fe5e51b7Smrg # The sourcefile does not contain any dependencies, so just 229fe5e51b7Smrg # store a dummy comment line, to avoid errors with the Makefile 230fe5e51b7Smrg # "include basename.Plo" scheme. 231fe5e51b7Smrg echo "#dummy" > "$depfile" 232fe5e51b7Smrg fi 233fe5e51b7Smrg rm -f "$tmpdepfile" 234fe5e51b7Smrg ;; 235fe5e51b7Smrg 236acd6767fSmrgxlc) 237acd6767fSmrg # This case exists only to let depend.m4 do its work. It works by 238acd6767fSmrg # looking at the text of this script. This case will never be run, 239acd6767fSmrg # since it is checked for above. 240acd6767fSmrg exit 1 241acd6767fSmrg ;; 242acd6767fSmrg 243fe5e51b7Smrgaix) 244fe5e51b7Smrg # The C for AIX Compiler uses -M and outputs the dependencies 245fe5e51b7Smrg # in a .u file. In older versions, this file always lives in the 246acd6767fSmrg # current directory. Also, the AIX compiler puts '$object:' at the 247fe5e51b7Smrg # start of each line; $object doesn't have directory information. 248fe5e51b7Smrg # Version 6 uses the directory in both cases. 249eda3803bSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 250eda3803bSmrg test "x$dir" = "x$object" && dir= 251eda3803bSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 252fe5e51b7Smrg if test "$libtool" = yes; then 253eda3803bSmrg tmpdepfile1=$dir$base.u 254eda3803bSmrg tmpdepfile2=$base.u 255eda3803bSmrg tmpdepfile3=$dir.libs/$base.u 256fe5e51b7Smrg "$@" -Wc,-M 257fe5e51b7Smrg else 258eda3803bSmrg tmpdepfile1=$dir$base.u 259eda3803bSmrg tmpdepfile2=$dir$base.u 260eda3803bSmrg tmpdepfile3=$dir$base.u 261fe5e51b7Smrg "$@" -M 262fe5e51b7Smrg fi 263fe5e51b7Smrg stat=$? 264fe5e51b7Smrg 265fe5e51b7Smrg if test $stat -eq 0; then : 266fe5e51b7Smrg else 267eda3803bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 268fe5e51b7Smrg exit $stat 269fe5e51b7Smrg fi 270fe5e51b7Smrg 271eda3803bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 272eda3803bSmrg do 273eda3803bSmrg test -f "$tmpdepfile" && break 274eda3803bSmrg done 275fe5e51b7Smrg if test -f "$tmpdepfile"; then 276acd6767fSmrg # Each line is of the form 'foo.o: dependent.h'. 277fe5e51b7Smrg # Do two passes, one to just change these to 278acd6767fSmrg # '$object: dependent.h' and one to simply 'dependent.h:'. 279eda3803bSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 280acd6767fSmrg sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 281fe5e51b7Smrg else 282fe5e51b7Smrg # The sourcefile does not contain any dependencies, so just 283fe5e51b7Smrg # store a dummy comment line, to avoid errors with the Makefile 284fe5e51b7Smrg # "include basename.Plo" scheme. 285fe5e51b7Smrg echo "#dummy" > "$depfile" 286fe5e51b7Smrg fi 287fe5e51b7Smrg rm -f "$tmpdepfile" 288fe5e51b7Smrg ;; 289fe5e51b7Smrg 290fe5e51b7Smrgicc) 291acd6767fSmrg # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. 292acd6767fSmrg # However on 293acd6767fSmrg # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c 294fe5e51b7Smrg # ICC 7.0 will fill foo.d with something like 295fe5e51b7Smrg # foo.o: sub/foo.c 296fe5e51b7Smrg # foo.o: sub/foo.h 297acd6767fSmrg # which is wrong. We want 298fe5e51b7Smrg # sub/foo.o: sub/foo.c 299fe5e51b7Smrg # sub/foo.o: sub/foo.h 300fe5e51b7Smrg # sub/foo.c: 301fe5e51b7Smrg # sub/foo.h: 302fe5e51b7Smrg # ICC 7.1 will output 303fe5e51b7Smrg # foo.o: sub/foo.c sub/foo.h 304acd6767fSmrg # and will wrap long lines using '\': 305fe5e51b7Smrg # foo.o: sub/foo.c ... \ 306fe5e51b7Smrg # sub/foo.h ... \ 307fe5e51b7Smrg # ... 308acd6767fSmrg # tcc 0.9.26 (FIXME still under development at the moment of writing) 309acd6767fSmrg # will emit a similar output, but also prepend the continuation lines 310acd6767fSmrg # with horizontal tabulation characters. 311fe5e51b7Smrg "$@" -MD -MF "$tmpdepfile" 312fe5e51b7Smrg stat=$? 313fe5e51b7Smrg if test $stat -eq 0; then : 314fe5e51b7Smrg else 315fe5e51b7Smrg rm -f "$tmpdepfile" 316fe5e51b7Smrg exit $stat 317fe5e51b7Smrg fi 318fe5e51b7Smrg rm -f "$depfile" 319acd6767fSmrg # Each line is of the form 'foo.o: dependent.h', 320acd6767fSmrg # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. 321fe5e51b7Smrg # Do two passes, one to just change these to 322acd6767fSmrg # '$object: dependent.h' and one to simply 'dependent.h:'. 323acd6767fSmrg sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ 324acd6767fSmrg < "$tmpdepfile" > "$depfile" 325acd6767fSmrg sed ' 326acd6767fSmrg s/[ '"$tab"'][ '"$tab"']*/ /g 327acd6767fSmrg s/^ *// 328acd6767fSmrg s/ *\\*$// 329acd6767fSmrg s/^[^:]*: *// 330acd6767fSmrg /^$/d 331acd6767fSmrg /:$/d 332acd6767fSmrg s/$/ :/ 333acd6767fSmrg ' < "$tmpdepfile" >> "$depfile" 334fe5e51b7Smrg rm -f "$tmpdepfile" 335fe5e51b7Smrg ;; 336fe5e51b7Smrg 337fe5e51b7Smrghp2) 338fe5e51b7Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 339fe5e51b7Smrg # compilers, which have integrated preprocessors. The correct option 340fe5e51b7Smrg # to use with these is +Maked; it writes dependencies to a file named 341fe5e51b7Smrg # 'foo.d', which lands next to the object file, wherever that 342fe5e51b7Smrg # happens to be. 343fe5e51b7Smrg # Much of this is similar to the tru64 case; see comments there. 344fe5e51b7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345fe5e51b7Smrg test "x$dir" = "x$object" && dir= 346fe5e51b7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347fe5e51b7Smrg if test "$libtool" = yes; then 348fe5e51b7Smrg tmpdepfile1=$dir$base.d 349fe5e51b7Smrg tmpdepfile2=$dir.libs/$base.d 350fe5e51b7Smrg "$@" -Wc,+Maked 351fe5e51b7Smrg else 352fe5e51b7Smrg tmpdepfile1=$dir$base.d 353fe5e51b7Smrg tmpdepfile2=$dir$base.d 354fe5e51b7Smrg "$@" +Maked 355fe5e51b7Smrg fi 356fe5e51b7Smrg stat=$? 357fe5e51b7Smrg if test $stat -eq 0; then : 358fe5e51b7Smrg else 359fe5e51b7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 360fe5e51b7Smrg exit $stat 361fe5e51b7Smrg fi 362fe5e51b7Smrg 363fe5e51b7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 364fe5e51b7Smrg do 365fe5e51b7Smrg test -f "$tmpdepfile" && break 366fe5e51b7Smrg done 367fe5e51b7Smrg if test -f "$tmpdepfile"; then 368fe5e51b7Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 369acd6767fSmrg # Add 'dependent.h:' lines. 3700bb88ba4Smrg sed -ne '2,${ 3710bb88ba4Smrg s/^ *// 3720bb88ba4Smrg s/ \\*$// 3730bb88ba4Smrg s/$/:/ 3740bb88ba4Smrg p 3750bb88ba4Smrg }' "$tmpdepfile" >> "$depfile" 376fe5e51b7Smrg else 377fe5e51b7Smrg echo "#dummy" > "$depfile" 378fe5e51b7Smrg fi 379fe5e51b7Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 380fe5e51b7Smrg ;; 381fe5e51b7Smrg 382fe5e51b7Smrgtru64) 383fe5e51b7Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 384acd6767fSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 385fe5e51b7Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 386acd6767fSmrg # dependencies in 'foo.d' instead, so we check for that too. 387fe5e51b7Smrg # Subdirectories are respected. 388fe5e51b7Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 389fe5e51b7Smrg test "x$dir" = "x$object" && dir= 390fe5e51b7Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 391fe5e51b7Smrg 392fe5e51b7Smrg if test "$libtool" = yes; then 393fe5e51b7Smrg # With Tru64 cc, shared objects can also be used to make a 394fe5e51b7Smrg # static library. This mechanism is used in libtool 1.4 series to 395fe5e51b7Smrg # handle both shared and static libraries in a single compilation. 396fe5e51b7Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 397fe5e51b7Smrg # 398fe5e51b7Smrg # With libtool 1.5 this exception was removed, and libtool now 399fe5e51b7Smrg # generates 2 separate objects for the 2 libraries. These two 400fe5e51b7Smrg # compilations output dependencies in $dir.libs/$base.o.d and 401fe5e51b7Smrg # in $dir$base.o.d. We have to check for both files, because 402fe5e51b7Smrg # one of the two compilations can be disabled. We should prefer 403fe5e51b7Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 404fe5e51b7Smrg # automatically cleaned when .libs/ is deleted, while ignoring 405fe5e51b7Smrg # the former would cause a distcleancheck panic. 406fe5e51b7Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 407fe5e51b7Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 408fe5e51b7Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 409fe5e51b7Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 410fe5e51b7Smrg "$@" -Wc,-MD 411fe5e51b7Smrg else 412fe5e51b7Smrg tmpdepfile1=$dir$base.o.d 413fe5e51b7Smrg tmpdepfile2=$dir$base.d 414fe5e51b7Smrg tmpdepfile3=$dir$base.d 415fe5e51b7Smrg tmpdepfile4=$dir$base.d 416fe5e51b7Smrg "$@" -MD 417fe5e51b7Smrg fi 418fe5e51b7Smrg 419fe5e51b7Smrg stat=$? 420fe5e51b7Smrg if test $stat -eq 0; then : 421fe5e51b7Smrg else 422fe5e51b7Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 423fe5e51b7Smrg exit $stat 424fe5e51b7Smrg fi 425fe5e51b7Smrg 426fe5e51b7Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 427fe5e51b7Smrg do 428fe5e51b7Smrg test -f "$tmpdepfile" && break 429fe5e51b7Smrg done 430fe5e51b7Smrg if test -f "$tmpdepfile"; then 431fe5e51b7Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 432acd6767fSmrg sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 433fe5e51b7Smrg else 434fe5e51b7Smrg echo "#dummy" > "$depfile" 435fe5e51b7Smrg fi 436fe5e51b7Smrg rm -f "$tmpdepfile" 437fe5e51b7Smrg ;; 438fe5e51b7Smrg 4390bb88ba4Smrgmsvc7) 4400bb88ba4Smrg if test "$libtool" = yes; then 4410bb88ba4Smrg showIncludes=-Wc,-showIncludes 4420bb88ba4Smrg else 4430bb88ba4Smrg showIncludes=-showIncludes 4440bb88ba4Smrg fi 4450bb88ba4Smrg "$@" $showIncludes > "$tmpdepfile" 4460bb88ba4Smrg stat=$? 4470bb88ba4Smrg grep -v '^Note: including file: ' "$tmpdepfile" 4480bb88ba4Smrg if test "$stat" = 0; then : 4490bb88ba4Smrg else 4500bb88ba4Smrg rm -f "$tmpdepfile" 4510bb88ba4Smrg exit $stat 4520bb88ba4Smrg fi 4530bb88ba4Smrg rm -f "$depfile" 4540bb88ba4Smrg echo "$object : \\" > "$depfile" 4550bb88ba4Smrg # The first sed program below extracts the file names and escapes 4560bb88ba4Smrg # backslashes for cygpath. The second sed program outputs the file 4570bb88ba4Smrg # name when reading, but also accumulates all include files in the 4580bb88ba4Smrg # hold buffer in order to output them again at the end. This only 4590bb88ba4Smrg # works with sed implementations that can handle large buffers. 4600bb88ba4Smrg sed < "$tmpdepfile" -n ' 4610bb88ba4Smrg/^Note: including file: *\(.*\)/ { 4620bb88ba4Smrg s//\1/ 4630bb88ba4Smrg s/\\/\\\\/g 4640bb88ba4Smrg p 4650bb88ba4Smrg}' | $cygpath_u | sort -u | sed -n ' 4660bb88ba4Smrgs/ /\\ /g 467acd6767fSmrgs/\(.*\)/'"$tab"'\1 \\/p 4680bb88ba4Smrgs/.\(.*\) \\/\1:/ 4690bb88ba4SmrgH 4700bb88ba4Smrg$ { 471acd6767fSmrg s/.*/'"$tab"'/ 4720bb88ba4Smrg G 4730bb88ba4Smrg p 4740bb88ba4Smrg}' >> "$depfile" 4750bb88ba4Smrg rm -f "$tmpdepfile" 4760bb88ba4Smrg ;; 4770bb88ba4Smrg 4780bb88ba4Smrgmsvc7msys) 4790bb88ba4Smrg # This case exists only to let depend.m4 do its work. It works by 4800bb88ba4Smrg # looking at the text of this script. This case will never be run, 4810bb88ba4Smrg # since it is checked for above. 4820bb88ba4Smrg exit 1 4830bb88ba4Smrg ;; 4840bb88ba4Smrg 485fe5e51b7Smrg#nosideeffect) 486fe5e51b7Smrg # This comment above is used by automake to tell side-effect 487fe5e51b7Smrg # dependency tracking mechanisms from slower ones. 488fe5e51b7Smrg 489fe5e51b7Smrgdashmstdout) 490fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 491fe5e51b7Smrg # always write the preprocessed file to stdout, regardless of -o. 492fe5e51b7Smrg "$@" || exit $? 493fe5e51b7Smrg 494fe5e51b7Smrg # Remove the call to Libtool. 495fe5e51b7Smrg if test "$libtool" = yes; then 4960bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 497fe5e51b7Smrg shift 498fe5e51b7Smrg done 499fe5e51b7Smrg shift 500fe5e51b7Smrg fi 501fe5e51b7Smrg 502acd6767fSmrg # Remove '-o $object'. 503fe5e51b7Smrg IFS=" " 504fe5e51b7Smrg for arg 505fe5e51b7Smrg do 506fe5e51b7Smrg case $arg in 507fe5e51b7Smrg -o) 508fe5e51b7Smrg shift 509fe5e51b7Smrg ;; 510fe5e51b7Smrg $object) 511fe5e51b7Smrg shift 512fe5e51b7Smrg ;; 513fe5e51b7Smrg *) 514fe5e51b7Smrg set fnord "$@" "$arg" 515fe5e51b7Smrg shift # fnord 516fe5e51b7Smrg shift # $arg 517fe5e51b7Smrg ;; 518fe5e51b7Smrg esac 519fe5e51b7Smrg done 520fe5e51b7Smrg 521fe5e51b7Smrg test -z "$dashmflag" && dashmflag=-M 522acd6767fSmrg # Require at least two characters before searching for ':' 523fe5e51b7Smrg # in the target name. This is to cope with DOS-style filenames: 524acd6767fSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 525fe5e51b7Smrg "$@" $dashmflag | 526acd6767fSmrg sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" 527fe5e51b7Smrg rm -f "$depfile" 528fe5e51b7Smrg cat < "$tmpdepfile" > "$depfile" 529acd6767fSmrg tr ' ' "$nl" < "$tmpdepfile" | \ 530fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 531fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 532fe5e51b7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 533fe5e51b7Smrg rm -f "$tmpdepfile" 534fe5e51b7Smrg ;; 535fe5e51b7Smrg 536fe5e51b7SmrgdashXmstdout) 537fe5e51b7Smrg # This case only exists to satisfy depend.m4. It is never actually 538fe5e51b7Smrg # run, as this mode is specially recognized in the preamble. 539fe5e51b7Smrg exit 1 540fe5e51b7Smrg ;; 541fe5e51b7Smrg 542fe5e51b7Smrgmakedepend) 543fe5e51b7Smrg "$@" || exit $? 544fe5e51b7Smrg # Remove any Libtool call 545fe5e51b7Smrg if test "$libtool" = yes; then 5460bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 547fe5e51b7Smrg shift 548fe5e51b7Smrg done 549fe5e51b7Smrg shift 550fe5e51b7Smrg fi 551fe5e51b7Smrg # X makedepend 552fe5e51b7Smrg shift 5530bb88ba4Smrg cleared=no eat=no 5540bb88ba4Smrg for arg 5550bb88ba4Smrg do 556fe5e51b7Smrg case $cleared in 557fe5e51b7Smrg no) 558fe5e51b7Smrg set ""; shift 559fe5e51b7Smrg cleared=yes ;; 560fe5e51b7Smrg esac 5610bb88ba4Smrg if test $eat = yes; then 5620bb88ba4Smrg eat=no 5630bb88ba4Smrg continue 5640bb88ba4Smrg fi 565fe5e51b7Smrg case "$arg" in 566fe5e51b7Smrg -D*|-I*) 567fe5e51b7Smrg set fnord "$@" "$arg"; shift ;; 568fe5e51b7Smrg # Strip any option that makedepend may not understand. Remove 569fe5e51b7Smrg # the object too, otherwise makedepend will parse it as a source file. 5700bb88ba4Smrg -arch) 5710bb88ba4Smrg eat=yes ;; 572fe5e51b7Smrg -*|$object) 573fe5e51b7Smrg ;; 574fe5e51b7Smrg *) 575fe5e51b7Smrg set fnord "$@" "$arg"; shift ;; 576fe5e51b7Smrg esac 577fe5e51b7Smrg done 5780bb88ba4Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 579fe5e51b7Smrg touch "$tmpdepfile" 580fe5e51b7Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 581fe5e51b7Smrg rm -f "$depfile" 5820bb88ba4Smrg # makedepend may prepend the VPATH from the source file name to the object. 5830bb88ba4Smrg # No need to regex-escape $object, excess matching of '.' is harmless. 5840bb88ba4Smrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 585acd6767fSmrg sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ 586fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 587fe5e51b7Smrg## correctly. Breaking it into two sed invocations is a workaround. 588fe5e51b7Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 589fe5e51b7Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 590fe5e51b7Smrg ;; 591fe5e51b7Smrg 592fe5e51b7Smrgcpp) 593fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 594fe5e51b7Smrg # always write the preprocessed file to stdout. 595fe5e51b7Smrg "$@" || exit $? 596fe5e51b7Smrg 597fe5e51b7Smrg # Remove the call to Libtool. 598fe5e51b7Smrg if test "$libtool" = yes; then 5990bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 600fe5e51b7Smrg shift 601fe5e51b7Smrg done 602fe5e51b7Smrg shift 603fe5e51b7Smrg fi 604fe5e51b7Smrg 605acd6767fSmrg # Remove '-o $object'. 606fe5e51b7Smrg IFS=" " 607fe5e51b7Smrg for arg 608fe5e51b7Smrg do 609fe5e51b7Smrg case $arg in 610fe5e51b7Smrg -o) 611fe5e51b7Smrg shift 612fe5e51b7Smrg ;; 613fe5e51b7Smrg $object) 614fe5e51b7Smrg shift 615fe5e51b7Smrg ;; 616fe5e51b7Smrg *) 617fe5e51b7Smrg set fnord "$@" "$arg" 618fe5e51b7Smrg shift # fnord 619fe5e51b7Smrg shift # $arg 620fe5e51b7Smrg ;; 621fe5e51b7Smrg esac 622fe5e51b7Smrg done 623fe5e51b7Smrg 624fe5e51b7Smrg "$@" -E | 625fe5e51b7Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 626fe5e51b7Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 627fe5e51b7Smrg sed '$ s: \\$::' > "$tmpdepfile" 628fe5e51b7Smrg rm -f "$depfile" 629fe5e51b7Smrg echo "$object : \\" > "$depfile" 630fe5e51b7Smrg cat < "$tmpdepfile" >> "$depfile" 631fe5e51b7Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 632fe5e51b7Smrg rm -f "$tmpdepfile" 633fe5e51b7Smrg ;; 634fe5e51b7Smrg 635fe5e51b7Smrgmsvisualcpp) 636fe5e51b7Smrg # Important note: in order to support this mode, a compiler *must* 6370bb88ba4Smrg # always write the preprocessed file to stdout. 638fe5e51b7Smrg "$@" || exit $? 6390bb88ba4Smrg 6400bb88ba4Smrg # Remove the call to Libtool. 6410bb88ba4Smrg if test "$libtool" = yes; then 6420bb88ba4Smrg while test "X$1" != 'X--mode=compile'; do 6430bb88ba4Smrg shift 6440bb88ba4Smrg done 6450bb88ba4Smrg shift 6460bb88ba4Smrg fi 6470bb88ba4Smrg 648fe5e51b7Smrg IFS=" " 649fe5e51b7Smrg for arg 650fe5e51b7Smrg do 651fe5e51b7Smrg case "$arg" in 6520bb88ba4Smrg -o) 6530bb88ba4Smrg shift 6540bb88ba4Smrg ;; 6550bb88ba4Smrg $object) 6560bb88ba4Smrg shift 6570bb88ba4Smrg ;; 658fe5e51b7Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 659fe5e51b7Smrg set fnord "$@" 660fe5e51b7Smrg shift 661fe5e51b7Smrg shift 662fe5e51b7Smrg ;; 663fe5e51b7Smrg *) 664fe5e51b7Smrg set fnord "$@" "$arg" 665fe5e51b7Smrg shift 666fe5e51b7Smrg shift 667fe5e51b7Smrg ;; 668fe5e51b7Smrg esac 669fe5e51b7Smrg done 6700bb88ba4Smrg "$@" -E 2>/dev/null | 6710bb88ba4Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 672fe5e51b7Smrg rm -f "$depfile" 673fe5e51b7Smrg echo "$object : \\" > "$depfile" 674acd6767fSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 675acd6767fSmrg echo "$tab" >> "$depfile" 6760bb88ba4Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 677fe5e51b7Smrg rm -f "$tmpdepfile" 678fe5e51b7Smrg ;; 679fe5e51b7Smrg 6800bb88ba4Smrgmsvcmsys) 6810bb88ba4Smrg # This case exists only to let depend.m4 do its work. It works by 6820bb88ba4Smrg # looking at the text of this script. This case will never be run, 6830bb88ba4Smrg # since it is checked for above. 6840bb88ba4Smrg exit 1 6850bb88ba4Smrg ;; 6860bb88ba4Smrg 687fe5e51b7Smrgnone) 688fe5e51b7Smrg exec "$@" 689fe5e51b7Smrg ;; 690fe5e51b7Smrg 691fe5e51b7Smrg*) 692fe5e51b7Smrg echo "Unknown depmode $depmode" 1>&2 693fe5e51b7Smrg exit 1 694fe5e51b7Smrg ;; 695fe5e51b7Smrgesac 696fe5e51b7Smrg 697fe5e51b7Smrgexit 0 698fe5e51b7Smrg 699fe5e51b7Smrg# Local Variables: 700fe5e51b7Smrg# mode: shell-script 701fe5e51b7Smrg# sh-indentation: 2 702fe5e51b7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 703fe5e51b7Smrg# time-stamp-start: "scriptversion=" 704fe5e51b7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 7050bb88ba4Smrg# time-stamp-time-zone: "UTC" 7060bb88ba4Smrg# time-stamp-end: "; # UTC" 707fe5e51b7Smrg# End: 708