3 # Bootstrap this package from checked-out sources.
5 # Copyright (C) 2003-2010 Free Software Foundation, Inc.
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 # Written by Paul Eggert.
25 # Ensure file names are sorted consistently across platforms.
26 # Also, ensure diagnostics are in English, e.g., "wget --help" below.
32 # Temporary directory names.
34 bt_regex
=`echo "$bt"| sed 's/\./[.]/g'`
40 Bootstrap this package from the checked-out sources.
43 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
44 sources reside. Use this if you already
45 have gnulib sources on your machine, and
46 do not want to waste your bandwidth downloading
48 --copy Copy files instead of creating symbolic links.
49 --force Attempt to bootstrap even if the sources seem
50 not to have been checked out.
51 --skip-po Do not download po files.
53 If the file $0.conf exists in the same directory as this script, its
54 contents are read as shell variables to configure the bootstrap.
56 For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
59 Running without arguments will suffice in most cases.
65 # Name of the Makefile.am
68 # List of gnulib modules needed.
71 # Any gnulib files needed that are not in modules.
74 # A function to be called after everything else in this script.
75 # Override it via your own definition in bootstrap.conf.
76 bootstrap_epilogue
() { :; }
78 # The command to download all .po files for a specified domain into
79 # a specified directory. Fill in the first %s is the domain name, and
80 # the second with the destination directory. Use rsync's -L and -r
81 # options because the latest/%s directory and the .po files within are
83 po_download_command_format
=\
84 "rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
86 extract_package_name
='
98 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
103 package
=`sed -n "$extract_package_name" configure.ac` || exit
104 gnulib_name
=lib
$package
112 # Extra files from gnulib, which override files from other sources.
114 $build_aux/install-sh
117 $build_aux/texinfo.tex
119 $build_aux/config.guess
120 $build_aux/config.sub
124 # Additional gnulib-tool options to use. Use "\newline" to break lines.
125 gnulib_tool_option_extras
=
127 # Other locale categories that need message catalogs.
128 EXTRA_LOCALE_CATEGORIES
=
130 # Additional xgettext options to use. Use "\\\newline" to break lines.
131 XGETTEXT_OPTIONS
='\\\
132 --flag=_:1:pass-c-format\\\
133 --flag=N_:1:pass-c-format\\\
134 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
137 # Package bug report address for gettext files
138 MSGID_BUGS_ADDRESS
=bug
-$package@gnu.org
140 # Files we don't want to import.
143 # File that should exist in the top directory of a checked out hierarchy,
144 # but not in a distribution tarball.
145 checkout_only_file
=HACKING
147 # Whether to use copies instead of symlinks.
150 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
151 # those files to be generated in directories like lib/, m4/, and po/.
152 # Or set it to 'auto' to make this script select which to use based
153 # on which version control system (if any) is used in the source directory.
156 # find_tool ENVVAR NAMES...
157 # -------------------------
158 # Search for a required program. Use the value of ENVVAR, if set,
159 # otherwise find the first of the NAMES that can be run (i.e.,
160 # supports --version). If found, set ENVVAR to the program name,
164 # Find sha1sum, named gsha1sum on MacPorts.
168 eval "find_tool_res=\$$find_tool_envvar"
169 if test x
"$find_tool_res" = x
; then
172 if ($i --version </dev
/null
) >/dev
/null
2>&1; then
178 find_tool_error_prefix
="\$$find_tool_envvar: "
180 if test x
"$find_tool_res" = x
; then
181 echo >&2 "$0: one of these is required: $find_tool_names"
184 ($find_tool_res --version </dev
/null
) >/dev
/null
2>&1 || {
185 echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
188 eval "$find_tool_envvar=\$find_tool_res"
189 eval "export $find_tool_envvar"
192 # Find sha1sum, named gsha1sum on MacPorts.
193 find_tool SHA1SUM
sha1sum gsha1sum
195 # Override the default configuration, if necessary.
196 # Make sure that bootstrap.conf is sourced from the current directory
197 # if we were invoked as "sh bootstrap".
199 */*) test -r "$0.conf" && .
"$0.conf" ;;
200 *) test -r "$0.conf" && . .
/"$0.conf" ;;
204 if test "$vc_ignore" = auto
; then
206 test -d .git
&& vc_ignore
=.gitignore
207 test -d CVS
&& vc_ignore
="$vc_ignore .cvsignore"
210 # Translate configuration into internal form.
221 GNULIB_SRCDIR
=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
225 checkout_only_file
=;;
229 echo >&2 "$0: $option: unknown option"
234 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
235 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
239 # If $STR is not already on a line by itself in $FILE, insert it,
240 # sorting the new contents of the file and replacing $FILE with the result.
241 insert_sorted_if_absent
() {
244 test -f $file || touch $file
245 echo "$str" | sort -u - $file | cmp - $file > /dev
/null \
246 || echo "$str" | sort -u - $file -o $file \
250 # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
251 # insert_sorted_if_absent.
254 case $vc_ignore_file in
256 # A .gitignore entry that does not start with `/' applies recursively to
257 # subdirectories, so prepend `/' to every .gitignore entry.
258 pattern
=`echo "$2" | sed s,^,/,`;;
262 insert_sorted_if_absent
"$vc_ignore_file" "$pattern"
265 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
267 grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
268 >/dev
/null
&& found_aux_dir
=yes
269 grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
270 >/dev
/null
&& found_aux_dir
=yes
271 if test $found_aux_dir = no
; then
272 echo "$0: expected line not found in configure.ac. Add the following:" >&2
273 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
277 # If $build_aux doesn't exist, create it now, otherwise some bits
278 # below will malfunction. If creating it, also mark it as ignored.
279 if test ! -d $build_aux; then
281 for dot_ig
in x
$vc_ignore; do
282 test $dot_ig = x
&& continue
283 insert_vc_ignore
$dot_ig $build_aux
287 # Note this deviates from the version comparison in automake
288 # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
289 # but this should suffice as we won't be specifying old
290 # version formats or redundant trailing .0 in bootstrap.conf.
291 # If we did want full compatibility then we should probably
292 # use m4_version_compare from autoconf.
293 sort_ver
() { # sort -V is not generally available
297 # split on '.' and compare each component
300 p1
=$(echo "$ver1" | cut -d. -f$i)
301 p2
=$(echo "$ver2" | cut -d. -f$i)
305 elif [ ! "$p2" ]; then
308 elif [ ! "$p1" = "$p2" ]; then
309 if [ "$p1" -gt "$p2" ] 2>/dev
/null
; then # numeric comparison
311 elif [ "$p2" -gt "$p1" ] 2>/dev
/null
; then # numeric comparison
313 else # numeric, then lexicographic comparison
314 lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
315 if [ "$lp" = "$p2" ]; then
330 $app --version >/dev
/null
2>&1 || return 1
332 $app --version 2>&1 |
333 sed -n '# extract version within line
334 s/.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/
337 # extract version at start of line
338 s/^\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/
344 #the following essentially does s/5.005/5.5/
345 s/\.0*\([1-9]\)/.\1/g
353 while read app req_ver
; do
354 # Honor $APP variables ($TAR, $AUTOCONF, etc.)
355 appvar
=`echo $app | tr '[a-z]' '[A-Z]'`
356 test "$appvar" = TAR
&& appvar
=AMTAR
357 eval "app=\${$appvar-$app}"
358 inst_ver
=$(get_version $app)
359 if [ ! "$inst_ver" ]; then
360 echo "Error: '$app' not found" >&2
362 elif [ ! "$req_ver" = "-" ]; then
363 latest_ver
=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
364 if [ ! "$latest_ver" = "$inst_ver" ]; then
365 echo "Error: '$app' version == $inst_ver is too old" >&2
366 echo " '$app' version >= $req_ver is required" >&2
376 echo "Program Min_version"
377 echo "----------------------"
379 echo "----------------------"
380 # can't depend on column -t
383 if ! printf "$buildreq" | check_versions
; then
384 test -f README
-prereq &&
385 echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2
391 echo "$0: Bootstrapping from checked-out $package sources..."
393 # See if we can use gnulib's git-merge-changelog merge driver.
394 if test -d .git
&& (git
--version) >/dev
/null
2>/dev
/null
; then
395 if git config merge.merge
-changelog.driver
>/dev
/null
; then
397 elif (git
-merge-changelog --version) >/dev
/null
2>/dev
/null
; then
398 echo "initializing git-merge-changelog driver"
399 git config merge.merge
-changelog.name
'GNU-style ChangeLog merge driver'
400 git config merge.merge
-changelog.driver
'git-merge-changelog %O %A %B'
402 echo "consider installing git-merge-changelog from gnulib"
413 git_modules_config
() {
414 test -f .gitmodules
&& git config
--file .gitmodules
"$@"
419 case ${GNULIB_SRCDIR--} in
421 if git_modules_config submodule.gnulib.url
>/dev
/null
; then
422 echo "$0: getting gnulib files..."
423 git submodule init
|| exit $?
424 git submodule update
|| exit $?
426 elif [ ! -d gnulib
]; then
427 echo "$0: getting gnulib files..."
429 trap cleanup_gnulib
1 2 13 15
431 git clone
--help|grep depth
> /dev
/null
&& shallow
='--depth 2' || shallow
=
432 git clone
$shallow git
://git.sv.gnu.org
/gnulib
||
440 # Redirect the gnulib submodule to the directory on the command line
442 if test -d "$GNULIB_SRCDIR"/.git
&& \
443 git_modules_config submodule.gnulib.url
>/dev
/null
; then
445 GNULIB_SRCDIR
=`cd $GNULIB_SRCDIR && pwd`
446 git_modules_config
--replace-all submodule.gnulib.url
$GNULIB_SRCDIR
447 echo "$0: getting gnulib files..."
448 git submodule update
|| exit $?
454 gnulib_tool
=$GNULIB_SRCDIR/gnulib
-tool
455 <$gnulib_tool || exit
459 download_po_files
() {
462 echo "$0: getting translations into $subdir for $domain..."
463 cmd
=`printf "$po_download_command_format" "$domain" "$subdir"`
467 # Download .po files to $po_dir/.reference and copy only the new
468 # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
470 # Directory containing primary .po files.
471 # Overwrite them only when we're sure a .po file is new.
475 # Download *.po files into this dir.
476 # Usually contains *.s1 checksum files.
477 ref_po_dir
="$po_dir/.reference"
479 test -d $ref_po_dir || mkdir $ref_po_dir || return
480 download_po_files
$ref_po_dir $domain \
481 && ls "$ref_po_dir"/*.po
2>/dev
/null
|
482 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
484 langs
=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
485 test "$langs" = '*' && langs
=x
487 case $po in x
) continue;; esac
488 new_po
="$ref_po_dir/$po.po"
489 cksum_file
="$ref_po_dir/$po.s1"
490 if ! test -f "$cksum_file" ||
491 ! test -f "$po_dir/$po.po" ||
492 ! $SHA1SUM -c --status "$cksum_file" \
493 < "$new_po" > /dev
/null
; then
494 echo "updated $po_dir/$po.po..."
495 cp "$new_po" "$po_dir/$po.po" \
496 && $SHA1SUM < "$new_po" > "$cksum_file"
504 update_po_files po
$package || exit
507 if test -d runtime
-po; then
508 update_po_files runtime
-po $package-runtime || exit
515 # If the destination directory doesn't exist, create it.
516 # This is required at least for "lib/uniwidth/cjk.h".
517 dst_dir
=`dirname "$dst"`
518 if ! test -d "$dst_dir"; then
521 # If we've just created a directory like lib/uniwidth,
522 # tell version control system(s) it's ignorable.
523 # FIXME: for now, this does only one level
524 parent
=`dirname "$dst_dir"`
525 for dot_ig
in x
$vc_ignore; do
526 test $dot_ig = x
&& continue
528 insert_vc_ignore
$ig `echo "$dst_dir"|sed 's,.*/,,'`
544 test ! -h "$dst" || {
545 echo "$0: rm -f $dst" &&
550 cmp -s "$src" "$dst" || {
551 echo "$0: cp -fp $src $dst" &&
556 src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 &&
557 dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 &&
558 test "$src_i" = "$dst_i" || {
564 *//* | */..
/* | */.
/* | /*/*/*/*/*/)
565 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
567 /*/*/*/*/) dot_dots
=..
/..
/..
/;;
568 /*/*/*/) dot_dots
=..
/..
/;;
569 /*/*/) dot_dots
=..
/;;
573 echo "$0: ln -fs $dot_dots$src $dst" &&
574 ln -fs "$dot_dots$src" "$dst"
580 cp_mark_as_generated
()
585 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
586 symlink_to_dir
"$GNULIB_SRCDIR" "$cp_dst"
587 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
588 symlink_to_dir
$local_gl_dir "$cp_dst"
591 *.
[ch
]) c1
='/* '; c2
=' */';;
592 *.texi
) c1
='@c '; c2
= ;;
593 *.
m4|*/Make
*|Make
*) c1
='# ' ; c2
= ;;
597 if test -z "$c1"; then
598 cmp -s "$cp_src" "$cp_dst" || {
599 # Copy the file first to get proper permissions if it
600 # doesn't already exist. Then overwrite the copy.
601 echo "$0: cp -f $cp_src $cp_dst" &&
603 cp "$cp_src" "$cp_dst-t" &&
604 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
605 mv -f "$cp_dst-t" "$cp_dst"
608 check_dst_dir
"$cp_dst"
609 # Copy the file first to get proper permissions if it
610 # doesn't already exist. Then overwrite the copy.
611 cp "$cp_src" "$cp_dst-t" &&
613 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
614 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
615 sed "s!$bt_regex/!!g" "$cp_src"
617 if cmp -s "$cp_dst-t" "$cp_dst"; then
620 echo "$0: cp $cp_src $cp_dst # with edits" &&
621 mv -f "$cp_dst-t" "$cp_dst"
627 version_controlled_file
() {
632 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null
|
633 grep '^/[^/]*/[0-9]' > /dev
/null
&& found
=yes
634 elif test -d .git
; then
635 git
rm -n "$dir/$file" > /dev
/null
2>&1 && found
=yes
636 elif test -d .svn
; then
637 svn log
-r HEAD
"$dir/$file" > /dev
/null
2>&1 && found
=yes
639 echo "$0: no version control for $dir/$file?" >&2
645 for dir
in .
`(cd $1 && find * -type d -print)`; do
648 for file in `ls -a $1/$dir`; do
651 .
*) continue;; # FIXME: should all file names starting with "." be ignored?
653 test -d $1/$dir/$file && continue
654 for excluded_file
in $excluded_files; do
655 test "$dir/$file" = "$excluded_file" && continue 2
657 if test $file = Makefile.am
; then
658 copied
=$copied${sep}$gnulib_mk; sep
=$nl
659 remove_intl
='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
660 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..."
661 rm -f $dir/$gnulib_mk
662 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
663 etc
/prefix
-gnulib-mk $dir/$gnulib_mk
664 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
665 version_controlled_file
$dir $file; then
666 echo "$0: $dir/$file overrides $1/$dir/$file"
668 copied
=$copied$sep$file; sep
=$nl
669 if test $file = gettext.
m4; then
670 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
673 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
674 AC_DEFUN([AM_INTL_SUBDIR], [
675 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
676 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
678 AC_DEFUN([gl_LOCK_EARLY], [])
679 ' $1/$dir/$file >$dir/$file
681 cp_mark_as_generated
$1/$dir/$file $dir/$file
686 for dot_ig
in x
$vc_ignore; do
687 test $dot_ig = x
&& continue
689 if test -n "$copied"; then
690 insert_vc_ignore
$ig "$copied"
691 # If an ignored file name ends with .in.h, then also add
692 # the name with just ".h". Many gnulib headers are generated,
693 # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
694 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
695 f
=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
696 insert_vc_ignore
$ig "$f"
698 # For files like sys_stat.in.h and sys_time.in.h, record as
699 # ignorable the directory we might eventually create: sys/.
700 f
=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
701 insert_vc_ignore
$ig "$f"
708 # Create boot temporary directories to import from gnulib and gettext.
710 mkdir $bt $bt2 || exit
712 # Import from gnulib.
714 gnulib_tool_options
="\
717 --aux-dir $bt/$build_aux\
718 --doc-base $bt/$doc_base\
720 --m4-base $bt/$m4_base/\
721 --source-base $bt/$source_base/\
722 --tests-base $bt/$tests_base\
723 --local-dir $local_gl_dir\
724 $gnulib_tool_option_extras\
726 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
727 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
730 for file in $gnulib_files; do
731 symlink_to_dir
"$GNULIB_SRCDIR" $file || exit
735 # Import from gettext.
737 grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac
>/dev
/null
|| \
740 if test $with_gettext = yes; then
741 echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
742 cp configure.ac
$bt2 &&
743 (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac
) &&
744 slurp
$bt2 $bt || exit
746 rm -fr $bt $bt2 || exit
748 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
749 # gnulib-populated directories. Such .m4 files would cause aclocal to fail.
750 # The following requires GNU find 4.2.3 or newer. Considering the usual
751 # portability constraints of this script, that may seem a very demanding
752 # requirement, but it should be ok. Ignore any failure, which is fine,
753 # since this is only a convenience to help developers avoid the relatively
754 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
755 # between successive runs of this script.
756 find "$m4_base" "$source_base" \
757 -depth \
( -name '*.m4' -o -name '*.[ch]' \
) \
758 -type l
-xtype l
-delete > /dev
/null
2>&1
760 # Reconfigure, getting other files.
762 # Skip autoheader if it's not needed.
763 grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac
>/dev
/null
||
768 "${ACLOCAL-aclocal} --force -I m4" \
769 "${AUTOCONF-autoconf} --force" \
770 "${AUTOHEADER-autoheader} --force" \
771 "${AUTOMAKE-automake} --add-missing --copy --force-missing"
773 if test "$command" = libtool
; then
775 # We'd like to use grep -E, to see if any of LT_INIT,
776 # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
777 # but that's not portable enough (e.g., for Solaris).
778 grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac
>/dev
/null \
780 grep '^[ ]*LT_INIT' configure.ac
>/dev
/null \
782 test $use_libtool = 0 \
784 command="${LIBTOOLIZE-libtoolize} -c -f"
786 echo "$0: $command ..."
791 # Get some extra files from gnulib, overriding existing files.
792 for file in $gnulib_extra_files; do
794 */INSTALL
) dst
=INSTALL
;;
795 build
-aux/*) dst
=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
798 symlink_to_dir
"$GNULIB_SRCDIR" $file $dst || exit
801 if test $with_gettext = yes; then
802 # Create gettext configuration.
803 echo "$0: Creating po/Makevars from po/Makevars.template ..."
806 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
807 /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
808 /^XGETTEXT_OPTIONS *=/{
811 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
813 ' po
/Makevars.template
>po
/Makevars
815 if test -d runtime
-po; then
816 # Similarly for runtime-po/Makevars, but not quite the same.
817 rm -f runtime
-po/Makevars
819 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
820 /^subdir *=.*/s/=.*/= runtime-po/
821 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
822 /^XGETTEXT_OPTIONS *=/{
825 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
827 ' <po
/Makevars.template
>runtime
-po/Makevars
829 # Copy identical files from po to runtime-po.
830 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime
-po)
836 echo "$0: done. Now you can run './configure'."
839 # indent-tabs-mode: nil