Home | History | Annotate | Line # | Download | only in dist
depcomp revision 1.2.4.1
      1 #! /bin/sh
      2 # depcomp - compile a program generating dependencies as side-effects
      3 
      4 scriptversion=2012-07-12.20; # UTC
      5 
      6 # Copyright (C) 1999-2012 Free Software Foundation, Inc.
      7 
      8 # This program is free software; you can redistribute it and/or modify
      9 # it under the terms of the GNU General Public License as published by
     10 # the Free Software Foundation; either version 2, or (at your option)
     11 # any later version.
     12 
     13 # This program is distributed in the hope that it will be useful,
     14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 # GNU General Public License for more details.
     17 
     18 # You should have received a copy of the GNU General Public License
     19 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     20 
     21 # As a special exception to the GNU General Public License, if you
     22 # distribute this file as part of a program that contains a
     23 # configuration script generated by Autoconf, you may include it under
     24 # the same distribution terms that you use for the rest of that program.
     25 
     26 # Originally written by Alexandre Oliva <oliva (at] dcc.unicamp.br>.
     27 
     28 case $1 in
     29   '')
     30      echo "$0: No command.  Try '$0 --help' for more information." 1>&2
     31      exit 1;
     32      ;;
     33   -h | --h*)
     34     cat <<\EOF
     35 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
     36 
     37 Run PROGRAMS ARGS to compile a file, generating dependencies
     38 as side-effects.
     39 
     40 Environment variables:
     41   depmode     Dependency tracking mode.
     42   source      Source file read by 'PROGRAMS ARGS'.
     43   object      Object file output by 'PROGRAMS ARGS'.
     44   DEPDIR      directory where to store dependencies.
     45   depfile     Dependency file to output.
     46   tmpdepfile  Temporary file to use when outputting dependencies.
     47   libtool     Whether libtool is used (yes/no).
     48 
     49 Report bugs to <bug-automake@gnu.org>.
     50 EOF
     51     exit $?
     52     ;;
     53   -v | --v*)
     54     echo "depcomp $scriptversion"
     55     exit $?
     56     ;;
     57 esac
     58 
     59 # A tabulation character.
     60 tab='	'
     61 # A newline character.
     62 nl='
     63 '
     64 
     65 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
     66   echo "depcomp: Variables source, object and depmode must be set" 1>&2
     67   exit 1
     68 fi
     69 
     70 # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
     71 depfile=${depfile-`echo "$object" |
     72   sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
     73 tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
     74 
     75 rm -f "$tmpdepfile"
     76 
     77 # Some modes work just like other modes, but use different flags.  We
     78 # parameterize here, but still list the modes in the big case below,
     79 # to make depend.m4 easier to write.  Note that we *cannot* use a case
     80 # here, because this file can only contain one case statement.
     81 if test "$depmode" = hp; then
     82   # HP compiler uses -M and no extra arg.
     83   gccflag=-M
     84   depmode=gcc
     85 fi
     86 
     87 if test "$depmode" = dashXmstdout; then
     88    # This is just like dashmstdout with a different argument.
     89    dashmflag=-xM
     90    depmode=dashmstdout
     91 fi
     92 
     93 cygpath_u="cygpath -u -f -"
     94 if test "$depmode" = msvcmsys; then
     95    # This is just like msvisualcpp but w/o cygpath translation.
     96    # Just convert the backslash-escaped backslashes to single forward
     97    # slashes to satisfy depend.m4
     98    cygpath_u='sed s,\\\\,/,g'
     99    depmode=msvisualcpp
    100 fi
    101 
    102 if test "$depmode" = msvc7msys; then
    103    # This is just like msvc7 but w/o cygpath translation.
    104    # Just convert the backslash-escaped backslashes to single forward
    105    # slashes to satisfy depend.m4
    106    cygpath_u='sed s,\\\\,/,g'
    107    depmode=msvc7
    108 fi
    109 
    110 if test "$depmode" = xlc; then
    111    # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
    112    gccflag=-qmakedep=gcc,-MF
    113    depmode=gcc
    114 fi
    115 
    116 case "$depmode" in
    117 gcc3)
    118 ## gcc 3 implements dependency tracking that does exactly what
    119 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
    120 ## it if -MD -MP comes after the -MF stuff.  Hmm.
    121 ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
    122 ## the command line argument order; so add the flags where they
    123 ## appear in depend2.am.  Note that the slowdown incurred here
    124 ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
    125   for arg
    126   do
    127     case $arg in
    128     -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
    129     *)  set fnord "$@" "$arg" ;;
    130     esac
    131     shift # fnord
    132     shift # $arg
    133   done
    134   "$@"
    135   stat=$?
    136   if test $stat -eq 0; then :
    137   else
    138     rm -f "$tmpdepfile"
    139     exit $stat
    140   fi
    141   mv "$tmpdepfile" "$depfile"
    142   ;;
    143 
    144 gcc)
    145 ## There are various ways to get dependency output from gcc.  Here's
    146 ## why we pick this rather obscure method:
    147 ## - Don't want to use -MD because we'd like the dependencies to end
    148 ##   up in a subdir.  Having to rename by hand is ugly.
    149 ##   (We might end up doing this anyway to support other compilers.)
    150 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
    151 ##   -MM, not -M (despite what the docs say).
    152 ## - Using -M directly means running the compiler twice (even worse
    153 ##   than renaming).
    154   if test -z "$gccflag"; then
    155     gccflag=-MD,
    156   fi
    157   "$@" -Wp,"$gccflag$tmpdepfile"
    158   stat=$?
    159   if test $stat -eq 0; then :
    160   else
    161     rm -f "$tmpdepfile"
    162     exit $stat
    163   fi
    164   rm -f "$depfile"
    165   echo "$object : \\" > "$depfile"
    166   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    167 ## The second -e expression handles DOS-style file names with drive letters.
    168   sed -e 's/^[^:]*: / /' \
    169       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
    170 ## This next piece of magic avoids the "deleted header file" problem.
    171 ## The problem is that when a header file which appears in a .P file
    172 ## is deleted, the dependency causes make to die (because there is
    173 ## typically no way to rebuild the header).  We avoid this by adding
    174 ## dummy dependencies for each header file.  Too bad gcc doesn't do
    175 ## this for us directly.
    176   tr ' ' "$nl" < "$tmpdepfile" |
    177 ## Some versions of gcc put a space before the ':'.  On the theory
    178 ## that the space means something, we add a space to the output as
    179 ## well.  hp depmode also adds that space, but also prefixes the VPATH
    180 ## to the object.  Take care to not repeat it in the output.
    181 ## Some versions of the HPUX 10.20 sed can't process this invocation
    182 ## correctly.  Breaking it into two sed invocations is a workaround.
    183     sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
    184       | sed -e 's/$/ :/' >> "$depfile"
    185   rm -f "$tmpdepfile"
    186   ;;
    187 
    188 hp)
    189   # This case exists only to let depend.m4 do its work.  It works by
    190   # looking at the text of this script.  This case will never be run,
    191   # since it is checked for above.
    192   exit 1
    193   ;;
    194 
    195 sgi)
    196   if test "$libtool" = yes; then
    197     "$@" "-Wp,-MDupdate,$tmpdepfile"
    198   else
    199     "$@" -MDupdate "$tmpdepfile"
    200   fi
    201   stat=$?
    202   if test $stat -eq 0; then :
    203   else
    204     rm -f "$tmpdepfile"
    205     exit $stat
    206   fi
    207   rm -f "$depfile"
    208 
    209   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
    210     echo "$object : \\" > "$depfile"
    211 
    212     # Clip off the initial element (the dependent).  Don't try to be
    213     # clever and replace this with sed code, as IRIX sed won't handle
    214     # lines with more than a fixed number of characters (4096 in
    215     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
    216     # the IRIX cc adds comments like '#:fec' to the end of the
    217     # dependency line.
    218     tr ' ' "$nl" < "$tmpdepfile" \
    219     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
    220     tr "$nl" ' ' >> "$depfile"
    221     echo >> "$depfile"
    222 
    223     # The second pass generates a dummy entry for each header file.
    224     tr ' ' "$nl" < "$tmpdepfile" \
    225    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    226    >> "$depfile"
    227   else
    228     # The sourcefile does not contain any dependencies, so just
    229     # store a dummy comment line, to avoid errors with the Makefile
    230     # "include basename.Plo" scheme.
    231     echo "#dummy" > "$depfile"
    232   fi
    233   rm -f "$tmpdepfile"
    234   ;;
    235 
    236 xlc)
    237   # This case exists only to let depend.m4 do its work.  It works by
    238   # looking at the text of this script.  This case will never be run,
    239   # since it is checked for above.
    240   exit 1
    241   ;;
    242 
    243 aix)
    244   # The C for AIX Compiler uses -M and outputs the dependencies
    245   # in a .u file.  In older versions, this file always lives in the
    246   # current directory.  Also, the AIX compiler puts '$object:' at the
    247   # start of each line; $object doesn't have directory information.
    248   # Version 6 uses the directory in both cases.
    249   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    250   test "x$dir" = "x$object" && dir=
    251   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
    252   if test "$libtool" = yes; then
    253     tmpdepfile1=$dir$base.u
    254     tmpdepfile2=$base.u
    255     tmpdepfile3=$dir.libs/$base.u
    256     "$@" -Wc,-M
    257   else
    258     tmpdepfile1=$dir$base.u
    259     tmpdepfile2=$dir$base.u
    260     tmpdepfile3=$dir$base.u
    261     "$@" -M
    262   fi
    263   stat=$?
    264 
    265   if test $stat -eq 0; then :
    266   else
    267     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    268     exit $stat
    269   fi
    270 
    271   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    272   do
    273     test -f "$tmpdepfile" && break
    274   done
    275   if test -f "$tmpdepfile"; then
    276     # Each line is of the form 'foo.o: dependent.h'.
    277     # Do two passes, one to just change these to
    278     # '$object: dependent.h' and one to simply 'dependent.h:'.
    279     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
    280     sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    281   else
    282     # The sourcefile does not contain any dependencies, so just
    283     # store a dummy comment line, to avoid errors with the Makefile
    284     # "include basename.Plo" scheme.
    285     echo "#dummy" > "$depfile"
    286   fi
    287   rm -f "$tmpdepfile"
    288   ;;
    289 
    290 icc)
    291   # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
    292   # However on
    293   #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
    294   # ICC 7.0 will fill foo.d with something like
    295   #    foo.o: sub/foo.c
    296   #    foo.o: sub/foo.h
    297   # which is wrong.  We want
    298   #    sub/foo.o: sub/foo.c
    299   #    sub/foo.o: sub/foo.h
    300   #    sub/foo.c:
    301   #    sub/foo.h:
    302   # ICC 7.1 will output
    303   #    foo.o: sub/foo.c sub/foo.h
    304   # and will wrap long lines using '\':
    305   #    foo.o: sub/foo.c ... \
    306   #     sub/foo.h ... \
    307   #     ...
    308   # tcc 0.9.26 (FIXME still under development at the moment of writing)
    309   # will emit a similar output, but also prepend the continuation lines
    310   # with horizontal tabulation characters.
    311   "$@" -MD -MF "$tmpdepfile"
    312   stat=$?
    313   if test $stat -eq 0; then :
    314   else
    315     rm -f "$tmpdepfile"
    316     exit $stat
    317   fi
    318   rm -f "$depfile"
    319   # Each line is of the form 'foo.o: dependent.h',
    320   # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
    321   # Do two passes, one to just change these to
    322   # '$object: dependent.h' and one to simply 'dependent.h:'.
    323   sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
    324     < "$tmpdepfile" > "$depfile"
    325   sed '
    326     s/[ '"$tab"'][ '"$tab"']*/ /g
    327     s/^ *//
    328     s/ *\\*$//
    329     s/^[^:]*: *//
    330     /^$/d
    331     /:$/d
    332     s/$/ :/
    333   ' < "$tmpdepfile" >> "$depfile"
    334   rm -f "$tmpdepfile"
    335   ;;
    336 
    337 ## The order of this option in the case statement is important, since the
    338 ## shell code in configure will try each of these formats in the order
    339 ## listed in this file.  A plain '-MD' option would be understood by many
    340 ## compilers, so we must ensure this comes after the gcc and icc options.
    341 pgcc)
    342   # Portland's C compiler understands '-MD'.
    343   # Will always output deps to 'file.d' where file is the root name of the
    344   # source file under compilation, even if file resides in a subdirectory.
    345   # The object file name does not affect the name of the '.d' file.
    346   # pgcc 10.2 will output
    347   #    foo.o: sub/foo.c sub/foo.h
    348   # and will wrap long lines using '\' :
    349   #    foo.o: sub/foo.c ... \
    350   #     sub/foo.h ... \
    351   #     ...
    352   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    353   test "x$dir" = "x$object" && dir=
    354   # Use the source, not the object, to determine the base name, since
    355   # that's sadly what pgcc will do too.
    356   base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
    357   tmpdepfile="$base.d"
    358 
    359   # For projects that build the same source file twice into different object
    360   # files, the pgcc approach of using the *source* file root name can cause
    361   # problems in parallel builds.  Use a locking strategy to avoid stomping on
    362   # the same $tmpdepfile.
    363   lockdir="$base.d-lock"
    364   trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15
    365   numtries=100
    366   i=$numtries
    367   while test $i -gt 0 ; do
    368     # mkdir is a portable test-and-set.
    369     if mkdir $lockdir 2>/dev/null; then
    370       # This process acquired the lock.
    371       "$@" -MD
    372       stat=$?
    373       # Release the lock.
    374       rm -rf $lockdir
    375       break
    376     else
    377       ## the lock is being held by a different process,
    378       ## wait until the winning process is done or we timeout
    379       while test -d $lockdir && test $i -gt 0; do
    380         sleep 1
    381         i=`expr $i - 1`
    382       done
    383     fi
    384     i=`expr $i - 1`
    385   done
    386   trap - 1 2 13 15
    387   if test $i -le 0; then
    388     echo "$0: failed to acquire lock after $numtries attempts" >&2
    389     echo "$0: check lockdir '$lockdir'" >&2
    390     exit 1
    391   fi
    392 
    393   if test $stat -ne 0; then
    394     rm -f "$tmpdepfile"
    395     exit $stat
    396   fi
    397   rm -f "$depfile"
    398   # Each line is of the form `foo.o: dependent.h',
    399   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
    400   # Do two passes, one to just change these to
    401   # `$object: dependent.h' and one to simply `dependent.h:'.
    402   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
    403   # Some versions of the HPUX 10.20 sed can't process this invocation
    404   # correctly.  Breaking it into two sed invocations is a workaround.
    405   sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
    406     sed -e 's/$/ :/' >> "$depfile"
    407   rm -f "$tmpdepfile"
    408   ;;
    409 
    410 hp2)
    411   # The "hp" stanza above does not work with aCC (C++) and HP's ia64
    412   # compilers, which have integrated preprocessors.  The correct option
    413   # to use with these is +Maked; it writes dependencies to a file named
    414   # 'foo.d', which lands next to the object file, wherever that
    415   # happens to be.
    416   # Much of this is similar to the tru64 case; see comments there.
    417   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    418   test "x$dir" = "x$object" && dir=
    419   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
    420   if test "$libtool" = yes; then
    421     tmpdepfile1=$dir$base.d
    422     tmpdepfile2=$dir.libs/$base.d
    423     "$@" -Wc,+Maked
    424   else
    425     tmpdepfile1=$dir$base.d
    426     tmpdepfile2=$dir$base.d
    427     "$@" +Maked
    428   fi
    429   stat=$?
    430   if test $stat -eq 0; then :
    431   else
    432      rm -f "$tmpdepfile1" "$tmpdepfile2"
    433      exit $stat
    434   fi
    435 
    436   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
    437   do
    438     test -f "$tmpdepfile" && break
    439   done
    440   if test -f "$tmpdepfile"; then
    441     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
    442     # Add 'dependent.h:' lines.
    443     sed -ne '2,${
    444 	       s/^ *//
    445 	       s/ \\*$//
    446 	       s/$/:/
    447 	       p
    448 	     }' "$tmpdepfile" >> "$depfile"
    449   else
    450     echo "#dummy" > "$depfile"
    451   fi
    452   rm -f "$tmpdepfile" "$tmpdepfile2"
    453   ;;
    454 
    455 tru64)
    456    # The Tru64 compiler uses -MD to generate dependencies as a side
    457    # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
    458    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
    459    # dependencies in 'foo.d' instead, so we check for that too.
    460    # Subdirectories are respected.
    461    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    462    test "x$dir" = "x$object" && dir=
    463    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
    464 
    465    if test "$libtool" = yes; then
    466       # With Tru64 cc, shared objects can also be used to make a
    467       # static library.  This mechanism is used in libtool 1.4 series to
    468       # handle both shared and static libraries in a single compilation.
    469       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
    470       #
    471       # With libtool 1.5 this exception was removed, and libtool now
    472       # generates 2 separate objects for the 2 libraries.  These two
    473       # compilations output dependencies in $dir.libs/$base.o.d and
    474       # in $dir$base.o.d.  We have to check for both files, because
    475       # one of the two compilations can be disabled.  We should prefer
    476       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
    477       # automatically cleaned when .libs/ is deleted, while ignoring
    478       # the former would cause a distcleancheck panic.
    479       tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
    480       tmpdepfile2=$dir$base.o.d          # libtool 1.5
    481       tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
    482       tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
    483       "$@" -Wc,-MD
    484    else
    485       tmpdepfile1=$dir$base.o.d
    486       tmpdepfile2=$dir$base.d
    487       tmpdepfile3=$dir$base.d
    488       tmpdepfile4=$dir$base.d
    489       "$@" -MD
    490    fi
    491 
    492    stat=$?
    493    if test $stat -eq 0; then :
    494    else
    495       rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
    496       exit $stat
    497    fi
    498 
    499    for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
    500    do
    501      test -f "$tmpdepfile" && break
    502    done
    503    if test -f "$tmpdepfile"; then
    504       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
    505       sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    506    else
    507       echo "#dummy" > "$depfile"
    508    fi
    509    rm -f "$tmpdepfile"
    510    ;;
    511 
    512 msvc7)
    513   if test "$libtool" = yes; then
    514     showIncludes=-Wc,-showIncludes
    515   else
    516     showIncludes=-showIncludes
    517   fi
    518   "$@" $showIncludes > "$tmpdepfile"
    519   stat=$?
    520   grep -v '^Note: including file: ' "$tmpdepfile"
    521   if test "$stat" = 0; then :
    522   else
    523     rm -f "$tmpdepfile"
    524     exit $stat
    525   fi
    526   rm -f "$depfile"
    527   echo "$object : \\" > "$depfile"
    528   # The first sed program below extracts the file names and escapes
    529   # backslashes for cygpath.  The second sed program outputs the file
    530   # name when reading, but also accumulates all include files in the
    531   # hold buffer in order to output them again at the end.  This only
    532   # works with sed implementations that can handle large buffers.
    533   sed < "$tmpdepfile" -n '
    534 /^Note: including file:  *\(.*\)/ {
    535   s//\1/
    536   s/\\/\\\\/g
    537   p
    538 }' | $cygpath_u | sort -u | sed -n '
    539 s/ /\\ /g
    540 s/\(.*\)/'"$tab"'\1 \\/p
    541 s/.\(.*\) \\/\1:/
    542 H
    543 $ {
    544   s/.*/'"$tab"'/
    545   G
    546   p
    547 }' >> "$depfile"
    548   rm -f "$tmpdepfile"
    549   ;;
    550 
    551 msvc7msys)
    552   # This case exists only to let depend.m4 do its work.  It works by
    553   # looking at the text of this script.  This case will never be run,
    554   # since it is checked for above.
    555   exit 1
    556   ;;
    557 
    558 #nosideeffect)
    559   # This comment above is used by automake to tell side-effect
    560   # dependency tracking mechanisms from slower ones.
    561 
    562 dashmstdout)
    563   # Important note: in order to support this mode, a compiler *must*
    564   # always write the preprocessed file to stdout, regardless of -o.
    565   "$@" || exit $?
    566 
    567   # Remove the call to Libtool.
    568   if test "$libtool" = yes; then
    569     while test "X$1" != 'X--mode=compile'; do
    570       shift
    571     done
    572     shift
    573   fi
    574 
    575   # Remove '-o $object'.
    576   IFS=" "
    577   for arg
    578   do
    579     case $arg in
    580     -o)
    581       shift
    582       ;;
    583     $object)
    584       shift
    585       ;;
    586     *)
    587       set fnord "$@" "$arg"
    588       shift # fnord
    589       shift # $arg
    590       ;;
    591     esac
    592   done
    593 
    594   test -z "$dashmflag" && dashmflag=-M
    595   # Require at least two characters before searching for ':'
    596   # in the target name.  This is to cope with DOS-style filenames:
    597   # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
    598   "$@" $dashmflag |
    599     sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
    600   rm -f "$depfile"
    601   cat < "$tmpdepfile" > "$depfile"
    602   tr ' ' "$nl" < "$tmpdepfile" | \
    603 ## Some versions of the HPUX 10.20 sed can't process this invocation
    604 ## correctly.  Breaking it into two sed invocations is a workaround.
    605     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
    606   rm -f "$tmpdepfile"
    607   ;;
    608 
    609 dashXmstdout)
    610   # This case only exists to satisfy depend.m4.  It is never actually
    611   # run, as this mode is specially recognized in the preamble.
    612   exit 1
    613   ;;
    614 
    615 makedepend)
    616   "$@" || exit $?
    617   # Remove any Libtool call
    618   if test "$libtool" = yes; then
    619     while test "X$1" != 'X--mode=compile'; do
    620       shift
    621     done
    622     shift
    623   fi
    624   # X makedepend
    625   shift
    626   cleared=no eat=no
    627   for arg
    628   do
    629     case $cleared in
    630     no)
    631       set ""; shift
    632       cleared=yes ;;
    633     esac
    634     if test $eat = yes; then
    635       eat=no
    636       continue
    637     fi
    638     case "$arg" in
    639     -D*|-I*)
    640       set fnord "$@" "$arg"; shift ;;
    641     # Strip any option that makedepend may not understand.  Remove
    642     # the object too, otherwise makedepend will parse it as a source file.
    643     -arch)
    644       eat=yes ;;
    645     -*|$object)
    646       ;;
    647     *)
    648       set fnord "$@" "$arg"; shift ;;
    649     esac
    650   done
    651   obj_suffix=`echo "$object" | sed 's/^.*\././'`
    652   touch "$tmpdepfile"
    653   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
    654   rm -f "$depfile"
    655   # makedepend may prepend the VPATH from the source file name to the object.
    656   # No need to regex-escape $object, excess matching of '.' is harmless.
    657   sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
    658   sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
    659 ## Some versions of the HPUX 10.20 sed can't process this invocation
    660 ## correctly.  Breaking it into two sed invocations is a workaround.
    661     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
    662   rm -f "$tmpdepfile" "$tmpdepfile".bak
    663   ;;
    664 
    665 cpp)
    666   # Important note: in order to support this mode, a compiler *must*
    667   # always write the preprocessed file to stdout.
    668   "$@" || exit $?
    669 
    670   # Remove the call to Libtool.
    671   if test "$libtool" = yes; then
    672     while test "X$1" != 'X--mode=compile'; do
    673       shift
    674     done
    675     shift
    676   fi
    677 
    678   # Remove '-o $object'.
    679   IFS=" "
    680   for arg
    681   do
    682     case $arg in
    683     -o)
    684       shift
    685       ;;
    686     $object)
    687       shift
    688       ;;
    689     *)
    690       set fnord "$@" "$arg"
    691       shift # fnord
    692       shift # $arg
    693       ;;
    694     esac
    695   done
    696 
    697   "$@" -E |
    698     sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
    699        -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
    700     sed '$ s: \\$::' > "$tmpdepfile"
    701   rm -f "$depfile"
    702   echo "$object : \\" > "$depfile"
    703   cat < "$tmpdepfile" >> "$depfile"
    704   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
    705   rm -f "$tmpdepfile"
    706   ;;
    707 
    708 msvisualcpp)
    709   # Important note: in order to support this mode, a compiler *must*
    710   # always write the preprocessed file to stdout.
    711   "$@" || exit $?
    712 
    713   # Remove the call to Libtool.
    714   if test "$libtool" = yes; then
    715     while test "X$1" != 'X--mode=compile'; do
    716       shift
    717     done
    718     shift
    719   fi
    720 
    721   IFS=" "
    722   for arg
    723   do
    724     case "$arg" in
    725     -o)
    726       shift
    727       ;;
    728     $object)
    729       shift
    730       ;;
    731     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
    732 	set fnord "$@"
    733 	shift
    734 	shift
    735 	;;
    736     *)
    737 	set fnord "$@" "$arg"
    738 	shift
    739 	shift
    740 	;;
    741     esac
    742   done
    743   "$@" -E 2>/dev/null |
    744   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
    745   rm -f "$depfile"
    746   echo "$object : \\" > "$depfile"
    747   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
    748   echo "$tab" >> "$depfile"
    749   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
    750   rm -f "$tmpdepfile"
    751   ;;
    752 
    753 msvcmsys)
    754   # This case exists only to let depend.m4 do its work.  It works by
    755   # looking at the text of this script.  This case will never be run,
    756   # since it is checked for above.
    757   exit 1
    758   ;;
    759 
    760 none)
    761   exec "$@"
    762   ;;
    763 
    764 *)
    765   echo "Unknown depmode $depmode" 1>&2
    766   exit 1
    767   ;;
    768 esac
    769 
    770 exit 0
    771 
    772 # Local Variables:
    773 # mode: shell-script
    774 # sh-indentation: 2
    775 # eval: (add-hook 'write-file-hooks 'time-stamp)
    776 # time-stamp-start: "scriptversion="
    777 # time-stamp-format: "%:y-%02m-%02d.%02H"
    778 # time-stamp-time-zone: "UTC"
    779 # time-stamp-end: "; # UTC"
    780 # End:
    781