Subversion Repositories DIN Is Noise

Rev

Rev 2010 | Rev 2096 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 - 1
#! /bin/sh
2
# depcomp - compile a program generating dependencies as side-effects
3
 
2010 jag 4
scriptversion=2018-03-07.03; # UTC
1 - 5
 
2013 jag 6
# Copyright (C) 1999-2020 Free Software Foundation, Inc.
1 - 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
2010 jag 19
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
1 - 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
23
# configuration script generated by Autoconf, you may include it under
24
# the same distribution terms that you use for the rest of that program.
25
 
26
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27
 
28
case $1 in
29
  '')
2005 jag 30
    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31
    exit 1;
32
    ;;
1 - 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.
2005 jag 42
  source      Source file read by 'PROGRAMS ARGS'.
43
  object      Object file output by 'PROGRAMS ARGS'.
1 - 44
  DEPDIR      directory where to store dependencies.
45
  depfile     Dependency file to output.
2005 jag 46
  tmpdepfile  Temporary file to use when outputting dependencies.
1 - 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
 
2005 jag 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
 
1 - 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
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
 
2005 jag 131
# Avoid interferences from the environment.
132
gccflag= dashmflag=
133
 
1 - 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
137
# here, because this file can only contain one case statement.
138
if test "$depmode" = hp; then
139
  # HP compiler uses -M and no extra arg.
140
  gccflag=-M
141
  depmode=gcc
142
fi
143
 
144
if test "$depmode" = dashXmstdout; then
2005 jag 145
  # This is just like dashmstdout with a different argument.
146
  dashmflag=-xM
147
  depmode=dashmstdout
1 - 148
fi
149
 
150
cygpath_u="cygpath -u -f -"
151
if test "$depmode" = msvcmsys; then
2005 jag 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
1 - 157
fi
158
 
2005 jag 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
 
1 - 173
case "$depmode" in
174
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
## 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=$?
2005 jag 193
  if test $stat -ne 0; then
1 - 194
    rm -f "$tmpdepfile"
195
    exit $stat
196
  fi
197
  mv "$tmpdepfile" "$depfile"
198
  ;;
199
 
200
gcc)
2005 jag 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).
1 - 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
2005 jag 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.
1 - 212
## - Using -M directly means running the compiler twice (even worse
213
##   than renaming).
214
  if test -z "$gccflag"; then
215
    gccflag=-MD,
216
  fi
217
  "$@" -Wp,"$gccflag$tmpdepfile"
218
  stat=$?
2005 jag 219
  if test $stat -ne 0; then
1 - 220
    rm -f "$tmpdepfile"
221
    exit $stat
222
  fi
223
  rm -f "$depfile"
224
  echo "$object : \\" > "$depfile"
2005 jag 225
  # The second -e expression handles DOS-style file names with drive
226
  # letters.
1 - 227
  sed -e 's/^[^:]*: / /' \
228
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
2005 jag 229
## This next piece of magic avoids the "deleted header file" problem.
1 - 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.
2005 jag 235
## Some versions of gcc put a space before the ':'.  On the theory
1 - 236
## that the space means something, we add a space to the output as
2005 jag 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.
1 - 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.
2005 jag 241
  tr ' ' "$nl" < "$tmpdepfile" \
242
    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243
    | sed -e 's/$/ :/' >> "$depfile"
1 - 244
  rm -f "$tmpdepfile"
245
  ;;
246
 
247
hp)
248
  # This case exists only to let depend.m4 do its work.  It works by
249
  # looking at the text of this script.  This case will never be run,
250
  # since it is checked for above.
251
  exit 1
252
  ;;
253
 
254
sgi)
255
  if test "$libtool" = yes; then
256
    "$@" "-Wp,-MDupdate,$tmpdepfile"
257
  else
258
    "$@" -MDupdate "$tmpdepfile"
259
  fi
260
  stat=$?
2005 jag 261
  if test $stat -ne 0; then
1 - 262
    rm -f "$tmpdepfile"
263
    exit $stat
264
  fi
265
  rm -f "$depfile"
266
 
267
  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268
    echo "$object : \\" > "$depfile"
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;
2005 jag 273
    # the IRIX cc adds comments like '#:fec' to the end of the
1 - 274
    # dependency line.
2005 jag 275
    tr ' ' "$nl" < "$tmpdepfile" \
276
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277
      | tr "$nl" ' ' >> "$depfile"
1 - 278
    echo >> "$depfile"
279
    # The second pass generates a dummy entry for each header file.
2005 jag 280
    tr ' ' "$nl" < "$tmpdepfile" \
281
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282
      >> "$depfile"
1 - 283
  else
2005 jag 284
    make_dummy_depfile
1 - 285
  fi
286
  rm -f "$tmpdepfile"
287
  ;;
288
 
2005 jag 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
 
1 - 296
aix)
297
  # The C for AIX Compiler uses -M and outputs the dependencies
298
  # in a .u file.  In older versions, this file always lives in the
2005 jag 299
  # current directory.  Also, the AIX compiler puts '$object:' at the
1 - 300
  # start of each line; $object doesn't have directory information.
301
  # Version 6 uses the directory in both cases.
2005 jag 302
  set_dir_from "$object"
303
  set_base_from "$object"
1 - 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=$?
2005 jag 316
  if test $stat -ne 0; then
1 - 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
2005 jag 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 -ne 0; then
346
    rm -f "$tmpdepfile"
347
    exit $stat
1 - 348
  fi
