Diff for /embedaddon/smartmontools/depcomp between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2012/10/09 09:36:45 version 1.1.1.3, 2013/07/22 01:17:35
Line 1 Line 1
 #! /bin/sh  #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects  # depcomp - compile a program generating dependencies as side-effects
   
scriptversion=2011-12-04.11; # UTCscriptversion=2012-07-12.20; # UTC
   
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,# Copyright (C) 1999-2012 Free Software Foundation, Inc.
# 2011 Free Software Foundation, Inc. 
   
 # This program is free software; you can redistribute it and/or modify  # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by  # it under the terms of the GNU General Public License as published by
Line 28  scriptversion=2011-12-04.11; # UTC Line 27  scriptversion=2011-12-04.11; # UTC
   
 case $1 in  case $1 in
   '')    '')
     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;       exit 1;
      ;;       ;;
   -h | --h*)    -h | --h*)
Line 40  as side-effects. Line 39  as side-effects.
   
 Environment variables:  Environment variables:
   depmode     Dependency tracking mode.    depmode     Dependency tracking mode.
  source      Source file read by `PROGRAMS ARGS'.  source      Source file read by 'PROGRAMS ARGS'.
  object      Object file output by `PROGRAMS ARGS'.  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.    DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.    depfile     Dependency file to output.
   tmpdepfile  Temporary file to use when outputting dependencies.    tmpdepfile  Temporary file to use when outputting dependencies.
Line 57  EOF Line 56  EOF
     ;;      ;;
 esac  esac
   
   # A tabulation character.
   tab='   '
   # A newline character.
   nl='
   '
   
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then  if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2    echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1    exit 1
Line 69  tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\( Line 74  tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\(
   
 rm -f "$tmpdepfile"  rm -f "$tmpdepfile"
   
   # Avoid interferences from the environment.
   gccflag= dashmflag=
   
 # Some modes work just like other modes, but use different flags.  We  # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,  # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case  # to make depend.m4 easier to write.  Note that we *cannot* use a case
Line 102  if test "$depmode" = msvc7msys; then Line 110  if test "$depmode" = msvc7msys; then
    depmode=msvc7     depmode=msvc7
 fi  fi
   
   if test "$depmode" = xlc; then
      # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
      gccflag=-qmakedep=gcc,-MF
      depmode=gcc
   fi
   
 case "$depmode" in  case "$depmode" in
 gcc3)  gcc3)
 ## gcc 3 implements dependency tracking that does exactly what  ## gcc 3 implements dependency tracking that does exactly what
Line 131  gcc3) Line 145  gcc3)
   ;;    ;;
   
 gcc)  gcc)
   ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
   ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
   ## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's  ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:  ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end  ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.  ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)  ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like  ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
##   -MM, not -M (despite what the docs say).##   -MM, not -M (despite what the docs say).  Also, it might not be
 ##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse  ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).  ##   than renaming).
   if test -z "$gccflag"; then    if test -z "$gccflag"; then
Line 156  gcc) Line 174  gcc)
 ## The second -e expression handles DOS-style file names with drive letters.  ## The second -e expression handles DOS-style file names with drive letters.
   sed -e 's/^[^:]*: / /' \    sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"        -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file  ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is  ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding  ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do  ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.  ## this for us directly.
  tr ' ' '  tr ' ' "$nl" < "$tmpdepfile" |
' < "$tmpdepfile" |## Some versions of gcc put a space before the ':'.  On the theory
## Some versions of gcc put a space before the `:'.  On the theory 
 ## that the space means something, we add a space to the output as  ## that the space means something, we add a space to the output as
 ## well.  hp depmode also adds that space, but also prefixes the VPATH  ## well.  hp depmode also adds that space, but also prefixes the VPATH
 ## to the object.  Take care to not repeat it in the output.  ## to the object.  Take care to not repeat it in the output.
Line 203  sgi) Line 220  sgi)
     # clever and replace this with sed code, as IRIX sed won't handle      # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in      # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;      # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
    # the IRIX cc adds comments like `#:fec' to the end of the    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.      # dependency line.
    tr ' ' '    tr ' ' "$nl" < "$tmpdepfile" \
' < "$tmpdepfile" \ 
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
    tr '    tr "$nl" ' ' >> "$depfile"
' ' ' >> "$depfile" 
     echo >> "$depfile"      echo >> "$depfile"
   
     # The second pass generates a dummy entry for each header file.      # The second pass generates a dummy entry for each header file.
    tr ' ' '    tr ' ' "$nl" < "$tmpdepfile" \
' < "$tmpdepfile" \ 
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    >> "$depfile"     >> "$depfile"
   else    else
