(linenum→info "unix/slp.c:2238")

gcc/4.2.2/depcomp

    1: #! /bin/sh
    2: # depcomp - compile a program generating dependencies as side-effects
    3: 
    4: scriptversion=2005-05-16.16
    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: ia64hp)
  280:   # The "hp" stanza above does not work with HP's ia64 compilers,
  281:   # which have integrated preprocessors.  The correct option to use
  282:   # with these is +Maked; it writes dependencies to a file named
  283:   # 'foo.d', which lands next to the object file, wherever that
  284:   # happens to be.
  285:   tmpdepfile=`echo "$object" | sed -e 's/\.o$/.d/'`
  286:   "$@" +Maked
  287:   stat=$?
  288:   if test $stat -eq 0; then :
  289:   else
  290:      rm -f "$tmpdepfile"
  291:      exit $stat
  292:   fi
  293:   rm -f "$depfile"
  294: 
  295:   # The object file name is correct already.
  296:   cat "$tmpdepfile" > "$depfile"
  297:   # Add `dependent.h:' lines.
  298:   sed -ne '2,${; s/^ //; s/ \\*$//; s/$/:/; p; }' "$tmpdepfile" >> "$depfile"
  299:   rm -f "$tmpdepfile"
  300:   ;;
  301: 
  302: tru64)
  303:    # The Tru64 compiler uses -MD to generate dependencies as a side
  304:    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
  305:    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
  306:    # dependencies in `foo.d' instead, so we check for that too.
  307:    # Subdirectories are respected.
  308:    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
  309:    test "x$dir" = "x$object" && dir=
  310:    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
  311: 
  312:    if test "$libtool" = yes; then
  313:       # With Tru64 cc, shared objects can also be used to make a
  314:       # static library.  This mecanism is used in libtool 1.4 series to
  315:       # handle both shared and static libraries in a single compilation.
  316:       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
  317:       #
  318:       # With libtool 1.5 this exception was removed, and libtool now
  319:       # generates 2 separate objects for the 2 libraries.  These two
  320:       # compilations output dependencies in in $dir.libs/$base.o.d and
  321:       # in $dir$base.o.d.  We have to check for both files, because
  322:       # one of the two compilations can be disabled.  We should prefer
  323:       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
  324:       # automatically cleaned when .libs/ is deleted, while ignoring
  325:       # the former would cause a distcleancheck panic.
  326:       tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
  327:       tmpdepfile2=$dir$base.o.d          # libtool 1.5
  328:       tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
  329:       tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
  330:       "$@" -Wc,-MD
  331:    else
  332:       tmpdepfile1=$dir$base.o.d
  333:       tmpdepfile2=$dir$base.d
  334:       tmpdepfile3=$dir$base.d
  335:       tmpdepfile4=$dir$base.d
  336:       "$@" -MD
  337:    fi
  338: 
  339:    stat=$?
  340:    if test $stat -eq 0; then :
  341:    else
  342:       rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
  343:       exit $stat
  344:    fi
  345: 
  346:    for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
  347:    do
  348:      test -f "$tmpdepfile" && break
  349:    done
  350:    if test -f "$tmpdepfile"; then
  351:       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
  352:       # That's a tab and a space in the [].
  353:       sed -e 's,^.*\.[a-z]*:[    ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
  354:    else
  355:       echo "#dummy" > "$depfile"
  356:    fi
  357:    rm -f "$tmpdepfile"
  358:    ;;
  359: 
  360: #nosideeffect)
  361:   # This comment above is used by automake to tell side-effect
  362:   # dependency tracking mechanisms from slower ones.
  363: 
  364: dashmstdout)
  365:   # Important note: in order to support this mode, a compiler *must*
  366:   # always write the preprocessed file to stdout, regardless of -o.
  367:   "$@" || exit $?
  368: 
  369:   # Remove the call to Libtool.
  370:   if test "$libtool" = yes; then
  371:     while test $1 != '--mode=compile'; do
  372:       shift
  373:     done
  374:     shift
  375:   fi
  376: 
  377:   # Remove `-o $object'.
  378:   IFS=" "
  379:   for arg
  380:   do
  381:     case $arg in
  382:     -o)
  383:       shift
  384:       ;;
  385:     $object)
  386:       shift
  387:       ;;
  388:     *)
  389:       set fnord "$@" "$arg"
  390:       shift # fnord
  391:       shift # $arg
  392:       ;;
  393:     esac
  394:   done
  395: 
  396:   test -z "$dashmflag" && dashmflag=-M
  397:   # Require at least two characters before searching for `:'
  398:   # in the target name.  This is to cope with DOS-style filenames:
  399:   # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
  400:   "$@" $dashmflag |
  401:     sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
  402:   rm -f "$depfile"
  403:   cat < "$tmpdepfile" > "$depfile"
  404:   tr ' ' '
  405: ' < "$tmpdepfile" | \
  406: ## Some versions of the HPUX 10.20 sed can't process this invocation
  407: ## correctly.  Breaking it into two sed invocations is a workaround.
  408:     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  409:   rm -f "$tmpdepfile"
  410:   ;;
  411: 
  412: dashXmstdout)
  413:   # This case only exists to satisfy depend.m4.  It is never actually
  414:   # run, as this mode is specially recognized in the preamble.
  415:   exit 1
  416:   ;;
  417: 
  418: makedepend)
  419:   "$@" || exit $?
  420:   # Remove any Libtool call
  421:   if test "$libtool" = yes; then
  422:     while test $1 != '--mode=compile'; do
  423:       shift
  424:     done
  425:     shift
  426:   fi
  427:   # X makedepend
  428:   shift
  429:   cleared=no
  430:   for arg in "$@"; do
  431:     case $cleared in
  432:     no)
  433:       set ""; shift
  434:       cleared=yes ;;
  435:     esac
  436:     case "$arg" in
  437:     -D*|-I*)
  438:       set fnord "$@" "$arg"; shift ;;
  439:     # Strip any option that makedepend may not understand.  Remove
  440:     # the object too, otherwise makedepend will parse it as a source file.
  441:     -*|$object)
  442:       ;;
  443:     *)
  444:       set fnord "$@" "$arg"; shift ;;
  445:     esac
  446:   done
  447:   obj_suffix="`echo $object | sed 's/^.*\././'`"
  448:   touch "$tmpdepfile"
  449:   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
  450:   rm -f "$depfile"
  451:   cat < "$tmpdepfile" > "$depfile"
  452:   sed '1,2d' "$tmpdepfile" | tr ' ' '
  453: ' | \
  454: ## Some versions of the HPUX 10.20 sed can't process this invocation
  455: ## correctly.  Breaking it into two sed invocations is a workaround.
  456:     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  457:   rm -f "$tmpdepfile" "$tmpdepfile".bak
  458:   ;;
  459: 
  460: cpp)
  461:   # Important note: in order to support this mode, a compiler *must*
  462:   # always write the preprocessed file to stdout.
  463:   "$@" || exit $?
  464: 
  465:   # Remove the call to Libtool.
  466:   if test "$libtool" = yes; then
  467:     while test $1 != '--mode=compile'; do
  468:       shift
  469:     done
  470:     shift
  471:   fi
  472: 
  473:   # Remove `-o $object'.
  474:   IFS=" "
  475:   for arg
  476:   do
  477:     case $arg in
  478:     -o)
  479:       shift
  480:       ;;
  481:     $object)
  482:       shift
  483:       ;;
  484:     *)
  485:       set fnord "$@" "$arg"
  486:       shift # fnord
  487:       shift # $arg
  488:       ;;
  489:     esac
  490:   done
  491: 
  492:   "$@" -E |
  493:     sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
  494:        -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
  495:     sed '$ s: \\$::' > "$tmpdepfile"
  496:   rm -f "$depfile"
  497:   echo "$object : \\" > "$depfile"
  498:   cat < "$tmpdepfile" >> "$depfile"
  499:   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
  500:   rm -f "$tmpdepfile"
  501:   ;;
  502: 
  503: msvisualcpp)
  504:   # Important note: in order to support this mode, a compiler *must*
  505:   # always write the preprocessed file to stdout, regardless of -o,
  506:   # because we must use -o when running libtool.
  507:   "$@" || exit $?
  508:   IFS=" "
  509:   for arg
  510:   do
  511:     case "$arg" in
  512:     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
  513:         set fnord "$@"
  514:         shift
  515:         shift
  516:         ;;
  517:     *)
  518:         set fnord "$@" "$arg"
  519:         shift
  520:         shift
  521:         ;;
  522:     esac
  523:   done
  524:   "$@" -E |
  525:   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
  526:   rm -f "$depfile"
  527:   echo "$object : \\" > "$depfile"
  528:   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::    \1 \\:p' >> "$depfile"
  529:   echo "        " >> "$depfile"
  530:   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
  531:   rm -f "$tmpdepfile"
  532:   ;;
  533: 
  534: none)
  535:   exec "$@"
  536:   ;;
  537: 
  538: *)
  539:   echo "Unknown depmode $depmode" 1>&2
  540:   exit 1
  541:   ;;
  542: esac
  543: 
  544: exit 0
  545: 
  546: # Local Variables:
  547: # mode: shell-script
  548: # sh-indentation: 2
  549: # eval: (add-hook 'write-file-hooks 'time-stamp)
  550: # time-stamp-start: "scriptversion="
  551: # time-stamp-format: "%:y-%02m-%02d.%02H"
  552: # time-stamp-end: "$"
  553: # End:
1
Syntax (Markdown)