File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / depcomp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:37 2012 UTC (12 years ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

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

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