source: trunk/third/gnome-nettool/depcomp @ 21079

Revision 21079, 14.5 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r21078, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
RevLine 
[21078]1#! /bin/sh
2# depcomp - compile a program generating dependencies as side-effects
3
4scriptversion=2003-11-08.23
5
6# Copyright (C) 1999, 2000, 2003 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
30case $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
37Usage: depcomp [--help] [--version] PROGRAM [ARGS]
38
39Run PROGRAMS ARGS to compile a file, generating dependencies
40as side-effects.
41
42Environment 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
50Report bugs to <bug-automake@gnu.org>.
51EOF
52    exit 0
53    ;;
54  -v | --v*)
55    echo "depcomp $scriptversion"
56    exit 0
57    ;;
58esac
59
60if 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
63fi
64# `libtool' can also be set to `yes' or `no'.
65
66if 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"
74fi
75
76tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
77
78rm -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.
84if test "$depmode" = hp; then
85  # HP compiler uses -M and no extra arg.
86  gccflag=-M
87  depmode=gcc
88fi
89
90if test "$depmode" = dashXmstdout; then
91   # This is just like dashmstdout with a different argument.
92   dashmflag=-xM
93   depmode=dashmstdout
94fi
95
96case "$depmode" in
97gcc3)
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
111gcc)
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
154hp)
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
161sgi)
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
205aix)
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
248icc)
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
286tru64)
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      tmpdepfile1="$dir.libs/$base.lo.d"
298      tmpdepfile2="$dir.libs/$base.d"
299      "$@" -Wc,-MD
300   else
301      tmpdepfile1="$dir$base.o.d"
302      tmpdepfile2="$dir$base.d"
303      "$@" -MD
304   fi
305
306   stat=$?
307   if test $stat -eq 0; then :
308   else
309      rm -f "$tmpdepfile1" "$tmpdepfile2"
310      exit $stat
311   fi
312
313   if test -f "$tmpdepfile1"; then
314      tmpdepfile="$tmpdepfile1"
315   else
316      tmpdepfile="$tmpdepfile2"
317   fi
318   if test -f "$tmpdepfile"; then
319      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
320      # That's a tab and a space in the [].
321      sed -e 's,^.*\.[a-z]*:[    ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
322   else
323      echo "#dummy" > "$depfile"
324   fi
325   rm -f "$tmpdepfile"
326   ;;
327
328#nosideeffect)
329  # This comment above is used by automake to tell side-effect
330  # dependency tracking mechanisms from slower ones.
331
332dashmstdout)
333  # Important note: in order to support this mode, a compiler *must*
334  # always write the preprocessed file to stdout, regardless of -o.
335  "$@" || exit $?
336
337  # Remove the call to Libtool.
338  if test "$libtool" = yes; then
339    while test $1 != '--mode=compile'; do
340      shift
341    done
342    shift
343  fi
344
345  # Remove `-o $object'.
346  IFS=" "
347  for arg
348  do
349    case $arg in
350    -o)
351      shift
352      ;;
353    $object)
354      shift
355      ;;
356    *)
357      set fnord "$@" "$arg"
358      shift # fnord
359      shift # $arg
360      ;;
361    esac
362  done
363
364  test -z "$dashmflag" && dashmflag=-M
365  # Require at least two characters before searching for `:'
366  # in the target name.  This is to cope with DOS-style filenames:
367  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
368  "$@" $dashmflag |
369    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
370  rm -f "$depfile"
371  cat < "$tmpdepfile" > "$depfile"
372  tr ' ' '
373' < "$tmpdepfile" | \
374## Some versions of the HPUX 10.20 sed can't process this invocation
375## correctly.  Breaking it into two sed invocations is a workaround.
376    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
377  rm -f "$tmpdepfile"
378  ;;
379
380dashXmstdout)
381  # This case only exists to satisfy depend.m4.  It is never actually
382  # run, as this mode is specially recognized in the preamble.
383  exit 1
384  ;;
385
386makedepend)
387  "$@" || exit $?
388  # Remove any Libtool call
389  if test "$libtool" = yes; then
390    while test $1 != '--mode=compile'; do
391      shift
392    done
393    shift
394  fi
395  # X makedepend
396  shift
397  cleared=no
398  for arg in "$@"; do
399    case $cleared in
400    no)
401      set ""; shift
402      cleared=yes ;;
403    esac
404    case "$arg" in
405    -D*|-I*)
406      set fnord "$@" "$arg"; shift ;;
407    # Strip any option that makedepend may not understand.  Remove
408    # the object too, otherwise makedepend will parse it as a source file.
409    -*|$object)
410      ;;
411    *)
412      set fnord "$@" "$arg"; shift ;;
413    esac
414  done
415  obj_suffix="`echo $object | sed 's/^.*\././'`"
416  touch "$tmpdepfile"
417  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
418  rm -f "$depfile"
419  cat < "$tmpdepfile" > "$depfile"
420  sed '1,2d' "$tmpdepfile" | tr ' ' '
421' | \
422## Some versions of the HPUX 10.20 sed can't process this invocation
423## correctly.  Breaking it into two sed invocations is a workaround.
424    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
425  rm -f "$tmpdepfile" "$tmpdepfile".bak
426  ;;
427
428cpp)
429  # Important note: in order to support this mode, a compiler *must*
430  # always write the preprocessed file to stdout.
431  "$@" || exit $?
432
433  # Remove the call to Libtool.
434  if test "$libtool" = yes; then
435    while test $1 != '--mode=compile'; do
436      shift
437    done
438    shift
439  fi
440
441  # Remove `-o $object'.
442  IFS=" "
443  for arg
444  do
445    case $arg in
446    -o)
447      shift
448      ;;
449    $object)
450      shift
451      ;;
452    *)
453      set fnord "$@" "$arg"
454      shift # fnord
455      shift # $arg
456      ;;
457    esac
458  done
459
460  "$@" -E |
461    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
462    sed '$ s: \\$::' > "$tmpdepfile"
463  rm -f "$depfile"
464  echo "$object : \\" > "$depfile"
465  cat < "$tmpdepfile" >> "$depfile"
466  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
467  rm -f "$tmpdepfile"
468  ;;
469
470msvisualcpp)
471  # Important note: in order to support this mode, a compiler *must*
472  # always write the preprocessed file to stdout, regardless of -o,
473  # because we must use -o when running libtool.
474  "$@" || exit $?
475  IFS=" "
476  for arg
477  do
478    case "$arg" in
479    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
480        set fnord "$@"
481        shift
482        shift
483        ;;
484    *)
485        set fnord "$@" "$arg"
486        shift
487        shift
488        ;;
489    esac
490  done
491  "$@" -E |
492  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
493  rm -f "$depfile"
494  echo "$object : \\" > "$depfile"
495  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::    \1 \\:p' >> "$depfile"
496  echo "        " >> "$depfile"
497  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
498  rm -f "$tmpdepfile"
499  ;;
500
501none)
502  exec "$@"
503  ;;
504
505*)
506  echo "Unknown depmode $depmode" 1>&2
507  exit 1
508  ;;
509esac
510
511exit 0
512
513# Local Variables:
514# mode: shell-script
515# sh-indentation: 2
516# eval: (add-hook 'write-file-hooks 'time-stamp)
517# time-stamp-start: "scriptversion="
518# time-stamp-format: "%:y-%02m-%02d.%02H"
519# time-stamp-end: "$"
520# End:
Note: See TracBrowser for help on using the repository browser.