/[CvsGraph]/cvsgraph/depcomp
ViewVC logotype

Diff of /cvsgraph/depcomp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1, Mon Nov 13 20:42:23 2006 UTC revision 1.2, Wed May 21 13:33:35 2008 UTC
# Line 0  Line 1 
1    #! /bin/sh
2    # depcomp - compile a program generating dependencies as side-effects
3    
4    scriptversion=2005-02-09.22
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., 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      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 '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
471        sed '$ s: \\$::' > "$tmpdepfile"
472      rm -f "$depfile"
473      echo "$object : \\" > "$depfile"
474      cat < "$tmpdepfile" >> "$depfile"
475      sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
476      rm -f "$tmpdepfile"
477      ;;
478    
479    msvisualcpp)
480      # Important note: in order to support this mode, a compiler *must*
481      # always write the preprocessed file to stdout, regardless of -o,
482      # because we must use -o when running libtool.
483      "$@" || exit $?
484      IFS=" "
485      for arg
486      do
487        case "$arg" in
488        "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
489            set fnord "$@"
490            shift
491            shift
492            ;;
493        *)
494            set fnord "$@" "$arg"
495            shift
496            shift
497            ;;
498        esac
499      done
500      "$@" -E |
501      sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
502      rm -f "$depfile"
503      echo "$object : \\" > "$depfile"
504      . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::    \1 \\:p' >> "$depfile"
505      echo "        " >> "$depfile"
506      . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
507      rm -f "$tmpdepfile"
508      ;;
509    
510    none)
511      exec "$@"
512      ;;
513    
514    *)
515      echo "Unknown depmode $depmode" 1>&2
516      exit 1
517      ;;
518    esac
519    
520    exit 0
521    
522    # Local Variables:
523    # mode: shell-script
524    # sh-indentation: 2
525    # eval: (add-hook 'write-file-hooks 'time-stamp)
526    # time-stamp-start: "scriptversion="
527    # time-stamp-format: "%:y-%02m-%02d.%02H"
528    # time-stamp-end: "$"
529    # End:

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0