2
 
# depcomp - compile a program generating dependencies as side-effects
 
4
 
scriptversion=2009-04-28.21; # UTC
 
6
 
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
 
7
 
# Software Foundation, Inc.
 
9
 
# This program is free software; you can redistribute it and/or modify
 
10
 
# it under the terms of the GNU General Public License as published by
 
11
 
# the Free Software Foundation; either version 2, or (at your option)
 
14
 
# This program is distributed in the hope that it will be useful,
 
15
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
 
# GNU General Public License for more details.
 
19
 
# You should have received a copy of the GNU General Public License
 
20
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
22
 
# As a special exception to the GNU General Public License, if you
 
23
 
# distribute this file as part of a program that contains a
 
24
 
# configuration script generated by Autoconf, you may include it under
 
25
 
# the same distribution terms that you use for the rest of that program.
 
27
 
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
 
31
 
     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
 
36
 
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
 
38
 
Run PROGRAMS ARGS to compile a file, generating dependencies
 
41
 
Environment variables:
 
42
 
  depmode     Dependency tracking mode.
 
43
 
  source      Source file read by `PROGRAMS ARGS'.
 
44
 
  object      Object file output by `PROGRAMS ARGS'.
 
45
 
  DEPDIR      directory where to store dependencies.
 
46
 
  depfile     Dependency file to output.
 
47
 
  tmpdepfile  Temporary file to use when outputing dependencies.
 
48
 
  libtool     Whether libtool is used (yes/no).
 
50
 
Report bugs to <bug-automake@gnu.org>.
 
55
 
    echo "depcomp $scriptversion"
 
60
 
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
 
61
 
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
 
65
 
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
 
66
 
