ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/hopm/trunk/src/libopm/depcomp
(Generate patch)

Comparing hopm/trunk/src/libopm/depcomp (file contents):
Revision 5052 by michael, Mon Dec 22 11:56:03 2014 UTC vs.
Revision 5059 by michael, Mon Dec 22 13:43:00 2014 UTC

# Line 1 | Line 1
1   #! /bin/sh
2
2   # depcomp - compile a program generating dependencies as side-effects
3 < # Copyright 1999, 2000 Free Software Foundation, Inc.
3 >
4 > scriptversion=2013-05-30.07; # UTC
5 >
6 > # Copyright (C) 1999-2013 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
# Line 14 | Line 16
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
18 < # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19 < # 02111-1307, USA.
19 > # along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  
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
# Line 25 | Line 25
25  
26   # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27  
28 + case $1 in
29 +  '')
30 +    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31 +    exit 1;
32 +    ;;
33 +  -h | --h*)
34 +    cat <<\EOF
35 + Usage: depcomp [--help] [--version] PROGRAM [ARGS]
36 +
37 + Run PROGRAMS ARGS to compile a file, generating dependencies
38 + as side-effects.
39 +
40 + Environment variables:
41 +  depmode     Dependency tracking mode.
42 +  source      Source file read by 'PROGRAMS ARGS'.
43 +  object      Object file output by 'PROGRAMS ARGS'.
44 +  DEPDIR      directory where to store dependencies.
45 +  depfile     Dependency file to output.
46 +  tmpdepfile  Temporary file to use when outputting dependencies.
47 +  libtool     Whether libtool is used (yes/no).
48 +
49 + Report bugs to <bug-automake@gnu.org>.
50 + EOF
51 +    exit $?
52 +    ;;
53 +  -v | --v*)
54 +    echo "depcomp $scriptversion"
55 +    exit $?
56 +    ;;
57 + esac
58 +
59 + # Get the directory component of the given path, and save it in the
60 + # global variables '$dir'.  Note that this directory component will
61 + # be either empty or ending with a '/' character.  This is deliberate.
62 + set_dir_from ()
63 + {
64 +  case $1 in
65 +    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66 +      *) dir=;;
67 +  esac
68 + }
69 +
70 + # Get the suffix-stripped basename of the given path, and save it the
71 + # global variable '$base'.
72 + set_base_from ()
73 + {
74 +  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75 + }
76 +
77 + # If no dependency file was actually created by the compiler invocation,
78 + # we still have to create a dummy depfile, to avoid errors with the
79 + # Makefile "include basename.Plo" scheme.
80 + make_dummy_depfile ()
81 + {
82 +  echo "#dummy" > "$depfile"
83 + }
84 +
85 + # Factor out some common post-processing of the generated depfile.
86 + # Requires the auxiliary global variable '$tmpdepfile' to be set.
87 + aix_post_process_depfile ()
88 + {
89 +  # If the compiler actually managed to produce a dependency file,
90 +  # post-process it.
91 +  if test -f "$tmpdepfile"; then
92 +    # Each line is of the form 'foo.o: dependency.h'.
93 +    # Do two passes, one to just change these to
94 +    #   $object: dependency.h
95 +    # and one to simply output
96 +    #   dependency.h:
97 +    # which is needed to avoid the deleted-header problem.
98 +    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99 +      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100 +    } > "$depfile"
101 +    rm -f "$tmpdepfile"
102 +  else
103 +    make_dummy_depfile
104 +  fi
105 + }
106 +
107 + # A tabulation character.
108 + tab='   '
109 + # A newline character.
110 + nl='
111 + '
112 + # Character ranges might be problematic outside the C locale.
113 + # These definitions help.
114 + upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115 + lower=abcdefghijklmnopqrstuvwxyz
116 + digits=0123456789
117 + alpha=${upper}${lower}
118 +
119   if test -z "$depmode" || test -z "$source" || test -z "$object"; then
120    echo "depcomp: Variables source, object and depmode must be set" 1>&2
121    exit 1
122   fi
32 # `libtool' can also be set to `yes' or `no'.
33
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
123  
124 + # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125 + depfile=${depfile-`echo "$object" |
126 +  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127   tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128  
129   rm -f "$tmpdepfile"
130  
131 + # Avoid interferences from the environment.
132 + gccflag= dashmflag=
133 +
134   # Some modes work just like other modes, but use different flags.  We
135   # parameterize here, but still list the modes in the big case below,
136   # to make depend.m4 easier to write.  Note that we *cannot* use a case
# Line 56 | Line 142 | if test "$depmode" = hp; then
142   fi
143  
144   if test "$depmode" = dashXmstdout; then
145 <   # This is just like dashmstdout with a different argument.
146 <   dashmflag=-xM
147 <   depmode=dashmstdout
145 >  # This is just like dashmstdout with a different argument.
146 >  dashmflag=-xM
147 >  depmode=dashmstdout
148 > fi
149 >
150 > cygpath_u="cygpath -u -f -"
151 > if test "$depmode" = msvcmsys; then
152 >  # This is just like msvisualcpp but w/o cygpath translation.
153 >  # Just convert the backslash-escaped backslashes to single forward
154 >  # slashes to satisfy depend.m4
155 >  cygpath_u='sed s,\\\\,/,g'
156 >  depmode=msvisualcpp
157 > fi
158 >
159 > if test "$depmode" = msvc7msys; then
160 >  # This is just like msvc7 but w/o cygpath translation.
161 >  # Just convert the backslash-escaped backslashes to single forward
162 >  # slashes to satisfy depend.m4
163 >  cygpath_u='sed s,\\\\,/,g'
164 >  depmode=msvc7
165 > fi
166 >
167 > if test "$depmode" = xlc; then
168 >  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169 >  gccflag=-qmakedep=gcc,-MF
170 >  depmode=gcc
171   fi
172  
173   case "$depmode" in
# Line 66 | Line 175 | gcc3)
175   ## gcc 3 implements dependency tracking that does exactly what
176   ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177   ## it if -MD -MP comes after the -MF stuff.  Hmm.
178 <  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
178 > ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179 > ## the command line argument order; so add the flags where they
180 > ## appear in depend2.am.  Note that the slowdown incurred here
181 > ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182 >  for arg
183 >  do
184 >    case $arg in
185 >    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186 >    *)  set fnord "$@" "$arg" ;;
187 >    esac
188 >    shift # fnord
189 >    shift # $arg
190 >  done
191 >  "$@"
192    stat=$?
193 <  if test $stat -eq 0; then :
72 <  else
193 >  if test $stat -ne 0; then
194      rm -f "$tmpdepfile"
195      exit $stat
196    fi
# Line 77 | Line 198 | gcc3)
198    ;;
199  
200   gcc)
201 + ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202 + ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203 + ## (see the conditional assignment to $gccflag above).
204   ## There are various ways to get dependency output from gcc.  Here's
205   ## why we pick this rather obscure method:
206   ## - Don't want to use -MD because we'd like the dependencies to end
207   ##   up in a subdir.  Having to rename by hand is ugly.
208   ##   (We might end up doing this anyway to support other compilers.)
209   ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210 < ##   -MM, not -M (despite what the docs say).
210 > ##   -MM, not -M (despite what the docs say).  Also, it might not be
211 > ##   supported by the other compilers which use the 'gcc' depmode.
212   ## - Using -M directly means running the compiler twice (even worse
213   ##   than renaming).
214    if test -z "$gccflag"; then
# Line 91 | Line 216 | gcc)
216    fi
217    "$@" -Wp,"$gccflag$tmpdepfile"
218    stat=$?
219 <  if test $stat -eq 0; then :
95 <  else
219 >  if test $stat -ne 0; then
220      rm -f "$tmpdepfile"
221      exit $stat
222    fi
223    rm -f "$depfile"
224    echo "$object : \\" > "$depfile"
225 <  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
226 < ## The second -e expression handles DOS-style file names with drive letters.
225 >  # The second -e expression handles DOS-style file names with drive
226 >  # letters.
227    sed -e 's/^[^:]*: / /' \
228        -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229 < ## This next piece of magic avoids the `deleted header file' problem.
229 > ## This next piece of magic avoids the "deleted header file" problem.
230   ## The problem is that when a header file which appears in a .P file
231   ## is deleted, the dependency causes make to die (because there is
232   ## typically no way to rebuild the header).  We avoid this by adding
233   ## dummy dependencies for each header file.  Too bad gcc doesn't do
234   ## this for us directly.
235 <  tr ' ' '
112 < ' < "$tmpdepfile" |
113 < ## Some versions of gcc put a space before the `:'.  On the theory
235 > ## Some versions of gcc put a space before the ':'.  On the theory
236   ## that the space means something, we add a space to the output as
237 < ## well.
237 > ## well.  hp depmode also adds that space, but also prefixes the VPATH
238 > ## to the object.  Take care to not repeat it in the output.
239   ## Some versions of the HPUX 10.20 sed can't process this invocation
240   ## correctly.  Breaking it into two sed invocations is a workaround.
241 <    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
241 >  tr ' ' "$nl" < "$tmpdepfile" \
242 >    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243 >    | sed -e 's/$/ :/' >> "$depfile"
244    rm -f "$tmpdepfile"
245    ;;
246  
# Line 133 | Line 258 | sgi)
258      "$@" -MDupdate "$tmpdepfile"
259    fi
260    stat=$?
261 <  if test $stat -eq 0; then :
137 <  else
261 >  if test $stat -ne 0; then
262      rm -f "$tmpdepfile"
263      exit $stat
264    fi
# Line 142 | Line 266 | sgi)
266  
267    if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268      echo "$object : \\" > "$depfile"
145
269      # Clip off the initial element (the dependent).  Don't try to be
270      # clever and replace this with sed code, as IRIX sed won't handle
271      # lines with more than a fixed number of characters (4096 in
272      # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273 <    # the IRIX cc adds comments like `#:fec' to the end of the
273 >    # the IRIX cc adds comments like '#:fec' to the end of the
274      # dependency line.
275 <    tr ' ' '
276 < ' < "$tmpdepfile" \
277 <    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
278 <    tr '
156 < ' ' ' >> $depfile
157 <    echo >> $depfile
158 <
275 >    tr ' ' "$nl" < "$tmpdepfile" \
276 >      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277 >      | tr "$nl" ' ' >> "$depfile"
278 >    echo >> "$depfile"
279      # The second pass generates a dummy entry for each header file.
280 <    tr ' ' '
281 < ' < "$tmpdepfile" \
282 <   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
163 <   >> $depfile
280 >    tr ' ' "$nl" < "$tmpdepfile" \
281 >      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282 >      >> "$depfile"
283    else
284 <    # 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"
284 >    make_dummy_depfile
285    fi
286    rm -f "$tmpdepfile"
287    ;;
288  
289 + xlc)
290 +  # This case exists only to let depend.m4 do its work.  It works by
291 +  # looking at the text of this script.  This case will never be run,
292 +  # since it is checked for above.
293 +  exit 1
294 +  ;;
295 +
296   aix)
297    # The C for AIX Compiler uses -M and outputs the dependencies
298 <  # in a .u file.  This file always lives in the current directory.
299 <  # Also, the AIX compiler puts `$object:' at the start of each line;
300 <  # $object doesn't have directory information.
301 <  stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
302 <  tmpdepfile="$stripped.u"
303 <  outname="$stripped.o"
298 >  # in a .u file.  In older versions, this file always lives in the
299 >  # current directory.  Also, the AIX compiler puts '$object:' at the
300 >  # start of each line; $object doesn't have directory information.
301 >  # Version 6 uses the directory in both cases.
302 >  set_dir_from "$object"
303 >  set_base_from "$object"
304    if test "$libtool" = yes; then
305 +    tmpdepfile1=$dir$base.u
306 +    tmpdepfile2=$base.u
307 +    tmpdepfile3=$dir.libs/$base.u
308      "$@" -Wc,-M
309    else
310 +    tmpdepfile1=$dir$base.u
311 +    tmpdepfile2=$dir$base.u
312 +    tmpdepfile3=$dir$base.u
313      "$@" -M
314    fi
315 +  stat=$?
316 +  if test $stat -ne 0; then
317 +    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318 +    exit $stat
319 +  fi
320  
321 +  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322 +  do
323 +    test -f "$tmpdepfile" && break
324 +  done
325 +  aix_post_process_depfile
326 +  ;;
327 +
328 + tcc)
329 +  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330 +  # FIXME: That version still under development at the moment of writing.
331 +  #        Make that this statement remains true also for stable, released
332 +  #        versions.
333 +  # It will wrap lines (doesn't matter whether long or short) with a
334 +  # trailing '\', as in:
335 +  #
336 +  #   foo.o : \
337 +  #    foo.c \
338 +  #    foo.h \
339 +  #
340 +  # It will put a trailing '\' even on the last line, and will use leading
341 +  # spaces rather than leading tabs (at least since its commit 0394caf7
342 +  # "Emit spaces for -MD").
343 +  "$@" -MD -MF "$tmpdepfile"
344    stat=$?
345 <  if test $stat -eq 0; then :
189 <  else
345 >  if test $stat -ne 0; then
346      rm -f "$tmpdepfile"
347      exit $stat
348    fi
349 +  rm -f "$depfile"
350 +  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351 +  # We have to change lines of the first kind to '$object: \'.
352 +  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353 +  # And for each line of the second kind, we have to emit a 'dep.h:'
354 +  # dummy dependency, to avoid the deleted-header problem.
355 +  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356 +  rm -f "$tmpdepfile"
357 +  ;;
358  
359 + ## The order of this option in the case statement is important, since the
360 + ## shell code in configure will try each of these formats in the order
361 + ## listed in this file.  A plain '-MD' option would be understood by many
362 + ## compilers, so we must ensure this comes after the gcc and icc options.
363 + pgcc)
364 +  # Portland's C compiler understands '-MD'.
365 +  # Will always output deps to 'file.d' where file is the root name of the
366 +  # source file under compilation, even if file resides in a subdirectory.
367 +  # The object file name does not affect the name of the '.d' file.
368 +  # pgcc 10.2 will output
369 +  #    foo.o: sub/foo.c sub/foo.h
370 +  # and will wrap long lines using '\' :
371 +  #    foo.o: sub/foo.c ... \
372 +  #     sub/foo.h ... \
373 +  #     ...
374 +  set_dir_from "$object"
375 +  # Use the source, not the object, to determine the base name, since
376 +  # that's sadly what pgcc will do too.
377 +  set_base_from "$source"
378 +  tmpdepfile=$base.d
379 +
380 +  # For projects that build the same source file twice into different object
381 +  # files, the pgcc approach of using the *source* file root name can cause
382 +  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383 +  # the same $tmpdepfile.
384 +  lockdir=$base.d-lock
385 +  trap "
386 +    echo '$0: caught signal, cleaning up...' >&2
387 +    rmdir '$lockdir'
388 +    exit 1
389 +  " 1 2 13 15
390 +  numtries=100
391 +  i=$numtries
392 +  while test $i -gt 0; do
393 +    # mkdir is a portable test-and-set.
394 +    if mkdir "$lockdir" 2>/dev/null; then
395 +      # This process acquired the lock.
396 +      "$@" -MD
397 +      stat=$?
398 +      # Release the lock.
399 +      rmdir "$lockdir"
400 +      break
401 +    else
402 +      # If the lock is being held by a different process, wait
403 +      # until the winning process is done or we timeout.
404 +      while test -d "$lockdir" && test $i -gt 0; do
405 +        sleep 1
406 +        i=`expr $i - 1`
407 +      done
408 +    fi
409 +    i=`expr $i - 1`
410 +  done
411 +  trap - 1 2 13 15
412 +  if test $i -le 0; then
413 +    echo "$0: failed to acquire lock after $numtries attempts" >&2
414 +    echo "$0: check lockdir '$lockdir'" >&2
415 +    exit 1
416 +  fi
417 +
418 +  if test $stat -ne 0; then
419 +    rm -f "$tmpdepfile"
420 +    exit $stat
421 +  fi
422 +  rm -f "$depfile"
423 +  # Each line is of the form `foo.o: dependent.h',
424 +  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425 +  # Do two passes, one to just change these to
426 +  # `$object: dependent.h' and one to simply `dependent.h:'.
427 +  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
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 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431 +    | sed -e 's/$/ :/' >> "$depfile"
432 +  rm -f "$tmpdepfile"
433 +  ;;
434 +
435 + hp2)
436 +  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437 +  # compilers, which have integrated preprocessors.  The correct option
438 +  # to use with these is +Maked; it writes dependencies to a file named
439 +  # 'foo.d', which lands next to the object file, wherever that
440 +  # happens to be.
441 +  # Much of this is similar to the tru64 case; see comments there.
442 +  set_dir_from  "$object"
443 +  set_base_from "$object"
444 +  if test "$libtool" = yes; then
445 +    tmpdepfile1=$dir$base.d
446 +    tmpdepfile2=$dir.libs/$base.d
447 +    "$@" -Wc,+Maked
448 +  else
449 +    tmpdepfile1=$dir$base.d
450 +    tmpdepfile2=$dir$base.d
451 +    "$@" +Maked
452 +  fi
453 +  stat=$?
454 +  if test $stat -ne 0; then
455 +     rm -f "$tmpdepfile1" "$tmpdepfile2"
456 +     exit $stat
457 +  fi
458 +
459 +  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460 +  do
461 +    test -f "$tmpdepfile" && break
462 +  done
463    if test -f "$tmpdepfile"; then
464 <    # Each line is of the form `foo.o: dependent.h'.
465 <    # Do two passes, one to just change these to
466 <    # `$object: dependent.h' and one to simply `dependent.h:'.
467 <    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
468 <    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
464 >    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465 >    # Add 'dependent.h:' lines.
466 >    sed -ne '2,${
467 >               s/^ *//
468 >               s/ \\*$//
469 >               s/$/:/
470 >               p
471 >             }' "$tmpdepfile" >> "$depfile"
472    else
473 <    # The sourcefile does not contain any dependencies, so just
202 <    # store a dummy comment line, to avoid errors with the Makefile
203 <    # "include basename.Plo" scheme.
204 <    echo "#dummy" > "$depfile"
473 >    make_dummy_depfile
474    fi
475 <  rm -f "$tmpdepfile"
475 >  rm -f "$tmpdepfile" "$tmpdepfile2"
476    ;;
477  
478   tru64)
479 <   # The Tru64 compiler uses -MD to generate dependencies as a side
480 <   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
481 <   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482 <   # dependencies in `foo.d' instead, so we check for that too.
483 <   # Subdirectories are respected.
484 <   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
485 <   test "x$dir" = "x$object" && dir=
217 <   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
218 <
219 <   if test "$libtool" = yes; then
220 <      tmpdepfile1="$dir.libs/$base.lo.d"
221 <      tmpdepfile2="$dir.libs/$base.d"
222 <      "$@" -Wc,-MD
223 <   else
224 <      tmpdepfile1="$dir$base.o.d"
225 <      tmpdepfile2="$dir$base.d"
226 <      "$@" -MD
227 <   fi
479 >  # The Tru64 compiler uses -MD to generate dependencies as a side
480 >  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481 >  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482 >  # dependencies in 'foo.d' instead, so we check for that too.
483 >  # Subdirectories are respected.
484 >  set_dir_from  "$object"
485 >  set_base_from "$object"
486  
487 <   stat=$?
488 <   if test $stat -eq 0; then :
489 <   else
490 <      rm -f "$tmpdepfile1" "$tmpdepfile2"
491 <      exit $stat
492 <   fi
493 <
494 <   if test -f "$tmpdepfile1"; then
495 <      tmpdepfile="$tmpdepfile1"
496 <   else
497 <      tmpdepfile="$tmpdepfile2"
498 <   fi
499 <   if test -f "$tmpdepfile"; then
500 <      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
501 <      # That's a space and a tab in the [].
502 <      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
503 <   else
504 <      echo "#dummy" > "$depfile"
505 <   fi
506 <   rm -f "$tmpdepfile"
507 <   ;;
487 >  if test "$libtool" = yes; then
488 >    # Libtool generates 2 separate objects for the 2 libraries.  These
489 >    # two compilations output dependencies in $dir.libs/$base.o.d and
490 >    # in $dir$base.o.d.  We have to check for both files, because
491 >    # one of the two compilations can be disabled.  We should prefer
492 >    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493 >    # automatically cleaned when .libs/ is deleted, while ignoring
494 >    # the former would cause a distcleancheck panic.
495 >    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496 >    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497 >    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498 >    "$@" -Wc,-MD
499 >  else
500 >    tmpdepfile1=$dir$base.d
501 >    tmpdepfile2=$dir$base.d
502 >    tmpdepfile3=$dir$base.d
503 >    "$@" -MD
504 >  fi
505 >
506 >  stat=$?
507 >  if test $stat -ne 0; then
508 >    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509 >    exit $stat
510 >  fi
511 >
512 >  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513 >  do
514 >    test -f "$tmpdepfile" && break
515 >  done
516 >  # Same post-processing that is required for AIX mode.
517 >  aix_post_process_depfile
518 >  ;;
519 >
520 > msvc7)
521 >  if test "$libtool" = yes; then
522 >    showIncludes=-Wc,-showIncludes
523 >  else
524 >    showIncludes=-showIncludes
525 >  fi
526 >  "$@" $showIncludes > "$tmpdepfile"
527 >  stat=$?
528 >  grep -v '^Note: including file: ' "$tmpdepfile"
529 >  if test $stat -ne 0; then
530 >    rm -f "$tmpdepfile"
531 >    exit $stat
532 >  fi
533 >  rm -f "$depfile"
534 >  echo "$object : \\" > "$depfile"
535 >  # The first sed program below extracts the file names and escapes
536 >  # backslashes for cygpath.  The second sed program outputs the file
537 >  # name when reading, but also accumulates all include files in the
538 >  # hold buffer in order to output them again at the end.  This only
539 >  # works with sed implementations that can handle large buffers.
540 >  sed < "$tmpdepfile" -n '
541 > /^Note: including file:  *\(.*\)/ {
542 >  s//\1/
543 >  s/\\/\\\\/g
544 >  p
545 > }' | $cygpath_u | sort -u | sed -n '
546 > s/ /\\ /g
547 > s/\(.*\)/'"$tab"'\1 \\/p
548 > s/.\(.*\) \\/\1:/
549 > H
550 > $ {
551 >  s/.*/'"$tab"'/
552 >  G
553 >  p
554 > }' >> "$depfile"
555 >  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556 >  rm -f "$tmpdepfile"
557 >  ;;
558 >
559 > msvc7msys)
560 >  # This case exists only to let depend.m4 do its work.  It works by
561 >  # looking at the text of this script.  This case will never be run,
562 >  # since it is checked for above.
563 >  exit 1
564 >  ;;
565  
566   #nosideeffect)
567    # This comment above is used by automake to tell side-effect
# Line 254 | Line 569 | tru64)
569  
570   dashmstdout)
571    # Important note: in order to support this mode, a compiler *must*
572 <  # always write the proprocessed file to stdout, regardless of -o.
572 >  # always write the preprocessed file to stdout, regardless of -o.
573    "$@" || exit $?
574  
575    # Remove the call to Libtool.
576    if test "$libtool" = yes; then
577 <    while test $1 != '--mode=compile'; do
577 >    while test "X$1" != 'X--mode=compile'; do
578        shift
579      done
580      shift
581    fi
582  
583 <  # Remove `-o $object'.  We will use -o /dev/null later,
269 <  # however we can't do the remplacement now because
270 <  # `-o $object' might simply not be used
583 >  # Remove '-o $object'.
584    IFS=" "
585    for arg
586    do
# Line 287 | Line 600 | dashmstdout)
600    done
601  
602    test -z "$dashmflag" && dashmflag=-M
603 <  "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[       ]*:'"$object"'\: :' > "$tmpdepfile"
603 >  # Require at least two characters before searching for ':'
604 >  # in the target name.  This is to cope with DOS-style filenames:
605 >  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606 >  "$@" $dashmflag |
607 >    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608    rm -f "$depfile"
609    cat < "$tmpdepfile" > "$depfile"
610 <  tr ' ' '
611 < ' < "$tmpdepfile" | \
612 < ## Some versions of the HPUX 10.20 sed can't process this invocation
613 < ## correctly.  Breaking it into two sed invocations is a workaround.
614 <    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
610 >  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611 >  # correctly.  Breaking it into two sed invocations is a workaround.
612 >  tr ' ' "$nl" < "$tmpdepfile" \
613 >    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614 >    | sed -e 's/$/ :/' >> "$depfile"
615    rm -f "$tmpdepfile"
616    ;;
617  
# Line 306 | Line 623 | dashXmstdout)
623  
624   makedepend)
625    "$@" || exit $?
626 +  # Remove any Libtool call
627 +  if test "$libtool" = yes; then
628 +    while test "X$1" != 'X--mode=compile'; do
629 +      shift
630 +    done
631 +    shift
632 +  fi
633    # X makedepend
634    shift
635 <  cleared=no
636 <  for arg in "$@"; do
635 >  cleared=no eat=no
636 >  for arg
637 >  do
638      case $cleared in
639      no)
640        set ""; shift
641        cleared=yes ;;
642      esac
643 +    if test $eat = yes; then
644 +      eat=no
645 +      continue
646 +    fi
647      case "$arg" in
648      -D*|-I*)
649        set fnord "$@" "$arg"; shift ;;
650 <    -*)
650 >    # Strip any option that makedepend may not understand.  Remove
651 >    # the object too, otherwise makedepend will parse it as a source file.
652 >    -arch)
653 >      eat=yes ;;
654 >    -*|$object)
655        ;;
656      *)
657        set fnord "$@" "$arg"; shift ;;
658      esac
659    done
660 <  obj_suffix="`echo $object | sed 's/^.*\././'`"
660 >  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661    touch "$tmpdepfile"
662    ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663    rm -f "$depfile"
664 <  cat < "$tmpdepfile" > "$depfile"
665 <  sed '1,2d' "$tmpdepfile" | tr ' ' '
666 < ' | \
667 < ## Some versions of the HPUX 10.20 sed can't process this invocation
668 < ## correctly.  Breaking it into two sed invocations is a workaround.
669 <    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
664 >  # makedepend may prepend the VPATH from the source file name to the object.
665 >  # No need to regex-escape $object, excess matching of '.' is harmless.
666 >  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667 >  # Some versions of the HPUX 10.20 sed can't process the last invocation
668 >  # correctly.  Breaking it into two sed invocations is a workaround.
669 >  sed '1,2d' "$tmpdepfile" \
670 >    | tr ' ' "$nl" \
671 >    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672 >    | sed -e 's/$/ :/' >> "$depfile"
673    rm -f "$tmpdepfile" "$tmpdepfile".bak
674    ;;
675  
676   cpp)
677    # Important note: in order to support this mode, a compiler *must*
678 <  # always write the proprocessed file to stdout.
678 >  # always write the preprocessed file to stdout.
679    "$@" || exit $?
680  
681    # Remove the call to Libtool.
682    if test "$libtool" = yes; then
683 <    while test $1 != '--mode=compile'; do
683 >    while test "X$1" != 'X--mode=compile'; do
684        shift
685      done
686      shift
687    fi
688  
689 <  # Remove `-o $object'.
689 >  # Remove '-o $object'.
690    IFS=" "
691    for arg
692    do
# Line 369 | Line 705 | cpp)
705      esac
706    done
707  
708 <  "$@" -E |
709 <    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
710 <    sed '$ s: \\$::' > "$tmpdepfile"
708 >  "$@" -E \
709 >    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710 >             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711 >    | sed '$ s: \\$::' > "$tmpdepfile"
712    rm -f "$depfile"
713    echo "$object : \\" > "$depfile"
714    cat < "$tmpdepfile" >> "$depfile"
# Line 381 | Line 718 | cpp)
718  
719   msvisualcpp)
720    # Important note: in order to support this mode, a compiler *must*
721 <  # always write the proprocessed file to stdout, regardless of -o,
385 <  # because we must use -o when running libtool.
721 >  # always write the preprocessed file to stdout.
722    "$@" || exit $?
723 +
724 +  # Remove the call to Libtool.
725 +  if test "$libtool" = yes; then
726 +    while test "X$1" != 'X--mode=compile'; do
727 +      shift
728 +    done
729 +    shift
730 +  fi
731 +
732    IFS=" "
733    for arg
734    do
735      case "$arg" in
736 +    -o)
737 +      shift
738 +      ;;
739 +    $object)
740 +      shift
741 +      ;;
742      "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743 <        set fnord "$@"
744 <        shift
745 <        shift
746 <        ;;
743 >        set fnord "$@"
744 >        shift
745 >        shift
746 >        ;;
747      *)
748 <        set fnord "$@" "$arg"
749 <        shift
750 <        shift
751 <        ;;
748 >        set fnord "$@" "$arg"
749 >        shift
750 >        shift
751 >        ;;
752      esac
753    done
754 <  "$@" -E |
755 <  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
754 >  "$@" -E 2>/dev/null |
755 >  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756    rm -f "$depfile"
757    echo "$object : \\" > "$depfile"
758 <  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::    \1 \\:p' >> "$depfile"
759 <  echo "        " >> "$depfile"
760 <  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
758 >  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759 >  echo "$tab" >> "$depfile"
760 >  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761    rm -f "$tmpdepfile"
762    ;;
763  
764 + msvcmsys)
765 +  # This case exists only to let depend.m4 do its work.  It works by
766 +  # looking at the text of this script.  This case will never be run,
767 +  # since it is checked for above.
768 +  exit 1
769 +  ;;
770 +
771   none)
772    exec "$@"
773    ;;
# Line 421 | Line 779 | none)
779   esac
780  
781   exit 0
782 +
783 + # Local Variables:
784 + # mode: shell-script
785 + # sh-indentation: 2
786 + # eval: (add-hook 'write-file-hooks 'time-stamp)
787 + # time-stamp-start: "scriptversion="
788 + # time-stamp-format: "%:y-%02m-%02d.%02H"
789 + # time-stamp-time-zone: "UTC"
790 + # time-stamp-end: "; # UTC"
791 + # End:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines