2010-12-03 14:45:09 +00:00
|
|
|
#!/bin/sh
|
2014-10-25 18:53:20 +00:00
|
|
|
### autogen.sh - tool to help build Emacs from a repository checkout
|
2010-12-03 14:45:09 +00:00
|
|
|
|
2017-01-01 03:14:01 +00:00
|
|
|
## Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
2010-12-03 14:45:09 +00:00
|
|
|
|
2011-03-20 23:58:23 +00:00
|
|
|
## Author: Glenn Morris <rgm@gnu.org>
|
2014-02-10 01:34:22 +00:00
|
|
|
## Maintainer: emacs-devel@gnu.org
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
## 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:
|
|
|
|
|
2014-10-25 18:53:20 +00:00
|
|
|
## The Emacs repository does not include the configure script (and
|
|
|
|
## associated helpers). The first time you fetch Emacs from the repo,
|
2011-03-20 23:58:23 +00:00
|
|
|
## run this script to generate the necessary files.
|
2014-01-08 23:24:54 +00:00
|
|
|
## For more details, see the file INSTALL.REPO.
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
### Code:
|
|
|
|
|
|
|
|
## Tools we need:
|
2011-03-28 00:48:39 +00:00
|
|
|
## Note that we respect the values of AUTOCONF etc, like autoreconf does.
|
2014-05-16 15:49:13 +00:00
|
|
|
progs="autoconf automake"
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
## Minimum versions we need:
|
2012-07-09 04:52:49 +00:00
|
|
|
autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac`
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2012-08-07 01:03:44 +00:00
|
|
|
## 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`
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
## $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 ()
|
|
|
|
{
|
2011-03-28 00:48:39 +00:00
|
|
|
## Remove eg "./autogen.sh: line 50: autoconf: command not found".
|
2014-05-02 17:40:09 +00:00
|
|
|
$1 --version 2>&1 | sed -e '/not found/d' -e 's/.* //' -n -e '1 s/\([0-9][0-9\.]*\).*/\1/p'
|
2011-03-20 23:58:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
## $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.
|
2011-12-04 08:02:42 +00:00
|
|
|
## Return 0 if program is present with version >= minimum version.
|
2011-03-20 23:58:23 +00:00
|
|
|
## 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 ()
|
|
|
|
{
|
2011-03-28 00:48:39 +00:00
|
|
|
## Respect eg $AUTOMAKE if it is set, like autoreconf does.
|
2014-05-02 17:40:09 +00:00
|
|
|
uprog=`echo $1 | sed -e 's/-/_/g' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
|
2011-03-28 00:48:39 +00:00
|
|
|
|
|
|
|
eval uprog=\$${uprog}
|
|
|
|
|
|
|
|
[ x"$uprog" = x ] && uprog=$1
|
|
|
|
|
|
|
|
have_version=`get_version $uprog`
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
[ 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
|
|
|
|
}
|
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
do_check=true
|
2017-01-12 19:06:03 +00:00
|
|
|
do_autoconf=true
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
do_git=false
|
|
|
|
|
2016-02-05 21:45:11 +00:00
|
|
|
for arg; do
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
case $arg in
|
|
|
|
--help)
|
|
|
|
exec echo "$0: usage: $0 [all|autoconf|git]";;
|
2017-01-11 20:01:28 +00:00
|
|
|
--no-check)
|
2017-01-12 19:06:03 +00:00
|
|
|
do_check=false;;
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
all)
|
2016-04-14 01:19:04 +00:00
|
|
|
test -e .git && do_git=true;;
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
autoconf)
|
2017-01-12 19:06:03 +00:00
|
|
|
true;;
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
git)
|
2017-01-12 19:06:03 +00:00
|
|
|
do_autoconf=false
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
do_git=true;;
|
|
|
|
*)
|
|
|
|
echo >&2 "$0: $arg: unknown argument"; exit 1;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# Generate Autoconf and Automake related files, if requested.
|
2011-03-20 23:58:23 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
if $do_autoconf; then
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
if $do_check; then
|
|
|
|
|
|
|
|
echo 'Checking whether you have the necessary tools...
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
(Read INSTALL.REPO for more details on building Emacs)'
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
missing=
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
for prog in $progs; do
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
sprog=`echo "$prog" | sed 's/-/_/g'`
|
2014-05-02 17:40:09 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
eval min=\$${sprog}_min
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo "Checking for $prog (need at least version $min)..."
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
check_version $prog $min
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
retval=$?
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
case $retval in
|
|
|
|
0) stat="ok" ;;
|
|
|
|
1) stat="missing" ;;
|
|
|
|
2) stat="too old" ;;
|
|
|
|
*) stat="unable to check" ;;
|
|
|
|
esac
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo $stat
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
if [ $retval -ne 0 ]; then
|
|
|
|
missing="$missing $prog"
|
|
|
|
eval ${sprog}_why=\""$stat"\"
|
|
|
|
fi
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
done
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
if [ x"$missing" != x ]; then
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo '
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
Building Emacs from the repository requires the following specialized programs:'
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
for prog in $progs; do
|
|
|
|
sprog=`echo "$prog" | sed 's/-/_/g'`
|
2014-05-02 17:40:09 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
eval min=\$${sprog}_min
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo "$prog (minimum version $min)"
|
|
|
|
done
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo '
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
Your system seems to be missing the following tool(s):'
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
for prog in $missing; do
|
|
|
|
sprog=`echo "$prog" | sed 's/-/_/g'`
|
2014-05-02 17:40:09 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
eval why=\$${sprog}_why
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo "$prog ($why)"
|
|
|
|
done
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
echo '
|
2011-03-20 23:58:23 +00:00
|
|
|
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
|
2017-01-11 20:01:28 +00:00
|
|
|
script has made an error, then you can simply re-run this script with
|
|
|
|
the --no-check option.
|
2011-03-20 23:58:23 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
Please report any problems with this script to bug-gnu-emacs@gnu.org .'
|
2011-03-20 23:58:23 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo 'Your system has the required tools.'
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
|
2017-01-11 20:01:28 +00:00
|
|
|
fi # do_check
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
|
2017-01-03 15:46:40 +00:00
|
|
|
## Create nt/gnulib.mk if it doesn't exist, as autoreconf will need it.
|
|
|
|
if test ! -f nt/gnulib.mk; then
|
2017-01-04 08:44:45 +00:00
|
|
|
echo 'Inferring nt/gnulib.mk from lib/gnulib.mk ...'
|
2017-01-05 20:04:00 +00:00
|
|
|
metascript='/^[^#]/s|^.*$|/^## begin *gnulib module &/,/^## end *gnulib module &/d|p'
|
|
|
|
script=`sed -n "$metascript" nt/gnulib-modules-to-delete.cfg` || exit
|
2017-01-04 08:44:45 +00:00
|
|
|
sed "$script" lib/gnulib.mk > nt/gnulib.mk || exit
|
2017-01-03 15:46:40 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Running 'autoreconf -fi -I m4' ..."
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
|
|
|
|
## Let autoreconf figure out what, if anything, needs doing.
|
|
|
|
## Use autoreconf's -f option in case autoreconf itself has changed.
|
|
|
|
autoreconf -fi -I m4 || exit $?
|
|
|
|
|
|
|
|
## Create a timestamp, so that './autogen.sh; make' doesn't
|
|
|
|
## cause 'make' to needlessly run 'autoheader'.
|
|
|
|
echo timestamp > src/stamp-h.in || exit
|
2011-03-20 23:58:23 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
# True if the Git setup was OK before autogen.sh was run.
|
2011-03-20 23:58:23 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
git_was_ok=true
|
2011-03-20 23:58:23 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
if $do_git; then
|
|
|
|
case `cp --help 2>/dev/null` in
|
|
|
|
*--backup*--verbose*)
|
|
|
|
cp_options='--backup=numbered --verbose';;
|
|
|
|
*)
|
|
|
|
cp_options='-f';;
|
|
|
|
esac
|
|
|
|
fi
|
2012-08-02 01:59:19 +00:00
|
|
|
|
2015-09-21 18:56:01 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
# Like 'git config NAME VALUE' but verbose on change and exiting on failure.
|
|
|
|
# Also, do not configure unless requested.
|
2015-09-21 18:56:01 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
git_config ()
|
|
|
|
{
|
|
|
|
name=$1
|
|
|
|
value=$2
|
|
|
|
|
|
|
|
ovalue=`git config --get "$name"` && test "$ovalue" = "$value" || {
|
|
|
|
if $do_git; then
|
|
|
|
if $git_was_ok; then
|
|
|
|
echo 'Configuring local git repository...'
|
|
|
|
case $cp_options in
|
|
|
|
--backup=*)
|
2016-04-14 01:19:04 +00:00
|
|
|
config=$git_common_dir/config
|
|
|
|
cp $cp_options --force -- "$config" "$config" || exit;;
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
esac
|
|
|
|
fi
|
|
|
|
echo "git config $name '$value'"
|
|
|
|
git config "$name" "$value" || exit
|
|
|
|
fi
|
|
|
|
git_was_ok=false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
## Configure Git, if requested.
|
|
|
|
|
2016-04-14 01:19:04 +00:00
|
|
|
# Get location of Git's common configuration directory. For older Git
|
|
|
|
# versions this is just '.git'. Newer Git versions support worktrees.
|
|
|
|
|
2016-05-14 17:24:22 +00:00
|
|
|
{ test -e .git &&
|
|
|
|
git_common_dir=`git rev-parse --no-flags --git-common-dir 2>/dev/null` &&
|
|
|
|
test -n "$git_common_dir"
|
|
|
|
} || git_common_dir=.git
|
2016-04-14 01:19:04 +00:00
|
|
|
hooks=$git_common_dir/hooks
|
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
# Check hashes when transferring objects among repositories.
|
|
|
|
|
|
|
|
git_config transfer.fsckObjects true
|
|
|
|
|
|
|
|
|
|
|
|
# Configure 'git diff' hunk header format.
|
2015-09-21 18:56:01 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
git_config diff.elisp.xfuncname \
|
|
|
|
'^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
|
Improve diff hunk headers when maintaining Emacs
* .gitattributes: Improve diff hunk header support for makefiles,
shell scripts, Ada, C, C++, Objective C, HTML, SHTML, XML, Java,
Perl, PHP, Python, Ruby, and TeX, all of which are used in Emacs
somewhere (sometimes just in test cases).
* autogen.sh: Add regexes for makefiles and shell scripts.
2016-03-13 19:20:01 +00:00
|
|
|
git_config 'diff.m4.xfuncname' '^((m4_)?define|A._DEFUN(_ONCE)?)\([^),]*'
|
|
|
|
git_config 'diff.make.xfuncname' \
|
|
|
|
'^([$.[:alnum:]_].*:|[[:alnum:]_]+[[:space:]]*([*:+]?[:?]?|!?)=|define .*)'
|
|
|
|
git_config 'diff.shell.xfuncname' \
|
|
|
|
'^([[:space:]]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*\(\)|[[:alpha:]_][[:alnum:]_]*=)'
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
git_config diff.texinfo.xfuncname \
|
|
|
|
'^@node[[:space:]]+([^,[:space:]][^,]+)'
|
2015-09-21 18:56:01 +00:00
|
|
|
|
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
# Install Git hooks.
|
2015-09-21 18:56:01 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
tailored_hooks=
|
|
|
|
sample_hooks=
|
2014-11-22 23:46:17 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
for hook in commit-msg pre-commit; do
|
2016-04-14 01:19:04 +00:00
|
|
|
cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
|
2014-11-22 23:46:17 +00:00
|
|
|
tailored_hooks="$tailored_hooks $hook"
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
done
|
|
|
|
for hook in applypatch-msg pre-applypatch; do
|
2016-04-14 01:19:04 +00:00
|
|
|
cmp -- "$hooks/$hook.sample" "$hooks/$hook" >/dev/null 2>&1 ||
|
2014-11-22 23:46:17 +00:00
|
|
|
sample_hooks="$sample_hooks $hook"
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
done
|
2014-11-22 23:46:17 +00:00
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
if test -n "$tailored_hooks$sample_hooks"; then
|
|
|
|
if $do_git; then
|
2014-11-22 23:46:17 +00:00
|
|
|
echo "Installing git hooks..."
|
|
|
|
|
|
|
|
if test -n "$tailored_hooks"; then
|
|
|
|
for hook in $tailored_hooks; do
|
2016-04-14 01:19:04 +00:00
|
|
|
dst=$hooks/$hook
|
|
|
|
cp $cp_options -- build-aux/git-hooks/$hook "$dst" || exit
|
|
|
|
chmod -- a-w "$dst" || exit
|
2014-11-22 23:46:17 +00:00
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test -n "$sample_hooks"; then
|
|
|
|
for hook in $sample_hooks; do
|
2016-05-05 04:09:22 +00:00
|
|
|
dst=$hooks/$hook
|
|
|
|
cp $cp_options -- "$dst.sample" "$dst" || exit
|
|
|
|
chmod -- a-w "$dst" || exit
|
2014-11-22 23:46:17 +00:00
|
|
|
done
|
|
|
|
fi
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
else
|
|
|
|
git_was_ok=false
|
2014-11-22 23:46:17 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
if test ! -f configure; then
|
|
|
|
echo "You can now run '$0 autoconf'."
|
2016-04-13 18:12:15 +00:00
|
|
|
elif test -e .git && test $git_was_ok = false && test $do_git = false; then
|
autogen.sh now configures git only on request
* autogen.sh (do_autoconf, do_git): New vars.
Support new arguments --help, all, autoconf, git.
By default, just do autoconf-related configuration, not git.
Prefer 'echo' to 'cat <<EOF ...', as this tends to avoid temp files.
If GNU cp is available, use it to backup .git/config before
changing it. When configuring git, chatter about what is being
done, and configure git to check hashes. Avoid some duplicate
file name specification when creating git hooks.
* GNUmakefile (ALL_IF_GIT): New macro.
(configure): Use it.
* INSTALL.REPO: Suggest './autogen.sh all'.
2016-02-03 07:11:36 +00:00
|
|
|
echo "You can now run '$0 git'."
|
|
|
|
elif test ! -f config.status ||
|
|
|
|
test -n "`find src/stamp-h.in -newer config.status`"; then
|
|
|
|
echo "You can now run './configure'."
|
|
|
|
fi
|
2011-03-20 23:58:23 +00:00
|
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
|
|
### autogen.sh ends here
|