depfile=${depfile-`echo "$object" |
 
67
 
  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
 
68
 
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
72
 
# Some modes work just like other modes, but use different flags.  We
 
73
 
# parameterize here, but still list the modes in the big case below,
 
74
 
# to make depend.m4 easier to write.  Note that we *cannot* use a case
 
75
 
# here, because this file can only contain one case statement.
 
76
 
if test "$depmode" = hp; then
 
77
 
  # HP compiler uses -M and no extra arg.
 
82
 
if test "$depmode" = dashXmstdout; then
 
83
 
   # This is just like dashmstdout with a different argument.
 
88
 
cygpath_u="cygpath -u -f -"
 
89
 
if test "$depmode" = msvcmsys; then
 
90
 
   # This is just like msvisualcpp but w/o cygpath translation.
 
91
 
   # Just convert the backslash-escaped backslashes to single forward
 
92
 
   # slashes to satisfy depend.m4
 
93
 
   cygpath_u="sed s,\\\\\\\\,/,g"
 
99
 
## gcc 3 implements dependency tracking that does exactly what
 
100
 
## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
 
101
 
## it if -MD -MP comes after the -MF stuff.  Hmm.
 
102
 
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
 
103
 
## the command line argument order; so add the flags where they
 
104
 
## appear in depend2.am.  Note that the slowdown incurred here
 
105
 
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
 
109
 
    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
 
110
 
    *)  set fnord "$@" "$arg" ;;
 
117
 
  if test $stat -eq 0; then :
 
122
 
  mv "$tmpdepfile" "$depfile"
 
126
 
## There are various ways to get dependency output from gcc.  Here's
 
127
 
## why we pick this rather obscure method:
 
128
 
## - Don't want to use -MD because we'd like the dependencies to end
 
129
 
##   up in a subdir.  Having to rename by hand is ugly.
 
130
 
##   (We might end up doing this anyway to support other compilers.)
 
131
 
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
 
132
 
##   -MM, not -M (despite what the docs say).
 
133
 
## - Using -M directly means running the compiler twice (even worse
 
135
 
  if test -z "$gccflag"; then
 
138
 
  "$@" -Wp,"$gccflag$tmpdepfile"
 
140
 
  if test $stat -eq 0; then :
 
146
 
  echo "$object : \\" > "$depfile"
 
147
 
  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
 
148
 
## The second -e expression handles DOS-style file names with drive letters.
 
149
 
  sed -e 's/^[^:]*: / /' \
 
150
 
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
 
151
 
## This next piece of magic avoids the `deleted header file' problem.
 
152
 
## The problem is that when a header file which appears in a .P file
 
153
 
## is deleted, the dependency causes make to die (because there is
 
154
 
## typically no way to rebuild the header).  We avoid this by adding
 
155
 
## dummy dependencies for each header file.  Too bad gcc doesn't do
 
156
 
## this for us directly.
 
159
 
## Some versions of gcc put a space before the `:'.  On the theory
 
160
 
## that the space means something, we add a space to the output as
 
162
 
## Some versions of the HPUX 10.20 sed can't process this invocation
 
163
 
## correctly.  Breaking it into two sed invocations is a workaround.
 
164
 
    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
 
169
 
  # This case exists only to let depend.m4 do its work.  It works by
 
170
 
  # looking at the text of this script.  This case will never be run,
 
171
 
  # since it is checked for above.
 
176
 
  if test "$libtool" = yes; then
 
177
 
    "$@" "-Wp,-MDupdate,$tmpdepfile"
 
179
 
    "$@" -MDupdate "$tmpdepfile"
 
182
 
  if test $stat -eq 0; then :
 
189
 
  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
 
190
 
    echo "$object : \\" > "$depfile"
 
192
 
    # Clip off the initial element (the dependent).  Don't try to be
 
193
 
    # clever and replace this with sed code, as IRIX sed won't handle
 
194
 
    # lines with more than a fixed number of characters (4096 in
 
195
 
    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
 
196
 
    # the IRIX cc adds comments like `#:fec' to the end of the
 
200
 
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
 
205
 
    # The second pass generates a dummy entry for each header file.
 
208
 
   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
 
211
 
    # The sourcefile does not contain any dependencies, so just
 
212
 
    # store a dummy comment line, to avoid errors with the Makefile
 
213
 
    # "include basename.Plo" scheme.
 
214
 
    echo "#dummy" > "$depfile"
 
220
 
  # The C for AIX Compiler uses -M and outputs the dependencies
 
221
 
  # in a .u file.  In older versions, this file always lives in the
 
222
 
  # current directory.  Also, the AIX compiler puts `$object:' at the
 
223
 
  # start of each line; $object doesn't have directory information.
 
224
 
  # Version 6 uses the directory in both cases.
 
225
 
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
 
226
 
  test "x$dir" = "x$object" && dir=
 
227
 
  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
 
228
 
  if test "$libtool" = yes; then
 
229
 
    tmpdepfile1=$dir$base.u
 
231
 
    tmpdepfile3=$dir.libs/$base.u
 
234
 
    tmpdepfile1=$dir$base.u
 
235
 
    tmpdepfile2=$dir$base.u
 
236
 
    tmpdepfile3=$dir$base.u
 
241
 
  if test $stat -eq 0; then :
 
243
 
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
 
247
 
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
 
249
 
    test -f "$tmpdepfile" && break
 
251
 
  if test -f "$tmpdepfile"; then
 
252
 
    # Each line is of the form `foo.o: dependent.h'.
 
253
 
    # Do two passes, one to just change these to
 
254
 
    # `$object: dependent.h' and one to simply `dependent.h:'.
 
255
 
    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
 
256
 
    # That's a tab and a space in the [].
 
257
 
    sed -e 's,^.*\.[a-z]*:[      ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
 
259
 
    # The sourcefile does not contain any dependencies, so just
 
260
 
    # store a dummy comment line, to avoid errors with the Makefile
 
261
 
    # "include basename.Plo" scheme.
 
262
 
    echo "#dummy" > "$depfile"
 
268
 
  # Intel's C compiler understands `-MD -MF file'.  However on
 
269
 
  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
 
270
 
  # ICC 7.0 will fill foo.d with something like
 
273
 
  # which is wrong.  We want:
 
274
 
  #    sub/foo.o: sub/foo.c
 
275
 
  #    sub/foo.o: sub/foo.h
 
278
 
  # ICC 7.1 will output
 
279
 
  #    foo.o: sub/foo.c sub/foo.h
 
280
 
  # and will wrap long lines using \ :
 
281
 
  #    foo.o: sub/foo.c ... \
 
285
 
  "$@" -MD -MF "$tmpdepfile"
 
287
 
  if test $stat -eq 0; then :
 
293
 
  # Each line is of the form `foo.o: dependent.h',
 
294
 
  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
 
295
 
  # Do two passes, one to just change these to
 
296
 
  # `$object: dependent.h' and one to simply `dependent.h:'.
 
297
 
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
 
298
 
  # Some versions of the HPUX 10.20 sed can't process this invocation
 
299
 
  # correctly.  Breaking it into two sed invocations is a workaround.
 
300
 
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
 
301
 
    sed -e 's/$/ :/' >> "$depfile"
 
306
 
  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
 
307
 
  # compilers, which have integrated preprocessors.  The correct option
 
308
 
  # to use with these is +Maked; it writes dependencies to a file named
 
309
 
  # 'foo.d', which lands next to the object file, wherever that
 
311
 
  # Much of this is similar to the tru64 case; see comments there.
 
312
 
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
 
313
 
  test "x$dir" = "x$object" && dir=
 
314
 
  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
 
315
 
  if test "$libtool" = yes; then
 
316
 
    tmpdepfile1=$dir$base.d
 
317
 
    tmpdepfile2=$dir.libs/$base.d
 
320
 
    tmpdepfile1=$dir$base.d
 
321
 
    tmpdepfile2=$dir$base.d
 
325
 
  if test $stat -eq 0; then :
 
327
 
     rm -f "$tmpdepfile1" "$tmpdepfile2"
 
331
 
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
 
333
 
    test -f "$tmpdepfile" && break
 
335
 
  if test -f "$tmpdepfile"; then
 
336
 
    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
 
337
 
    # Add `dependent.h:' lines.
 
343
 
             }' "$tmpdepfile" >> "$depfile"
 
345
 
    echo "#dummy" > "$depfile"
 
347
 
  rm -f "$tmpdepfile" "$tmpdepfile2"
 
351
 
   # The Tru64 compiler uses -MD to generate dependencies as a side
 
352
 
   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
 
353
 
   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
 
354
 
   # dependencies in `foo.d' instead, so we check for that too.
 
355
 
   # Subdirectories are respected.
 
356
 
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
 
357
 
   test "x$dir" = "x$object" && dir=
 
358
 
   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
 
360
 
   if test "$libtool" = yes; then
 
361
 
      # With Tru64 cc, shared objects can also be used to make a
 
362
 
      # static library.  This mechanism is used in libtool 1.4 series to
 
363
 
      # handle both shared and static libraries in a single compilation.
 
364
 
      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
 
366
 
      # With libtool 1.5 this exception was removed, and libtool now
 
367
 
      # generates 2 separate objects for the 2 libraries.  These two
 
368
 
      # compilations output dependencies in $dir.libs/$base.o.d and
 
369
 
      # in $dir$base.o.d.  We have to check for both files, because
 
370
 
      # one of the two compilations can be disabled.  We should prefer
 
371
 
      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
 
372
 
      # automatically cleaned when .libs/ is deleted, while ignoring
 
373
 
      # the former would cause a distcleancheck panic.
 
374
 
      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
 
375
 
      tmpdepfile2=$dir$base.o.d          # libtool 1.5
 
376
 
      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
 
377
 
      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
 
380
 
      tmpdepfile1=$dir$base.o.d
 
381
 
      tmpdepfile2=$dir$base.d
 
382
 
      tmpdepfile3=$dir$base.d
 
383
 
      tmpdepfile4=$dir$base.d
 
388
 
   if test $stat -eq 0; then :
 
390
 
      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
 
394
 
   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
 
396
 
     test -f "$tmpdepfile" && break
 
398
 
   if test -f "$tmpdepfile"; then
 
399
 
      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
 
400
 
      # That's a tab and a space in the [].
 
401
 
      sed -e 's,^.*\.[a-z]*:[    ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
 
403
 
      echo "#dummy" > "$depfile"
 
409
 
  # This comment above is used by automake to tell side-effect
 
