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