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