2005 jag 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"
1 - 356
  rm -f "$tmpdepfile"
357
  ;;
358
 
2005 jag 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
1 - 369
  #    foo.o: sub/foo.c sub/foo.h
2005 jag 370
  # and will wrap long lines using '\' :
1 - 371
  #    foo.o: sub/foo.c ... \
372
  #     sub/foo.h ... \
373
  #     ...
2005 jag 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
725 jag 379
 
2005 jag 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
1 - 419
    rm -f "$tmpdepfile"
420
    exit $stat
421
  fi
422
  rm -f "$depfile"
725 jag 423
  # Each line is of the form `foo.o: dependent.h',
424
  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
1 - 425
  # Do two passes, one to just change these to
725 jag 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.
2005 jag 430
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431
    | sed -e 's/$/ :/' >> "$depfile"
1 - 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.
2005 jag 442
  set_dir_from  "$object"
443
  set_base_from "$object"
1 - 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=$?
2005 jag 454
  if test $stat -ne 0; then
1 - 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
2005 jag 464
    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465
    # Add 'dependent.h:' lines.
1 - 466
    sed -ne '2,${
2005 jag 467
               s/^ *//
468
               s/ \\*$//
469
               s/$/:/
470
               p
471
             }' "$tmpdepfile" >> "$depfile"
1 - 472
  else
2005 jag 473
    make_dummy_depfile
1 - 474
  fi
475
  rm -f "$tmpdepfile" "$tmpdepfile2"
476
  ;;
477
 
478
tru64)
2005 jag 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"
1 - 486
 
2005 jag 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
1 - 505
 
2005 jag 506
  stat=$?
507
  if test $stat -ne 0; then
508
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509
    exit $stat
510
  fi
1 - 511
 
2005 jag 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
  ;;
1 - 519
 
2005 jag 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
 
1 - 566
#nosideeffect)
567
  # This comment above is used by automake to tell side-effect
568
  # dependency tracking mechanisms from slower ones.
569
 
570
dashmstdout)
571
  # Important note: in order to support this mode, a compiler *must*
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 "X$1" != 'X--mode=compile'; do
578
      shift
579
    done
580
    shift
581
  fi
582
 
2005 jag 583
  # Remove '-o $object'.
1 - 584
  IFS=" "
585
  for arg
586
  do
587
    case $arg in
588
    -o)
589
      shift
590
      ;;
591
    $object)
592
      shift
593
      ;;
594
    *)
595
      set fnord "$@" "$arg"
596
      shift # fnord
597
      shift # $arg
598
      ;;
599
    esac
600
  done
601
 
602
  test -z "$dashmflag" && dashmflag=-M
2005 jag 603
  # Require at least two characters before searching for ':'
1 - 604
  # in the target name.  This is to cope with DOS-style filenames:
2005 jag 605
  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
1 - 606
  "$@" $dashmflag |
2005 jag 607
    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
1 - 608
  rm -f "$depfile"
609
  cat < "$tmpdepfile" > "$depfile"
2005 jag 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"
1 - 615
  rm -f "$tmpdepfile"
616
  ;;
617
 
618
dashXmstdout)
619
  # This case only exists to satisfy depend.m4.  It is never actually
620
  # run, as this mode is specially recognized in the preamble.
621
  exit 1
622
  ;;
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 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
    # 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/^.*\././'`
661
  touch "$tmpdepfile"
662
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663
  rm -f "$depfile"
2005 jag 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"
1 - 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 preprocessed file to stdout.
679
  "$@" || exit $?
680
 
681
  # Remove the call to Libtool.
682
  if test "$libtool" = yes; then
683
    while test "X$1" != 'X--mode=compile'; do
684
      shift
685
    done
686
    shift
687
  fi
688
 
2005 jag 689
  # Remove '-o $object'.
1 - 690
  IFS=" "
691
  for arg
692
  do
693
    case $arg in
694
    -o)
695
      shift
696
      ;;
697
    $object)
698
      shift
699
      ;;
700
    *)
701
      set fnord "$@" "$arg"
702
      shift # fnord
703
      shift # $arg
704
      ;;
705
    esac
706
  done
707
 
2005 jag 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"
1 - 712
  rm -f "$depfile"
713
  echo "$object : \\" > "$depfile"
714
  cat < "$tmpdepfile" >> "$depfile"
715
  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716
  rm -f "$tmpdepfile"
717
  ;;
718
 
719
msvisualcpp)
720
  # Important note: in order to support this mode, a compiler *must*
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")
2005 jag 743
        set fnord "$@"
744
        shift
745
        shift
746
        ;;
1 - 747
    *)
2005 jag 748
        set fnord "$@" "$arg"
749
        shift
750
        shift
751
        ;;
1 - 752
    esac
753
  done
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"
2005 jag 758
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759
  echo "$tab" >> "$depfile"
1 - 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
  ;;
774
 
775
*)
776
  echo "Unknown depmode $depmode" 1>&2
777
  exit 1
778
  ;;
779
esac
780
 
781
exit 0
782
 
783
# Local Variables:
784
# mode: shell-script
785
# sh-indentation: 2
2010 jag 786
# eval: (add-hook 'before-save-hook 'time-stamp)
1 - 787
# time-stamp-start: "scriptversion="
788
# time-stamp-format: "%:y-%02m-%02d.%02H"
2005 jag 789
# time-stamp-time-zone: "UTC0"
1 - 790
# time-stamp-end: "; # UTC"
791
# End: