X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b50075dd056b1c18afe96f29142981fe5774ceb1..aca31e3815b9bd9c696cf0c74cc4a80ad7e35ec9:/autogen.sh diff --git a/autogen.sh b/autogen.sh index a63c53c903..2ed58e15ae 100755 --- a/autogen.sh +++ b/autogen.sh @@ -103,16 +103,35 @@ check_version () return 2 } +do_autoconf=false +do_git=false + +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 + + +# Generate Autoconf and Automake related files, if requested. -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 -## Configure Git, if using Git. -if test -d .git && (git status -s) >/dev/null 2>&1; then +# Like 'git config NAME VALUE' but verbose on change and exiting on failure. +# Also, do not configure unless requested. - # Configure 'git diff' hunk header format. +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:]]+)' || 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