410
 
  # dependency tracking mechanisms from slower ones.
 
413
 
  # Important note: in order to support this mode, a compiler *must*
 
414
 
  # always write the preprocessed file to stdout, regardless of -o.
 
417
 
  # Remove the call to Libtool.
 
418
 
  if test "$libtool" = yes; then
 
419
 
    while test "X$1" != 'X--mode=compile'; do
 
425
 
  # Remove `-o $object'.
 
437
 
      set fnord "$@" "$arg"
 
444
 
  test -z "$dashmflag" && dashmflag=-M
 
445
 
  # Require at least two characters before searching for `:'
 
446
 
  # in the target name.  This is to cope with DOS-style filenames:
 
447
 
  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
 
449
 
    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
 
451
 
  cat < "$tmpdepfile" > "$depfile"
 
453
 
' < "$tmpdepfile" | \
 
454
 
## Some versions of the HPUX 10.20 sed can't process this invocation
 
455
 
## correctly.  Breaking it into two sed invocations is a workaround.
 
456
 
    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
 
461
 
  # This case only exists to satisfy depend.m4.  It is never actually
 
462
 
  # run, as this mode is specially recognized in the preamble.
 
468
 
  # Remove any Libtool call
 
469
 
  if test "$libtool" = yes; then
 
470
 
    while test "X$1" != 'X--mode=compile'; do
 
485
 
    if test $eat = yes; then
 
491
 
      set fnord "$@" "$arg"; shift ;;
 
492
 
    # Strip any option that makedepend may not understand.  Remove
 
493
 
    # the object too, otherwise makedepend will parse it as a source file.
 
499
 
      set fnord "$@" "$arg"; shift ;;
 
502
 
  obj_suffix=`echo "$object" | sed 's/^.*\././'`
 
504
 
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
 
506
 
  cat < "$tmpdepfile" > "$depfile"
 
507
 
  sed '1,2d' "$tmpdepfile" | tr ' ' '
 
509
 
## Some versions of the HPUX 10.20 sed can't process this invocation
 
510
 
## correctly.  Breaking it into two sed invocations is a workaround.
 
511
 
    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
 
512
 
  rm -f "$tmpdepfile" "$tmpdepfile".bak
 
516
 
  # Important note: in order to support this mode, a compiler *must*
 
517
 
  # always write the preprocessed file to stdout.
 
520
 
  # Remove the call to Libtool.
 
521
 
  if test "$libtool" = yes; then
 
522
 
    while test "X$1" != 'X--mode=compile'; do
 
528
 
  # Remove `-o $object'.
 
540
 
      set fnord "$@" "$arg"
 
548
 
    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
 
549
 
       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
 
550
 
    sed '$ s: \\$::' > "$tmpdepfile"
 
552
 
  echo "$object : \\" > "$depfile"
 
553
 
  cat < "$tmpdepfile" >> "$depfile"
 
554
 
  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
 
559
 
  # Important note: in order to support this mode, a compiler *must*
 
560
 
  # always write the preprocessed file to stdout.
 
563
 
  # Remove the call to Libtool.
 
564
 
  if test "$libtool" = yes; then
 
565
 
    while test "X$1" != 'X--mode=compile'; do
 
581
 
    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
 
587
 
        set fnord "$@" "$arg"
 
593
 
  "$@" -E 2>/dev/null |
 
594
 
  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
 
596
 
  echo "$object : \\" > "$depfile"
 
597
 
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::      \1 \\:p' >> "$depfile"
 
598
 
  echo "        " >> "$depfile"
 
599
 
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
 
604
 
  # This case exists only to let depend.m4 do its work.  It works by
 
605
 
  # looking at the text of this script.  This case will never be run,
 
606
 
  # since it is checked for above.
 
615
 
  echo "Unknown depmode $depmode" 1>&2
 
625
 
# eval: (add-hook 'write-file-hooks 'time-stamp)
 
626
 
# time-stamp-start: "scriptversion="
 
627
 
# time-stamp-format: "%:y-%02m-%02d.%02H"
 
628
 
# time-stamp-time-zone: "UTC"
 
629
 
# time-stamp-end: "; # UTC"