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