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