mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-24 07:20:37 +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'.
This commit is contained in:
parent
b50075dd05
commit
aca31e3815
@ -62,10 +62,13 @@ default $(ORDINARY_GOALS): Makefile
|
||||
# Execute in sequence, so that multiple user goals don't conflict.
|
||||
.NOTPARALLEL:
|
||||
|
||||
# 'all' if a .git subdirectory is present, empty otherwise.
|
||||
ALL_IF_GIT = $(subst .git,all,$(wildcard .git))
|
||||
|
||||
configure:
|
||||
@echo >&2 'There seems to be no "configure" file in this directory.'
|
||||
@echo >&2 'Running ./autogen.sh ...'
|
||||
./autogen.sh
|
||||
@echo >&2 Running ./autogen.sh $(ALL_IF_GIT) ...
|
||||
./autogen.sh $(ALL_IF_GIT)
|
||||
@echo >&2 '"configure" file built.'
|
||||
|
||||
Makefile: configure
|
||||
|
@ -18,9 +18,10 @@ makeinfo - not strictly necessary, but highly recommended, so that
|
||||
you can build the manuals.
|
||||
|
||||
To use the autotools, run the following shell command to generate the
|
||||
'configure' script and some related files:
|
||||
'configure' script and some related files, and to set up your git
|
||||
configuration:
|
||||
|
||||
$ ./autogen.sh
|
||||
$ ./autogen.sh all
|
||||
|
||||
You can then configure your build as follows:
|
||||
|
||||
|
174
autogen.sh
174
autogen.sh
@ -103,16 +103,35 @@ check_version ()
|
||||
return 2
|
||||
}
|
||||
|
||||
do_autoconf=false
|
||||
do_git=false
|
||||
|
||||
cat <<EOF
|
||||
Checking whether you have the necessary tools...
|
||||
(Read INSTALL.REPO for more details on building Emacs)
|
||||
for arg in ${*-autoconf}; do
|
||||
case $arg in
|
||||
--help)
|
||||
exec echo "$0: usage: $0 [all|autoconf|git]";;
|
||||
all)
|
||||
do_autoconf=true do_git=true;;
|
||||
autoconf)
|
||||
do_autoconf=true;;
|
||||
git)
|
||||
do_git=true;;
|
||||
*)
|
||||
echo >&2 "$0: $arg: unknown argument"; exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
EOF
|
||||
|
||||
missing=
|
||||
# Generate Autoconf and Automake related files, if requested.
|
||||
|
||||
for prog in $progs; do
|
||||
if $do_autoconf; then
|
||||
|
||||
echo 'Checking whether you have the necessary tools...
|
||||
(Read INSTALL.REPO for more details on building Emacs)'
|
||||
|
||||
missing=
|
||||
|
||||
for prog in $progs; do
|
||||
|
||||
sprog=`echo "$prog" | sed 's/-/_/g'`
|
||||
|
||||
@ -138,15 +157,13 @@ for prog in $progs; do
|
||||
eval ${sprog}_why=\""$stat"\"
|
||||
fi
|
||||
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
if [ x"$missing" != x ]; then
|
||||
if [ x"$missing" != x ]; then
|
||||
|
||||
cat <<EOF
|
||||
|
||||
Building Emacs from the repository requires the following specialized programs:
|
||||
EOF
|
||||
echo '
|
||||
Building Emacs from the repository requires the following specialized programs:'
|
||||
|
||||
for prog in $progs; do
|
||||
sprog=`echo "$prog" | sed 's/-/_/g'`
|
||||
@ -157,10 +174,8 @@ EOF
|
||||
done
|
||||
|
||||
|
||||
cat <<EOF
|
||||
|
||||
Your system seems to be missing the following tool(s):
|
||||
EOF
|
||||
echo '
|
||||
Your system seems to be missing the following tool(s):'
|
||||
|
||||
for prog in $missing; do
|
||||
sprog=`echo "$prog" | sed 's/-/_/g'`
|
||||
@ -170,8 +185,7 @@ EOF
|
||||
echo "$prog ($why)"
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
|
||||
echo '
|
||||
If you think you have the required tools, please add them to your PATH
|
||||
and re-run this script.
|
||||
|
||||
@ -198,65 +212,102 @@ autoreconf -fi -I m4
|
||||
|
||||
instead of this script.
|
||||
|
||||
Please report any problems with this script to bug-gnu-emacs@gnu.org .
|
||||
EOF
|
||||
Please report any problems with this script to bug-gnu-emacs@gnu.org .'
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 'Your system has the required tools.'
|
||||
echo "Running 'autoreconf -fi -I m4' ..."
|
||||
|
||||
|
||||
## 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
|
||||
fi
|
||||
|
||||
echo 'Your system has the required tools.'
|
||||
echo "Running 'autoreconf -fi -I m4' ..."
|
||||
|
||||
# True if the Git setup was OK before autogen.sh was run.
|
||||
|
||||
git_was_ok=true
|
||||
|
||||
if $do_git; then
|
||||
case `cp --help 2>/dev/null` in
|
||||
*--backup*--verbose*)
|
||||
cp_options='--backup=numbered --verbose';;
|
||||
*)
|
||||
cp_options='-f';;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
## 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 $?
|
||||
# Like 'git config NAME VALUE' but verbose on change and exiting on failure.
|
||||
# Also, do not configure unless requested.
|
||||
|
||||
## Create a timestamp, so that './autogen.sh; make' doesn't
|
||||
## cause 'make' to needlessly run 'autoheader'.
|
||||
echo timestamp > src/stamp-h.in || exit
|
||||
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=*)
|
||||
cp $cp_options --force .git/config .git/config || exit;;
|
||||
esac
|
||||
fi
|
||||
echo "git config $name '$value'"
|
||||
git config "$name" "$value" || exit
|
||||
fi
|
||||
git_was_ok=false
|
||||
}
|
||||
}
|
||||
|
||||
## Configure Git, if requested.
|
||||
|
||||
# Check hashes when transferring objects among repositories.
|
||||
|
||||
git_config transfer.fsckObjects true
|
||||
|
||||
|
||||
## Configure Git, if using Git.
|
||||
if test -d .git && (git status -s) >/dev/null 2>&1; then
|
||||
# Configure 'git diff' hunk header format.
|
||||
|
||||
# Configure 'git diff' hunk header format.
|
||||
|
||||
git config 'diff.elisp.xfuncname' \
|
||||
'^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)' || exit
|
||||
git config 'diff.texinfo.xfuncname' \
|
||||
'^@node[[:space:]]+([^,[:space:]][^,]+)' || exit
|
||||
git_config diff.elisp.xfuncname \
|
||||
'^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
|
||||
git_config diff.texinfo.xfuncname \
|
||||
'^@node[[:space:]]+([^,[:space:]][^,]+)'
|
||||
|
||||
|
||||
# Install Git hooks.
|
||||
# Install Git hooks.
|
||||
|
||||
tailored_hooks=
|
||||
sample_hooks=
|
||||
tailored_hooks=
|
||||
sample_hooks=
|
||||
|
||||
for hook in commit-msg pre-commit; do
|
||||
cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
|
||||
for hook in commit-msg pre-commit; do
|
||||
cmp build-aux/git-hooks/$hook .git/hooks/$hook >/dev/null 2>&1 ||
|
||||
tailored_hooks="$tailored_hooks $hook"
|
||||
done
|
||||
for hook in applypatch-msg pre-applypatch; do
|
||||
test ! -r .git/hooks/$hook.sample ||
|
||||
cmp .git/hooks/$hook.sample .git/hooks/$hook >/dev/null 2>&1 ||
|
||||
done
|
||||
for hook in applypatch-msg pre-applypatch; do
|
||||
src=.git/hooks/$hook.sample
|
||||
cmp "$src" .git/hooks/$hook >/dev/null 2>&1 ||
|
||||
sample_hooks="$sample_hooks $hook"
|
||||
done
|
||||
done
|
||||
|
||||
if test -n "$tailored_hooks$sample_hooks"; then
|
||||
if test -n "$tailored_hooks$sample_hooks"; then
|
||||
if $do_git; then
|
||||
echo "Installing git hooks..."
|
||||
|
||||
case `cp --help 2>/dev/null` in
|
||||
*--backup*--verbose*)
|
||||
cp_options='--backup=numbered --verbose';;
|
||||
*)
|
||||
cp_options='-f';;
|
||||
esac
|
||||
|
||||
if test -n "$tailored_hooks"; then
|
||||
for hook in $tailored_hooks; do
|
||||
cp $cp_options build-aux/git-hooks/$hook .git/hooks || exit
|
||||
chmod a-w .git/hooks/$hook || exit
|
||||
dst=.git/hooks/$hook
|
||||
cp $cp_options build-aux/git-hooks/$hook "$dst" || exit
|
||||
chmod a-w "$dst" || exit
|
||||
done
|
||||
fi
|
||||
|
||||
@ -266,10 +317,19 @@ if test -d .git && (git status -s) >/dev/null 2>&1; then
|
||||
chmod a-w .git/hooks/$hook || exit
|
||||
done
|
||||
fi
|
||||
else
|
||||
git_was_ok=false
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "You can now run './configure'."
|
||||
if test ! -f configure; then
|
||||
echo "You can now run '$0 autoconf'."
|
||||
elif test -d .git && test $git_was_ok = false && test $do_git = false; then
|
||||
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
|
||||
|
||||
exit 0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user