gst-gpac/depcomp
author melunko
Fri Mar 14 13:14:54 2008 +0000 (2008-03-14)
branchtrunk
changeset 946 f9e14ee50af6
permissions -rwxr-xr-x
[svn r955] updated changelog to 0.8.2
     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: