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