~ubuntu-branches/ubuntu/vivid/mpich/vivid-proposed

« back to all changes in this revision

Viewing changes to src/armci/m4/depcomp

  • Committer: Package Import Robot
  • Author(s): Anton Gladky
  • Date: 2014-04-01 20:24:20 UTC
  • mfrom: (5.2.4 sid)
  • Revision ID: package-import@ubuntu.com-20140401202420-t5ey1ia2klt5dkq3
Tags: 3.1-4
* [c3e3398] Disable test_primitives, which is unreliable on some platforms.
            (Closes: #743047)
* [265a699] Add minimal autotest.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#! /bin/sh
2
2
# depcomp - compile a program generating dependencies as side-effects
3
3
 
4
 
scriptversion=2012-07-12.20; # UTC
 
4
scriptversion=2013-05-30.07; # UTC
5
5
 
6
 
# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 
6
# Copyright (C) 1999-2013 Free Software Foundation, Inc.
7
7
 
8
8
# This program is free software; you can redistribute it and/or modify
9
9
# it under the terms of the GNU General Public License as published by
27
27
 
28
28
case $1 in
29
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
33
  -h | --h*)
34
34
    cat <<\EOF
35
35
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
56
56
    ;;
57
57
esac
58
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
 
59
107
# A tabulation character.
60
108
tab='   '
61
109
# A newline character.
62
110
nl='
63
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}
64
118
 
65
119
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
66
120
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
74
128
 
75
129
rm -f "$tmpdepfile"
76
130
 
 
131
# Avoid interferences from the environment.
 
132
gccflag= dashmflag=
 
133
 
77
134
# Some modes work just like other modes, but use different flags.  We
78
135
# parameterize here, but still list the modes in the big case below,
79
136
# to make depend.m4 easier to write.  Note that we *cannot* use a case
85
142
fi
86
143
 
87
144
if test "$depmode" = dashXmstdout; then
88
 
   # This is just like dashmstdout with a different argument.
89
 
   dashmflag=-xM
90
 
   depmode=dashmstdout
 
145
  # This is just like dashmstdout with a different argument.
 
146
  dashmflag=-xM
 
147
  depmode=dashmstdout
91
148
fi
92
149
 
93
150
cygpath_u="cygpath -u -f -"
94
151
if test "$depmode" = msvcmsys; then
95
 
   # This is just like msvisualcpp but w/o cygpath translation.
96
 
   # Just convert the backslash-escaped backslashes to single forward
97
 
   # slashes to satisfy depend.m4
98
 
   cygpath_u='sed s,\\\\,/,g'
99
 
   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
100
157
fi
101
158
 
102
159
if test "$depmode" = msvc7msys; then
103
 
   # This is just like msvc7 but w/o cygpath translation.
104
 
   # Just convert the backslash-escaped backslashes to single forward
105
 
   # slashes to satisfy depend.m4
106
 
   cygpath_u='sed s,\\\\,/,g'
107
 
   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
108
165
fi
109
166
 
110
167
if test "$depmode" = xlc; then
111
 
   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
112
 
   gccflag=-qmakedep=gcc,-MF
113
 
   depmode=gcc
 
168
  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
 
169
  gccflag=-qmakedep=gcc,-MF
 
170
  depmode=gcc
114
171
fi
115
172
 
116
173
case "$depmode" in
133
190
  done
134
191
  "$@"
135
192
  stat=$?
136
 
  if test $stat -eq 0; then :
137
 
  else
 
193
  if test $stat -ne 0; then
138
194
    rm -f "$tmpdepfile"
139
195
    exit $stat
140
196
  fi
142
198
  ;;
143
199
 
144
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).
145
204
## There are various ways to get dependency output from gcc.  Here's
146
205
## why we pick this rather obscure method:
147
206
## - Don't want to use -MD because we'd like the dependencies to end
148
207
##   up in a subdir.  Having to rename by hand is ugly.
149
208
##   (We might end up doing this anyway to support other compilers.)
150
209
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
151
 
##   -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.
152
212
## - Using -M directly means running the compiler twice (even worse
153
213
##   than renaming).
154
214
  if test -z "$gccflag"; then
156
216
  fi
157
217
  "$@" -Wp,"$gccflag$tmpdepfile"
158
218
  stat=$?
159
 
  if test $stat -eq 0; then :
