X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a3e44e793796153ff1534be9c74fcab50b45de30..c175d44072c6a54eb921a3c55fdc2bf2f7816ddd:/autogen.sh diff --git a/autogen.sh b/autogen.sh index 52184c46f5..e7c28c16d9 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,7 +1,221 @@ #!/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-2013 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 + +## 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 . + +### 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: +## Note that we respect the values of AUTOCONF etc, like autoreconf does. +progs="autoconf automake" + +## Minimum versions we need: +autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac` + +## This will need improving if more options are ever added to the +## AM_INIT_AUTOMAKE call. +automake_min=`sed -n 's/^ *AM_INIT_AUTOMAKE(\([0-9\.]*\)).*/\1/p' configure.ac` + + +## $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 () +{ + ## Remove eg "./autogen.sh: line 50: autoconf: command not found". + $1 --version 2>&1 | sed -e '/not found/d' -n -e '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 >= minimum 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 () +{ + ## Respect eg $AUTOMAKE if it is set, like autoreconf does. + uprog=`echo $1 | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + + eval uprog=\$${uprog} + + [ x"$uprog" = x ] && uprog=$1 + + have_version=`get_version $uprog` + + [ 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 < src/stamp-h.in || exit + +echo "You can now run \`./configure'." + +exit 0 + +### autogen.sh ends here