Annotation of embedaddon/ntp/depcomp, revision 1.1.1.1

1.1       misho       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>