Rename COPYING -> LICENSE.
[radsecproxy.git] / lib / build-aux / depcomp
1 #! /bin/sh
2 # depcomp - compile a program generating dependencies as side-effects
3
4 scriptversion=2009-04-28.21; # UTC
5
6 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7 # Software Foundation, Inc.
8
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)
12 # any later version.
13
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.
18
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write to the Free Software
21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 # 02110-1301, USA.
23
24 # As a special exception to the GNU General Public License, if you
25 # distribute this file as part of a program that contains a
26 # configuration script generated by Autoconf, you may include it under
27 # the same distribution terms that you use for the rest of that program.
28
29 # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30
31 case $1 in
32   '')
33      echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34      exit 1;
35      ;;
36   -h | --h*)
37     cat <<\EOF
38 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
39
40 Run PROGRAMS ARGS to compile a file, generating dependencies
41 as side-effects.
42
43 Environment variables:
44   depmode     Dependency tracking mode.
45   source      Source file read by `PROGRAMS ARGS'.
46   object      Object file output by `PROGRAMS ARGS'.
47   DEPDIR      directory where to store dependencies.
48   depfile     Dependency file to output.
49   tmpdepfile  Temporary file to use when outputing dependencies.
50   libtool     Whether libtool is used (yes/no).
51
52 Report bugs to <bug-automake@gnu.org>.
53 EOF
54     exit $?
55     ;;
56   -v | --v*)
57     echo "depcomp $scriptversion"
58     exit $?
59     ;;
60 esac
61
62 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
63   echo "depcomp: Variables source, object and depmode must be set" 1>&2
64   exit 1
65 fi
66
67 # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68 depfile=${depfile-`echo "$object" |
69   sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70 tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71
72 rm -f "$tmpdepfile"
73
74 # Some modes work just like other modes, but use different flags.  We
75 # parameterize here, but still list the modes in the big case below,
76 # to make depend.m4 easier to write.  Note that we *cannot* use a case
77 # here, because this file can only contain one case statement.
78 if test "$depmode" = hp; then
79   # HP compiler uses -M and no extra arg.
80   gccflag=-M
81   depmode=gcc
82 fi
83
84 if test "$depmode" = dashXmstdout; then
85    # This is just like dashmstdout with a different argument.
86    dashmflag=-xM
87    depmode=dashmstdout
88 fi
89
90 cygpath_u="cygpath -u -f -"
91 if test "$depmode" = msvcmsys; then
92    # This is just like msvisualcpp but w/o cygpath translation.
93    # Just convert the backslash-escaped backslashes to single forward
94    # slashes to satisfy depend.m4
95    cygpath_u="sed s,\\\\\\\\,/,g"
96    depmode=msvisualcpp
97 fi
98
99 case "$depmode" in
100 gcc3)
101 ## gcc 3 implements dependency tracking that does exactly what
102 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
103 ## it if -MD -MP comes after the -MF stuff.  Hmm.
104 ## Unfortunately, FreeBSD c89 acceptance of flags depends upon
105 ## the command line argument order; so add the flags where they
106 ## appear in depend2.am.  Note that the slowdown incurred here
107 ## affects only configure: in makefiles, %FASTDEP% shortcuts this.
108   for arg
109   do
110     case $arg in
111     -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
112     *)  set fnord "$@" "$arg" ;;
113     esac
114     shift # fnord
115     shift # $arg
116   done
117   "$@"
118   stat=$?
119   if test $stat -eq 0; then :
120   else
121     rm -f "$tmpdepfile"
122     exit $stat
123   fi
124   mv "$tmpdepfile" "$depfile"
125   ;;
126
127 gcc)
128 ## There are various ways to get dependency output from gcc.  Here's
129 ## why we pick this rather obscure method:
130 ## - Don't want to use -MD because we'd like the dependencies to end
131 ##   up in a subdir.  Having to rename by hand is ugly.
132 ##   (We might end up doing this anyway to support other compilers.)
133 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
134 ##   -MM, not -M (despite what the docs say).
135 ## - Using -M directly means running the compiler twice (even worse
136 ##   than renaming).
137   if test -z "$gccflag"; then
138     gccflag=-MD,
139   fi
140   "$@" -Wp,"$gccflag$tmpdepfile"
141   stat=$?
142   if test $stat -eq 0; then :
143   else
144     rm -f "$tmpdepfile"
145     exit $stat
146   fi
147   rm -f "$depfile"
148   echo "$object : \\" > "$depfile"
149   alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
150 ## The second -e expression handles DOS-style file names with drive letters.
151   sed -e 's/^[^:]*: / /' \
152       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
153 ## This next piece of magic avoids the `deleted header file' problem.
154 ## The problem is that when a header file which appears in a .P file
155 ## is deleted, the dependency causes make to die (because there is
156 ## typically no way to rebuild the header).  We avoid this by adding
157 ## dummy dependencies for each header file.  Too bad gcc doesn't do
158 ## this for us directly.
159   tr ' ' '
160 ' < "$tmpdepfile" |
161 ## Some versions of gcc put a space before the `:'.  On the theory
162 ## that the space means something, we add a space to the output as
163 ## well.
164 ## Some versions of the HPUX 10.20 sed can't process this invocation
165 ## correctly.  Breaking it into two sed invocations is a workaround.
166     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
167   rm -f "$tmpdepfile"
168   ;;
169
170 hp)
171   # This case exists only to let depend.m4 do its work.  It works by
172   # looking at the text of this script.  This case will never be run,
173   # since it is checked for above.
174   exit 1
175   ;;
176
177 sgi)
178   if test "$libtool" = yes; then
179     "$@" "-Wp,-MDupdate,$tmpdepfile"
180   else
181     "$@" -MDupdate "$tmpdepfile"
182   fi
183   stat=$?
184   if test $stat -eq 0; then :
185   else
186     rm -f "$tmpdepfile"
187     exit $stat
188   fi
189   rm -f "$depfile"
190
191   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
192     echo "$object : \\" > "$depfile"
193
194     # Clip off the initial element (the dependent).  Don't try to be
195     # clever and replace this with sed code, as IRIX sed won't handle
196     # lines with more than a fixed number of characters (4096 in
197     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
198     # the IRIX cc adds comments like `#:fec' to the end of the
199     # dependency line.
200     tr ' ' '
201 ' < "$tmpdepfile" \
202     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
203     tr '
204 ' ' ' >> "$depfile"
205     echo >> "$depfile"
206
207     # The second pass generates a dummy entry for each header file.
208     tr ' ' '
209 ' < "$tmpdepfile" \
210    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
211    >> "$depfile"
212   else
213     # The sourcefile does not contain any dependencies, so just
214     # store a dummy comment line, to avoid errors with the Makefile
215     # "include basename.Plo" scheme.
216     echo "#dummy" > "$depfile"
217   fi
218   rm -f "$tmpdepfile"
219   ;;
220
221 aix)
222   # The C for AIX Compiler uses -M and outputs the dependencies
223   # in a .u file.  In older versions, this file always lives in the
224   # current directory.  Also, the AIX compiler puts `$object:' at the
225   # start of each line; $object doesn't have directory information.
226   # Version 6 uses the directory in both cases.
227   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
228   test "x$dir" = "x$object" && dir=
229   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
230   if test "$libtool" = yes; then
231     tmpdepfile1=$dir$base.u
232     tmpdepfile2=$base.u
233     tmpdepfile3=$dir.libs/$base.u
234     "$@" -Wc,-M
235   else
236     tmpdepfile1=$dir$base.u
237     tmpdepfile2=$dir$base.u
238     tmpdepfile3=$dir$base.u
239     "$@" -M
240   fi
241   stat=$?
242
243   if test $stat -eq 0; then :
244   else
245     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
246     exit $stat
247   fi
248
249   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
250   do
251     test -f "$tmpdepfile" && break
252   done
253   if test -f "$tmpdepfile"; then
254     # Each line is of the form `foo.o: dependent.h'.
255     # Do two passes, one to just change these to
256     # `$object: dependent.h' and one to simply `dependent.h:'.
257     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
258     # That's a tab and a space in the [].
259     sed -e 's,^.*\.[a-z]*:[      ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
260   else
261     # The sourcefile does not contain any dependencies, so just
262     # store a dummy comment line, to avoid errors with the Makefile
263     # "include basename.Plo" scheme.
264     echo "#dummy" > "$depfile"
265   fi
266   rm -f "$tmpdepfile"
267   ;;
268
269 icc)
270   # Intel's C compiler understands `-MD -MF file'.  However on
271   #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
272   # ICC 7.0 will fill foo.d with something like
273   #    foo.o: sub/foo.c
274   #    foo.o: sub/foo.h
275   # which is wrong.  We want:
276   #    sub/foo.o: sub/foo.c
277   #    sub/foo.o: sub/foo.h
278   #    sub/foo.c:
279   #    sub/foo.h:
280   # ICC 7.1 will output
281   #    foo.o: sub/foo.c sub/foo.h
282   # and will wrap long lines using \ :
283   #    foo.o: sub/foo.c ... \
284   #     sub/foo.h ... \
285   #     ...
286
287   "$@" -MD -MF "$tmpdepfile"
288   stat=$?
289   if test $stat -eq 0; then :
290   else
291     rm -f "$tmpdepfile"
292     exit $stat
293   fi
294   rm -f "$depfile"
295   # Each line is of the form `foo.o: dependent.h',
296   # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
297   # Do two passes, one to just change these to
298   # `$object: dependent.h' and one to simply `dependent.h:'.
299   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
300   # Some versions of the HPUX 10.20 sed can't process this invocation
301   # correctly.  Breaking it into two sed invocations is a workaround.
302   sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
303     sed -e 's/$/ :/' >> "$depfile"
304   rm -f "$tmpdepfile"
305   ;;
306
307 hp2)
308   # The "hp" stanza above does not work with aCC (C++) and HP's ia64
309   # compilers, which have integrated preprocessors.  The correct option
310   # to use with these is +Maked; it writes dependencies to a file named
311   # 'foo.d', which lands next to the object file, wherever that
312   # happens to be.
313   # Much of this is similar to the tru64 case; see comments there.
314   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
315   test "x$dir" = "x$object" && dir=
316   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
317   if test "$libtool" = yes; then
318     tmpdepfile1=$dir$base.d
319     tmpdepfile2=$dir.libs/$base.d
320     "$@" -Wc,+Maked
321   else
322     tmpdepfile1=$dir$base.d
323     tmpdepfile2=$dir$base.d
324     "$@" +Maked
325   fi
326   stat=$?
327   if test $stat -eq 0; then :
328   else
329      rm -f "$tmpdepfile1" "$tmpdepfile2"
330      exit $stat
331   fi
332
333   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
334   do
335     test -f "$tmpdepfile" && break
336   done
337   if test -f "$tmpdepfile"; then
338     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
339     # Add `dependent.h:' lines.
340     sed -ne '2,${
341                s/^ *//
342                s/ \\*$//
343                s/$/:/
344                p
345              }' "$tmpdepfile" >> "$depfile"
346   else
347     echo "#dummy" > "$depfile"
348   fi
349   rm -f "$tmpdepfile" "$tmpdepfile2"
350   ;;
351
352 tru64)
353    # The Tru64 compiler uses -MD to generate dependencies as a side
354    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
355    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
356    # dependencies in `foo.d' instead, so we check for that too.
357    # Subdirectories are respected.
358    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
359    test "x$dir" = "x$object" && dir=
360    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
361
362    if test "$libtool" = yes; then
363       # With Tru64 cc, shared objects can also be used to make a
364       # static library.  This mechanism is used in libtool 1.4 series to
365       # handle both shared and static libraries in a single compilation.
366       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
367       #
368       # With libtool 1.5 this exception was removed, and libtool now
369       # generates 2 separate objects for the 2 libraries.  These two
370       # compilations output dependencies in $dir.libs/$base.o.d and
371       # in $dir$base.o.d.  We have to check for both files, because
372       # one of the two compilations can be disabled.  We should prefer
373       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
374       # automatically cleaned when .libs/ is deleted, while ignoring
375       # the former would cause a distcleancheck panic.
376       tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
377       tmpdepfile2=$dir$base.o.d          # libtool 1.5
378       tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
379       tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
380       "$@" -Wc,-MD
381    else
382       tmpdepfile1=$dir$base.o.d
383       tmpdepfile2=$dir$base.d
384       tmpdepfile3=$dir$base.d
385       tmpdepfile4=$dir$base.d
386       "$@" -MD
387    fi
388
389    stat=$?
390    if test $stat -eq 0; then :
391    else
392       rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
393       exit $stat
394    fi
395
396    for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
397    do
398      test -f "$tmpdepfile" && break
399    done
400    if test -f "$tmpdepfile"; then
401       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
402       # That's a tab and a space in the [].
403       sed -e 's,^.*\.[a-z]*:[    ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
404    else
405       echo "#dummy" > "$depfile"
406    fi
407    rm -f "$tmpdepfile"
408    ;;
409
410 #nosideeffect)
411   # This comment above is used by automake to tell side-effect
412   # dependency tracking mechanisms from slower ones.
413
414 dashmstdout)
415   # Important note: in order to support this mode, a compiler *must*
416   # always write the preprocessed file to stdout, regardless of -o.
417   "$@" || exit $?
418
419   # Remove the call to Libtool.
420   if test "$libtool" = yes; then
421     while test "X$1" != 'X--mode=compile'; do
422       shift
423     done
424     shift
425   fi
426
427   # Remove `-o $object'.
428   IFS=" "
429   for arg
430   do
431     case $arg in
432     -o)
433       shift
434       ;;
435     $object)
436       shift
437       ;;
438     *)
439       set fnord "$@" "$arg"
440       shift # fnord
441       shift # $arg
442       ;;
443     esac
444   done
445
446   test -z "$dashmflag" && dashmflag=-M
447   # Require at least two characters before searching for `:'
448   # in the target name.  This is to cope with DOS-style filenames:
449   # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
450   "$@" $dashmflag |
451     sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
452   rm -f "$depfile"
453   cat < "$tmpdepfile" > "$depfile"
454   tr ' ' '
455 ' < "$tmpdepfile" | \
456 ## Some versions of the HPUX 10.20 sed can't process this invocation
457 ## correctly.  Breaking it into two sed invocations is a workaround.
458     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
459   rm -f "$tmpdepfile"
460   ;;
461
462 dashXmstdout)
463   # This case only exists to satisfy depend.m4.  It is never actually
464   # run, as this mode is specially recognized in the preamble.
465   exit 1
466   ;;
467
468 makedepend)
469   "$@" || exit $?
470   # Remove any Libtool call
471   if test "$libtool" = yes; then
472     while test "X$1" != 'X--mode=compile'; do
473       shift
474     done
475     shift
476   fi
477   # X makedepend
478   shift
479   cleared=no eat=no
480   for arg
481   do
482     case $cleared in
483     no)
484       set ""; shift
485       cleared=yes ;;
486     esac
487     if test $eat = yes; then
488       eat=no
489       continue
490     fi
491     case "$arg" in
492     -D*|-I*)
493       set fnord "$@" "$arg"; shift ;;
494     # Strip any option that makedepend may not understand.  Remove
495     # the object too, otherwise makedepend will parse it as a source file.
496     -arch)
497       eat=yes ;;
498     -*|$object)
499       ;;
500     *)
501       set fnord "$@" "$arg"; shift ;;
502     esac
503   done
504   obj_suffix=`echo "$object" | sed 's/^.*\././'`
505   touch "$tmpdepfile"
506   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
507   rm -f "$depfile"
508   cat < "$tmpdepfile" > "$depfile"
509   sed '1,2d' "$tmpdepfile" | tr ' ' '
510 ' | \
511 ## Some versions of the HPUX 10.20 sed can't process this invocation
512 ## correctly.  Breaking it into two sed invocations is a workaround.
513     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
514   rm -f "$tmpdepfile" "$tmpdepfile".bak
515   ;;
516
517 cpp)
518   # Important note: in order to support this mode, a compiler *must*
519   # always write the preprocessed file to stdout.
520   "$@" || exit $?
521
522   # Remove the call to Libtool.
523   if test "$libtool" = yes; then
524     while test "X$1" != 'X--mode=compile'; do
525       shift
526     done
527     shift
528   fi
529
530   # Remove `-o $object'.
531   IFS=" "
532   for arg
533   do
534     case $arg in
535     -o)
536       shift
537       ;;
538     $object)
539       shift
540       ;;
541     *)
542       set fnord "$@" "$arg"
543       shift # fnord
544       shift # $arg
545       ;;
546     esac
547   done
548
549   "$@" -E |
550     sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
551        -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
552     sed '$ s: \\$::' > "$tmpdepfile"
553   rm -f "$depfile"
554   echo "$object : \\" > "$depfile"
555   cat < "$tmpdepfile" >> "$depfile"
556   sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
557   rm -f "$tmpdepfile"
558   ;;
559
560 msvisualcpp)
561   # Important note: in order to support this mode, a compiler *must*
562   # always write the preprocessed file to stdout.
563   "$@" || exit $?
564
565   # Remove the call to Libtool.
566   if test "$libtool" = yes; then
567     while test "X$1" != 'X--mode=compile'; do
568       shift
569     done
570     shift
571   fi
572
573   IFS=" "
574   for arg
575   do
576     case "$arg" in
577     -o)
578       shift
579       ;;
580     $object)
581       shift
582       ;;
583     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
584         set fnord "$@"
585         shift
586         shift
587         ;;
588     *)
589         set fnord "$@" "$arg"
590         shift
591         shift
592         ;;
593     esac
594   done
595   "$@" -E 2>/dev/null |
596   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
597   rm -f "$depfile"
598   echo "$object : \\" > "$depfile"
599   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::      \1 \\:p' >> "$depfile"
600   echo "        " >> "$depfile"
601   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
602   rm -f "$tmpdepfile"
603   ;;
604
605 msvcmsys)
606   # This case exists only to let depend.m4 do its work.  It works by
607   # looking at the text of this script.  This case will never be run,
608   # since it is checked for above.
609   exit 1
610   ;;
611
612 none)
613   exec "$@"
614   ;;
615
616 *)
617   echo "Unknown depmode $depmode" 1>&2
618   exit 1
619   ;;
620 esac
621
622 exit 0
623
624 # Local Variables:
625 # mode: shell-script
626 # sh-indentation: 2
627 # eval: (add-hook 'write-file-hooks 'time-stamp)
628 # time-stamp-start: "scriptversion="
629 # time-stamp-format: "%:y-%02m-%02d.%02H"
630 # time-stamp-time-zone: "UTC"
631 # time-stamp-end: "; # UTC"
632 # End: