/[gentoo-x86]/eclass/elisp-common.eclass
Gentoo

Diff of /eclass/elisp-common.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.72 Revision 1.89
1# Copyright 1999-2011 Gentoo Foundation 1# Copyright 1999-2014 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.72 2011/08/13 12:19:39 ulm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.89 2014/05/24 08:48:40 ulm Exp $
4#
5# Copyright 2002-2004 Matthew Kennedy <mkennedy@gentoo.org>
6# Copyright 2003 Jeremy Maitin-Shepard <jbms@attbi.com>
7# Copyright 2004-2005 Mamoru Komachi <usata@gentoo.org>
8# Copyright 2007-2008 Christian Faulhammer <fauli@gentoo.org>
9# Copyright 2007-2011 Ulrich Müller <ulm@gentoo.org>
10# 4#
11# @ECLASS: elisp-common.eclass 5# @ECLASS: elisp-common.eclass
12# @MAINTAINER: 6# @MAINTAINER:
13# Feel free to contact the Emacs team through <emacs@gentoo.org> if you 7# Gentoo Emacs team <emacs@gentoo.org>
14# have problems, suggestions or questions. 8# @AUTHOR:
9# Matthew Kennedy <mkennedy@gentoo.org>
10# Jeremy Maitin-Shepard <jbms@attbi.com>
11# Mamoru Komachi <usata@gentoo.org>
12# Christian Faulhammer <fauli@gentoo.org>
13# Ulrich Müller <ulm@gentoo.org>
15# @BLURB: Emacs-related installation utilities 14# @BLURB: Emacs-related installation utilities
16# @DESCRIPTION: 15# @DESCRIPTION:
17# 16#
18# Usually you want to use this eclass for (optional) GNU Emacs support 17# Usually you want to use this eclass for (optional) GNU Emacs support
19# of your package. This is NOT for XEmacs! 18# of your package. This is NOT for XEmacs!
22# package (especially compilation), so this is mainly for standalone 21# package (especially compilation), so this is mainly for standalone
23# elisp files you gathered from somewhere else. 22# elisp files you gathered from somewhere else.
24# 23#
25# When relying on the emacs USE flag, you need to add 24# When relying on the emacs USE flag, you need to add
26# 25#
26# @CODE
27# emacs? ( virtual/emacs ) 27# emacs? ( virtual/emacs )
28# @CODE
28# 29#
29# to your DEPEND/RDEPEND line and use the functions provided here to 30# to your DEPEND/RDEPEND line and use the functions provided here to
30# bring the files to the correct locations. 31# bring the files to the correct locations.
31# 32#
32# If your package requires a minimum Emacs version, e.g. Emacs 23, then 33# If your package requires a minimum Emacs version, e.g. Emacs 23, then
34# user can select the Emacs executable with eselect, you should also 35# user can select the Emacs executable with eselect, you should also
35# make sure that the active Emacs version is sufficient. This can be 36# make sure that the active Emacs version is sufficient. This can be
36# tested with function elisp-need-emacs(), which would typically be 37# tested with function elisp-need-emacs(), which would typically be
37# called from pkg_setup(), as in the following example: 38# called from pkg_setup(), as in the following example:
38# 39#
40# @CODE
39# elisp-need-emacs 23 || die "Emacs version too low" 41# elisp-need-emacs 23 || die "Emacs version too low"
42# @CODE
40# 43#
41# Please note that such tests should be limited to packages that are 44# Please note that such tests should be limited to packages that are
42# known to fail with lower Emacs versions; the standard case is to 45# known to fail with lower Emacs versions; the standard case is to
43# depend on virtual/emacs without version. 46# depend on virtual/emacs without version.
44# 47#
45# .SS 48# @ROFF .SS
46# src_compile() usage: 49# src_compile() usage:
47# 50#
48# An elisp file is compiled by the elisp-compile() function defined 51# An elisp file is compiled by the elisp-compile() function defined
49# here and simply takes the source files as arguments. The case of 52# here and simply takes the source files as arguments. The case of
50# interdependent elisp files is also supported, since the current 53# interdependent elisp files is also supported, since the current
51# directory is added to the load-path which makes sure that all files 54# directory is added to the load-path which makes sure that all files
52# are loadable. 55# are loadable.
53# 56#
57# @CODE
54# elisp-compile *.el || die 58# elisp-compile *.el
59# @CODE
55# 60#
56# Function elisp-make-autoload-file() can be used to generate a file 61# Function elisp-make-autoload-file() can be used to generate a file
57# with autoload definitions for the lisp functions. It takes the output 62# with autoload definitions for the lisp functions. It takes the output
58# file name (default: "${PN}-autoloads.el") and a list of directories 63# file name (default: "${PN}-autoloads.el") and a list of directories
59# (default: working directory) as its arguments. Use of this function 64# (default: working directory) as its arguments. Use of this function
60# requires that the elisp source files contain magic ";;;###autoload" 65# requires that the elisp source files contain magic ";;;###autoload"
61# comments. See the Emacs Lisp Reference Manual (node "Autoload") for 66# comments. See the Emacs Lisp Reference Manual (node "Autoload") for
62# a detailed explanation. 67# a detailed explanation.
63# 68#
64# .SS 69# @ROFF .SS
65# src_install() usage: 70# src_install() usage:
66# 71#
67# The resulting compiled files (.elc) should be put in a subdirectory of 72# The resulting compiled files (.elc) should be put in a subdirectory of
68# /usr/share/emacs/site-lisp/ which is named after the first argument 73# /usr/share/emacs/site-lisp/ which is named after the first argument
69# of elisp-install(). The following parameters are the files to be put 74# of elisp-install(). The following parameters are the files to be put
70# in that directory. Usually the subdirectory should be ${PN}, you can 75# in that directory. Usually the subdirectory should be ${PN}, you can
71# choose something else, but remember to tell elisp-site-file-install() 76# choose something else, but remember to tell elisp-site-file-install()
72# (see below) the change, as it defaults to ${PN}. 77# (see below) the change, as it defaults to ${PN}.
73# 78#
79# @CODE
74# elisp-install ${PN} *.el *.elc || die 80# elisp-install ${PN} *.el *.elc
81# @CODE
75# 82#
76# To let the Emacs support be activated by Emacs on startup, you need 83# To let the Emacs support be activated by Emacs on startup, you need
77# to provide a site file (shipped in ${FILESDIR}) which contains the 84# to provide a site file (shipped in ${FILESDIR}) which contains the
78# startup code (have a look in the documentation of your software). 85# startup code (have a look in the documentation of your software).
79# Normally this would look like this: 86# Normally this would look like this:
80# 87#
88# @CODE
81# (add-to-list 'load-path "@SITELISP@") 89# (add-to-list 'load-path "@SITELISP@")
82# (add-to-list 'auto-mode-alist '("\\.csv\\'" . csv-mode)) 90# (add-to-list 'auto-mode-alist '("\\.csv\\'" . csv-mode))
83# (autoload 'csv-mode "csv-mode" "Major mode for csv files." t) 91# (autoload 'csv-mode "csv-mode" "Major mode for csv files." t)
92# @CODE
84# 93#
85# If your Emacs support files are installed in a subdirectory of 94# If your Emacs support files are installed in a subdirectory of
86# /usr/share/emacs/site-lisp/ (which is strongly recommended), you need 95# /usr/share/emacs/site-lisp/ (which is strongly recommended), you need
87# to extend Emacs' load-path as shown in the first non-comment line. 96# to extend Emacs' load-path as shown in the first non-comment line.
88# The elisp-site-file-install() function of this eclass will replace 97# The elisp-site-file-install() function of this eclass will replace
93# features. Be careful though. Commands as "load-library" or "require" 102# features. Be careful though. Commands as "load-library" or "require"
94# bloat the editor as they are loaded on every startup. When having 103# bloat the editor as they are loaded on every startup. When having
95# many Emacs support files, users may be annoyed by the start-up time. 104# many Emacs support files, users may be annoyed by the start-up time.
96# Also avoid keybindings as they might interfere with the user's 105# Also avoid keybindings as they might interfere with the user's
97# settings. Give a hint in pkg_postinst(), which should be enough. 106# settings. Give a hint in pkg_postinst(), which should be enough.
107# The guiding principle is that emerging your package should not by
108# itself cause a change of standard Emacs behaviour.
98# 109#
99# The naming scheme for this site-init file matches the shell pattern 110# The naming scheme for this site-init file matches the shell pattern
100# "[1-8][0-9]*-gentoo*.el", where the two digits at the beginning define 111# "[1-8][0-9]*-gentoo*.el", where the two digits at the beginning define
101# the loading order (numbers below 10 or above 89 are reserved for 112# the loading order (numbers below 10 or above 89 are reserved for
102# internal use). So if your initialisation depends on another Emacs 113# internal use). So if your initialisation depends on another Emacs
105# divisible by 10 are preferred. 116# divisible by 10 are preferred.
106# 117#
107# Best practice is to define a SITEFILE variable in the global scope of 118# Best practice is to define a SITEFILE variable in the global scope of
108# your ebuild (e.g., right after S or RDEPEND): 119# your ebuild (e.g., right after S or RDEPEND):
109# 120#
121# @CODE
110# SITEFILE="50${PN}-gentoo.el" 122# SITEFILE="50${PN}-gentoo.el"
123# @CODE
111# 124#
112# Which is then installed by 125# Which is then installed by
113# 126#
127# @CODE
114# elisp-site-file-install "${FILESDIR}/${SITEFILE}" || die 128# elisp-site-file-install "${FILESDIR}/${SITEFILE}"
129# @CODE
115# 130#
116# in src_install(). Any characters after the "-gentoo" part and before 131# in src_install(). Any characters after the "-gentoo" part and before
117# the extension will be stripped from the destination file's name. 132# the extension will be stripped from the destination file's name.
118# For example, a file "50${PN}-gentoo-${PV}.el" will be installed as 133# For example, a file "50${PN}-gentoo-${PV}.el" will be installed as
119# "50${PN}-gentoo.el". If your subdirectory is not named ${PN}, give 134# "50${PN}-gentoo.el". If your subdirectory is not named ${PN}, give
120# the differing name as second argument. 135# the differing name as second argument.
121# 136#
122# .SS 137# @ROFF .SS
123# pkg_postinst() / pkg_postrm() usage: 138# pkg_postinst() / pkg_postrm() usage:
124# 139#
125# After that you need to recreate the start-up file of Emacs after 140# After that you need to recreate the start-up file of Emacs after
126# emerging and unmerging by using 141# emerging and unmerging by using
127# 142#
143# @CODE
128# pkg_postinst() { 144# pkg_postinst() {
129# elisp-site-regen 145# elisp-site-regen
130# } 146# }
131# 147#
132# pkg_postrm() { 148# pkg_postrm() {
133# elisp-site-regen 149# elisp-site-regen
134# } 150# }
151# @CODE
135# 152#
136# When having optional Emacs support, you should prepend "use emacs &&" 153# When having optional Emacs support, you should prepend "use emacs &&"
137# to above calls of elisp-site-regen(). 154# to above calls of elisp-site-regen().
138# Don't use "has_version virtual/emacs"! When unmerging the state of 155# Don't use "has_version virtual/emacs"! When unmerging the state of
139# the emacs USE flag is taken from the package database and not from the 156# the emacs USE flag is taken from the package database and not from the
156EMACS=${EPREFIX}/usr/bin/emacs 173EMACS=${EPREFIX}/usr/bin/emacs
157 174
158# @ECLASS-VARIABLE: EMACSFLAGS 175# @ECLASS-VARIABLE: EMACSFLAGS
159# @DESCRIPTION: 176# @DESCRIPTION:
160# Flags for executing Emacs in batch mode. 177# Flags for executing Emacs in batch mode.
161# These work for Emacs versions 18-23, so don't change them. 178# These work for Emacs versions 18-24, so don't change them.
162EMACSFLAGS="-batch -q --no-site-file" 179EMACSFLAGS="-batch -q --no-site-file"
163 180
164# @ECLASS-VARIABLE: BYTECOMPFLAGS 181# @ECLASS-VARIABLE: BYTECOMPFLAGS
165# @DESCRIPTION: 182# @DESCRIPTION:
166# Emacs flags used for byte-compilation in elisp-compile(). 183# Emacs flags used for byte-compilation in elisp-compile().
167BYTECOMPFLAGS="-L ." 184BYTECOMPFLAGS="-L ."
168 185
169# @FUNCTION: elisp-emacs-version 186# @FUNCTION: elisp-emacs-version
187# @RETURN: exit status of Emacs
170# @DESCRIPTION: 188# @DESCRIPTION:
171# Output version of currently active Emacs. 189# Output version of currently active Emacs.
172 190
173elisp-emacs-version() { 191elisp-emacs-version() {
174 local ret 192 local version ret
175 # The following will work for at least versions 18-23. 193 # The following will work for at least versions 18-24.
176 echo "(princ emacs-version)" >"${T}"/emacs-version.el 194 echo "(princ emacs-version)" >"${T}"/emacs-version.el
195 version=$(
196 # EMACS could be a microemacs variant that ignores the -batch
197 # option and would therefore hang, waiting for user interaction.
198 # Redirecting stdin and unsetting TERM and DISPLAY will cause
199 # most of them to exit with an error.
200 unset TERM DISPLAY
177 ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el 201 ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el </dev/null
202 )
178 ret=$? 203 ret=$?
179 rm -f "${T}"/emacs-version.el 204 rm -f "${T}"/emacs-version.el
180 if [[ ${ret} -ne 0 ]]; then 205 if [[ ${ret} -ne 0 ]]; then
181 eerror "elisp-emacs-version: Failed to run ${EMACS}" 206 eerror "elisp-emacs-version: Failed to run ${EMACS}"
182 fi
183 return ${ret} 207 return ${ret}
208 fi
209 if [[ -z ${version} ]]; then
210 eerror "elisp-emacs-version: Could not determine Emacs version"
211 return 1
212 fi
213 echo "${version}"
184} 214}
185 215
186# @FUNCTION: elisp-need-emacs 216# @FUNCTION: elisp-need-emacs
187# @USAGE: <version> 217# @USAGE: <version>
188# @RETURN: 0 if true, 1 otherwise 218# @RETURN: 0 if true, 1 if false, 2 if trouble
189# @DESCRIPTION: 219# @DESCRIPTION:
190# Test if the eselected Emacs version is at least the major version 220# Test if the eselected Emacs version is at least the major version
191# specified as argument. 221# of GNU Emacs specified as argument.
192 222
193elisp-need-emacs() { 223elisp-need-emacs() {
194 local need_emacs=$1 have_emacs 224 local need_emacs=$1 have_emacs
195 have_emacs=$(elisp-emacs-version) || return 225 have_emacs=$(elisp-emacs-version) || return 2
196 einfo "Emacs version: ${have_emacs}" 226 einfo "Emacs version: ${have_emacs}"
227 if [[ ${have_emacs} =~ XEmacs|Lucid ]]; then
228 eerror "This package needs GNU Emacs."
229 return 1
230 fi
197 if ! [[ ${have_emacs%%.*} -ge ${need_emacs%%.*} ]]; then 231 if ! [[ ${have_emacs%%.*} -ge ${need_emacs%%.*} ]]; then
198 eerror "This package needs at least Emacs ${need_emacs%%.*}." 232 eerror "This package needs at least Emacs ${need_emacs%%.*}."
199 eerror "Use \"eselect emacs\" to select the active version." 233 eerror "Use \"eselect emacs\" to select the active version."
200 return 1 234 return 1
201 fi 235 fi
216# in case they require or load one another. 250# in case they require or load one another.
217 251
218elisp-compile() { 252elisp-compile() {
219 ebegin "Compiling GNU Emacs Elisp files" 253 ebegin "Compiling GNU Emacs Elisp files"
220 ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" 254 ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@"
221 eend $? "elisp-compile: batch-byte-compile failed" 255 eend $? "elisp-compile: batch-byte-compile failed" || die
222} 256}
223 257
224# @FUNCTION: elisp-make-autoload-file 258# @FUNCTION: elisp-make-autoload-file
225# @USAGE: [output file] [list of directories] 259# @USAGE: [output file] [list of directories]
226# @DESCRIPTION: 260# @DESCRIPTION:
252 ${EMACS} ${EMACSFLAGS} \ 286 ${EMACS} ${EMACSFLAGS} \
253 --eval "(setq make-backup-files nil)" \ 287 --eval "(setq make-backup-files nil)" \
254 --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \ 288 --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \
255 -f batch-update-autoloads "${@-.}" 289 -f batch-update-autoloads "${@-.}"
256 290
257 eend $? "elisp-make-autoload-file: batch-update-autoloads failed" 291 eend $? "elisp-make-autoload-file: batch-update-autoloads failed" || die
258} 292}
259 293
260# @FUNCTION: elisp-install 294# @FUNCTION: elisp-install
261# @USAGE: <subdirectory> <list of files> 295# @USAGE: <subdirectory> <list of files>
262# @DESCRIPTION: 296# @DESCRIPTION:
268 ebegin "Installing Elisp files for GNU Emacs support" 302 ebegin "Installing Elisp files for GNU Emacs support"
269 ( # subshell to avoid pollution of calling environment 303 ( # subshell to avoid pollution of calling environment
270 insinto "${SITELISP}/${subdir}" 304 insinto "${SITELISP}/${subdir}"
271 doins "$@" 305 doins "$@"
272 ) 306 )
273 eend $? "elisp-install: doins failed" 307 eend $? "elisp-install: doins failed" || die
274} 308}
275 309
276# @FUNCTION: elisp-site-file-install 310# @FUNCTION: elisp-site-file-install
277# @USAGE: <site-init file> [subdirectory] 311# @USAGE: <site-init file> [subdirectory]
278# @DESCRIPTION: 312# @DESCRIPTION:
298 insinto "${SITELISP}/site-gentoo.d" 332 insinto "${SITELISP}/site-gentoo.d"
299 doins "${sf}" 333 doins "${sf}"
300 ) 334 )
301 ret=$? 335 ret=$?
302 rm -f "${sf}" 336 rm -f "${sf}"
303 eend ${ret} "elisp-site-file-install: doins failed" 337 eend ${ret} "elisp-site-file-install: doins failed" || die
304} 338}
305 339
306# @FUNCTION: elisp-site-regen 340# @FUNCTION: elisp-site-regen
307# @DESCRIPTION: 341# @DESCRIPTION:
308# Regenerate the site-gentoo.el file, based on packages' site 342# Regenerate the site-gentoo.el file, based on packages' site
309# initialisation files in the /usr/share/emacs/site-lisp/site-gentoo.d/ 343# initialisation files in the /usr/share/emacs/site-lisp/site-gentoo.d/
310# directory. 344# directory.
311#
312# Note: Before December 2007, site initialisation files were installed
313# in /usr/share/emacs/site-lisp/. For backwards compatibility, this
314# location is still supported when generating site-gentoo.el.
315 345
316elisp-site-regen() { 346elisp-site-regen() {
317 local sitelisp=${ROOT}${EPREFIX}${SITELISP} 347 local sitelisp=${ROOT}${EPREFIX}${SITELISP}
318 local sf i line null="" page=$'\f' 348 local sf i ret=0 null="" page=$'\f'
319 local -a sflist 349 local -a sflist
320 350
321 if [ ! -d "${sitelisp}" ]; then 351 if [[ ${EBUILD_PHASE} = *rm && ! -e ${sitelisp}/site-gentoo.el ]]; then
352 ewarn "Refusing to create site-gentoo.el in ${EBUILD_PHASE} phase."
353 return 0
354 fi
355
356 [[ -d ${sitelisp} ]] \
322 eerror "elisp-site-regen: Directory ${sitelisp} does not exist" 357 || die "elisp-site-regen: Directory ${sitelisp} does not exist"
323 return 1
324 fi
325 358
326 if [ ! -d "${T}" ]; then 359 [[ -d ${T} ]] \
327 eerror "elisp-site-regen: Temporary directory ${T} does not exist" 360 || die "elisp-site-regen: Temporary directory ${T} does not exist"
328 return 1
329 fi
330 361
331 einfon "Regenerating site-gentoo.el for GNU Emacs (${EBUILD_PHASE}) ..." 362 ebegin "Regenerating site-gentoo.el for GNU Emacs (${EBUILD_PHASE})"
332 363
333 # Until January 2009, elisp-common.eclass sometimes created an
334 # auxiliary file for backwards compatibility. Remove any such file.
335 rm -f "${sitelisp}"/00site-gentoo.el
336
337 for sf in "${sitelisp}"/[0-9][0-9]*-gentoo.el \
338 "${sitelisp}"/site-gentoo.d/[0-9][0-9]*.el 364 for sf in "${sitelisp}"/site-gentoo.d/[0-9][0-9]*.el; do
339 do 365 [[ -r ${sf} ]] && sflist+=("${sf}")
340 [ -r "${sf}" ] || continue
341 # sort files by their basename. straight insertion sort.
342 for ((i=${#sflist[@]}; i>0; i--)); do
343 [[ ${sf##*/} < ${sflist[i-1]##*/} ]] || break
344 sflist[i]=${sflist[i-1]}
345 done
346 sflist[i]=${sf}
347 done 366 done
348 367
349 cat <<-EOF >"${T}"/site-gentoo.el 368 cat <<-EOF >"${T}"/site-gentoo.el || ret=$?
350 ;;; site-gentoo.el --- site initialisation for Gentoo-installed packages 369 ;;; site-gentoo.el --- site initialisation for Gentoo-installed packages
351 370
352 ;;; Commentary: 371 ;;; Commentary:
353 ;; Automatically generated by elisp-common.eclass 372 ;; Automatically generated by elisp-common.eclass
354 ;; DO NOT EDIT THIS FILE 373 ;; DO NOT EDIT THIS FILE
355 374
356 ;;; Code: 375 ;;; Code:
357 EOF 376 EOF
358 # Use sed instead of cat here, since files may miss a trailing newline. 377 # Use sed instead of cat here, since files may miss a trailing newline.
359 sed '$q' "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el 378 sed '$q' "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el || ret=$?
360 cat <<-EOF >>"${T}"/site-gentoo.el 379 cat <<-EOF >>"${T}"/site-gentoo.el || ret=$?
361 380
362 ${page} 381 ${page}
363 (provide 'site-gentoo) 382 (provide 'site-gentoo)
364 383
365 ;; Local ${null}Variables: 384 ;; Local ${null}Variables:
368 ;; End: 387 ;; End:
369 388
370 ;;; site-gentoo.el ends here 389 ;;; site-gentoo.el ends here
371 EOF 390 EOF
372 391
392 if [[ ${ret} -ne 0 ]]; then
393 eend ${ret} "elisp-site-regen: Writing site-gentoo.el failed."
394 die
373 if cmp -s "${sitelisp}"/site-gentoo.el "${T}"/site-gentoo.el; then 395 elif cmp -s "${sitelisp}"/site-gentoo.el "${T}"/site-gentoo.el; then
374 # This prevents outputting unnecessary text when there 396 # This prevents outputting unnecessary text when there
375 # was actually no change. 397 # was actually no change.
376 # A case is a remerge where we have doubled output. 398 # A case is a remerge where we have doubled output.
377 rm -f "${T}"/site-gentoo.el 399 rm -f "${T}"/site-gentoo.el
400 eend
378 echo " no changes." 401 einfo "... no changes."
379 else 402 else
380 mv "${T}"/site-gentoo.el "${sitelisp}"/site-gentoo.el 403 mv "${T}"/site-gentoo.el "${sitelisp}"/site-gentoo.el
381 echo 404 eend $? "elisp-site-regen: Replacing site-gentoo.el failed" || die
382 case ${#sflist[@]} in 405 case ${#sflist[@]} in
406 0) [[ ${PN} = emacs-common-gentoo ]] \
383 0) ewarn "... Huh? No site initialisation files found." ;; 407 || ewarn "... Huh? No site initialisation files found." ;;
384 1) einfo "... ${#sflist[@]} site initialisation file included." ;; 408 1) einfo "... ${#sflist[@]} site initialisation file included." ;;
385 *) einfo "... ${#sflist[@]} site initialisation files included." ;; 409 *) einfo "... ${#sflist[@]} site initialisation files included." ;;
386 esac 410 esac
387 fi 411 fi
388 412

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.89

  ViewVC Help
Powered by ViewVC 1.1.20