File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / coova-chilli / depcomp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:48:25 2012 UTC (12 years, 3 months ago) by misho
Branches: coova-chilli, MAIN
CVS tags: v1_0_12, HEAD
coova-chilli

    1: #! /bin/sh
    2: 
    3: # depcomp - compile a program generating dependencies as side-effects
    4: # Copyright 1999, 2000 Free Software Foundation, Inc.
    5: 
    6: # This program is free software; you can redistribute it and/or modify
    7: # it under the terms of the GNU General Public License as published by
    8: # the Free Software Foundation; either version 2, or (at your option)
    9: # any later version.
   10: 
   11: # This program is distributed in the hope that it will be useful,
   12: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   13: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14: # GNU General Public License for more details.
   15: 
   16: # You should have received a copy of the GNU General Public License
   17: # along with this program; if not, write to the Free Software
   18: # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   19: # 02111-1307, USA.
   20: 
   21: # As a special exception to the GNU General Public License, if you
   22: # distribute this file as part of a program that contains a
   23: # configuration script generated by Autoconf, you may include it under
   24: # the same distribution terms that you use for the rest of that program.
   25: 
   26: # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
   27: 
   28: if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   29:   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   30:   exit 1
   31: fi
   32: # `libtool' can also be set to `yes' or `no'.
   33: 
   34: if test -z "$depfile"; then
   35:    base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
   36:    dir=`echo "$object" | sed 's,/.*$,/,'`
   37:    if test "$dir" = "$object"; then
   38:       dir=
   39:    fi
   40:    # FIXME: should be _deps on DOS.
   41:    depfile="$dir.deps/$base"
   42: fi
   43: 
   44: tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
   45: 
   46: rm -f "$tmpdepfile"
   47: 
   48: # Some modes work just like other modes, but use different flags.  We
   49: # parameterize here, but still list the modes in the big case below,
   50: # to make depend.m4 easier to write.  Note that we *cannot* use a case
   51: # here, because this file can only contain one case statement.
   52: if test "$depmode" = hp; then
   53:   # HP compiler uses -M and no extra arg.
   54:   gccflag=-M
   55:   depmode=gcc
   56: fi
   57: 
   58: if test "$depmode" = dashXmstdout; then
   59:    # This is just like dashmstdout with a different argument.
   60:    dashmflag=-xM
   61:    depmode=dashmstdout
   62: fi
   63: 
   64: case "$depmode" in
   65: gcc3)
   66: ## gcc 3 implements dependency tracking that does exactly what
   67: ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
   68: ## it if -MD -MP comes after the -MF stuff.  Hmm.
   69:   "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
   70:   stat=$?
   71:   if test $stat -eq 0; then :
   72:   else
   73:     rm -f "$tmpdepfile"
   74:     exit $stat
   75:   fi
   76:   mv "$tmpdepfile" "$depfile"
   77:   ;;
   78: 
   79: gcc)
   80: ## There are various ways to get dependency output from gcc.  Here's
   81: ## why we pick this rather obscure method:
   82: ## - Don't want to use -MD because we'd like the dependencies to end
   83: ##   up in a subdir.  Having to rename by hand is ugly.
   84: ##   (We might end up doing this anyway to support other compilers.)
   85: ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
   86: ##   -MM, not -M (despite what the docs say).
   87: ## - Using -M directly means running the compiler twice (even worse
   88: ##   than renaming).
   89:   if test -z "$gccflag"; then
   90:     gccflag=-MD,
   91:   fi
   92:   "$@" -Wp,"$gccflag$tmpdepfile"
   93:   stat=$?
   94:   if test $stat -eq 0; then :
   95:   else
   96:     rm -f "$tmpdepfile"
   97:     exit $stat
   98:   fi
   99:   rm -f "$depfile"
  100:   echo "$object : \\" > "$depfile"
  101:   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  102: ## The second -e expression handles DOS-style file names with drive letters.
  103:   sed -e 's/^[^:]*: / /' \
  104:       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
  105: ## This next piece of magic avoids the `deleted header file' problem.
  106: ## The problem is that when a header file which appears in a .P file
  107: ## is deleted, the dependency causes make to die (because there is
  108: ## typically no way to rebuild the header).  We avoid this by adding
  109: ## dummy dependencies for each header file.  Too bad gcc doesn't do
  110: ## this for us directly.
  111:   tr ' ' '
  112: ' < "$tmpdepfile" |
  113: ## Some versions of gcc put a space before the `:'.  On the theory
  114: ## that the space means something, we add a space to the output as
  115: ## well.
  116: ## Some versions of the HPUX 10.20 sed can't process this invocation
  117: ## correctly.  Breaking it into two sed invocations is a workaround.
  118:     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  119:   rm -f "$tmpdepfile"
  120:   ;;
  121: 
  122: hp)
  123:   # This case exists only to let depend.m4 do its work.  It works by
  124:   # looking at the text of this script.  This case will never be run,
  125:   # since it is checked for above.
  126:   exit 1
  127:   ;;
  128: 
  129: sgi)
  130:   if test "$libtool" = yes; then
  131:     "$@" "-Wp,-MDupdate,$tmpdepfile"
  132:   else
  133:     "$@" -MDupdate "$tmpdepfile"
  134:   fi
  135:   stat=$?
  136:   if test $stat -eq 0; then :
  137:   else
  138:     rm -f "$tmpdepfile"
  139:     exit $stat
  140:   fi
  141:   rm -f "$depfile"
  142: 
  143:   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
  144:     echo "$object : \\" > "$depfile"
  145: 
  146:     # Clip off the initial element (the dependent).  Don't try to be
  147:     # clever and replace this with sed code, as IRIX sed won't handle
  148:     # lines with more than a fixed number of characters (4096 in
  149:     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
  150:     # the IRIX cc adds comments like `#:fec' to the end of the
  151:     # dependency line.
  152:     tr ' ' '
  153: ' < "$tmpdepfile" \
  154:     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
  155:     tr '
  156: ' ' ' >> $depfile
  157:     echo >> $depfile
  158: 
  159:     # The second pass generates a dummy entry for each header file.
  160:     tr ' ' '
  161: ' < "$tmpdepfile" \
  162:    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
  163:    >> $depfile
  164:   else
  165:     # The sourcefile does not contain any dependencies, so just
  166:     # store a dummy comment line, to avoid errors with the Makefile
  167:     # "include basename.Plo" scheme.
  168:     echo "#dummy" > "$depfile"
  169:   fi
  170:   rm -f "$tmpdepfile"
  171:   ;;
  172: 
  173: aix)
  174:   # The C for AIX Compiler uses -M and outputs the dependencies
  175:   # in a .u file.  This file always lives in the current directory.
  176:   # Also, the AIX compiler puts `$object:' at the start of each line;
  177:   # $object doesn't have directory information.
  178:   stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
  179:   tmpdepfile="$stripped.u"
  180:   outname="$stripped.o"
  181:   if test "$libtool" = yes; then
  182:     "$@" -Wc,-M
  183:   else
  184:     "$@" -M
  185:   fi
  186: 
  187:   stat=$?
  188:   if test $stat -eq 0; then :
  189:   else
  190:     rm -f "$tmpdepfile"
  191:     exit $stat
  192:   fi
  193: 
  194:   if test -f "$tmpdepfile"; then
  195:     # Each line is of the form `foo.o: dependent.h'.
  196:     # Do two passes, one to just change these to
  197:     # `$object: dependent.h' and one to simply `dependent.h:'.
  198:     sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
  199:     sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
  200:   else
  201:     # The sourcefile does not contain any dependencies, so just
  202:     # store a dummy comment line, to avoid errors with the Makefile
  203:     # "include basename.Plo" scheme.
  204:     echo "#dummy" > "$depfile"
  205:   fi
  206:   rm -f "$tmpdepfile"
  207:   ;;
  208: 
  209: tru64)
  210:    # The Tru64 compiler uses -MD to generate dependencies as a side
  211:    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
  212:    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
  213:    # dependencies in `foo.d' instead, so we check for that too.
  214:    # Subdirectories are respected.
  215:    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
  216:    test "x$dir" = "x$object" && dir=
  217:    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
  218: 
  219:    if test "$libtool" = yes; then
  220:       tmpdepfile1="$dir.libs/$base.lo.d"
  221:       tmpdepfile2="$dir.libs/$base.d"
  222:       "$@" -Wc,-MD
  223:    else
  224:       tmpdepfile1="$dir$base.o.d"
  225:       tmpdepfile2="$dir$base.d"
  226:       "$@" -MD
  227:    fi
  228: 
  229:    stat=$?
  230:    if test $stat -eq 0; then :
  231:    else
  232:       rm -f "$tmpdepfile1" "$tmpdepfile2"
  233:       exit $stat
  234:    fi
  235: 
  236:    if test -f "$tmpdepfile1"; then
  237:       tmpdepfile="$tmpdepfile1"
  238:    else
  239:       tmpdepfile="$tmpdepfile2"
  240:    fi
  241:    if test -f "$tmpdepfile"; then
  242:       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
  243:       # That's a space and a tab in the [].
  244:       sed -e 's,^.*\.[a-z]*:[ 	]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
  245:    else
  246:       echo "#dummy" > "$depfile"
  247:    fi
  248:    rm -f "$tmpdepfile"
  249:    ;;
  250: 
  251: #nosideeffect)
  252:   # This comment above is used by automake to tell side-effect
  253:   # dependency tracking mechanisms from slower ones.
  254: 
  255: dashmstdout)
  256:   # Important note: in order to support this mode, a compiler *must*
  257:   # always write the proprocessed file to stdout, regardless of -o.
  258:   "$@" || exit $?
  259: 
  260:   # Remove the call to Libtool.
  261:   if test "$libtool" = yes; then
  262:     while test $1 != '--mode=compile'; do
  263:       shift
  264:     done
  265:     shift
  266:   fi
  267: 
  268:   # Remove `-o $object'.  We will use -o /dev/null later,
  269:   # however we can't do the remplacement now because
  270:   # `-o $object' might simply not be used
  271:   IFS=" "
  272:   for arg
  273:   do
  274:     case $arg in
  275:     -o)
  276:       shift
  277:       ;;
  278:     $object)
  279:       shift
  280:       ;;
  281:     *)
  282:       set fnord "$@" "$arg"
  283:       shift # fnord
  284:       shift # $arg
  285:       ;;
  286:     esac
  287:   done
  288: 
  289:   test -z "$dashmflag" && dashmflag=-M
  290:   "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ 	]*:'"$object"'\: :' > "$tmpdepfile"
  291:   rm -f "$depfile"
  292:   cat < "$tmpdepfile" > "$depfile"
  293:   tr ' ' '
  294: ' < "$tmpdepfile" | \
  295: ## Some versions of the HPUX 10.20 sed can't process this invocation
  296: ## correctly.  Breaking it into two sed invocations is a workaround.
  297:     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  298:   rm -f "$tmpdepfile"
  299:   ;;
  300: 
  301: dashXmstdout)
  302:   # This case only exists to satisfy depend.m4.  It is never actually
  303:   # run, as this mode is specially recognized in the preamble.
  304:   exit 1
  305:   ;;
  306: 
  307: makedepend)
  308:   "$@" || exit $?
  309:   # X makedepend
  310:   shift
  311:   cleared=no
  312:   for arg in "$@"; do
  313:     case $cleared in
  314:     no)
  315:       set ""; shift
  316:       cleared=yes ;;
  317:     esac
  318:     case "$arg" in
  319:     -D*|-I*)
  320:       set fnord "$@" "$arg"; shift ;;
  321:     -*)
  322:       ;;
  323:     *)
  324:       set fnord "$@" "$arg"; shift ;;
  325:     esac
  326:   done
  327:   obj_suffix="`echo $object | sed 's/^.*\././'`"
  328:   touch "$tmpdepfile"
  329:   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
  330:   rm -f "$depfile"
  331:   cat < "$tmpdepfile" > "$depfile"
  332:   sed '1,2d' "$tmpdepfile" | tr ' ' '
  333: ' | \
  334: ## Some versions of the HPUX 10.20 sed can't process this invocation
  335: ## correctly.  Breaking it into two sed invocations is a workaround.
  336:     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  337:   rm -f "$tmpdepfile" "$tmpdepfile".bak
  338:   ;;
  339: 
  340: cpp)
  341:   # Important note: in order to support this mode, a compiler *must*
  342:   # always write the proprocessed file to stdout.
  343:   "$@" || exit $?
  344: 
  345:   # Remove the call to Libtool.
  346:   if test "$libtool" = yes; then
  347:     while test $1 != '--mode=compile'; do
  348:       shift
  349:     done
  350:     shift
  351:   fi
  352: 
  353:   # Remove `-o $object'.
  354:   IFS=" "
  355:   for arg
  356:   do
  357:     case $arg in
  358:     -o)
  359:       shift
  360:       ;;
  361:     $object)
  362:       shift
  363:       ;;
  364:     *)
  365:       set fnord "$@" "$arg"
  366:       shift # fnord
  367:       shift # $arg
  368:       ;;
  369:     esac
  370:   done
  371: 
  372:   "$@" -E |
  373:     sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
  374:     sed '$ s: \\$::' > "$tmpdepfile"
  375:   rm -f "$depfile"
  376:   echo "$object : \\" > "$depfile"
  377:   cat < "$tmpdepfile" >> "$depfile"
  378:   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
  379:   rm -f "$tmpdepfile"
  380:   ;;
  381: 
  382: msvisualcpp)
  383:   # Important note: in order to support this mode, a compiler *must*
  384:   # always write the proprocessed file to stdout, regardless of -o,
  385:   # because we must use -o when running libtool.
  386:   "$@" || exit $?
  387:   IFS=" "
  388:   for arg
  389:   do
  390:     case "$arg" in
  391:     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
  392: 	set fnord "$@"
  393: 	shift
  394: 	shift
  395: 	;;
  396:     *)
  397: 	set fnord "$@" "$arg"
  398: 	shift
  399: 	shift
  400: 	;;
  401:     esac
  402:   done
  403:   "$@" -E |
  404:   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
  405:   rm -f "$depfile"
  406:   echo "$object : \\" > "$depfile"
  407:   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
  408:   echo "	" >> "$depfile"
  409:   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
  410:   rm -f "$tmpdepfile"
  411:   ;;
  412: 
  413: none)
  414:   exec "$@"
  415:   ;;
  416: 
  417: *)
  418:   echo "Unknown depmode $depmode" 1>&2
  419:   exit 1
  420:   ;;
  421: esac
  422: 
  423: exit 0

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>