depcomp revision 65eef222
1ef981d24Smrg#! /bin/sh 2ef981d24Smrg# depcomp - compile a program generating dependencies as side-effects 3ef981d24Smrg 465eef222Smrgscriptversion=2007-03-29.01 5ef981d24Smrg 665eef222Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 7ef981d24Smrg# Foundation, Inc. 8ef981d24Smrg 9ef981d24Smrg# This program is free software; you can redistribute it and/or modify 10ef981d24Smrg# it under the terms of the GNU General Public License as published by 11ef981d24Smrg# the Free Software Foundation; either version 2, or (at your option) 12ef981d24Smrg# any later version. 13ef981d24Smrg 14ef981d24Smrg# This program is distributed in the hope that it will be useful, 15ef981d24Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16ef981d24Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17ef981d24Smrg# GNU General Public License for more details. 18ef981d24Smrg 19ef981d24Smrg# You should have received a copy of the GNU General Public License 20ef981d24Smrg# along with this program; if not, write to the Free Software 21ef981d24Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22ef981d24Smrg# 02110-1301, USA. 23ef981d24Smrg 24ef981d24Smrg# As a special exception to the GNU General Public License, if you 25ef981d24Smrg# distribute this file as part of a program that contains a 26ef981d24Smrg# configuration script generated by Autoconf, you may include it under 27ef981d24Smrg# the same distribution terms that you use for the rest of that program. 28ef981d24Smrg 29ef981d24Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30ef981d24Smrg 31ef981d24Smrgcase $1 in 32ef981d24Smrg '') 33ef981d24Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34ef981d24Smrg exit 1; 35ef981d24Smrg ;; 36ef981d24Smrg -h | --h*) 37ef981d24Smrg cat <<\EOF 38ef981d24SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39ef981d24Smrg 40ef981d24SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41ef981d24Smrgas side-effects. 42ef981d24Smrg 43ef981d24SmrgEnvironment variables: 44ef981d24Smrg depmode Dependency tracking mode. 45ef981d24Smrg source Source file read by `PROGRAMS ARGS'. 46ef981d24Smrg object Object file output by `PROGRAMS ARGS'. 47ef981d24Smrg DEPDIR directory where to store dependencies. 48ef981d24Smrg depfile Dependency file to output. 49ef981d24Smrg tmpdepfile Temporary file to use when outputing dependencies. 50ef981d24Smrg libtool Whether libtool is used (yes/no). 51ef981d24Smrg 52ef981d24SmrgReport bugs to <bug-automake@gnu.org>. 53ef981d24SmrgEOF 54ef981d24Smrg exit $? 55ef981d24Smrg ;; 56ef981d24Smrg -v | --v*) 57ef981d24Smrg echo "depcomp $scriptversion" 58ef981d24Smrg exit $? 59ef981d24Smrg ;; 60ef981d24Smrgesac 61ef981d24Smrg 62ef981d24Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63ef981d24Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64ef981d24Smrg exit 1 65ef981d24Smrgfi 66ef981d24Smrg 67ef981d24Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68ef981d24Smrgdepfile=${depfile-`echo "$object" | 69ef981d24Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70ef981d24Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71ef981d24Smrg 72ef981d24Smrgrm -f "$tmpdepfile" 73ef981d24Smrg 74ef981d24Smrg# Some modes work just like other modes, but use different flags. We 75ef981d24Smrg# parameterize here, but still list the modes in the big case below, 76ef981d24Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77ef981d24Smrg# here, because this file can only contain one case statement. 78ef981d24Smrgif test "$depmode" = hp; then 79ef981d24Smrg # HP compiler uses -M and no extra arg. 80ef981d24Smrg gccflag=-M 81ef981d24Smrg depmode=gcc 82ef981d24Smrgfi 83ef981d24Smrg 84ef981d24Smrgif test "$depmode" = dashXmstdout; then 85ef981d24Smrg # This is just like dashmstdout with a different argument. 86ef981d24Smrg dashmflag=-xM 87ef981d24Smrg depmode=dashmstdout 88ef981d24Smrgfi 89ef981d24Smrg 90ef981d24Smrgcase "$depmode" in 91ef981d24Smrggcc3) 92ef981d24Smrg## gcc 3 implements dependency tracking that does exactly what 93ef981d24Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94ef981d24Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 95ef981d24Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96ef981d24Smrg## the command line argument order; so add the flags where they 97ef981d24Smrg## appear in depend2.am. Note that the slowdown incurred here 98ef981d24Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99ef981d24Smrg for arg 100ef981d24Smrg do 101ef981d24Smrg case $arg in 102ef981d24Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103ef981d24Smrg *) set fnord "$@" "$arg" ;; 104ef981d24Smrg esac 105ef981d24Smrg shift # fnord 106ef981d24Smrg shift # $arg 107ef981d24Smrg done 108ef981d24Smrg "$@" 109ef981d24Smrg stat=$? 110ef981d24Smrg if test $stat -eq 0; then : 111ef981d24Smrg else 112ef981d24Smrg rm -f "$tmpdepfile" 113ef981d24Smrg exit $stat 114ef981d24Smrg fi 115ef981d24Smrg mv "$tmpdepfile" "$depfile" 116ef981d24Smrg ;; 117ef981d24Smrg 118ef981d24Smrggcc) 119ef981d24Smrg## There are various ways to get dependency output from gcc. Here's 120ef981d24Smrg## why we pick this rather obscure method: 121ef981d24Smrg## - Don't want to use -MD because we'd like the dependencies to end 122ef981d24Smrg## up in a subdir. Having to rename by hand is ugly. 123ef981d24Smrg## (We might end up doing this anyway to support other compilers.) 124ef981d24Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125ef981d24Smrg## -MM, not -M (despite what the docs say). 126ef981d24Smrg## - Using -M directly means running the compiler twice (even worse 127ef981d24Smrg## than renaming). 128ef981d24Smrg if test -z "$gccflag"; then 129ef981d24Smrg gccflag=-MD, 130ef981d24Smrg fi 131ef981d24Smrg "$@" -Wp,"$gccflag$tmpdepfile" 132ef981d24Smrg stat=$? 133ef981d24Smrg if test $stat -eq 0; then : 134ef981d24Smrg else 135ef981d24Smrg rm -f "$tmpdepfile" 136ef981d24Smrg exit $stat 137ef981d24Smrg fi 138ef981d24Smrg rm -f "$depfile" 139ef981d24Smrg echo "$object : \\" > "$depfile" 140ef981d24Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141ef981d24Smrg## The second -e expression handles DOS-style file names with drive letters. 142ef981d24Smrg sed -e 's/^[^:]*: / /' \ 143ef981d24Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144ef981d24Smrg## This next piece of magic avoids the `deleted header file' problem. 145ef981d24Smrg## The problem is that when a header file which appears in a .P file 146ef981d24Smrg## is deleted, the dependency causes make to die (because there is 147ef981d24Smrg## typically no way to rebuild the header). We avoid this by adding 148ef981d24Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 149ef981d24Smrg## this for us directly. 150ef981d24Smrg tr ' ' ' 151ef981d24Smrg' < "$tmpdepfile" | 152ef981d24Smrg## Some versions of gcc put a space before the `:'. On the theory 153ef981d24Smrg## that the space means something, we add a space to the output as 154ef981d24Smrg## well. 155ef981d24Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 156ef981d24Smrg## correctly. Breaking it into two sed invocations is a workaround. 157ef981d24Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158ef981d24Smrg rm -f "$tmpdepfile" 159ef981d24Smrg ;; 160ef981d24Smrg 161ef981d24Smrghp) 162ef981d24Smrg # This case exists only to let depend.m4 do its work. It works by 163ef981d24Smrg # looking at the text of this script. This case will never be run, 164ef981d24Smrg # since it is checked for above. 165ef981d24Smrg exit 1 166ef981d24Smrg ;; 167ef981d24Smrg 168ef981d24Smrgsgi) 169ef981d24Smrg if test "$libtool" = yes; then 170ef981d24Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171ef981d24Smrg else 172ef981d24Smrg "$@" -MDupdate "$tmpdepfile" 173ef981d24Smrg fi 174ef981d24Smrg stat=$? 175ef981d24Smrg if test $stat -eq 0; then : 176ef981d24Smrg else 177ef981d24Smrg rm -f "$tmpdepfile" 178ef981d24Smrg exit $stat 179ef981d24Smrg fi 180ef981d24Smrg rm -f "$depfile" 181ef981d24Smrg 182ef981d24Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183ef981d24Smrg echo "$object : \\" > "$depfile" 184ef981d24Smrg 185ef981d24Smrg # Clip off the initial element (the dependent). Don't try to be 186ef981d24Smrg # clever and replace this with sed code, as IRIX sed won't handle 187ef981d24Smrg # lines with more than a fixed number of characters (4096 in 188ef981d24Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189ef981d24Smrg # the IRIX cc adds comments like `#:fec' to the end of the 190ef981d24Smrg # dependency line. 191ef981d24Smrg tr ' ' ' 192ef981d24Smrg' < "$tmpdepfile" \ 193ef981d24Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194ef981d24Smrg tr ' 195ef981d24Smrg' ' ' >> $depfile 196ef981d24Smrg echo >> $depfile 197ef981d24Smrg 198ef981d24Smrg # The second pass generates a dummy entry for each header file. 199ef981d24Smrg tr ' ' ' 200ef981d24Smrg' < "$tmpdepfile" \ 201ef981d24Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202ef981d24Smrg >> $depfile 203ef981d24Smrg else 204ef981d24Smrg # The sourcefile does not contain any dependencies, so just 205ef981d24Smrg # store a dummy comment line, to avoid errors with the Makefile 206ef981d24Smrg # "include basename.Plo" scheme. 207ef981d24Smrg echo "#dummy" > "$depfile" 208ef981d24Smrg fi 209ef981d24Smrg rm -f "$tmpdepfile" 210ef981d24Smrg ;; 211ef981d24Smrg 212ef981d24Smrgaix) 213ef981d24Smrg # The C for AIX Compiler uses -M and outputs the dependencies 214ef981d24Smrg # in a .u file. In older versions, this file always lives in the 215ef981d24Smrg # current directory. Also, the AIX compiler puts `$object:' at the 216ef981d24Smrg # start of each line; $object doesn't have directory information. 217ef981d24Smrg # Version 6 uses the directory in both cases. 21865eef222Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 21965eef222Smrg test "x$dir" = "x$object" && dir= 22065eef222Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221ef981d24Smrg if test "$libtool" = yes; then 22265eef222Smrg tmpdepfile1=$dir$base.u 22365eef222Smrg tmpdepfile2=$base.u 22465eef222Smrg tmpdepfile3=$dir.libs/$base.u 225ef981d24Smrg "$@" -Wc,-M 226ef981d24Smrg else 22765eef222Smrg tmpdepfile1=$dir$base.u 22865eef222Smrg tmpdepfile2=$dir$base.u 22965eef222Smrg tmpdepfile3=$dir$base.u 230ef981d24Smrg "$@" -M 231ef981d24Smrg fi 232ef981d24Smrg stat=$? 233ef981d24Smrg 234ef981d24Smrg if test $stat -eq 0; then : 235ef981d24Smrg else 23665eef222Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237ef981d24Smrg exit $stat 238ef981d24Smrg fi 239ef981d24Smrg 24065eef222Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 24165eef222Smrg do 24265eef222Smrg test -f "$tmpdepfile" && break 24365eef222Smrg done 244ef981d24Smrg if test -f "$tmpdepfile"; then 245ef981d24Smrg # Each line is of the form `foo.o: dependent.h'. 246ef981d24Smrg # Do two passes, one to just change these to 247ef981d24Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 24865eef222Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 24965eef222Smrg # That's a tab and a space in the []. 25065eef222Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251ef981d24Smrg else 252ef981d24Smrg # The sourcefile does not contain any dependencies, so just 253ef981d24Smrg # store a dummy comment line, to avoid errors with the Makefile 254ef981d24Smrg # "include basename.Plo" scheme. 255ef981d24Smrg echo "#dummy" > "$depfile" 256ef981d24Smrg fi 257ef981d24Smrg rm -f "$tmpdepfile" 258ef981d24Smrg ;; 259ef981d24Smrg 260ef981d24Smrgicc) 261ef981d24Smrg # Intel's C compiler understands `-MD -MF file'. However on 262ef981d24Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263ef981d24Smrg # ICC 7.0 will fill foo.d with something like 264ef981d24Smrg # foo.o: sub/foo.c 265ef981d24Smrg # foo.o: sub/foo.h 266ef981d24Smrg # which is wrong. We want: 267ef981d24Smrg # sub/foo.o: sub/foo.c 268ef981d24Smrg # sub/foo.o: sub/foo.h 269ef981d24Smrg # sub/foo.c: 270ef981d24Smrg # sub/foo.h: 271ef981d24Smrg # ICC 7.1 will output 272ef981d24Smrg # foo.o: sub/foo.c sub/foo.h 273ef981d24Smrg # and will wrap long lines using \ : 274ef981d24Smrg # foo.o: sub/foo.c ... \ 275ef981d24Smrg # sub/foo.h ... \ 276ef981d24Smrg # ... 277ef981d24Smrg 278ef981d24Smrg "$@" -MD -MF "$tmpdepfile" 279ef981d24Smrg stat=$? 280ef981d24Smrg if test $stat -eq 0; then : 281ef981d24Smrg else 282ef981d24Smrg rm -f "$tmpdepfile" 283ef981d24Smrg exit $stat 284ef981d24Smrg fi 285ef981d24Smrg rm -f "$depfile" 286ef981d24Smrg # Each line is of the form `foo.o: dependent.h', 287ef981d24Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288ef981d24Smrg # Do two passes, one to just change these to 289ef981d24Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 290ef981d24Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291ef981d24Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 292ef981d24Smrg # correctly. Breaking it into two sed invocations is a workaround. 293ef981d24Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294ef981d24Smrg sed -e 's/$/ :/' >> "$depfile" 295ef981d24Smrg rm -f "$tmpdepfile" 296ef981d24Smrg ;; 297ef981d24Smrg 298ef981d24Smrghp2) 299ef981d24Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 300ef981d24Smrg # compilers, which have integrated preprocessors. The correct option 301ef981d24Smrg # to use with these is +Maked; it writes dependencies to a file named 302ef981d24Smrg # 'foo.d', which lands next to the object file, wherever that 303ef981d24Smrg # happens to be. 304ef981d24Smrg # Much of this is similar to the tru64 case; see comments there. 305ef981d24Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 306ef981d24Smrg test "x$dir" = "x$object" && dir= 307ef981d24Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 308ef981d24Smrg if test "$libtool" = yes; then 309ef981d24Smrg tmpdepfile1=$dir$base.d 310ef981d24Smrg tmpdepfile2=$dir.libs/$base.d 311ef981d24Smrg "$@" -Wc,+Maked 312ef981d24Smrg else 313ef981d24Smrg tmpdepfile1=$dir$base.d 314ef981d24Smrg tmpdepfile2=$dir$base.d 315ef981d24Smrg "$@" +Maked 316ef981d24Smrg fi 317ef981d24Smrg stat=$? 318ef981d24Smrg if test $stat -eq 0; then : 319ef981d24Smrg else 320ef981d24Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 321ef981d24Smrg exit $stat 322ef981d24Smrg fi 323ef981d24Smrg 324ef981d24Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 325ef981d24Smrg do 326ef981d24Smrg test -f "$tmpdepfile" && break 327ef981d24Smrg done 328ef981d24Smrg if test -f "$tmpdepfile"; then 329ef981d24Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 330ef981d24Smrg # Add `dependent.h:' lines. 331ef981d24Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 332ef981d24Smrg else 333ef981d24Smrg echo "#dummy" > "$depfile" 334ef981d24Smrg fi 335ef981d24Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 336ef981d24Smrg ;; 337ef981d24Smrg 338ef981d24Smrgtru64) 339ef981d24Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 340ef981d24Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341ef981d24Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342ef981d24Smrg # dependencies in `foo.d' instead, so we check for that too. 343ef981d24Smrg # Subdirectories are respected. 344ef981d24Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345ef981d24Smrg test "x$dir" = "x$object" && dir= 346ef981d24Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347ef981d24Smrg 348ef981d24Smrg if test "$libtool" = yes; then 349ef981d24Smrg # With Tru64 cc, shared objects can also be used to make a 350ef981d24Smrg # static library. This mechanism is used in libtool 1.4 series to 351ef981d24Smrg # handle both shared and static libraries in a single compilation. 352ef981d24Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353ef981d24Smrg # 354ef981d24Smrg # With libtool 1.5 this exception was removed, and libtool now 355ef981d24Smrg # generates 2 separate objects for the 2 libraries. These two 356ef981d24Smrg # compilations output dependencies in $dir.libs/$base.o.d and 357ef981d24Smrg # in $dir$base.o.d. We have to check for both files, because 358ef981d24Smrg # one of the two compilations can be disabled. We should prefer 359ef981d24Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360ef981d24Smrg # automatically cleaned when .libs/ is deleted, while ignoring 361ef981d24Smrg # the former would cause a distcleancheck panic. 362ef981d24Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363ef981d24Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364ef981d24Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365ef981d24Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366ef981d24Smrg "$@" -Wc,-MD 367ef981d24Smrg else 368ef981d24Smrg tmpdepfile1=$dir$base.o.d 369ef981d24Smrg tmpdepfile2=$dir$base.d 370ef981d24Smrg tmpdepfile3=$dir$base.d 371ef981d24Smrg tmpdepfile4=$dir$base.d 372ef981d24Smrg "$@" -MD 373ef981d24Smrg fi 374ef981d24Smrg 375ef981d24Smrg stat=$? 376ef981d24Smrg if test $stat -eq 0; then : 377ef981d24Smrg else 378ef981d24Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379ef981d24Smrg exit $stat 380ef981d24Smrg fi 381ef981d24Smrg 382ef981d24Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383ef981d24Smrg do 384ef981d24Smrg test -f "$tmpdepfile" && break 385ef981d24Smrg done 386ef981d24Smrg if test -f "$tmpdepfile"; then 387ef981d24Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388ef981d24Smrg # That's a tab and a space in the []. 389ef981d24Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390ef981d24Smrg else 391ef981d24Smrg echo "#dummy" > "$depfile" 392ef981d24Smrg fi 393ef981d24Smrg rm -f "$tmpdepfile" 394ef981d24Smrg ;; 395ef981d24Smrg 396ef981d24Smrg#nosideeffect) 397ef981d24Smrg # This comment above is used by automake to tell side-effect 398ef981d24Smrg # dependency tracking mechanisms from slower ones. 399ef981d24Smrg 400ef981d24Smrgdashmstdout) 401ef981d24Smrg # Important note: in order to support this mode, a compiler *must* 402ef981d24Smrg # always write the preprocessed file to stdout, regardless of -o. 403ef981d24Smrg "$@" || exit $? 404ef981d24Smrg 405ef981d24Smrg # Remove the call to Libtool. 406ef981d24Smrg if test "$libtool" = yes; then 407ef981d24Smrg while test $1 != '--mode=compile'; do 408ef981d24Smrg shift 409ef981d24Smrg done 410ef981d24Smrg shift 411ef981d24Smrg fi 412ef981d24Smrg 413ef981d24Smrg # Remove `-o $object'. 414ef981d24Smrg IFS=" " 415ef981d24Smrg for arg 416ef981d24Smrg do 417ef981d24Smrg case $arg in 418ef981d24Smrg -o) 419ef981d24Smrg shift 420ef981d24Smrg ;; 421ef981d24Smrg $object) 422ef981d24Smrg shift 423ef981d24Smrg ;; 424ef981d24Smrg *) 425ef981d24Smrg set fnord "$@" "$arg" 426ef981d24Smrg shift # fnord 427ef981d24Smrg shift # $arg 428ef981d24Smrg ;; 429ef981d24Smrg esac 430ef981d24Smrg done 431ef981d24Smrg 432ef981d24Smrg test -z "$dashmflag" && dashmflag=-M 433ef981d24Smrg # Require at least two characters before searching for `:' 434ef981d24Smrg # in the target name. This is to cope with DOS-style filenames: 435ef981d24Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436ef981d24Smrg "$@" $dashmflag | 437ef981d24Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438ef981d24Smrg rm -f "$depfile" 439ef981d24Smrg cat < "$tmpdepfile" > "$depfile" 440ef981d24Smrg tr ' ' ' 441ef981d24Smrg' < "$tmpdepfile" | \ 442ef981d24Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 443ef981d24Smrg## correctly. Breaking it into two sed invocations is a workaround. 444ef981d24Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445ef981d24Smrg rm -f "$tmpdepfile" 446ef981d24Smrg ;; 447ef981d24Smrg 448ef981d24SmrgdashXmstdout) 449ef981d24Smrg # This case only exists to satisfy depend.m4. It is never actually 450ef981d24Smrg # run, as this mode is specially recognized in the preamble. 451ef981d24Smrg exit 1 452ef981d24Smrg ;; 453ef981d24Smrg 454ef981d24Smrgmakedepend) 455ef981d24Smrg "$@" || exit $? 456ef981d24Smrg # Remove any Libtool call 457ef981d24Smrg if test "$libtool" = yes; then 458ef981d24Smrg while test $1 != '--mode=compile'; do 459ef981d24Smrg shift 460ef981d24Smrg done 461ef981d24Smrg shift 462ef981d24Smrg fi 463ef981d24Smrg # X makedepend 464ef981d24Smrg shift 465ef981d24Smrg cleared=no 466ef981d24Smrg for arg in "$@"; do 467ef981d24Smrg case $cleared in 468ef981d24Smrg no) 469ef981d24Smrg set ""; shift 470ef981d24Smrg cleared=yes ;; 471ef981d24Smrg esac 472ef981d24Smrg case "$arg" in 473ef981d24Smrg -D*|-I*) 474ef981d24Smrg set fnord "$@" "$arg"; shift ;; 475ef981d24Smrg # Strip any option that makedepend may not understand. Remove 476ef981d24Smrg # the object too, otherwise makedepend will parse it as a source file. 477ef981d24Smrg -*|$object) 478ef981d24Smrg ;; 479ef981d24Smrg *) 480ef981d24Smrg set fnord "$@" "$arg"; shift ;; 481ef981d24Smrg esac 482ef981d24Smrg done 483ef981d24Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484ef981d24Smrg touch "$tmpdepfile" 485ef981d24Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486ef981d24Smrg rm -f "$depfile" 487ef981d24Smrg cat < "$tmpdepfile" > "$depfile" 488ef981d24Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489ef981d24Smrg' | \ 490ef981d24Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 491ef981d24Smrg## correctly. Breaking it into two sed invocations is a workaround. 492ef981d24Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493ef981d24Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494ef981d24Smrg ;; 495ef981d24Smrg 496ef981d24Smrgcpp) 497ef981d24Smrg # Important note: in order to support this mode, a compiler *must* 498ef981d24Smrg # always write the preprocessed file to stdout. 499ef981d24Smrg "$@" || exit $? 500ef981d24Smrg 501ef981d24Smrg # Remove the call to Libtool. 502ef981d24Smrg if test "$libtool" = yes; then 503ef981d24Smrg while test $1 != '--mode=compile'; do 504ef981d24Smrg shift 505ef981d24Smrg done 506ef981d24Smrg shift 507ef981d24Smrg fi 508ef981d24Smrg 509ef981d24Smrg # Remove `-o $object'. 510ef981d24Smrg IFS=" " 511ef981d24Smrg for arg 512ef981d24Smrg do 513ef981d24Smrg case $arg in 514ef981d24Smrg -o) 515ef981d24Smrg shift 516ef981d24Smrg ;; 517ef981d24Smrg $object) 518ef981d24Smrg shift 519ef981d24Smrg ;; 520ef981d24Smrg *) 521ef981d24Smrg set fnord "$@" "$arg" 522ef981d24Smrg shift # fnord 523ef981d24Smrg shift # $arg 524ef981d24Smrg ;; 525ef981d24Smrg esac 526ef981d24Smrg done 527ef981d24Smrg 528ef981d24Smrg "$@" -E | 529ef981d24Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530ef981d24Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531ef981d24Smrg sed '$ s: \\$::' > "$tmpdepfile" 532ef981d24Smrg rm -f "$depfile" 533ef981d24Smrg echo "$object : \\" > "$depfile" 534ef981d24Smrg cat < "$tmpdepfile" >> "$depfile" 535ef981d24Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536ef981d24Smrg rm -f "$tmpdepfile" 537ef981d24Smrg ;; 538ef981d24Smrg 539ef981d24Smrgmsvisualcpp) 540ef981d24Smrg # Important note: in order to support this mode, a compiler *must* 541ef981d24Smrg # always write the preprocessed file to stdout, regardless of -o, 542ef981d24Smrg # because we must use -o when running libtool. 543ef981d24Smrg "$@" || exit $? 544ef981d24Smrg IFS=" " 545ef981d24Smrg for arg 546ef981d24Smrg do 547ef981d24Smrg case "$arg" in 548ef981d24Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549ef981d24Smrg set fnord "$@" 550ef981d24Smrg shift 551ef981d24Smrg shift 552ef981d24Smrg ;; 553ef981d24Smrg *) 554ef981d24Smrg set fnord "$@" "$arg" 555ef981d24Smrg shift 556ef981d24Smrg shift 557ef981d24Smrg ;; 558ef981d24Smrg esac 559ef981d24Smrg done 560ef981d24Smrg "$@" -E | 561ef981d24Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562ef981d24Smrg rm -f "$depfile" 563ef981d24Smrg echo "$object : \\" > "$depfile" 564ef981d24Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565ef981d24Smrg echo " " >> "$depfile" 566ef981d24Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567ef981d24Smrg rm -f "$tmpdepfile" 568ef981d24Smrg ;; 569ef981d24Smrg 570ef981d24Smrgnone) 571ef981d24Smrg exec "$@" 572ef981d24Smrg ;; 573ef981d24Smrg 574ef981d24Smrg*) 575ef981d24Smrg echo "Unknown depmode $depmode" 1>&2 576ef981d24Smrg exit 1 577ef981d24Smrg ;; 578ef981d24Smrgesac 579ef981d24Smrg 580ef981d24Smrgexit 0 581ef981d24Smrg 582ef981d24Smrg# Local Variables: 583ef981d24Smrg# mode: shell-script 584ef981d24Smrg# sh-indentation: 2 585ef981d24Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586ef981d24Smrg# time-stamp-start: "scriptversion=" 587ef981d24Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588ef981d24Smrg# time-stamp-end: "$" 589ef981d24Smrg# End: 590