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