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