depcomp revision d6c0b56e
1d6c0b56eSmrg#! /bin/sh
2d6c0b56eSmrg# depcomp - compile a program generating dependencies as side-effects
3d6c0b56eSmrg
4d6c0b56eSmrgscriptversion=2013-05-30.07; # UTC
5d6c0b56eSmrg
6d6c0b56eSmrg# Copyright (C) 1999-2014 Free Software Foundation, Inc.
7d6c0b56eSmrg
8d6c0b56eSmrg# This program is free software; you can redistribute it and/or modify
9d6c0b56eSmrg# it under the terms of the GNU General Public License as published by
10d6c0b56eSmrg# the Free Software Foundation; either version 2, or (at your option)
11d6c0b56eSmrg# any later version.
12d6c0b56eSmrg
13d6c0b56eSmrg# This program is distributed in the hope that it will be useful,
14d6c0b56eSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
15d6c0b56eSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16d6c0b56eSmrg# GNU General Public License for more details.
17d6c0b56eSmrg
18d6c0b56eSmrg# You should have received a copy of the GNU General Public License
19d6c0b56eSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20d6c0b56eSmrg
21d6c0b56eSmrg# As a special exception to the GNU General Public License, if you
22d6c0b56eSmrg# distribute this file as part of a program that contains a
23d6c0b56eSmrg# configuration script generated by Autoconf, you may include it under
24d6c0b56eSmrg# the same distribution terms that you use for the rest of that program.
25d6c0b56eSmrg
26d6c0b56eSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27d6c0b56eSmrg
28d6c0b56eSmrgcase $1 in
29d6c0b56eSmrg  '')
30d6c0b56eSmrg    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
31d6c0b56eSmrg    exit 1;
32d6c0b56eSmrg    ;;
33d6c0b56eSmrg  -h | --h*)
34d6c0b56eSmrg    cat <<\EOF
35d6c0b56eSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
36d6c0b56eSmrg
37d6c0b56eSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
38d6c0b56eSmrgas side-effects.
39d6c0b56eSmrg
40d6c0b56eSmrgEnvironment variables:
41d6c0b56eSmrg  depmode     Dependency tracking mode.
42d6c0b56eSmrg  source      Source file read by 'PROGRAMS ARGS'.
43d6c0b56eSmrg  object      Object file output by 'PROGRAMS ARGS'.
44d6c0b56eSmrg  DEPDIR      directory where to store dependencies.
45d6c0b56eSmrg  depfile     Dependency file to output.
46d6c0b56eSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
47d6c0b56eSmrg  libtool     Whether libtool is used (yes/no).
48d6c0b56eSmrg
49d6c0b56eSmrgReport bugs to <bug-automake@gnu.org>.
50d6c0b56eSmrgEOF
51d6c0b56eSmrg    exit $?
52d6c0b56eSmrg    ;;
53d6c0b56eSmrg  -v | --v*)
54d6c0b56eSmrg    echo "depcomp $scriptversion"
55d6c0b56eSmrg    exit $?
56d6c0b56eSmrg    ;;
57d6c0b56eSmrgesac
58d6c0b56eSmrg
59d6c0b56eSmrg# Get the directory component of the given path, and save it in the
60d6c0b56eSmrg# global variables '$dir'.  Note that this directory component will
61d6c0b56eSmrg# be either empty or ending with a '/' character.  This is deliberate.
62d6c0b56eSmrgset_dir_from ()
63d6c0b56eSmrg{
64d6c0b56eSmrg  case $1 in
65d6c0b56eSmrg    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
66d6c0b56eSmrg      *) dir=;;
67d6c0b56eSmrg  esac
68d6c0b56eSmrg}
69d6c0b56eSmrg
70d6c0b56eSmrg# Get the suffix-stripped basename of the given path, and save it the
71d6c0b56eSmrg# global variable '$base'.
72d6c0b56eSmrgset_base_from ()
73d6c0b56eSmrg{
74d6c0b56eSmrg  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
75d6c0b56eSmrg}
76d6c0b56eSmrg
77d6c0b56eSmrg# If no dependency file was actually created by the compiler invocation,
78d6c0b56eSmrg# we still have to create a dummy depfile, to avoid errors with the
79d6c0b56eSmrg# Makefile "include basename.Plo" scheme.
80d6c0b56eSmrgmake_dummy_depfile ()
81d6c0b56eSmrg{
82d6c0b56eSmrg  echo "#dummy" > "$depfile"
83d6c0b56eSmrg}
84d6c0b56eSmrg
85d6c0b56eSmrg# Factor out some common post-processing of the generated depfile.
86d6c0b56eSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set.
87d6c0b56eSmrgaix_post_process_depfile ()
88d6c0b56eSmrg{
89d6c0b56eSmrg  # If the compiler actually managed to produce a dependency file,
90d6c0b56eSmrg  # post-process it.
91d6c0b56eSmrg  if test -f "$tmpdepfile"; then
92d6c0b56eSmrg    # Each line is of the form 'foo.o: dependency.h'.
93d6c0b56eSmrg    # Do two passes, one to just change these to
94d6c0b56eSmrg    #   $object: dependency.h
95d6c0b56eSmrg    # and one to simply output
96d6c0b56eSmrg    #   dependency.h:
97d6c0b56eSmrg    # which is needed to avoid the deleted-header problem.
98d6c0b56eSmrg    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99d6c0b56eSmrg      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
100d6c0b56eSmrg    } > "$depfile"
101d6c0b56eSmrg    rm -f "$tmpdepfile"
102d6c0b56eSmrg  else
103d6c0b56eSmrg    make_dummy_depfile
104d6c0b56eSmrg  fi
105d6c0b56eSmrg}
106d6c0b56eSmrg
107d6c0b56eSmrg# A tabulation character.
108d6c0b56eSmrgtab='	'
109d6c0b56eSmrg# A newline character.
110d6c0b56eSmrgnl='
111d6c0b56eSmrg'
112d6c0b56eSmrg# Character ranges might be problematic outside the C locale.
113d6c0b56eSmrg# These definitions help.
114d6c0b56eSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115d6c0b56eSmrglower=abcdefghijklmnopqrstuvwxyz
116d6c0b56eSmrgdigits=0123456789
117d6c0b56eSmrgalpha=${upper}${lower}
118d6c0b56eSmrg
119d6c0b56eSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
120d6c0b56eSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
121d6c0b56eSmrg  exit 1
122d6c0b56eSmrgfi
123d6c0b56eSmrg
124d6c0b56eSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
125d6c0b56eSmrgdepfile=${depfile-`echo "$object" |
126d6c0b56eSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
127d6c0b56eSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
128d6c0b56eSmrg
129d6c0b56eSmrgrm -f "$tmpdepfile"
130d6c0b56eSmrg
131d6c0b56eSmrg# Avoid interferences from the environment.
132d6c0b56eSmrggccflag= dashmflag=
133d6c0b56eSmrg
134d6c0b56eSmrg# Some modes work just like other modes, but use different flags.  We
135d6c0b56eSmrg# parameterize here, but still list the modes in the big case below,
136d6c0b56eSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
137d6c0b56eSmrg# here, because this file can only contain one case statement.
138d6c0b56eSmrgif test "$depmode" = hp; then
139d6c0b56eSmrg  # HP compiler uses -M and no extra arg.
140d6c0b56eSmrg  gccflag=-M
141d6c0b56eSmrg  depmode=gcc
142d6c0b56eSmrgfi
143d6c0b56eSmrg
144d6c0b56eSmrgif test "$depmode" = dashXmstdout; then
145d6c0b56eSmrg  # This is just like dashmstdout with a different argument.
146d6c0b56eSmrg  dashmflag=-xM
147d6c0b56eSmrg  depmode=dashmstdout
148d6c0b56eSmrgfi
149d6c0b56eSmrg
150d6c0b56eSmrgcygpath_u="cygpath -u -f -"
151d6c0b56eSmrgif test "$depmode" = msvcmsys; then
152d6c0b56eSmrg  # This is just like msvisualcpp but w/o cygpath translation.
153d6c0b56eSmrg  # Just convert the backslash-escaped backslashes to single forward
154d6c0b56eSmrg  # slashes to satisfy depend.m4
155d6c0b56eSmrg  cygpath_u='sed s,\\\\,/,g'
156d6c0b56eSmrg  depmode=msvisualcpp
157d6c0b56eSmrgfi
158d6c0b56eSmrg
159d6c0b56eSmrgif test "$depmode" = msvc7msys; then
160d6c0b56eSmrg  # This is just like msvc7 but w/o cygpath translation.
161d6c0b56eSmrg  # Just convert the backslash-escaped backslashes to single forward
162d6c0b56eSmrg  # slashes to satisfy depend.m4
163d6c0b56eSmrg  cygpath_u='sed s,\\\\,/,g'
164d6c0b56eSmrg  depmode=msvc7
165d6c0b56eSmrgfi
166d6c0b56eSmrg
167d6c0b56eSmrgif test "$depmode" = xlc; then
168d6c0b56eSmrg  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169d6c0b56eSmrg  gccflag=-qmakedep=gcc,-MF
170d6c0b56eSmrg  depmode=gcc
171d6c0b56eSmrgfi
172d6c0b56eSmrg
173d6c0b56eSmrgcase "$depmode" in
174d6c0b56eSmrggcc3)
175d6c0b56eSmrg## gcc 3 implements dependency tracking that does exactly what
176d6c0b56eSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
177d6c0b56eSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
178d6c0b56eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
179d6c0b56eSmrg## the command line argument order; so add the flags where they
180d6c0b56eSmrg## appear in depend2.am.  Note that the slowdown incurred here
181d6c0b56eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
182d6c0b56eSmrg  for arg
183d6c0b56eSmrg  do
184d6c0b56eSmrg    case $arg in
185d6c0b56eSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
186d6c0b56eSmrg    *)  set fnord "$@" "$arg" ;;
187d6c0b56eSmrg    esac
188d6c0b56eSmrg    shift # fnord
189d6c0b56eSmrg    shift # $arg
190d6c0b56eSmrg  done
191d6c0b56eSmrg  "$@"
192d6c0b56eSmrg  stat=$?
193d6c0b56eSmrg  if test $stat -ne 0; then
194d6c0b56eSmrg    rm -f "$tmpdepfile"
195d6c0b56eSmrg    exit $stat
196d6c0b56eSmrg  fi
197d6c0b56eSmrg  mv "$tmpdepfile" "$depfile"
198d6c0b56eSmrg  ;;
199d6c0b56eSmrg
200d6c0b56eSmrggcc)
201d6c0b56eSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
202d6c0b56eSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
203d6c0b56eSmrg## (see the conditional assignment to $gccflag above).
204d6c0b56eSmrg## There are various ways to get dependency output from gcc.  Here's
205d6c0b56eSmrg## why we pick this rather obscure method:
206d6c0b56eSmrg## - Don't want to use -MD because we'd like the dependencies to end
207d6c0b56eSmrg##   up in a subdir.  Having to rename by hand is ugly.
208d6c0b56eSmrg##   (We might end up doing this anyway to support other compilers.)
209d6c0b56eSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
210d6c0b56eSmrg##   -MM, not -M (despite what the docs say).  Also, it might not be
211d6c0b56eSmrg##   supported by the other compilers which use the 'gcc' depmode.
212d6c0b56eSmrg## - Using -M directly means running the compiler twice (even worse
213d6c0b56eSmrg##   than renaming).
214d6c0b56eSmrg  if test -z "$gccflag"; then
215d6c0b56eSmrg    gccflag=-MD,
216d6c0b56eSmrg  fi
217d6c0b56eSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
218d6c0b56eSmrg  stat=$?
219d6c0b56eSmrg  if test $stat -ne 0; then
220d6c0b56eSmrg    rm -f "$tmpdepfile"
221d6c0b56eSmrg    exit $stat
222d6c0b56eSmrg  fi
223d6c0b56eSmrg  rm -f "$depfile"
224d6c0b56eSmrg  echo "$object : \\" > "$depfile"
225d6c0b56eSmrg  # The second -e expression handles DOS-style file names with drive
226d6c0b56eSmrg  # letters.
227d6c0b56eSmrg  sed -e 's/^[^:]*: / /' \
228d6c0b56eSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
229d6c0b56eSmrg## This next piece of magic avoids the "deleted header file" problem.
230d6c0b56eSmrg## The problem is that when a header file which appears in a .P file
231d6c0b56eSmrg## is deleted, the dependency causes make to die (because there is
232d6c0b56eSmrg## typically no way to rebuild the header).  We avoid this by adding
233d6c0b56eSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
234d6c0b56eSmrg## this for us directly.
235d6c0b56eSmrg## Some versions of gcc put a space before the ':'.  On the theory
236d6c0b56eSmrg## that the space means something, we add a space to the output as
237d6c0b56eSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
238d6c0b56eSmrg## to the object.  Take care to not repeat it in the output.
239d6c0b56eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
240d6c0b56eSmrg## correctly.  Breaking it into two sed invocations is a workaround.
241d6c0b56eSmrg  tr ' ' "$nl" < "$tmpdepfile" \
242d6c0b56eSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243d6c0b56eSmrg    | sed -e 's/$/ :/' >> "$depfile"
244d6c0b56eSmrg  rm -f "$tmpdepfile"
245d6c0b56eSmrg  ;;
246d6c0b56eSmrg
247d6c0b56eSmrghp)
248d6c0b56eSmrg  # This case exists only to let depend.m4 do its work.  It works by
249d6c0b56eSmrg  # looking at the text of this script.  This case will never be run,
250d6c0b56eSmrg  # since it is checked for above.
251d6c0b56eSmrg  exit 1
252d6c0b56eSmrg  ;;
253d6c0b56eSmrg
254d6c0b56eSmrgsgi)
255d6c0b56eSmrg  if test "$libtool" = yes; then
256d6c0b56eSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
257d6c0b56eSmrg  else
258d6c0b56eSmrg    "$@" -MDupdate "$tmpdepfile"
259d6c0b56eSmrg  fi
260d6c0b56eSmrg  stat=$?
261d6c0b56eSmrg  if test $stat -ne 0; then
262d6c0b56eSmrg    rm -f "$tmpdepfile"
263d6c0b56eSmrg    exit $stat
264d6c0b56eSmrg  fi
265d6c0b56eSmrg  rm -f "$depfile"
266d6c0b56eSmrg
267d6c0b56eSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
268d6c0b56eSmrg    echo "$object : \\" > "$depfile"
269d6c0b56eSmrg    # Clip off the initial element (the dependent).  Don't try to be
270d6c0b56eSmrg    # clever and replace this with sed code, as IRIX sed won't handle
271d6c0b56eSmrg    # lines with more than a fixed number of characters (4096 in
272d6c0b56eSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
273d6c0b56eSmrg    # the IRIX cc adds comments like '#:fec' to the end of the
274d6c0b56eSmrg    # dependency line.
275d6c0b56eSmrg    tr ' ' "$nl" < "$tmpdepfile" \
276d6c0b56eSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277d6c0b56eSmrg      | tr "$nl" ' ' >> "$depfile"
278d6c0b56eSmrg    echo >> "$depfile"
279d6c0b56eSmrg    # The second pass generates a dummy entry for each header file.
280d6c0b56eSmrg    tr ' ' "$nl" < "$tmpdepfile" \
281d6c0b56eSmrg      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
282d6c0b56eSmrg      >> "$depfile"
283d6c0b56eSmrg  else
284d6c0b56eSmrg    make_dummy_depfile
285d6c0b56eSmrg  fi
286d6c0b56eSmrg  rm -f "$tmpdepfile"
287d6c0b56eSmrg  ;;
288d6c0b56eSmrg
289d6c0b56eSmrgxlc)
290d6c0b56eSmrg  # This case exists only to let depend.m4 do its work.  It works by
291d6c0b56eSmrg  # looking at the text of this script.  This case will never be run,
292d6c0b56eSmrg  # since it is checked for above.
293d6c0b56eSmrg  exit 1
294d6c0b56eSmrg  ;;
295d6c0b56eSmrg
296d6c0b56eSmrgaix)
297d6c0b56eSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
298d6c0b56eSmrg  # in a .u file.  In older versions, this file always lives in the
299d6c0b56eSmrg  # current directory.  Also, the AIX compiler puts '$object:' at the
300d6c0b56eSmrg  # start of each line; $object doesn't have directory information.
301d6c0b56eSmrg  # Version 6 uses the directory in both cases.
302d6c0b56eSmrg  set_dir_from "$object"
303d6c0b56eSmrg  set_base_from "$object"
304d6c0b56eSmrg  if test "$libtool" = yes; then
305d6c0b56eSmrg    tmpdepfile1=$dir$base.u
306d6c0b56eSmrg    tmpdepfile2=$base.u
307d6c0b56eSmrg    tmpdepfile3=$dir.libs/$base.u
308d6c0b56eSmrg    "$@" -Wc,-M
309d6c0b56eSmrg  else
310d6c0b56eSmrg    tmpdepfile1=$dir$base.u
311d6c0b56eSmrg    tmpdepfile2=$dir$base.u
312d6c0b56eSmrg    tmpdepfile3=$dir$base.u
313d6c0b56eSmrg    "$@" -M
314d6c0b56eSmrg  fi
315d6c0b56eSmrg  stat=$?
316d6c0b56eSmrg  if test $stat -ne 0; then
317d6c0b56eSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
318d6c0b56eSmrg    exit $stat
319d6c0b56eSmrg  fi
320d6c0b56eSmrg
321d6c0b56eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
322d6c0b56eSmrg  do
323d6c0b56eSmrg    test -f "$tmpdepfile" && break
324d6c0b56eSmrg  done
325d6c0b56eSmrg  aix_post_process_depfile
326d6c0b56eSmrg  ;;
327d6c0b56eSmrg
328d6c0b56eSmrgtcc)
329d6c0b56eSmrg  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330d6c0b56eSmrg  # FIXME: That version still under development at the moment of writing.
331d6c0b56eSmrg  #        Make that this statement remains true also for stable, released
332d6c0b56eSmrg  #        versions.
333d6c0b56eSmrg  # It will wrap lines (doesn't matter whether long or short) with a
334d6c0b56eSmrg  # trailing '\', as in:
335d6c0b56eSmrg  #
336d6c0b56eSmrg  #   foo.o : \
337d6c0b56eSmrg  #    foo.c \
338d6c0b56eSmrg  #    foo.h \
339d6c0b56eSmrg  #
340d6c0b56eSmrg  # It will put a trailing '\' even on the last line, and will use leading
341d6c0b56eSmrg  # spaces rather than leading tabs (at least since its commit 0394caf7
342d6c0b56eSmrg  # "Emit spaces for -MD").
343d6c0b56eSmrg  "$@" -MD -MF "$tmpdepfile"
344d6c0b56eSmrg  stat=$?
345d6c0b56eSmrg  if test $stat -ne 0; then
346d6c0b56eSmrg    rm -f "$tmpdepfile"
347d6c0b56eSmrg    exit $stat
348d6c0b56eSmrg  fi
349d6c0b56eSmrg  rm -f "$depfile"
350d6c0b56eSmrg  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351d6c0b56eSmrg  # We have to change lines of the first kind to '$object: \'.
352d6c0b56eSmrg  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353d6c0b56eSmrg  # And for each line of the second kind, we have to emit a 'dep.h:'
354d6c0b56eSmrg  # dummy dependency, to avoid the deleted-header problem.
355d6c0b56eSmrg  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
356d6c0b56eSmrg  rm -f "$tmpdepfile"
357d6c0b56eSmrg  ;;
358d6c0b56eSmrg
359d6c0b56eSmrg## The order of this option in the case statement is important, since the
360d6c0b56eSmrg## shell code in configure will try each of these formats in the order
361d6c0b56eSmrg## listed in this file.  A plain '-MD' option would be understood by many
362d6c0b56eSmrg## compilers, so we must ensure this comes after the gcc and icc options.
363d6c0b56eSmrgpgcc)
364d6c0b56eSmrg  # Portland's C compiler understands '-MD'.
365d6c0b56eSmrg  # Will always output deps to 'file.d' where file is the root name of the
366d6c0b56eSmrg  # source file under compilation, even if file resides in a subdirectory.
367d6c0b56eSmrg  # The object file name does not affect the name of the '.d' file.
368d6c0b56eSmrg  # pgcc 10.2 will output
369d6c0b56eSmrg  #    foo.o: sub/foo.c sub/foo.h
370d6c0b56eSmrg  # and will wrap long lines using '\' :
371d6c0b56eSmrg  #    foo.o: sub/foo.c ... \
372d6c0b56eSmrg  #     sub/foo.h ... \
373d6c0b56eSmrg  #     ...
374d6c0b56eSmrg  set_dir_from "$object"
375d6c0b56eSmrg  # Use the source, not the object, to determine the base name, since
376d6c0b56eSmrg  # that's sadly what pgcc will do too.
377d6c0b56eSmrg  set_base_from "$source"
378d6c0b56eSmrg  tmpdepfile=$base.d
379d6c0b56eSmrg
380d6c0b56eSmrg  # For projects that build the same source file twice into different object
381d6c0b56eSmrg  # files, the pgcc approach of using the *source* file root name can cause
382d6c0b56eSmrg  # problems in parallel builds.  Use a locking strategy to avoid stomping on
383d6c0b56eSmrg  # the same $tmpdepfile.
384d6c0b56eSmrg  lockdir=$base.d-lock
385d6c0b56eSmrg  trap "
386d6c0b56eSmrg    echo '$0: caught signal, cleaning up...' >&2
387d6c0b56eSmrg    rmdir '$lockdir'
388d6c0b56eSmrg    exit 1
389d6c0b56eSmrg  " 1 2 13 15
390d6c0b56eSmrg  numtries=100
391d6c0b56eSmrg  i=$numtries
392d6c0b56eSmrg  while test $i -gt 0; do
393d6c0b56eSmrg    # mkdir is a portable test-and-set.
394d6c0b56eSmrg    if mkdir "$lockdir" 2>/dev/null; then
395d6c0b56eSmrg      # This process acquired the lock.
396d6c0b56eSmrg      "$@" -MD
397d6c0b56eSmrg      stat=$?
398d6c0b56eSmrg      # Release the lock.
399d6c0b56eSmrg      rmdir "$lockdir"
400d6c0b56eSmrg      break
401d6c0b56eSmrg    else
402d6c0b56eSmrg      # If the lock is being held by a different process, wait
403d6c0b56eSmrg      # until the winning process is done or we timeout.
404d6c0b56eSmrg      while test -d "$lockdir" && test $i -gt 0; do
405d6c0b56eSmrg        sleep 1
406d6c0b56eSmrg        i=`expr $i - 1`
407d6c0b56eSmrg      done
408d6c0b56eSmrg    fi
409d6c0b56eSmrg    i=`expr $i - 1`
410d6c0b56eSmrg  done
411d6c0b56eSmrg  trap - 1 2 13 15
412d6c0b56eSmrg  if test $i -le 0; then
413d6c0b56eSmrg    echo "$0: failed to acquire lock after $numtries attempts" >&2
414d6c0b56eSmrg    echo "$0: check lockdir '$lockdir'" >&2
415d6c0b56eSmrg    exit 1
416d6c0b56eSmrg  fi
417d6c0b56eSmrg
418d6c0b56eSmrg  if test $stat -ne 0; then
419d6c0b56eSmrg    rm -f "$tmpdepfile"
420d6c0b56eSmrg    exit $stat
421d6c0b56eSmrg  fi
422d6c0b56eSmrg  rm -f "$depfile"
423d6c0b56eSmrg  # Each line is of the form `foo.o: dependent.h',
424d6c0b56eSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
425d6c0b56eSmrg  # Do two passes, one to just change these to
426d6c0b56eSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
427d6c0b56eSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
428d6c0b56eSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
429d6c0b56eSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
430d6c0b56eSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
431d6c0b56eSmrg    | sed -e 's/$/ :/' >> "$depfile"
432d6c0b56eSmrg  rm -f "$tmpdepfile"
433d6c0b56eSmrg  ;;
434d6c0b56eSmrg
435d6c0b56eSmrghp2)
436d6c0b56eSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
437d6c0b56eSmrg  # compilers, which have integrated preprocessors.  The correct option
438d6c0b56eSmrg  # to use with these is +Maked; it writes dependencies to a file named
439d6c0b56eSmrg  # 'foo.d', which lands next to the object file, wherever that
440d6c0b56eSmrg  # happens to be.
441d6c0b56eSmrg  # Much of this is similar to the tru64 case; see comments there.
442d6c0b56eSmrg  set_dir_from  "$object"
443d6c0b56eSmrg  set_base_from "$object"
444d6c0b56eSmrg  if test "$libtool" = yes; then
445d6c0b56eSmrg    tmpdepfile1=$dir$base.d
446d6c0b56eSmrg    tmpdepfile2=$dir.libs/$base.d
447d6c0b56eSmrg    "$@" -Wc,+Maked
448d6c0b56eSmrg  else
449d6c0b56eSmrg    tmpdepfile1=$dir$base.d
450d6c0b56eSmrg    tmpdepfile2=$dir$base.d
451d6c0b56eSmrg    "$@" +Maked
452d6c0b56eSmrg  fi
453d6c0b56eSmrg  stat=$?
454d6c0b56eSmrg  if test $stat -ne 0; then
455d6c0b56eSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
456d6c0b56eSmrg     exit $stat
457d6c0b56eSmrg  fi
458d6c0b56eSmrg
459d6c0b56eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
460d6c0b56eSmrg  do
461d6c0b56eSmrg    test -f "$tmpdepfile" && break
462d6c0b56eSmrg  done
463d6c0b56eSmrg  if test -f "$tmpdepfile"; then
464d6c0b56eSmrg    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465d6c0b56eSmrg    # Add 'dependent.h:' lines.
466d6c0b56eSmrg    sed -ne '2,${
467d6c0b56eSmrg               s/^ *//
468d6c0b56eSmrg               s/ \\*$//
469d6c0b56eSmrg               s/$/:/
470d6c0b56eSmrg               p
471d6c0b56eSmrg             }' "$tmpdepfile" >> "$depfile"
472d6c0b56eSmrg  else
473d6c0b56eSmrg    make_dummy_depfile
474d6c0b56eSmrg  fi
475d6c0b56eSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
476d6c0b56eSmrg  ;;
477d6c0b56eSmrg
478d6c0b56eSmrgtru64)
479d6c0b56eSmrg  # The Tru64 compiler uses -MD to generate dependencies as a side
480d6c0b56eSmrg  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481d6c0b56eSmrg  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482d6c0b56eSmrg  # dependencies in 'foo.d' instead, so we check for that too.
483d6c0b56eSmrg  # Subdirectories are respected.
484d6c0b56eSmrg  set_dir_from  "$object"
485d6c0b56eSmrg  set_base_from "$object"
486d6c0b56eSmrg
487d6c0b56eSmrg  if test "$libtool" = yes; then
488d6c0b56eSmrg    # Libtool generates 2 separate objects for the 2 libraries.  These
489d6c0b56eSmrg    # two compilations output dependencies in $dir.libs/$base.o.d and
490d6c0b56eSmrg    # in $dir$base.o.d.  We have to check for both files, because
491d6c0b56eSmrg    # one of the two compilations can be disabled.  We should prefer
492d6c0b56eSmrg    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493d6c0b56eSmrg    # automatically cleaned when .libs/ is deleted, while ignoring
494d6c0b56eSmrg    # the former would cause a distcleancheck panic.
495d6c0b56eSmrg    tmpdepfile1=$dir$base.o.d          # libtool 1.5
496d6c0b56eSmrg    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
497d6c0b56eSmrg    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
498d6c0b56eSmrg    "$@" -Wc,-MD
499d6c0b56eSmrg  else
500d6c0b56eSmrg    tmpdepfile1=$dir$base.d
501d6c0b56eSmrg    tmpdepfile2=$dir$base.d
502d6c0b56eSmrg    tmpdepfile3=$dir$base.d
503d6c0b56eSmrg    "$@" -MD
504d6c0b56eSmrg  fi
505d6c0b56eSmrg
506d6c0b56eSmrg  stat=$?
507d6c0b56eSmrg  if test $stat -ne 0; then
508d6c0b56eSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
509d6c0b56eSmrg    exit $stat
510d6c0b56eSmrg  fi
511d6c0b56eSmrg
512d6c0b56eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
513d6c0b56eSmrg  do
514d6c0b56eSmrg    test -f "$tmpdepfile" && break
515d6c0b56eSmrg  done
516d6c0b56eSmrg  # Same post-processing that is required for AIX mode.
517d6c0b56eSmrg  aix_post_process_depfile
518d6c0b56eSmrg  ;;
519d6c0b56eSmrg
520d6c0b56eSmrgmsvc7)
521d6c0b56eSmrg  if test "$libtool" = yes; then
522d6c0b56eSmrg    showIncludes=-Wc,-showIncludes
523d6c0b56eSmrg  else
524d6c0b56eSmrg    showIncludes=-showIncludes
525d6c0b56eSmrg  fi
526d6c0b56eSmrg  "$@" $showIncludes > "$tmpdepfile"
527d6c0b56eSmrg  stat=$?
528d6c0b56eSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
529d6c0b56eSmrg  if test $stat -ne 0; then
530d6c0b56eSmrg    rm -f "$tmpdepfile"
531d6c0b56eSmrg    exit $stat
532d6c0b56eSmrg  fi
533d6c0b56eSmrg  rm -f "$depfile"
534d6c0b56eSmrg  echo "$object : \\" > "$depfile"
535d6c0b56eSmrg  # The first sed program below extracts the file names and escapes
536d6c0b56eSmrg  # backslashes for cygpath.  The second sed program outputs the file
537d6c0b56eSmrg  # name when reading, but also accumulates all include files in the
538d6c0b56eSmrg  # hold buffer in order to output them again at the end.  This only
539d6c0b56eSmrg  # works with sed implementations that can handle large buffers.
540d6c0b56eSmrg  sed < "$tmpdepfile" -n '
541d6c0b56eSmrg/^Note: including file:  *\(.*\)/ {
542d6c0b56eSmrg  s//\1/
543d6c0b56eSmrg  s/\\/\\\\/g
544d6c0b56eSmrg  p
545d6c0b56eSmrg}' | $cygpath_u | sort -u | sed -n '
546d6c0b56eSmrgs/ /\\ /g
547d6c0b56eSmrgs/\(.*\)/'"$tab"'\1 \\/p
548d6c0b56eSmrgs/.\(.*\) \\/\1:/
549d6c0b56eSmrgH
550d6c0b56eSmrg$ {
551d6c0b56eSmrg  s/.*/'"$tab"'/
552d6c0b56eSmrg  G
553d6c0b56eSmrg  p
554d6c0b56eSmrg}' >> "$depfile"
555d6c0b56eSmrg  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
556d6c0b56eSmrg  rm -f "$tmpdepfile"
557d6c0b56eSmrg  ;;
558d6c0b56eSmrg
559d6c0b56eSmrgmsvc7msys)
560d6c0b56eSmrg  # This case exists only to let depend.m4 do its work.  It works by
561d6c0b56eSmrg  # looking at the text of this script.  This case will never be run,
562d6c0b56eSmrg  # since it is checked for above.
563d6c0b56eSmrg  exit 1
564d6c0b56eSmrg  ;;
565d6c0b56eSmrg
566d6c0b56eSmrg#nosideeffect)
567d6c0b56eSmrg  # This comment above is used by automake to tell side-effect
568d6c0b56eSmrg  # dependency tracking mechanisms from slower ones.
569d6c0b56eSmrg
570d6c0b56eSmrgdashmstdout)
571d6c0b56eSmrg  # Important note: in order to support this mode, a compiler *must*
572d6c0b56eSmrg  # always write the preprocessed file to stdout, regardless of -o.
573d6c0b56eSmrg  "$@" || exit $?
574d6c0b56eSmrg
575d6c0b56eSmrg  # Remove the call to Libtool.
576d6c0b56eSmrg  if test "$libtool" = yes; then
577d6c0b56eSmrg    while test "X$1" != 'X--mode=compile'; do
578d6c0b56eSmrg      shift
579d6c0b56eSmrg    done
580d6c0b56eSmrg    shift
581d6c0b56eSmrg  fi
582d6c0b56eSmrg
583d6c0b56eSmrg  # Remove '-o $object'.
584d6c0b56eSmrg  IFS=" "
585d6c0b56eSmrg  for arg
586d6c0b56eSmrg  do
587d6c0b56eSmrg    case $arg in
588d6c0b56eSmrg    -o)
589d6c0b56eSmrg      shift
590d6c0b56eSmrg      ;;
591d6c0b56eSmrg    $object)
592d6c0b56eSmrg      shift
593d6c0b56eSmrg      ;;
594d6c0b56eSmrg    *)
595d6c0b56eSmrg      set fnord "$@" "$arg"
596d6c0b56eSmrg      shift # fnord
597d6c0b56eSmrg      shift # $arg
598d6c0b56eSmrg      ;;
599d6c0b56eSmrg    esac
600d6c0b56eSmrg  done
601d6c0b56eSmrg
602d6c0b56eSmrg  test -z "$dashmflag" && dashmflag=-M
603d6c0b56eSmrg  # Require at least two characters before searching for ':'
604d6c0b56eSmrg  # in the target name.  This is to cope with DOS-style filenames:
605d6c0b56eSmrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
606d6c0b56eSmrg  "$@" $dashmflag |
607d6c0b56eSmrg    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
608d6c0b56eSmrg  rm -f "$depfile"
609d6c0b56eSmrg  cat < "$tmpdepfile" > "$depfile"
610d6c0b56eSmrg  # Some versions of the HPUX 10.20 sed can't process this sed invocation
611d6c0b56eSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
612d6c0b56eSmrg  tr ' ' "$nl" < "$tmpdepfile" \
613d6c0b56eSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
614d6c0b56eSmrg    | sed -e 's/$/ :/' >> "$depfile"
615d6c0b56eSmrg  rm -f "$tmpdepfile"
616d6c0b56eSmrg  ;;
617d6c0b56eSmrg
618d6c0b56eSmrgdashXmstdout)
619d6c0b56eSmrg  # This case only exists to satisfy depend.m4.  It is never actually
620d6c0b56eSmrg  # run, as this mode is specially recognized in the preamble.
621d6c0b56eSmrg  exit 1
622d6c0b56eSmrg  ;;
623d6c0b56eSmrg
624d6c0b56eSmrgmakedepend)
625d6c0b56eSmrg  "$@" || exit $?
626d6c0b56eSmrg  # Remove any Libtool call
627d6c0b56eSmrg  if test "$libtool" = yes; then
628d6c0b56eSmrg    while test "X$1" != 'X--mode=compile'; do
629d6c0b56eSmrg      shift
630d6c0b56eSmrg    done
631d6c0b56eSmrg    shift
632d6c0b56eSmrg  fi
633d6c0b56eSmrg  # X makedepend
634d6c0b56eSmrg  shift
635d6c0b56eSmrg  cleared=no eat=no
636d6c0b56eSmrg  for arg
637d6c0b56eSmrg  do
638d6c0b56eSmrg    case $cleared in
639d6c0b56eSmrg    no)
640d6c0b56eSmrg      set ""; shift
641d6c0b56eSmrg      cleared=yes ;;
642d6c0b56eSmrg    esac
643d6c0b56eSmrg    if test $eat = yes; then
644d6c0b56eSmrg      eat=no
645d6c0b56eSmrg      continue
646d6c0b56eSmrg    fi
647d6c0b56eSmrg    case "$arg" in
648d6c0b56eSmrg    -D*|-I*)
649d6c0b56eSmrg      set fnord "$@" "$arg"; shift ;;
650d6c0b56eSmrg    # Strip any option that makedepend may not understand.  Remove
651d6c0b56eSmrg    # the object too, otherwise makedepend will parse it as a source file.
652d6c0b56eSmrg    -arch)
653d6c0b56eSmrg      eat=yes ;;
654d6c0b56eSmrg    -*|$object)
655d6c0b56eSmrg      ;;
656d6c0b56eSmrg    *)
657d6c0b56eSmrg      set fnord "$@" "$arg"; shift ;;
658d6c0b56eSmrg    esac
659d6c0b56eSmrg  done
660d6c0b56eSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
661d6c0b56eSmrg  touch "$tmpdepfile"
662d6c0b56eSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
663d6c0b56eSmrg  rm -f "$depfile"
664d6c0b56eSmrg  # makedepend may prepend the VPATH from the source file name to the object.
665d6c0b56eSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
666d6c0b56eSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667d6c0b56eSmrg  # Some versions of the HPUX 10.20 sed can't process the last invocation
668d6c0b56eSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
669d6c0b56eSmrg  sed '1,2d' "$tmpdepfile" \
670d6c0b56eSmrg    | tr ' ' "$nl" \
671d6c0b56eSmrg    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672d6c0b56eSmrg    | sed -e 's/$/ :/' >> "$depfile"
673d6c0b56eSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
674d6c0b56eSmrg  ;;
675d6c0b56eSmrg
676d6c0b56eSmrgcpp)
677d6c0b56eSmrg  # Important note: in order to support this mode, a compiler *must*
678d6c0b56eSmrg  # always write the preprocessed file to stdout.
679d6c0b56eSmrg  "$@" || exit $?
680d6c0b56eSmrg
681d6c0b56eSmrg  # Remove the call to Libtool.
682d6c0b56eSmrg  if test "$libtool" = yes; then
683d6c0b56eSmrg    while test "X$1" != 'X--mode=compile'; do
684d6c0b56eSmrg      shift
685d6c0b56eSmrg    done
686d6c0b56eSmrg    shift
687d6c0b56eSmrg  fi
688d6c0b56eSmrg
689d6c0b56eSmrg  # Remove '-o $object'.
690d6c0b56eSmrg  IFS=" "
691d6c0b56eSmrg  for arg
692d6c0b56eSmrg  do
693d6c0b56eSmrg    case $arg in
694d6c0b56eSmrg    -o)
695d6c0b56eSmrg      shift
696d6c0b56eSmrg      ;;
697d6c0b56eSmrg    $object)
698d6c0b56eSmrg      shift
699d6c0b56eSmrg      ;;
700d6c0b56eSmrg    *)
701d6c0b56eSmrg      set fnord "$@" "$arg"
702d6c0b56eSmrg      shift # fnord
703d6c0b56eSmrg      shift # $arg
704d6c0b56eSmrg      ;;
705d6c0b56eSmrg    esac
706d6c0b56eSmrg  done
707d6c0b56eSmrg
708d6c0b56eSmrg  "$@" -E \
709d6c0b56eSmrg    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
710d6c0b56eSmrg             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
711d6c0b56eSmrg    | sed '$ s: \\$::' > "$tmpdepfile"
712d6c0b56eSmrg  rm -f "$depfile"
713d6c0b56eSmrg  echo "$object : \\" > "$depfile"
714d6c0b56eSmrg  cat < "$tmpdepfile" >> "$depfile"
715d6c0b56eSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
716d6c0b56eSmrg  rm -f "$tmpdepfile"
717d6c0b56eSmrg  ;;
718d6c0b56eSmrg
719d6c0b56eSmrgmsvisualcpp)
720d6c0b56eSmrg  # Important note: in order to support this mode, a compiler *must*
721d6c0b56eSmrg  # always write the preprocessed file to stdout.
722d6c0b56eSmrg  "$@" || exit $?
723d6c0b56eSmrg
724d6c0b56eSmrg  # Remove the call to Libtool.
725d6c0b56eSmrg  if test "$libtool" = yes; then
726d6c0b56eSmrg    while test "X$1" != 'X--mode=compile'; do
727d6c0b56eSmrg      shift
728d6c0b56eSmrg    done
729d6c0b56eSmrg    shift
730d6c0b56eSmrg  fi
731d6c0b56eSmrg
732d6c0b56eSmrg  IFS=" "
733d6c0b56eSmrg  for arg
734d6c0b56eSmrg  do
735d6c0b56eSmrg    case "$arg" in
736d6c0b56eSmrg    -o)
737d6c0b56eSmrg      shift
738d6c0b56eSmrg      ;;
739d6c0b56eSmrg    $object)
740d6c0b56eSmrg      shift
741d6c0b56eSmrg      ;;
742d6c0b56eSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
743d6c0b56eSmrg        set fnord "$@"
744d6c0b56eSmrg        shift
745d6c0b56eSmrg        shift
746d6c0b56eSmrg        ;;
747d6c0b56eSmrg    *)
748d6c0b56eSmrg        set fnord "$@" "$arg"
749d6c0b56eSmrg        shift
750d6c0b56eSmrg        shift
751d6c0b56eSmrg        ;;
752d6c0b56eSmrg    esac
753d6c0b56eSmrg  done
754d6c0b56eSmrg  "$@" -E 2>/dev/null |
755d6c0b56eSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
756d6c0b56eSmrg  rm -f "$depfile"
757d6c0b56eSmrg  echo "$object : \\" > "$depfile"
758d6c0b56eSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759d6c0b56eSmrg  echo "$tab" >> "$depfile"
760d6c0b56eSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
761d6c0b56eSmrg  rm -f "$tmpdepfile"
762d6c0b56eSmrg  ;;
763d6c0b56eSmrg
764d6c0b56eSmrgmsvcmsys)
765d6c0b56eSmrg  # This case exists only to let depend.m4 do its work.  It works by
766d6c0b56eSmrg  # looking at the text of this script.  This case will never be run,
767d6c0b56eSmrg  # since it is checked for above.
768d6c0b56eSmrg  exit 1
769d6c0b56eSmrg  ;;
770d6c0b56eSmrg
771d6c0b56eSmrgnone)
772d6c0b56eSmrg  exec "$@"
773d6c0b56eSmrg  ;;
774d6c0b56eSmrg
775d6c0b56eSmrg*)
776d6c0b56eSmrg  echo "Unknown depmode $depmode" 1>&2
777d6c0b56eSmrg  exit 1
778d6c0b56eSmrg  ;;
779d6c0b56eSmrgesac
780d6c0b56eSmrg
781d6c0b56eSmrgexit 0
782d6c0b56eSmrg
783d6c0b56eSmrg# Local Variables:
784d6c0b56eSmrg# mode: shell-script
785d6c0b56eSmrg# sh-indentation: 2
786d6c0b56eSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
787d6c0b56eSmrg# time-stamp-start: "scriptversion="
788d6c0b56eSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
789d6c0b56eSmrg# time-stamp-time-zone: "UTC"
790d6c0b56eSmrg# time-stamp-end: "; # UTC"
791d6c0b56eSmrg# End:
792