160
 
  else
 
219
  if test $stat -ne 0; then
161
220
    rm -f "$tmpdepfile"
162
221
    exit $stat
163
222
  fi
164
223
  rm -f "$depfile"
165
224
  echo "$object : \\" > "$depfile"
166
 
  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
167
 
## 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.
168
227
  sed -e 's/^[^:]*: / /' \
169
228
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
170
229
## This next piece of magic avoids the "deleted header file" problem.
173
232
## typically no way to rebuild the header).  We avoid this by adding
174
233
## dummy dependencies for each header file.  Too bad gcc doesn't do
175
234
## this for us directly.
176
 
  tr ' ' "$nl" < "$tmpdepfile" |
177
235
## Some versions of gcc put a space before the ':'.  On the theory
178
236
## that the space means something, we add a space to the output as
179
237
## well.  hp depmode also adds that space, but also prefixes the VPATH
180
238
## to the object.  Take care to not repeat it in the output.
181
239
## Some versions of the HPUX 10.20 sed can't process this invocation
182
240
## correctly.  Breaking it into two sed invocations is a workaround.
183
 
    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
184
 
      | sed -e 's/$/ :/' >> "$depfile"
 
241
  tr ' ' "$nl" < "$tmpdepfile" \
 
242
    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
 
243
    | sed -e 's/$/ :/' >> "$depfile"
185
244
  rm -f "$tmpdepfile"
186
245
  ;;
187
246
 
199
258
    "$@" -MDupdate "$tmpdepfile"
200
259
  fi
201
260
  stat=$?
202
 
  if test $stat -eq 0; then :
203
 
  else
 
261
  if test $stat -ne 0; then
204
262
    rm -f "$tmpdepfile"
205
263
    exit $stat
206
264
  fi
208
266
 
209
267
  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
210
268
    echo "$object : \\" > "$depfile"
211
 
 
212
269
    # Clip off the initial element (the dependent).  Don't try to be
213
270
    # clever and replace this with sed code, as IRIX sed won't handle
214
271
    # lines with more than a fixed number of characters (4096 in
216
273
    # the IRIX cc adds comments like '#:fec' to the end of the
217
274
    # dependency line.
218
275
    tr ' ' "$nl" < "$tmpdepfile" \
219
 
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
220
 
    tr "$nl" ' ' >> "$depfile"
 
276
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
 
277
      | tr "$nl" ' ' >> "$depfile"
221
278
    echo >> "$depfile"
222
 
 
223
279
    # The second pass generates a dummy entry for each header file.
224
280
    tr ' ' "$nl" < "$tmpdepfile" \
225
 
   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
226
 
   >> "$depfile"
 
281
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
 
282
      >> "$depfile"
227
283
  else
228
 
    # 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
232
285
  fi
233
286
  rm -f "$tmpdepfile"
234
287
  ;;
246
299
  # current directory.  Also, the AIX compiler puts '$object:' at the
247
300
  # start of each line; $object doesn't have directory information.
248
301
  # Version 6 uses the directory in both cases.
249
 
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
250
 
  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"
252
304
  if test "$libtool" = yes; then
253
305
    tmpdepfile1=$dir$base.u
254
306
    tmpdepfile2=$base.u
261
313
    "$@" -M
262
314
  fi
263
315
  stat=$?
264
 
 
265
 
  if test $stat -eq 0; then :
266
 
  else
 
316
  if test $stat -ne 0; then
267
317
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
268
318
    exit $stat
269
319
  fi
272
322
  do
273
323
    test -f "$tmpdepfile" && break
274
324
  done
275
 
  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
288
326
  ;;
289
327
 
290
 
icc)
291
 
  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
292
 
  # However on
293
 
  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
294
 
  # ICC 7.0 will fill foo.d with something like
295
 
  #    foo.o: sub/foo.c
296
 
  #    foo.o: sub/foo.h
297
 
  # which is wrong.  We want
298
 
  #    sub/foo.o: sub/foo.c
299
 
  #    sub/foo.o: sub/foo.h
300
 
  #    sub/foo.c:
301
 
  #    sub/foo.h:
302
 
  # ICC 7.1 will output
303
 
  #    foo.o: sub/foo.c sub/foo.h
304
 
  # 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").
311
343
  "$@" -MD -MF "$tmpdepfile"
312
344
  stat=$?
313
 
  if test $stat -eq 0; then :
314
 
  else
 
345
  if test $stat -ne 0; then
315
346
    rm -f "$tmpdepfile"
316
347
    exit $stat
317
348
  fi
318
349
  rm -f "$depfile"
319
 
  # Each line is of the form 'foo.o: dependent.h',
320
 
  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
321
 
  # Do two passes, one to just change these to
322
 
  # '$object: dependent.h' and one to simply 'dependent.h:'.
323
 
  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
324
 
    < "$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"
334
356
  rm -f "$tmpdepfile"
335
357
  ;;
336
358
 
349
371
  #    foo.o: sub/foo.c ... \
350
372
  #     sub/foo.h ... \
351
373
  #     ...
352
 
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
353
 
  test "x$dir" = "x$object" && dir=
 
374
  set_dir_from "$object"
354
375
  # Use the source, not the object, to determine the base name, since
355
376
  # that's sadly what pgcc will do too.
356
 
  base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
357
 
  tmpdepfile="$base.d"
 
377
  set_base_from "$source"
 
378
  tmpdepfile=$base.d
358
379
 
359
380
  # For projects that build the same source file twice into different object
360
381
  # files, the pgcc approach of using the *source* file root name can cause
361
382
  # problems in parallel builds.  Use a locking strategy to avoid stomping on
362
383
  # the same $tmpdepfile.
363
 
  lockdir="$base.d-lock"
364
 
  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
365
390
  numtries=100
366
391
  i=$numtries
367
 
  while test $i -gt 0 ; do
 
392
  while test $i -gt 0; do
368
393
    # mkdir is a portable test-and-set.
369
 
    if mkdir $lockdir 2>/dev/null; then
 
394
    if mkdir "$lockdir" 2>/dev/null; then
370
395
      # This process acquired the lock.
371
396
      "$@" -MD
372
397
      stat=$?
373
398
      # Release the lock.
374
 
      rm -rf $lockdir
 
399
      rmdir "$lockdir"
375
400
      break
376
401
    else
377
 
      ## the lock is being held by a different process,
378
 
      ## wait until the winning process is done or we timeout
379
 
      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
380
405
        sleep 1
381
406
        i=`expr $i - 1`
382
407
      done
402
427
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
403
428
  # Some versions of the HPUX 10.20 sed can't process this invocation
404
429
  # correctly.  Breaking it into two sed invocations is a workaround.
405
 
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
406
 
    sed -e 's/$/ :/' >> "$depfile"
 
430
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
 
431
    | sed -e 's/$/ :/' >> "$depfile"
407
432
  rm -f "$tmpdepfile"
408
433
  ;;
409
434
 
414
439
  # 'foo.d', which lands next to the object file, wherever that
415
440
  # happens to be.
416
441
  # Much of this is similar to the tru64 case; see comments there.
417
 
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
418
 
  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"
420
444
  if test "$libtool" = yes; then
421
445
    tmpdepfile1=$dir$base.d
422
446
    tmpdepfile2=$dir.libs/$base.d
427
451
    "$@" +Maked
428
452
  fi
429
453
  stat=$?
430
 
  if test $stat -eq 0; then :
431
 
  else
 
454
  if test $stat -ne 0; then
432
455
     rm -f "$tmpdepfile1" "$tmpdepfile2"
433
456
     exit $stat
434
457
  fi
438
461
    test -f "$tmpdepfile" && break
439
462
  done
440
463
  if test -f "$tmpdepfile"; then
441
 
    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
 
464
    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
442
465
    # Add 'dependent.h:' lines.
443
466
    sed -ne '2,${
444
 
               s/^ *//
445
 
               s/ \\*$//
446
 
               s/$/:/
447
 
               p
448
 
             }' "$tmpdepfile" >> "$depfile"
 
467
               s/^ *//
 
468
               s/ \\*$//
 
469
               s/$/:/
 
470
               p
 
471
             }' "$tmpdepfile" >> "$depfile"
449
472
  else
450
 
    echo "#dummy" > "$depfile"
 
473
    make_dummy_depfile
451
474
  fi
452
475
  rm -f "$tmpdepfile" "$tmpdepfile2"
453
476
  ;;
454
477
 
455
478
tru64)
456
 
   # The Tru64 compiler uses -MD to generate dependencies as a side
457
 
   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
458
 
   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
459
 
   # dependencies in 'foo.d' instead, so we check for that too.
460
 
   # Subdirectories are respected.
461
 
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
462
 
   test "x$dir" = "x$object" && dir=
463
 
   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
464
 
 
465
 
   if test "$libtool" = yes; then
466
 
      # With Tru64 cc, shared objects can also be used to make a
467
 
      # static library.  This mechanism is used in libtool 1.4 series to
468
 
      # handle both shared and static libraries in a single compilation.
469
 
      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
470
 
      #
471
 
      # With libtool 1.5 this exception was removed, and libtool now
472
 
      # generates 2 separate objects for the 2 libraries.  These two
473
 
      # compilations output dependencies in $dir.libs/$base.o.d and
474
 
      # in $dir$base.o.d.  We have to check for both files, because
475
 
      # one of the two compilations can be disabled.  We should prefer
476
 
      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
477
 
      # automatically cleaned when .libs/ is deleted, while ignoring
478
 
      # the former would cause a distcleancheck panic.
479
 
      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
480
 
      tmpdepfile2=$dir$base.o.d          # libtool 1.5
481
 
      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
482
 
      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
483
 
      "$@" -Wc,-MD
484
 
   else
485
 
      tmpdepfile1=$dir$base.o.d
486
 
      tmpdepfile2=$dir$base.d
487
 
      tmpdepfile3=$dir$base.d
488
 
      tmpdepfile4=$dir$base.d
489
 
      "$@" -MD
490
 
   fi
491
 
 
492
 
   stat=$?
493
 
   if test $stat -eq 0; then :
494
 
   else
495
 
      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
496
 
      exit $stat
497
 
   fi
498
 
 
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
 
   ;;
 
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
  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
  ;;
511
519
 
512
520
msvc7)
513
521
  if test "$libtool" = yes; then
518
526
  "$@" $showIncludes > "$tmpdepfile"
519
527
  stat=$?
520
528
  grep -v '^Note: including file: ' "$tmpdepfile"
521
 
  if test "$stat" = 0; then :
522
 
  else
 
529
  if test $stat -ne 0; then
523
530
    rm -f "$tmpdepfile"
524
531
    exit $stat
525
532
  fi
545
552
  G
546
553
  p
547
554
}' >> "$depfile"
 
555
  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
548
556
  rm -f "$tmpdepfile"
549
557
  ;;
550
558
 
596
604
  # in the target name.  This is to cope with DOS-style filenames:
597
605
  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
598
606
  "$@" $dashmflag |
599
 
    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
 
607
    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
600
608
  rm -f "$depfile"
601
609
  cat < "$tmpdepfile" > "$depfile"
602
 
  tr ' ' "$nl" < "$tmpdepfile" | \
603
 
## Some versions of the HPUX 10.20 sed can't process this invocation
604
 
## correctly.  Breaking it into two sed invocations is a workaround.
605
 
    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"
606
615
  rm -f "$tmpdepfile"
607
616
  ;;
608
617
 
655
664
  # makedepend may prepend the VPATH from the source file name to the object.
656
665
  # No need to regex-escape $object, excess matching of '.' is harmless.
657
666
  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
658
 
  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
659
 
## Some versions of the HPUX 10.20 sed can't process this invocation
660
 
## correctly.  Breaking it into two sed invocations is a workaround.
661
 
    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"
662
673
  rm -f "$tmpdepfile" "$tmpdepfile".bak
663
674
  ;;
664
675
 
694
705
    esac
695
706
  done
696
707
 
697
 
  "$@" -E |
698
 
    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
699
 
       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
700
 
    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"
701
712
  rm -f "$depfile"
702
713
  echo "$object : \\" > "$depfile"
703
714
  cat < "$tmpdepfile" >> "$depfile"
729
740
      shift
730
741
      ;;
731
742
    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
732
 
        set fnord "$@"
733
 
        shift
734
 
        shift
735
 
        ;;
 
743
        set fnord "$@"
 
744
        shift
 
745
        shift
 
746
        ;;
736
747
    *)
737
 
        set fnord "$@" "$arg"
738
 
        shift
739
 
        shift
740
 
        ;;
 
748
        set fnord "$@" "$arg"
 
749
        shift
 
750
        shift
 
751
        ;;
741
752
    esac
742
753
  done
743
754
  "$@" -E 2>/dev/null |