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