Line 226  sgi) Line 240  sgi)
   rm -f "$tmpdepfile"    rm -f "$tmpdepfile"
   ;;    ;;
   
   xlc)
     # This case exists only to let depend.m4 do its work.  It works by
     # looking at the text of this script.  This case will never be run,
     # since it is checked for above.
     exit 1
     ;;
   
 aix)  aix)
   # The C for AIX Compiler uses -M and outputs the dependencies    # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the    # in a .u file.  In older versions, this file always lives in the
  # current directory.  Also, the AIX compiler puts `$object:' at the  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.    # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.    # Version 6 uses the directory in both cases.
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
Line 259  aix) Line 280  aix)
     test -f "$tmpdepfile" && break      test -f "$tmpdepfile" && break
   done    done
   if test -f "$tmpdepfile"; then    if test -f "$tmpdepfile"; then
    # Each line is of the form `foo.o: dependent.h'.    # Each line is of the form 'foo.o: dependent.h'.
     # Do two passes, one to just change these to      # Do two passes, one to just change these to
    # `$object: dependent.h' and one to simply `dependent.h:'.    # '$object: dependent.h' and one to simply 'dependent.h:'.
     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
    # That's a tab and a space in the [].    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    sed -e 's,^.*\.[a-z]*:[      ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 
   else    else
     # The sourcefile does not contain any dependencies, so just      # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile      # store a dummy comment line, to avoid errors with the Makefile
Line 275  aix) Line 295  aix)
   ;;    ;;
   
 icc)  icc)
  # Intel's C compiler understands `-MD -MF file'.  However on  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c  # However on
   #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
   # ICC 7.0 will fill foo.d with something like    # ICC 7.0 will fill foo.d with something like
   #    foo.o: sub/foo.c    #    foo.o: sub/foo.c
   #    foo.o: sub/foo.h    #    foo.o: sub/foo.h
  # which is wrong.  We want:  # which is wrong.  We want
   #    sub/foo.o: sub/foo.c    #    sub/foo.o: sub/foo.c
   #    sub/foo.o: sub/foo.h    #    sub/foo.o: sub/foo.h
   #    sub/foo.c:    #    sub/foo.c:
   #    sub/foo.h:    #    sub/foo.h:
   # ICC 7.1 will output    # ICC 7.1 will output
   #    foo.o: sub/foo.c sub/foo.h    #    foo.o: sub/foo.c sub/foo.h
  # and will wrap long lines using \ :  # and will wrap long lines using '\':
   #    foo.o: sub/foo.c ... \    #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \    #     sub/foo.h ... \
   #     ...    #     ...
  # tcc 0.9.26 (FIXME still under development at the moment of writing)
   # will emit a similar output, but also prepend the continuation lines
   # with horizontal tabulation characters.
   "$@" -MD -MF "$tmpdepfile"    "$@" -MD -MF "$tmpdepfile"
   stat=$?    stat=$?
   if test $stat -eq 0; then :    if test $stat -eq 0; then :
Line 300  icc) Line 323  icc)
     exit $stat      exit $stat
   fi    fi
   rm -f "$depfile"    rm -f "$depfile"
     # Each line is of the form 'foo.o: dependent.h',
     # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
     # Do two passes, one to just change these to
     # '$object: dependent.h' and one to simply 'dependent.h:'.
     sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
       < "$tmpdepfile" > "$depfile"
     sed '
       s/[ '"$tab"'][ '"$tab"']*/ /g
       s/^ *//
       s/ *\\*$//
       s/^[^:]*: *//
       /^$/d
       /:$/d
       s/$/ :/
     ' < "$tmpdepfile" >> "$depfile"
     rm -f "$tmpdepfile"
     ;;
   
   ## The order of this option in the case statement is important, since the
   ## shell code in configure will try each of these formats in the order
   ## listed in this file.  A plain '-MD' option would be understood by many
   ## compilers, so we must ensure this comes after the gcc and icc options.
   pgcc)
     # Portland's C compiler understands '-MD'.
     # Will always output deps to 'file.d' where file is the root name of the
     # source file under compilation, even if file resides in a subdirectory.
     # The object file name does not affect the name of the '.d' file.
     # pgcc 10.2 will output
     #    foo.o: sub/foo.c sub/foo.h
     # and will wrap long lines using '\' :
     #    foo.o: sub/foo.c ... \
     #     sub/foo.h ... \
     #     ...
     dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
     test "x$dir" = "x$object" && dir=
     # Use the source, not the object, to determine the base name, since
     # that's sadly what pgcc will do too.
     base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
     tmpdepfile="$base.d"
   
     # For projects that build the same source file twice into different object
     # files, the pgcc approach of using the *source* file root name can cause
     # problems in parallel builds.  Use a locking strategy to avoid stomping on
     # the same $tmpdepfile.
     lockdir="$base.d-lock"
     trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15
     numtries=100
     i=$numtries
     while test $i -gt 0 ; do
       # mkdir is a portable test-and-set.
       if mkdir $lockdir 2>/dev/null; then
         # This process acquired the lock.
         "$@" -MD
         stat=$?
         # Release the lock.
         rm -rf $lockdir
         break
       else
         ## the lock is being held by a different process,
         ## wait until the winning process is done or we timeout
         while test -d $lockdir && test $i -gt 0; do
           sleep 1
           i=`expr $i - 1`
         done
       fi
       i=`expr $i - 1`
     done
     trap - 1 2 13 15
     if test $i -le 0; then
       echo "$0: failed to acquire lock after $numtries attempts" >&2
       echo "$0: check lockdir '$lockdir'" >&2
       exit 1
     fi
   
     if test $stat -ne 0; then
       rm -f "$tmpdepfile"
       exit $stat
     fi
     rm -f "$depfile"
   # Each line is of the form `foo.o: dependent.h',    # Each line is of the form `foo.o: dependent.h',
   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.    # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
   # Do two passes, one to just change these to    # Do two passes, one to just change these to
