ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/depcomp
(Generate patch)

Comparing:
ircd-hybrid/trunk/depcomp (file contents), Revision 1662 by michael, Sat Nov 17 20:11:33 2012 UTC vs.
ircd-hybrid/branches/8.2.x/depcomp (file contents), Revision 10082 by michael, Sat Jun 11 11:40:12 2022 UTC

# Line 1 | Line 1
1   #! /bin/sh
2   # depcomp - compile a program generating dependencies as side-effects
3  
4 < scriptversion=2012-07-12.20; # UTC
4 > scriptversion=2018-03-07.03; # UTC
5  
6 < # Copyright (C) 1999-2012 Free Software Foundation, Inc.
6 > # Copyright (C) 1999-2021 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 16 | Line 16 | scriptversion=2012-07-12.20; # UTC
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, see <http://www.gnu.org/licenses/>.
19 > # along with this program.  If not, see <https://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 27 | Line 27 | scriptversion=2012-07-12.20; # UTC
27  
28   case $1 in
29    '')
30 <     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31 <     exit 1;
32 <     ;;
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]
# Line 56 | Line 56 | EOF
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
# Line 74 | Line 128 | tmpdepfile=${tmpdepfile-`echo "$depfile"
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 85 | 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
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
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 informations.
169 <   gccflag=-qmakedep=gcc,-MF
170 <   depmode=gcc
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 133 | Line 190 | gcc3)
190    done
191    "$@"
192    stat=$?
193 <  if test $stat -eq 0; then :
137 <  else
193 >  if test $stat -ne 0; then
194      rm -f "$tmpdepfile"
195      exit $stat
196    fi
# Line 142 | 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 156 | Line 216 | gcc)
216    fi
217    "$@" -Wp,"$gccflag$tmpdepfile"
218    stat=$?
219 <  if test $stat -eq 0; then :
160 <  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.
# Line 173 | Line 232 | gcc)
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.
176  tr ' ' "$nl" < "$tmpdepfile" |
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.  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 "s|.*$object$||" -e '/:$/d' \
242 <      | 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 199 | Line 258 | sgi)
258      "$@" -MDupdate "$tmpdepfile"
259    fi
260    stat=$?
261 <  if test $stat -eq 0; then :
203 <  else
261 >  if test $stat -ne 0; then
262      rm -f "$tmpdepfile"
263      exit $stat
264    fi
# Line 208 | Line 266 | sgi)
266  
267    if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268      echo "$object : \\" > "$depfile"
211
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
# Line 216 | Line 273 | sgi)
273      # the IRIX cc adds comments like '#:fec' to the end of the
274      # dependency line.
275      tr ' ' "$nl" < "$tmpdepfile" \
276 <    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
277 <    tr "$nl" ' ' >> "$depfile"
276 >      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277 >      | tr "$nl" ' ' >> "$depfile"
278      echo >> "$depfile"
222
279      # The second pass generates a dummy entry for each header file.
280      tr ' ' "$nl" < "$tmpdepfile" \
281 <   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282 <   >> "$depfile"
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
229 <    # store a dummy comment line, to avoid errors with the Makefile
230 <    # "include basename.Plo" scheme.
231 <    echo "#dummy" > "$depfile"
284 >    make_dummy_depfile
285    fi
286    rm -f "$tmpdepfile"
287    ;;
# Line 246 | Line 299 | aix)
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 <  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
303 <  test "x$dir" = "x$object" && dir=
251 <  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
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
# Line 261 | Line 313 | aix)
313      "$@" -M
314    fi
315    stat=$?
316 <
265 <  if test $stat -eq 0; then :
266 <  else
316 >  if test $stat -ne 0; then
317      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318      exit $stat
319    fi
# Line 272 | Line 322 | aix)
322    do
323      test -f "$tmpdepfile" && break
324    done
325 <  if test -f "$tmpdepfile"; then
276 <    # Each line is of the form 'foo.o: dependent.h'.
277 <    # Do two passes, one to just change these to
278 <    # '$object: dependent.h' and one to simply 'dependent.h:'.
279 <    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
280 <    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
281 <  else
282 <    # The sourcefile does not contain any dependencies, so just
283 <    # store a dummy comment line, to avoid errors with the Makefile
284 <    # "include basename.Plo" scheme.
285 <    echo "#dummy" > "$depfile"
286 <  fi
287 <  rm -f "$tmpdepfile"
325 >  aix_post_process_depfile
326    ;;
327  
328 < icc)
329 <  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
330 <  # However on
331 <  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
332 <  # ICC 7.0 will fill foo.d with something like
333 <  #    foo.o: sub/foo.c
334 <  #    foo.o: sub/foo.h
335 <  # which is wrong.  We want
336 <  #    sub/foo.o: sub/foo.c
337 <  #    sub/foo.o: sub/foo.h
338 <  #    sub/foo.c:
339 <  #    sub/foo.h:
340 <  # ICC 7.1 will output
341 <  #    foo.o: sub/foo.c sub/foo.h
342 <  # and will wrap long lines using '\':
305 <  #    foo.o: sub/foo.c ... \
306 <  #     sub/foo.h ... \
307 <  #     ...
308 <  # tcc 0.9.26 (FIXME still under development at the moment of writing)
309 <  # will emit a similar output, but also prepend the continuation lines
310 <  # with horizontal tabulation characters.
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 :
314 <  else
345 >  if test $stat -ne 0; then
346      rm -f "$tmpdepfile"
347      exit $stat
348    fi
349    rm -f "$depfile"
350 <  # Each line is of the form 'foo.o: dependent.h',
351 <  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
352 <  # Do two passes, one to just change these to
353 <  # '$object: dependent.h' and one to simply 'dependent.h:'.
354 <  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
355 <    < "$tmpdepfile" > "$depfile"
325 <  sed '
326 <    s/[ '"$tab"'][ '"$tab"']*/ /g
327 <    s/^ *//
328 <    s/ *\\*$//
329 <    s/^[^:]*: *//
330 <    /^$/d
331 <    /:$/d
332 <    s/$/ :/
333 <  ' < "$tmpdepfile" >> "$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  
# Line 349 | Line 371 | pgcc)
371    #    foo.o: sub/foo.c ... \
372    #     sub/foo.h ... \
373    #     ...
374 <  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
353 <  test "x$dir" = "x$object" && dir=
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 <  base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
378 <  tmpdepfile="$base.d"
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 "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15
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
392 >  while test $i -gt 0; do
393      # mkdir is a portable test-and-set.
394 <    if mkdir $lockdir 2>/dev/null; then
394 >    if mkdir "$lockdir" 2>/dev/null; then
395        # This process acquired the lock.
396        "$@" -MD
397        stat=$?
398        # Release the lock.
399 <      rm -rf $lockdir
399 >      rmdir "$lockdir"
400        break
401      else
402 <      ## the lock is being held by a different process,
403 <      ## wait until the winning process is done or we timeout
404 <      while test -d $lockdir && test $i -gt 0; do
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
# Line 402 | Line 427 | pgcc)
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"
430 >  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431 >    | sed -e 's/$/ :/' >> "$depfile"
432    rm -f "$tmpdepfile"
433    ;;
434  
# Line 414 | Line 439 | hp2)
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 <  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
443 <  test "x$dir" = "x$object" && dir=
419 <  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
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
# Line 427 | Line 451 | hp2)
451      "$@" +Maked
452    fi
453    stat=$?
454 <  if test $stat -eq 0; then :
431 <  else
454 >  if test $stat -ne 0; then
455       rm -f "$tmpdepfile1" "$tmpdepfile2"
456       exit $stat
457    fi
# Line 438 | Line 461 | hp2)
461      test -f "$tmpdepfile" && break
462    done
463    if test -f "$tmpdepfile"; then
464 <    sed -e "s,^.*\.[a-z]*:,$object:," "$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"
467 >               s/^ *//
468 >               s/ \\*$//
469 >               s/$/:/
470 >               p
471 >             }' "$tmpdepfile" >> "$depfile"
472    else
473 <    echo "#dummy" > "$depfile"
473 >    make_dummy_depfile
474    fi
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=
486 <   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
487 <
488 <   if test "$libtool" = yes; then
489 <      # With Tru64 cc, shared objects can also be used to make a
490 <      # static library.  This mechanism is used in libtool 1.4 series to
491 <      # handle both shared and static libraries in a single compilation.
492 <      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
493 <      #
494 <      # With libtool 1.5 this exception was removed, and libtool now
495 <      # generates 2 separate objects for the 2 libraries.  These two
496 <      # compilations output dependencies in $dir.libs/$base.o.d and
497 <      # in $dir$base.o.d.  We have to check for both files, because
498 <      # one of the two compilations can be disabled.  We should prefer
499 <      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
500 <      # automatically cleaned when .libs/ is deleted, while ignoring
501 <      # the former would cause a distcleancheck panic.
502 <      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
503 <      tmpdepfile2=$dir$base.o.d          # libtool 1.5
504 <      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
505 <      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
506 <      "$@" -Wc,-MD
507 <   else
508 <      tmpdepfile1=$dir$base.o.d
509 <      tmpdepfile2=$dir$base.d
510 <      tmpdepfile3=$dir$base.d
488 <      tmpdepfile4=$dir$base.d
489 <      "$@" -MD
490 <   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 >  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 <   stat=$?
513 <   if test $stat -eq 0; then :
514 <   else
515 <      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
516 <      exit $stat
517 <   fi
518 <
499 <   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
500 <   do
501 <     test -f "$tmpdepfile" && break
502 <   done
503 <   if test -f "$tmpdepfile"; then
504 <      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
505 <      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
506 <   else
507 <      echo "#dummy" > "$depfile"
508 <   fi
509 <   rm -f "$tmpdepfile"
510 <   ;;
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
# Line 518 | Line 526 | msvc7)
526    "$@" $showIncludes > "$tmpdepfile"
527    stat=$?
528    grep -v '^Note: including file: ' "$tmpdepfile"
529 <  if test "$stat" = 0; then :
522 <  else
529 >  if test $stat -ne 0; then
530      rm -f "$tmpdepfile"
531      exit $stat
532    fi
# Line 545 | Line 552 | $ {
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  
# Line 596 | Line 604 | dashmstdout)
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"
607 >    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608    rm -f "$depfile"
609    cat < "$tmpdepfile" > "$depfile"
610 <  tr ' ' "$nl" < "$tmpdepfile" | \
611 < ## Some versions of the HPUX 10.20 sed can't process this invocation
612 < ## correctly.  Breaking it into two sed invocations is a workaround.
613 <    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 655 | Line 664 | makedepend)
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 <  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
668 < ## Some versions of the HPUX 10.20 sed can't process this invocation
669 < ## correctly.  Breaking it into two sed invocations is a workaround.
670 <    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$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  
# Line 694 | Line 705 | cpp)
705      esac
706    done
707  
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"
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 729 | Line 740 | msvisualcpp)
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 2>/dev/null |
# Line 772 | Line 783 | exit 0
783   # Local Variables:
784   # mode: shell-script
785   # sh-indentation: 2
786 < # eval: (add-hook 'write-file-hooks 'time-stamp)
786 > # eval: (add-hook 'before-save-hook 'time-stamp)
787   # time-stamp-start: "scriptversion="
788   # time-stamp-format: "%:y-%02m-%02d.%02H"
789 < # time-stamp-time-zone: "UTC"
789 > # time-stamp-time-zone: "UTC0"
790   # time-stamp-end: "; # UTC"
791   # End:

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)