depcomp revision 1b1389ee
1bccedf53Smrg#! /bin/sh 2bccedf53Smrg# depcomp - compile a program generating dependencies as side-effects 37c5f6000Smrg 41b1389eeSmrgscriptversion=2011-12-04.11; # UTC 57c5f6000Smrg 61b1389eeSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 71b1389eeSmrg# 2011 Free Software Foundation, Inc. 8bccedf53Smrg 9bccedf53Smrg# This program is free software; you can redistribute it and/or modify 10bccedf53Smrg# it under the terms of the GNU General Public License as published by 11bccedf53Smrg# the Free Software Foundation; either version 2, or (at your option) 12bccedf53Smrg# any later version. 13bccedf53Smrg 14bccedf53Smrg# This program is distributed in the hope that it will be useful, 15bccedf53Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16bccedf53Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17bccedf53Smrg# GNU General Public License for more details. 18bccedf53Smrg 19bccedf53Smrg# You should have received a copy of the GNU General Public License 207c5f6000Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 21bccedf53Smrg 22bccedf53Smrg# As a special exception to the GNU General Public License, if you 23bccedf53Smrg# distribute this file as part of a program that contains a 24bccedf53Smrg# configuration script generated by Autoconf, you may include it under 25bccedf53Smrg# the same distribution terms that you use for the rest of that program. 26bccedf53Smrg 27bccedf53Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 28bccedf53Smrg 297c5f6000Smrgcase $1 in 307c5f6000Smrg '') 317c5f6000Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 327c5f6000Smrg exit 1; 337c5f6000Smrg ;; 347c5f6000Smrg -h | --h*) 357c5f6000Smrg cat <<\EOF 367c5f6000SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 377c5f6000Smrg 387c5f6000SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 397c5f6000Smrgas side-effects. 407c5f6000Smrg 417c5f6000SmrgEnvironment variables: 427c5f6000Smrg depmode Dependency tracking mode. 437c5f6000Smrg source Source file read by `PROGRAMS ARGS'. 447c5f6000Smrg object Object file output by `PROGRAMS ARGS'. 457c5f6000Smrg DEPDIR directory where to store dependencies. 467c5f6000Smrg depfile Dependency file to output. 471b1389eeSmrg tmpdepfile Temporary file to use when outputting dependencies. 487c5f6000Smrg libtool Whether libtool is used (yes/no). 497c5f6000Smrg 507c5f6000SmrgReport bugs to <bug-automake@gnu.org>. 517c5f6000SmrgEOF 527c5f6000Smrg exit $? 537c5f6000Smrg ;; 547c5f6000Smrg -v | --v*) 557c5f6000Smrg echo "depcomp $scriptversion" 567c5f6000Smrg exit $? 577c5f6000Smrg ;; 587c5f6000Smrgesac 597c5f6000Smrg 60bccedf53Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 61bccedf53Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 62bccedf53Smrg exit 1 63bccedf53Smrgfi 64bccedf53Smrg 657c5f6000Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 667c5f6000Smrgdepfile=${depfile-`echo "$object" | 677c5f6000Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 68bccedf53Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 69bccedf53Smrg 70bccedf53Smrgrm -f "$tmpdepfile" 71bccedf53Smrg 72bccedf53Smrg# Some modes work just like other modes, but use different flags. We 73bccedf53Smrg# parameterize here, but still list the modes in the big case below, 74bccedf53Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 75bccedf53Smrg# here, because this file can only contain one case statement. 76bccedf53Smrgif test "$depmode" = hp; then 77bccedf53Smrg # HP compiler uses -M and no extra arg. 78bccedf53Smrg gccflag=-M 79bccedf53Smrg depmode=gcc 80bccedf53Smrgfi 81bccedf53Smrg 82bccedf53Smrgif test "$depmode" = dashXmstdout; then 83bccedf53Smrg # This is just like dashmstdout with a different argument. 84bccedf53Smrg dashmflag=-xM 85bccedf53Smrg depmode=dashmstdout 86bccedf53Smrgfi 87bccedf53Smrg 887c5f6000Smrgcygpath_u="cygpath -u -f -" 897c5f6000Smrgif test "$depmode" = msvcmsys; then 907c5f6000Smrg # This is just like msvisualcpp but w/o cygpath translation. 917c5f6000Smrg # Just convert the backslash-escaped backslashes to single forward 927c5f6000Smrg # slashes to satisfy depend.m4 931b1389eeSmrg cygpath_u='sed s,\\\\,/,g' 947c5f6000Smrg depmode=msvisualcpp 957c5f6000Smrgfi 967c5f6000Smrg 971b1389eeSmrgif test "$depmode" = msvc7msys; then 981b1389eeSmrg # This is just like msvc7 but w/o cygpath translation. 991b1389eeSmrg # Just convert the backslash-escaped backslashes to single forward 1001b1389eeSmrg # slashes to satisfy depend.m4 1011b1389eeSmrg cygpath_u='sed s,\\\\,/,g' 1021b1389eeSmrg depmode=msvc7 1031b1389eeSmrgfi 1041b1389eeSmrg 105bccedf53Smrgcase "$depmode" in 106bccedf53Smrggcc3) 107bccedf53Smrg## gcc 3 implements dependency tracking that does exactly what 108bccedf53Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 109bccedf53Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 1107c5f6000Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1117c5f6000Smrg## the command line argument order; so add the flags where they 1127c5f6000Smrg## appear in depend2.am. Note that the slowdown incurred here 1137c5f6000Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1147c5f6000Smrg for arg 1157c5f6000Smrg do 1167c5f6000Smrg case $arg in 1177c5f6000Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1187c5f6000Smrg *) set fnord "$@" "$arg" ;; 1197c5f6000Smrg esac 1207c5f6000Smrg shift # fnord 1217c5f6000Smrg shift # $arg 1227c5f6000Smrg done 1237c5f6000Smrg "$@" 124bccedf53Smrg stat=$? 125bccedf53Smrg if test $stat -eq 0; then : 126bccedf53Smrg else 127bccedf53Smrg rm -f "$tmpdepfile" 128bccedf53Smrg exit $stat 129bccedf53Smrg fi 130bccedf53Smrg mv "$tmpdepfile" "$depfile" 131bccedf53Smrg ;; 132bccedf53Smrg 133bccedf53Smrggcc) 134bccedf53Smrg## There are various ways to get dependency output from gcc. Here's 135bccedf53Smrg## why we pick this rather obscure method: 136bccedf53Smrg## - Don't want to use -MD because we'd like the dependencies to end 137bccedf53Smrg## up in a subdir. Having to rename by hand is ugly. 138bccedf53Smrg## (We might end up doing this anyway to support other compilers.) 139bccedf53Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 140bccedf53Smrg## -MM, not -M (despite what the docs say). 141bccedf53Smrg## - Using -M directly means running the compiler twice (even worse 142bccedf53Smrg## than renaming). 143bccedf53Smrg if test -z "$gccflag"; then 144bccedf53Smrg gccflag=-MD, 145bccedf53Smrg fi 146bccedf53Smrg "$@" -Wp,"$gccflag$tmpdepfile" 147bccedf53Smrg stat=$? 148bccedf53Smrg if test $stat -eq 0; then : 149bccedf53Smrg else 150bccedf53Smrg rm -f "$tmpdepfile" 151bccedf53Smrg exit $stat 152bccedf53Smrg fi 153bccedf53Smrg rm -f "$depfile" 154bccedf53Smrg echo "$object : \\" > "$depfile" 155bccedf53Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 156bccedf53Smrg## The second -e expression handles DOS-style file names with drive letters. 157bccedf53Smrg sed -e 's/^[^:]*: / /' \ 158bccedf53Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 159bccedf53Smrg## This next piece of magic avoids the `deleted header file' problem. 160bccedf53Smrg## The problem is that when a header file which appears in a .P file 161bccedf53Smrg## is deleted, the dependency causes make to die (because there is 162bccedf53Smrg## typically no way to rebuild the header). We avoid this by adding 163bccedf53Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 164bccedf53Smrg## this for us directly. 165bccedf53Smrg tr ' ' ' 166bccedf53Smrg' < "$tmpdepfile" | 167bccedf53Smrg## Some versions of gcc put a space before the `:'. On the theory 168bccedf53Smrg## that the space means something, we add a space to the output as 1691b1389eeSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 1701b1389eeSmrg## to the object. Take care to not repeat it in the output. 171bccedf53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 172bccedf53Smrg## correctly. Breaking it into two sed invocations is a workaround. 1731b1389eeSmrg sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 1741b1389eeSmrg | sed -e 's/$/ :/' >> "$depfile" 175bccedf53Smrg rm -f "$tmpdepfile" 176bccedf53Smrg ;; 177bccedf53Smrg 178bccedf53Smrghp) 179bccedf53Smrg # This case exists only to let depend.m4 do its work. It works by 180bccedf53Smrg # looking at the text of this script. This case will never be run, 181bccedf53Smrg # since it is checked for above. 182bccedf53Smrg exit 1 183bccedf53Smrg ;; 184bccedf53Smrg 185bccedf53Smrgsgi) 186bccedf53Smrg if test "$libtool" = yes; then 187bccedf53Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 188bccedf53Smrg else 189bccedf53Smrg "$@" -MDupdate "$tmpdepfile" 190bccedf53Smrg fi 191bccedf53Smrg stat=$? 192bccedf53Smrg if test $stat -eq 0; then : 193bccedf53Smrg else 194bccedf53Smrg rm -f "$tmpdepfile" 195bccedf53Smrg exit $stat 196bccedf53Smrg fi 197bccedf53Smrg rm -f "$depfile" 198bccedf53Smrg 199bccedf53Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 200bccedf53Smrg echo "$object : \\" > "$depfile" 201bccedf53Smrg 202bccedf53Smrg # Clip off the initial element (the dependent). Don't try to be 203bccedf53Smrg # clever and replace this with sed code, as IRIX sed won't handle 204bccedf53Smrg # lines with more than a fixed number of characters (4096 in 205bccedf53Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 206bccedf53Smrg # the IRIX cc adds comments like `#:fec' to the end of the 207bccedf53Smrg # dependency line. 208bccedf53Smrg tr ' ' ' 209bccedf53Smrg' < "$tmpdepfile" \ 210bccedf53Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 211bccedf53Smrg tr ' 2127c5f6000Smrg' ' ' >> "$depfile" 2137c5f6000Smrg echo >> "$depfile" 214bccedf53Smrg 215bccedf53Smrg # The second pass generates a dummy entry for each header file. 216bccedf53Smrg tr ' ' ' 217bccedf53Smrg' < "$tmpdepfile" \ 218bccedf53Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2197c5f6000Smrg >> "$depfile" 220bccedf53Smrg else 221bccedf53Smrg # The sourcefile does not contain any dependencies, so just 222bccedf53Smrg # store a dummy comment line, to avoid errors with the Makefile 223bccedf53Smrg # "include basename.Plo" scheme. 224bccedf53Smrg echo "#dummy" > "$depfile" 225bccedf53Smrg fi 226bccedf53Smrg rm -f "$tmpdepfile" 227bccedf53Smrg ;; 228bccedf53Smrg 229bccedf53Smrgaix) 230bccedf53Smrg # The C for AIX Compiler uses -M and outputs the dependencies 231bccedf53Smrg # in a .u file. In older versions, this file always lives in the 232bccedf53Smrg # current directory. Also, the AIX compiler puts `$object:' at the 233bccedf53Smrg # start of each line; $object doesn't have directory information. 234bccedf53Smrg # Version 6 uses the directory in both cases. 2357c5f6000Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2367c5f6000Smrg test "x$dir" = "x$object" && dir= 2377c5f6000Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 238bccedf53Smrg if test "$libtool" = yes; then 2397c5f6000Smrg tmpdepfile1=$dir$base.u 2407c5f6000Smrg tmpdepfile2=$base.u 2417c5f6000Smrg tmpdepfile3=$dir.libs/$base.u 242bccedf53Smrg "$@" -Wc,-M 243bccedf53Smrg else 2447c5f6000Smrg tmpdepfile1=$dir$base.u 2457c5f6000Smrg tmpdepfile2=$dir$base.u 2467c5f6000Smrg tmpdepfile3=$dir$base.u 247bccedf53Smrg "$@" -M 248bccedf53Smrg fi 249bccedf53Smrg stat=$? 250bccedf53Smrg 251bccedf53Smrg if test $stat -eq 0; then : 252bccedf53Smrg else 2537c5f6000Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 254bccedf53Smrg exit $stat 255bccedf53Smrg fi 256bccedf53Smrg 2577c5f6000Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2587c5f6000Smrg do 2597c5f6000Smrg test -f "$tmpdepfile" && break 2607c5f6000Smrg done 261bccedf53Smrg if test -f "$tmpdepfile"; then 262bccedf53Smrg # Each line is of the form `foo.o: dependent.h'. 263bccedf53Smrg # Do two passes, one to just change these to 264bccedf53Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 2657c5f6000Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2667c5f6000Smrg # That's a tab and a space in the []. 2677c5f6000Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 268bccedf53Smrg else 269bccedf53Smrg # The sourcefile does not contain any dependencies, so just 270bccedf53Smrg # store a dummy comment line, to avoid errors with the Makefile 271bccedf53Smrg # "include basename.Plo" scheme. 272bccedf53Smrg echo "#dummy" > "$depfile" 273bccedf53Smrg fi 274bccedf53Smrg rm -f "$tmpdepfile" 275bccedf53Smrg ;; 276bccedf53Smrg 277bccedf53Smrgicc) 278bccedf53Smrg # Intel's C compiler understands `-MD -MF file'. However on 279bccedf53Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 280bccedf53Smrg # ICC 7.0 will fill foo.d with something like 281bccedf53Smrg # foo.o: sub/foo.c 282bccedf53Smrg # foo.o: sub/foo.h 283bccedf53Smrg # which is wrong. We want: 284bccedf53Smrg # sub/foo.o: sub/foo.c 285bccedf53Smrg # sub/foo.o: sub/foo.h 286bccedf53Smrg # sub/foo.c: 287bccedf53Smrg # sub/foo.h: 288bccedf53Smrg # ICC 7.1 will output 289bccedf53Smrg # foo.o: sub/foo.c sub/foo.h 290bccedf53Smrg # and will wrap long lines using \ : 291bccedf53Smrg # foo.o: sub/foo.c ... \ 292bccedf53Smrg # sub/foo.h ... \ 293bccedf53Smrg # ... 294bccedf53Smrg 295bccedf53Smrg "$@" -MD -MF "$tmpdepfile" 296bccedf53Smrg stat=$? 297bccedf53Smrg if test $stat -eq 0; then : 298bccedf53Smrg else 299bccedf53Smrg rm -f "$tmpdepfile" 300bccedf53Smrg exit $stat 301bccedf53Smrg fi 302bccedf53Smrg rm -f "$depfile" 303bccedf53Smrg # Each line is of the form `foo.o: dependent.h', 304bccedf53Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 305bccedf53Smrg # Do two passes, one to just change these to 306bccedf53Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 307bccedf53Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 308bccedf53Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 309bccedf53Smrg # correctly. Breaking it into two sed invocations is a workaround. 310bccedf53Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 311bccedf53Smrg sed -e 's/$/ :/' >> "$depfile" 312bccedf53Smrg rm -f "$tmpdepfile" 313bccedf53Smrg ;; 314bccedf53Smrg 3157c5f6000Smrghp2) 3167c5f6000Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3177c5f6000Smrg # compilers, which have integrated preprocessors. The correct option 3187c5f6000Smrg # to use with these is +Maked; it writes dependencies to a file named 3197c5f6000Smrg # 'foo.d', which lands next to the object file, wherever that 3207c5f6000Smrg # happens to be. 3217c5f6000Smrg # Much of this is similar to the tru64 case; see comments there. 3227c5f6000Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3237c5f6000Smrg test "x$dir" = "x$object" && dir= 3247c5f6000Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3257c5f6000Smrg if test "$libtool" = yes; then 3267c5f6000Smrg tmpdepfile1=$dir$base.d 3277c5f6000Smrg tmpdepfile2=$dir.libs/$base.d 3287c5f6000Smrg "$@" -Wc,+Maked 3297c5f6000Smrg else 3307c5f6000Smrg tmpdepfile1=$dir$base.d 3317c5f6000Smrg tmpdepfile2=$dir$base.d 3327c5f6000Smrg "$@" +Maked 3337c5f6000Smrg fi 3347c5f6000Smrg stat=$? 3357c5f6000Smrg if test $stat -eq 0; then : 3367c5f6000Smrg else 3377c5f6000Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3387c5f6000Smrg exit $stat 3397c5f6000Smrg fi 3407c5f6000Smrg 3417c5f6000Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3427c5f6000Smrg do 3437c5f6000Smrg test -f "$tmpdepfile" && break 3447c5f6000Smrg done 3457c5f6000Smrg if test -f "$tmpdepfile"; then 3467c5f6000Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3477c5f6000Smrg # Add `dependent.h:' lines. 3487c5f6000Smrg sed -ne '2,${ 3497c5f6000Smrg s/^ *// 3507c5f6000Smrg s/ \\*$// 3517c5f6000Smrg s/$/:/ 3527c5f6000Smrg p 3537c5f6000Smrg }' "$tmpdepfile" >> "$depfile" 3547c5f6000Smrg else 3557c5f6000Smrg echo "#dummy" > "$depfile" 3567c5f6000Smrg fi 3577c5f6000Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 3587c5f6000Smrg ;; 3597c5f6000Smrg 360bccedf53Smrgtru64) 361bccedf53Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 362bccedf53Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 363bccedf53Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 364bccedf53Smrg # dependencies in `foo.d' instead, so we check for that too. 365bccedf53Smrg # Subdirectories are respected. 366bccedf53Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 367bccedf53Smrg test "x$dir" = "x$object" && dir= 368bccedf53Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 369bccedf53Smrg 370bccedf53Smrg if test "$libtool" = yes; then 3717c5f6000Smrg # With Tru64 cc, shared objects can also be used to make a 3727c5f6000Smrg # static library. This mechanism is used in libtool 1.4 series to 3737c5f6000Smrg # handle both shared and static libraries in a single compilation. 3747c5f6000Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3757c5f6000Smrg # 3767c5f6000Smrg # With libtool 1.5 this exception was removed, and libtool now 3777c5f6000Smrg # generates 2 separate objects for the 2 libraries. These two 3787c5f6000Smrg # compilations output dependencies in $dir.libs/$base.o.d and 3797c5f6000Smrg # in $dir$base.o.d. We have to check for both files, because 3807c5f6000Smrg # one of the two compilations can be disabled. We should prefer 3817c5f6000Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3827c5f6000Smrg # automatically cleaned when .libs/ is deleted, while ignoring 3837c5f6000Smrg # the former would cause a distcleancheck panic. 3847c5f6000Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3857c5f6000Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 3867c5f6000Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3877c5f6000Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 388bccedf53Smrg "$@" -Wc,-MD 389bccedf53Smrg else 3907c5f6000Smrg tmpdepfile1=$dir$base.o.d 3917c5f6000Smrg tmpdepfile2=$dir$base.d 3927c5f6000Smrg tmpdepfile3=$dir$base.d 3937c5f6000Smrg tmpdepfile4=$dir$base.d 394bccedf53Smrg "$@" -MD 395bccedf53Smrg fi 396bccedf53Smrg 397bccedf53Smrg stat=$? 398bccedf53Smrg if test $stat -eq 0; then : 399bccedf53Smrg else 4007c5f6000Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 401bccedf53Smrg exit $stat 402bccedf53Smrg fi 403bccedf53Smrg 4047c5f6000Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 4057c5f6000Smrg do 4067c5f6000Smrg test -f "$tmpdepfile" && break 4077c5f6000Smrg done 408bccedf53Smrg if test -f "$tmpdepfile"; then 409bccedf53Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 410bccedf53Smrg # That's a tab and a space in the []. 411bccedf53Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 412bccedf53Smrg else 413bccedf53Smrg echo "#dummy" > "$depfile" 414bccedf53Smrg fi 415bccedf53Smrg rm -f "$tmpdepfile" 416bccedf53Smrg ;; 417bccedf53Smrg 4181b1389eeSmrgmsvc7) 4191b1389eeSmrg if test "$libtool" = yes; then 4201b1389eeSmrg showIncludes=-Wc,-showIncludes 4211b1389eeSmrg else 4221b1389eeSmrg showIncludes=-showIncludes 4231b1389eeSmrg fi 4241b1389eeSmrg "$@" $showIncludes > "$tmpdepfile" 4251b1389eeSmrg stat=$? 4261b1389eeSmrg grep -v '^Note: including file: ' "$tmpdepfile" 4271b1389eeSmrg if test "$stat" = 0; then : 4281b1389eeSmrg else 4291b1389eeSmrg rm -f "$tmpdepfile" 4301b1389eeSmrg exit $stat 4311b1389eeSmrg fi 4321b1389eeSmrg rm -f "$depfile" 4331b1389eeSmrg echo "$object : \\" > "$depfile" 4341b1389eeSmrg # The first sed program below extracts the file names and escapes 4351b1389eeSmrg # backslashes for cygpath. The second sed program outputs the file 4361b1389eeSmrg # name when reading, but also accumulates all include files in the 4371b1389eeSmrg # hold buffer in order to output them again at the end. This only 4381b1389eeSmrg # works with sed implementations that can handle large buffers. 4391b1389eeSmrg sed < "$tmpdepfile" -n ' 4401b1389eeSmrg/^Note: including file: *\(.*\)/ { 4411b1389eeSmrg s//\1/ 4421b1389eeSmrg s/\\/\\\\/g 4431b1389eeSmrg p 4441b1389eeSmrg}' | $cygpath_u | sort -u | sed -n ' 4451b1389eeSmrgs/ /\\ /g 4461b1389eeSmrgs/\(.*\)/ \1 \\/p 4471b1389eeSmrgs/.\(.*\) \\/\1:/ 4481b1389eeSmrgH 4491b1389eeSmrg$ { 4501b1389eeSmrg s/.*/ / 4511b1389eeSmrg G 4521b1389eeSmrg p 4531b1389eeSmrg}' >> "$depfile" 4541b1389eeSmrg rm -f "$tmpdepfile" 4551b1389eeSmrg ;; 4561b1389eeSmrg 4571b1389eeSmrgmsvc7msys) 4581b1389eeSmrg # This case exists only to let depend.m4 do its work. It works by 4591b1389eeSmrg # looking at the text of this script. This case will never be run, 4601b1389eeSmrg # since it is checked for above. 4611b1389eeSmrg exit 1 4621b1389eeSmrg ;; 4631b1389eeSmrg 464bccedf53Smrg#nosideeffect) 465bccedf53Smrg # This comment above is used by automake to tell side-effect 466bccedf53Smrg # dependency tracking mechanisms from slower ones. 467bccedf53Smrg 468bccedf53Smrgdashmstdout) 469bccedf53Smrg # Important note: in order to support this mode, a compiler *must* 470bccedf53Smrg # always write the preprocessed file to stdout, regardless of -o. 471bccedf53Smrg "$@" || exit $? 472bccedf53Smrg 473bccedf53Smrg # Remove the call to Libtool. 474bccedf53Smrg if test "$libtool" = yes; then 4757c5f6000Smrg while test "X$1" != 'X--mode=compile'; do 476bccedf53Smrg shift 477bccedf53Smrg done 478bccedf53Smrg shift 479bccedf53Smrg fi 480bccedf53Smrg 481bccedf53Smrg # Remove `-o $object'. 482bccedf53Smrg IFS=" " 483bccedf53Smrg for arg 484bccedf53Smrg do 485bccedf53Smrg case $arg in 486bccedf53Smrg -o) 487bccedf53Smrg shift 488bccedf53Smrg ;; 489bccedf53Smrg $object) 490bccedf53Smrg shift 491bccedf53Smrg ;; 492bccedf53Smrg *) 493bccedf53Smrg set fnord "$@" "$arg" 494bccedf53Smrg shift # fnord 495bccedf53Smrg shift # $arg 496bccedf53Smrg ;; 497bccedf53Smrg esac 498bccedf53Smrg done 499bccedf53Smrg 500bccedf53Smrg test -z "$dashmflag" && dashmflag=-M 501bccedf53Smrg # Require at least two characters before searching for `:' 502bccedf53Smrg # in the target name. This is to cope with DOS-style filenames: 503bccedf53Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 504bccedf53Smrg "$@" $dashmflag | 505bccedf53Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 506bccedf53Smrg rm -f "$depfile" 507bccedf53Smrg cat < "$tmpdepfile" > "$depfile" 508bccedf53Smrg tr ' ' ' 509bccedf53Smrg' < "$tmpdepfile" | \ 510bccedf53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 511bccedf53Smrg## correctly. Breaking it into two sed invocations is a workaround. 512bccedf53Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 513bccedf53Smrg rm -f "$tmpdepfile" 514bccedf53Smrg ;; 515bccedf53Smrg 516bccedf53SmrgdashXmstdout) 517bccedf53Smrg # This case only exists to satisfy depend.m4. It is never actually 518bccedf53Smrg # run, as this mode is specially recognized in the preamble. 519bccedf53Smrg exit 1 520bccedf53Smrg ;; 521bccedf53Smrg 522bccedf53Smrgmakedepend) 523bccedf53Smrg "$@" || exit $? 524bccedf53Smrg # Remove any Libtool call 525bccedf53Smrg if test "$libtool" = yes; then 5267c5f6000Smrg while test "X$1" != 'X--mode=compile'; do 527bccedf53Smrg shift 528bccedf53Smrg done 529bccedf53Smrg shift 530bccedf53Smrg fi 531bccedf53Smrg # X makedepend 532bccedf53Smrg shift 5337c5f6000Smrg cleared=no eat=no 5347c5f6000Smrg for arg 5357c5f6000Smrg do 536bccedf53Smrg case $cleared in 537bccedf53Smrg no) 538bccedf53Smrg set ""; shift 539bccedf53Smrg cleared=yes ;; 540bccedf53Smrg esac 5417c5f6000Smrg if test $eat = yes; then 5427c5f6000Smrg eat=no 5437c5f6000Smrg continue 5447c5f6000Smrg fi 545bccedf53Smrg case "$arg" in 546bccedf53Smrg -D*|-I*) 547bccedf53Smrg set fnord "$@" "$arg"; shift ;; 548bccedf53Smrg # Strip any option that makedepend may not understand. Remove 549bccedf53Smrg # the object too, otherwise makedepend will parse it as a source file. 5507c5f6000Smrg -arch) 5517c5f6000Smrg eat=yes ;; 552bccedf53Smrg -*|$object) 553bccedf53Smrg ;; 554bccedf53Smrg *) 555bccedf53Smrg set fnord "$@" "$arg"; shift ;; 556bccedf53Smrg esac 557bccedf53Smrg done 5587c5f6000Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 559bccedf53Smrg touch "$tmpdepfile" 560bccedf53Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 561bccedf53Smrg rm -f "$depfile" 5621b1389eeSmrg # makedepend may prepend the VPATH from the source file name to the object. 5631b1389eeSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 5641b1389eeSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 565bccedf53Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 566bccedf53Smrg' | \ 567bccedf53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 568bccedf53Smrg## correctly. Breaking it into two sed invocations is a workaround. 569bccedf53Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 570bccedf53Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 571bccedf53Smrg ;; 572bccedf53Smrg 573bccedf53Smrgcpp) 574bccedf53Smrg # Important note: in order to support this mode, a compiler *must* 575bccedf53Smrg # always write the preprocessed file to stdout. 576bccedf53Smrg "$@" || exit $? 577bccedf53Smrg 578bccedf53Smrg # Remove the call to Libtool. 579bccedf53Smrg if test "$libtool" = yes; then 5807c5f6000Smrg while test "X$1" != 'X--mode=compile'; do 581bccedf53Smrg shift 582bccedf53Smrg done 583bccedf53Smrg shift 584bccedf53Smrg fi 585bccedf53Smrg 586bccedf53Smrg # Remove `-o $object'. 587bccedf53Smrg IFS=" " 588bccedf53Smrg for arg 589bccedf53Smrg do 590bccedf53Smrg case $arg in 591bccedf53Smrg -o) 592bccedf53Smrg shift 593bccedf53Smrg ;; 594bccedf53Smrg $object) 595bccedf53Smrg shift 596bccedf53Smrg ;; 597bccedf53Smrg *) 598bccedf53Smrg set fnord "$@" "$arg" 599bccedf53Smrg shift # fnord 600bccedf53Smrg shift # $arg 601bccedf53Smrg ;; 602bccedf53Smrg esac 603bccedf53Smrg done 604bccedf53Smrg 605bccedf53Smrg "$@" -E | 6067c5f6000Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 6077c5f6000Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 608bccedf53Smrg sed '$ s: \\$::' > "$tmpdepfile" 609bccedf53Smrg rm -f "$depfile" 610bccedf53Smrg echo "$object : \\" > "$depfile" 611bccedf53Smrg cat < "$tmpdepfile" >> "$depfile" 612bccedf53Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 613bccedf53Smrg rm -f "$tmpdepfile" 614bccedf53Smrg ;; 615bccedf53Smrg 616bccedf53Smrgmsvisualcpp) 617bccedf53Smrg # Important note: in order to support this mode, a compiler *must* 6187c5f6000Smrg # always write the preprocessed file to stdout. 619bccedf53Smrg "$@" || exit $? 6207c5f6000Smrg 6217c5f6000Smrg # Remove the call to Libtool. 6227c5f6000Smrg if test "$libtool" = yes; then 6237c5f6000Smrg while test "X$1" != 'X--mode=compile'; do 6247c5f6000Smrg shift 6257c5f6000Smrg done 6267c5f6000Smrg shift 6277c5f6000Smrg fi 6287c5f6000Smrg 629bccedf53Smrg IFS=" " 630bccedf53Smrg for arg 631bccedf53Smrg do 632bccedf53Smrg case "$arg" in 6337c5f6000Smrg -o) 6347c5f6000Smrg shift 6357c5f6000Smrg ;; 6367c5f6000Smrg $object) 6377c5f6000Smrg shift 6387c5f6000Smrg ;; 639bccedf53Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 640bccedf53Smrg set fnord "$@" 641bccedf53Smrg shift 642bccedf53Smrg shift 643bccedf53Smrg ;; 644bccedf53Smrg *) 645bccedf53Smrg set fnord "$@" "$arg" 646bccedf53Smrg shift 647bccedf53Smrg shift 648bccedf53Smrg ;; 649bccedf53Smrg esac 650bccedf53Smrg done 6517c5f6000Smrg "$@" -E 2>/dev/null | 6527c5f6000Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 653bccedf53Smrg rm -f "$depfile" 654bccedf53Smrg echo "$object : \\" > "$depfile" 6557c5f6000Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 656bccedf53Smrg echo " " >> "$depfile" 6577c5f6000Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 658bccedf53Smrg rm -f "$tmpdepfile" 659bccedf53Smrg ;; 660bccedf53Smrg 6617c5f6000Smrgmsvcmsys) 6627c5f6000Smrg # This case exists only to let depend.m4 do its work. It works by 6637c5f6000Smrg # looking at the text of this script. This case will never be run, 6647c5f6000Smrg # since it is checked for above. 6657c5f6000Smrg exit 1 6667c5f6000Smrg ;; 6677c5f6000Smrg 668bccedf53Smrgnone) 669bccedf53Smrg exec "$@" 670bccedf53Smrg ;; 671bccedf53Smrg 672bccedf53Smrg*) 673bccedf53Smrg echo "Unknown depmode $depmode" 1>&2 674bccedf53Smrg exit 1 675bccedf53Smrg ;; 676bccedf53Smrgesac 677bccedf53Smrg 678bccedf53Smrgexit 0 6797c5f6000Smrg 6807c5f6000Smrg# Local Variables: 6817c5f6000Smrg# mode: shell-script 6827c5f6000Smrg# sh-indentation: 2 6837c5f6000Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 6847c5f6000Smrg# time-stamp-start: "scriptversion=" 6857c5f6000Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 6867c5f6000Smrg# time-stamp-time-zone: "UTC" 6877c5f6000Smrg# time-stamp-end: "; # UTC" 6887c5f6000Smrg# End: 689