Line 344  hp2) Line 446  hp2)
   done    done
   if test -f "$tmpdepfile"; then    if test -f "$tmpdepfile"; then
     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"      sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
    # Add `dependent.h:' lines.    # Add 'dependent.h:' lines.
     sed -ne '2,${      sed -ne '2,${
                s/^ *//                 s/^ *//
                s/ \\*$//                 s/ \\*$//
Line 359  hp2) Line 461  hp2)
   
 tru64)  tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side     # The Tru64 compiler uses -MD to generate dependencies as a side
   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put     # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
   # dependencies in `foo.d' instead, so we check for that too.   # dependencies in 'foo.d' instead, so we check for that too.
    # Subdirectories are respected.     # Subdirectories are respected.
    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`     dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    test "x$dir" = "x$object" && dir=     test "x$dir" = "x$object" && dir=
Line 407  tru64) Line 509  tru64)
    done     done
    if test -f "$tmpdepfile"; then     if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"        sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
      # That's a tab and a space in the [].      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
      sed -e 's,^.*\.[a-z]*:[    ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 
    else     else
       echo "#dummy" > "$depfile"        echo "#dummy" > "$depfile"
    fi     fi
Line 443  msvc7) Line 544  msvc7)
   p    p
 }' | $cygpath_u | sort -u | sed -n '  }' | $cygpath_u | sort -u | sed -n '
 s/ /\\ /g  s/ /\\ /g
s/\(.*\)/       \1 \\/ps/\(.*\)/'"$tab"'\1 \\/p
 s/.\(.*\) \\/\1:/  s/.\(.*\) \\/\1:/
 H  H
 $ {  $ {
  s/.*/ /  s/.*/'"$tab"'/
   G    G
   p    p
 }' >> "$depfile"  }' >> "$depfile"
Line 478  dashmstdout) Line 579  dashmstdout)
     shift      shift
   fi    fi
   
  # Remove `-o $object'.  # Remove '-o $object'.
   IFS=" "    IFS=" "
   for arg    for arg
   do    do
Line 498  dashmstdout) Line 599  dashmstdout)
   done    done
   
   test -z "$dashmflag" && dashmflag=-M    test -z "$dashmflag" && dashmflag=-M
  # Require at least two characters before searching for `:'  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:    # in the target name.  This is to cope with DOS-style filenames:
  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |    "$@" $dashmflag |
    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
   rm -f "$depfile"    rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"    cat < "$tmpdepfile" > "$depfile"
  tr ' ' '  tr ' ' "$nl" < "$tmpdepfile" | \
' < "$tmpdepfile" | \ 
 ## Some versions of the HPUX 10.20 sed can't process this invocation  ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.  ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"      sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
Line 562  makedepend) Line 662  makedepend)
   # makedepend may prepend the VPATH from the source file name to the object.    # makedepend may prepend the VPATH from the source file name to the object.
   # No need to regex-escape $object, excess matching of '.' is harmless.    # No need to regex-escape $object, excess matching of '.' is harmless.
   sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"    sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
  sed '1,2d' "$tmpdepfile" | tr ' ' '  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
' | \ 
 ## Some versions of the HPUX 10.20 sed can't process this invocation  ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.  ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"      sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
Line 583  cpp) Line 682  cpp)
     shift      shift
   fi    fi
   
  # Remove `-o $object'.  # Remove '-o $object'.
   IFS=" "    IFS=" "
   for arg    for arg
   do    do
Line 652  msvisualcpp) Line 751  msvisualcpp)
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"    sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"    rm -f "$depfile"
   echo "$object : \\" > "$depfile"    echo "$object : \\" > "$depfile"
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::      \1 \\:p' >> "$depfile"  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
  echo "        " >> "$depfile"  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"    sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"    rm -f "$tmpdepfile"
   ;;    ;;

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


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