X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a660037698bce151915e6e084593071134df1331..1aebe99145e9ef612cdb272800904e3ba9297196:/autogen.sh diff --git a/autogen.sh b/autogen.sh index bc9c5a008e..2e10a77cb3 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,7 +1,7 @@ #!/bin/sh ### autogen.sh - tool to help build Emacs from a repository checkout -## Copyright (C) 2011-2015 Free Software Foundation, Inc. +## Copyright (C) 2011-2016 Free Software Foundation, Inc. ## Author: Glenn Morris ## Maintainer: emacs-devel@gnu.org @@ -103,16 +103,36 @@ check_version () return 2 } +do_autoconf=false +test $# -eq 0 && do_autoconf=true +do_git=false + +for arg; 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 + -cat < 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. -## 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 $? +git_was_ok=true -## Create a timestamp, so that './autogen.sh; make' doesn't -## cause 'make' to needlessly run 'autoheader'. -echo timestamp > src/stamp-h.in || exit +if $do_git; then + case `cp --help 2>/dev/null` in + *--backup*--verbose*) + cp_options='--backup=numbered --verbose';; + *) + cp_options='-f';; + esac +fi -## Install Git hooks, if using Git. -if test -d .git/hooks; then - 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 || +# Like 'git config NAME VALUE' but verbose on change and exiting on failure. +# Also, do not configure unless requested. + +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 diff' hunk header format. + +git_config diff.elisp.xfuncname \ + '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)' +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:]_]*=)' +git_config diff.texinfo.xfuncname \ + '^@node[[:space:]]+([^,[:space:]][^,]+)' + + +# Install Git 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 || 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 @@ -254,10 +323,19 @@ if test -d .git/hooks; 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 -e .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