Search
lxdream.org :: lxdream/depcomp
lxdream 0.9.1
released Jun 29
Download Now
filename depcomp
changeset 179:18dacd91aa73
author nkeynes
date Wed Mar 30 21:51:54 2011 +1000 (8 years ago)
permissions -rwxr-xr-x
last change Fix read sector type on OS X (oops)
view annotate diff log raw
     1 #! /bin/sh
     3 # depcomp - compile a program generating dependencies as side-effects
     4 # Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
     6 # This program is free software; you can redistribute it and/or modify
     7 # it under the terms of the GNU General Public License as published by
     8 # the Free Software Foundation; either version 2, or (at your option)
     9 # any later version.
    11 # This program is distributed in the hope that it will be useful,
    12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14 # GNU General Public License for more details.
    16 # You should have received a copy of the GNU General Public License
    17 # along with this program; if not, write to the Free Software
    18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    19 # 02111-1307, USA.
    21 # As a special exception to the GNU General Public License, if you
    22 # distribute this file as part of a program that contains a
    23 # configuration script generated by Autoconf, you may include it under
    24 # the same distribution terms that you use for the rest of that program.
    26 # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
    28 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
    29   echo "depcomp: Variables source, object and depmode must be set" 1>&2
    30   exit 1
    31 fi
    32 # `libtool' can also be set to `yes' or `no'.
    34 if test -z "$depfile"; then
    35    base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
    36    dir=`echo "$object" | sed 's,/.*$,/,'`
    37    if test "$dir" = "$object"; then
    38       dir=
    39    fi
    40    # FIXME: should be _deps on DOS.
    41    depfile="$dir.deps/$base"
    42 fi
    44 tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
    46 rm -f "$tmpdepfile"
    48 # Some modes work just like other modes, but use different flags.  We
    49 # parameterize here, but still list the modes in the big case below,
    50 # to make depend.m4 easier to write.  Note that we *cannot* use a case
    51 # here, because this file can only contain one case statement.
    52 if test "$depmode" = hp; then
    53   # HP compiler uses -M and no extra arg.
    54   gccflag=-M
    55   depmode=gcc
    56 fi
    58 if test "$depmode" = dashXmstdout; then
    59    # This is just like dashmstdout with a different argument.
    60    dashmflag=-xM
    61    depmode=dashmstdout
    62 fi
    64 case "$depmode" in
    65 gcc3)
    66 ## gcc 3 implements dependency tracking that does exactly what
    67 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
    68 ## it if -MD -MP comes after the -MF stuff.  Hmm.
    69   "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
    70   stat=$?
    71   if test $stat -eq 0; then :
    72   else
    73     rm -f "$tmpdepfile"
    74     exit $stat
    75   fi
    76   mv "$tmpdepfile" "$depfile"
    77   ;;
    79 gcc)
    80 ## There are various ways to get dependency output from gcc.  Here's
    81 ## why we pick this rather obscure method:
    82 ## - Don't want to use -MD because we'd like the dependencies to end
    83 ##   up in a subdir.  Having to rename by hand is ugly.
    84 ##   (We might end up doing this anyway to support other compilers.)
    85 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
    86 ##   -MM, not -M (despite what the docs say).
    87 ## - Using -M directly means running the compiler twice (even worse
    88 ##   than renaming).
    89   if test -z "$gccflag"; then
    90     gccflag=-MD,
    91   fi
    92   "$@" -Wp,"$gccflag$tmpdepfile"
    93   stat=$?
    94   if test $stat -eq 0; then :
    95   else
    96     rm -f "$tmpdepfile"
    97     exit $stat
    98   fi
    99   rm -f "$depfile"
   100   echo "$object : \\" > "$depfile"
   101   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
   102 ## The second -e expression handles DOS-style file names with drive letters.
   103   sed -e 's/^[^:]*: / /' \
   104       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
   105 ## This next piece of magic avoids the `deleted header file' problem.
   106 ## The problem is that when a header file which appears in a .P file
   107 ## is deleted, the dependency causes make to die (because there is
   108 ## typically no way to rebuild the header).  We avoid this by adding
   109 ## dummy dependencies for each header file.  Too bad gcc doesn't do
   110 ## this for us directly.
   111   tr ' ' '
   112 ' < "$tmpdepfile" |
   113 ## Some versions of gcc put a space before the `:'.  On the theory
   114 ## that the space means something, we add a space to the output as
   115 ## well.
   116 ## Some versions of the HPUX 10.20 sed can't process this invocation
   117 ## correctly.  Breaking it into two sed invocations is a workaround.
   118     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
   119   rm -f "$tmpdepfile"
   120   ;;
   122 hp)
   123   # This case exists only to let depend.m4 do its work.  It works by
   124   # looking at the text of this script.  This case will never be run,
   125   # since it is checked for above.
   126   exit 1
   127   ;;
   129 sgi)
   130   if test "$libtool" = yes; then
   131     "$@" "-Wp,-MDupdate,$tmpdepfile"
   132   else
   133     "$@" -MDupdate "$tmpdepfile"
   134   fi
   135   stat=$?
   136   if test $stat -eq 0; then :
   137   else
   138     rm -f "$tmpdepfile"
   139     exit $stat
   140   fi
   141   rm -f "$depfile"
   143   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
   144     echo "$object : \\" > "$depfile"
   146     # Clip off the initial element (the dependent).  Don't try to be
   147     # clever and replace this with sed code, as IRIX sed won't handle
   148     # lines with more than a fixed number of characters (4096 in
   149     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
   150     # the IRIX cc adds comments like `#:fec' to the end of the
   151     # dependency line.
   152     tr ' ' '
   153 ' < "$tmpdepfile" \
   154     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
   155     tr '
   156 ' ' ' >> $depfile
   157     echo >> $depfile
   159     # The second pass generates a dummy entry for each header file.
   160     tr ' ' '
   161 ' < "$tmpdepfile" \
   162    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
   163    >> $depfile
   164   else
   165     # The sourcefile does not contain any dependencies, so just
   166     # store a dummy comment line, to avoid errors with the Makefile
   167     # "include basename.Plo" scheme.
   168     echo "#dummy" > "$depfile"
   169   fi
   170   rm -f "$tmpdepfile"
   171   ;;
   173 aix)
   174   # The C for AIX Compiler uses -M and outputs the dependencies
   175   # in a .u file.  In older versions, this file always lives in the
   176   # current directory.  Also, the AIX compiler puts `$object:' at the
   177   # start of each line; $object doesn't have directory information.
   178   # Version 6 uses the directory in both cases.
   179   stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
   180   tmpdepfile="$stripped.u"
   181   if test "$libtool" = yes; then
   182     "$@" -Wc,-M
   183   else
   184     "$@" -M
   185   fi
   186   stat=$?
   188   if test -f "$tmpdepfile"; then :
   189   else
   190     stripped=`echo "$stripped" | sed 's,^.*/,,'`
   191     tmpdepfile="$stripped.u"
   192   fi
   194   if test $stat -eq 0; then :
   195   else
   196     rm -f "$tmpdepfile"
   197     exit $stat
   198   fi
   200   if test -f "$tmpdepfile"; then
   201     outname="$stripped.o"
   202     # Each line is of the form `foo.o: dependent.h'.
   203     # Do two passes, one to just change these to
   204     # `$object: dependent.h' and one to simply `dependent.h:'.
   205     sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
   206     sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
   207   else
   208     # The sourcefile does not contain any dependencies, so just
   209     # store a dummy comment line, to avoid errors with the Makefile
   210     # "include basename.Plo" scheme.
   211     echo "#dummy" > "$depfile"
   212   fi
   213   rm -f "$tmpdepfile"
   214   ;;
   216 icc)
   217   # Intel's C compiler understands `-MD -MF file'.  However on
   218   #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
   219   # ICC 7.0 will fill foo.d with something like
   220   #    foo.o: sub/foo.c
   221   #    foo.o: sub/foo.h
   222   # which is wrong.  We want:
   223   #    sub/foo.o: sub/foo.c
   224   #    sub/foo.o: sub/foo.h
   225   #    sub/foo.c:
   226   #    sub/foo.h:
   227   # ICC 7.1 will output
   228   #    foo.o: sub/foo.c sub/foo.h
   229   # and will wrap long lines using \ :
   230   #    foo.o: sub/foo.c ... \
   231   #     sub/foo.h ... \
   232   #     ...
   234   "$@" -MD -MF "$tmpdepfile"
   235   stat=$?
   236   if test $stat -eq 0; then :
   237   else
   238     rm -f "$tmpdepfile"
   239     exit $stat
   240   fi
   241   rm -f "$depfile"
   242   # Each line is of the form `foo.o: dependent.h',
   243   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
   244   # Do two passes, one to just change these to
   245   # `$object: dependent.h' and one to simply `dependent.h:'.
   246   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   247   # Some versions of the HPUX 10.20 sed can't process this invocation
   248   # correctly.  Breaking it into two sed invocations is a workaround.
   249   sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
   250     sed -e 's/$/ :/' >> "$depfile"
   251   rm -f "$tmpdepfile"
   252   ;;
   254 tru64)
   255    # The Tru64 compiler uses -MD to generate dependencies as a side
   256    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
   257    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
   258    # dependencies in `foo.d' instead, so we check for that too.
   259    # Subdirectories are respected.
   260    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
   261    test "x$dir" = "x$object" && dir=
   262    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
   264    if test "$libtool" = yes; then
   265       tmpdepfile1="$dir.libs/$base.lo.d"
   266       tmpdepfile2="$dir.libs/$base.d"
   267       "$@" -Wc,-MD
   268    else
   269       tmpdepfile1="$dir$base.o.d"
   270       tmpdepfile2="$dir$base.d"
   271       "$@" -MD
   272    fi
   274    stat=$?
   275    if test $stat -eq 0; then :
   276    else
   277       rm -f "$tmpdepfile1" "$tmpdepfile2"
   278       exit $stat
   279    fi
   281    if test -f "$tmpdepfile1"; then
   282       tmpdepfile="$tmpdepfile1"
   283    else
   284       tmpdepfile="$tmpdepfile2"
   285    fi
   286    if test -f "$tmpdepfile"; then
   287       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
   288       # That's a tab and a space in the [].
   289       sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   290    else
   291       echo "#dummy" > "$depfile"
   292    fi
   293    rm -f "$tmpdepfile"
   294    ;;
   296 #nosideeffect)
   297   # This comment above is used by automake to tell side-effect
   298   # dependency tracking mechanisms from slower ones.
   300 dashmstdout)
   301   # Important note: in order to support this mode, a compiler *must*
   302   # always write the preprocessed file to stdout, regardless of -o.
   303   "$@" || exit $?
   305   # Remove the call to Libtool.
   306   if test "$libtool" = yes; then
   307     while test $1 != '--mode=compile'; do
   308       shift
   309     done
   310     shift
   311   fi
   313   # Remove `-o $object'.
   314   IFS=" "
   315   for arg
   316   do
   317     case $arg in
   318     -o)
   319       shift
   320       ;;
   321     $object)
   322       shift
   323       ;;
   324     *)
   325       set fnord "$@" "$arg"
   326       shift # fnord
   327       shift # $arg
   328       ;;
   329     esac
   330   done
   332   test -z "$dashmflag" && dashmflag=-M
   333   # Require at least two characters before searching for `:'
   334   # in the target name.  This is to cope with DOS-style filenames:
   335   # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
   336   "$@" $dashmflag |
   337     sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
   338   rm -f "$depfile"
   339   cat < "$tmpdepfile" > "$depfile"
   340   tr ' ' '
   341 ' < "$tmpdepfile" | \
   342 ## Some versions of the HPUX 10.20 sed can't process this invocation
   343 ## correctly.  Breaking it into two sed invocations is a workaround.
   344     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
   345   rm -f "$tmpdepfile"
   346   ;;
   348 dashXmstdout)
   349   # This case only exists to satisfy depend.m4.  It is never actually
   350   # run, as this mode is specially recognized in the preamble.
   351   exit 1
   352   ;;
   354 makedepend)
   355   "$@" || exit $?
   356   # Remove any Libtool call
   357   if test "$libtool" = yes; then
   358     while test $1 != '--mode=compile'; do
   359       shift
   360     done
   361     shift
   362   fi
   363   # X makedepend
   364   shift
   365   cleared=no
   366   for arg in "$@"; do
   367     case $cleared in
   368     no)
   369       set ""; shift
   370       cleared=yes ;;
   371     esac
   372     case "$arg" in
   373     -D*|-I*)
   374       set fnord "$@" "$arg"; shift ;;
   375     # Strip any option that makedepend may not understand.  Remove
   376     # the object too, otherwise makedepend will parse it as a source file.
   377     -*|$object)
   378       ;;
   379     *)
   380       set fnord "$@" "$arg"; shift ;;
   381     esac
   382   done
   383   obj_suffix="`echo $object | sed 's/^.*\././'`"
   384   touch "$tmpdepfile"
   385   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   386   rm -f "$depfile"
   387   cat < "$tmpdepfile" > "$depfile"
   388   sed '1,2d' "$tmpdepfile" | tr ' ' '
   389 ' | \
   390 ## Some versions of the HPUX 10.20 sed can't process this invocation
   391 ## correctly.  Breaking it into two sed invocations is a workaround.
   392     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
   393   rm -f "$tmpdepfile" "$tmpdepfile".bak
   394   ;;
   396 cpp)
   397   # Important note: in order to support this mode, a compiler *must*
   398   # always write the preprocessed file to stdout.
   399   "$@" || exit $?
   401   # Remove the call to Libtool.
   402   if test "$libtool" = yes; then
   403     while test $1 != '--mode=compile'; do
   404       shift
   405     done
   406     shift
   407   fi
   409   # Remove `-o $object'.
   410   IFS=" "
   411   for arg
   412   do
   413     case $arg in
   414     -o)
   415       shift
   416       ;;
   417     $object)
   418       shift
   419       ;;
   420     *)
   421       set fnord "$@" "$arg"
   422       shift # fnord
   423       shift # $arg
   424       ;;
   425     esac
   426   done
   428   "$@" -E |
   429     sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
   430     sed '$ s: \\$::' > "$tmpdepfile"
   431   rm -f "$depfile"
   432   echo "$object : \\" > "$depfile"
   433   cat < "$tmpdepfile" >> "$depfile"
   434   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
   435   rm -f "$tmpdepfile"
   436   ;;
   438 msvisualcpp)
   439   # Important note: in order to support this mode, a compiler *must*
   440   # always write the preprocessed file to stdout, regardless of -o,
   441   # because we must use -o when running libtool.
   442   "$@" || exit $?
   443   IFS=" "
   444   for arg
   445   do
   446     case "$arg" in
   447     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
   448 	set fnord "$@"
   449 	shift
   450 	shift
   451 	;;
   452     *)
   453 	set fnord "$@" "$arg"
   454 	shift
   455 	shift
   456 	;;
   457     esac
   458   done
   459   "$@" -E |
   460   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
   461   rm -f "$depfile"
   462   echo "$object : \\" > "$depfile"
   463   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
   464   echo "	" >> "$depfile"
   465   . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   466   rm -f "$tmpdepfile"
   467   ;;
   469 none)
   470   exec "$@"
   471   ;;
   473 *)
   474   echo "Unknown depmode $depmode" 1>&2
   475   exit 1
   476   ;;
   477 esac
   479 exit 0
.