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