aboutsummaryrefslogtreecommitdiffstats
path: root/autogen.sh
diff options
context:
space:
mode:
authorGlenn Morris <[email protected]>2011-03-20 16:58:23 -0700
committerGlenn Morris <[email protected]>2011-03-20 16:58:23 -0700
commit66b874939b5acd59c76fa53373f2e41871ec1fef (patch)
tree2068f1af187f95a85ac0c7730c7b611b9d4ad8c1 /autogen.sh
parent1fe275ee28e8a37fdbbd6d6cf75f1b15b9674b4b (diff)
(Re)move autotools generated files from the repository.
Ref: http://lists.gnu.org/archive/html/emacs-devel/2011-03/msg00225.html * autogen/: New directory, to be excluded from releases. * autogen/copy_autogen, autogen/update_autogen: New scripts. * autogen/README: New file. * autogen/aclocal.m4, autogen/config.in, autogen/configure: * autogen/Makefile.in: Add auto-updated generated files. * autogen.sh: No longer a no-op, now it tests for autotools and runs them as necessary. * configure.in: Defaule maintainer-mode to on. * aclocal.m4, configure, lib/Makefile.in: Remove files. * src/config.in: Remove file. * INSTALL.BZR, admin/make-tarball.txt: Update instructions.
Diffstat (limited to 'autogen.sh')
-rwxr-xr-xautogen.sh208
1 files changed, 204 insertions, 4 deletions
diff --git a/autogen.sh b/autogen.sh
index 52184c46f5..a56b8d7782 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,7 +1,207 @@
#!/bin/sh
+### autogen.sh - tool to help build Emacs from a bzr checkout
-echo "Please read INSTALL.BZR for instructions on how to build Emacs from Bazaar."
+## Copyright (C) 2011 Free Software Foundation, Inc.
-# Exit with failure, since people may have generic build scripts that
-# try things like "autogen.sh && ./configure && make".
-exit 1
+## Author: Glenn Morris <[email protected]>
+
+## This file is part of GNU Emacs.
+
+## GNU Emacs is free software: you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+
+## GNU Emacs is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+## You should have received a copy of the GNU General Public License
+## along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+## The Emacs bzr repository does not include the configure script
+## (and associated helpers). The first time you fetch Emacs from bzr,
+## run this script to generate the necessary files.
+## For more details, see the file INSTALL.BZR.
+
+### Code:
+
+## Tools we need:
+progs="autoconf automake"
+
+## Minimum versions we need:
+autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.in`
+
+## FIXME how to determine this from the sources?
+automake_min=1.11
+
+
+## $1 = program, eg "autoconf".
+## Echo the version string, eg "2.59".
+## FIXME does not handle things like "1.4a", but AFAIK those are
+## all old versions, so it is OK to fail there.
+## Also note that we do not handle micro versions.
+get_version ()
+{
+ $1 --version 2>&1 | sed -n '1 s/.* \([1-9][0-9\.]*\).*/\1/p'
+}
+
+## $1 = version string, eg "2.59"
+## Echo the major version, eg "2".
+major_version ()
+{
+ echo $1 | sed -e 's/\([0-9][0-9]*\)\..*/\1/'
+}
+
+## $1 = version string, eg "2.59"
+## Echo the minor version, eg "59".
+minor_version ()
+{
+ echo $1 | sed -e 's/[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/'
+}
+
+## $1 = program
+## $2 = minimum version.
+## Return 0 if program is present with version >= minumum version.
+## Return 1 if program is missing.
+## Return 2 if program is present but too old.
+## Return 3 for unexpected error (eg failed to parse version).
+check_version ()
+{
+ have_version=`get_version $1`
+
+ [ x"$have_version" = x ] && return 1
+
+ have_maj=`major_version $have_version`
+ need_maj=`major_version $2`
+
+ [ x"$have_maj" != x ] && [ x"$need_maj" != x ] || return 3
+
+ [ $have_maj -gt $need_maj ] && return 0
+ [ $have_maj -lt $need_maj ] && return 2
+
+ have_min=`minor_version $have_version`
+ need_min=`minor_version $2`
+
+ [ x"$have_min" != x ] && [ x"$need_min" != x ] || return 3
+
+ [ $have_min -ge $need_min ] && return 0
+ return 2
+}
+
+
+cat <<EOF
+Checking whether you have the necessary tools...
+(Read INSTALL.BZR for more details on building Emacs)
+
+EOF
+
+missing=
+
+for prog in $progs; do
+
+ eval min=\$${prog}_min
+
+ echo "Checking for $prog (need at least version $min)..."
+
+ check_version $prog $min
+
+ retval=$?
+
+ case $retval in
+ 0) stat="ok" ;;
+ 1) stat="missing" ;;
+ 2) stat="too old" ;;
+ *) stat="unable to check" ;;
+ esac
+
+ echo $stat
+
+ if [ $retval -ne 0 ]; then
+ missing="$missing $prog"
+ eval ${prog}_why=\""$stat"\"
+ fi
+
+done
+
+
+if [ x"$missing" != x ]; then
+
+ cat <<EOF
+
+Building Emacs from Bzr requires the following specialized programs:
+EOF
+
+ for prog in $progs; do
+ eval min=\$${prog}_min
+
+ echo "$prog (minimum version $min)"
+ done
+
+
+ cat <<EOF
+
+Your system seems to be missing the following tool(s):
+EOF
+
+ for prog in $missing; do
+ eval why=\$${prog}_why
+
+ echo "$prog ($why)"
+ done
+
+ cat <<EOF
+
+If you think you have the required tools, please add them to your PATH
+and re-run this script.
+
+Otherwise, please try installing them.
+On systems using rpm and yum, try: "yum install PACKAGE"
+On systems using dpkg and apt, try: "apt-get install PACKAGE"
+Then re-run this script.
+
+If you do not have permission to do this, or if the version provided
+by your system is too old, it is normally straightforward to build
+these packages from source. You can find the sources at:
+
+ftp://ftp.gnu.org/gnu/PACKAGE/
+
+Download the package (make sure you get at least the minimum version
+listed above), extract it using tar, then run configure, make,
+make install. Add the installation directory to your PATH and re-run
+this script.
+
+If you know that the required versions are in your PATH, but this
+script has made an error, then you can simply run
+
+autoreconf -I m4
+
+instead of this script.
+
+If all else fails, you can try using the pre-built versions of the
+generated files by doing:
+
+cd autogen && ./copy_autogen
+
+This is not recommended - see the comments in \`copy_autogen'.
+
+Please report any problems with this script to [email protected] .
+EOF
+
+ exit 1
+fi
+
+echo "Your system has the required tools, running autoreconf..."
+
+
+## Let autoreconf figure out what, if anything, needs doing.
+autoreconf -I m4 || exit $?
+
+echo "You can now run \`./configure'."
+
+exit 0
+
+### autogen.sh ends here