#!/bin/bash ### update_autogen - update the generated files in Emacs autogen/ directory ## Copyright (C) 2011 Free Software Foundation, Inc. ## 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: ## This is a helper script to update the pre-built generated files in ## the autogen/ directory. This is suitable for running from cron. ## Only Emacs maintainers need use this, so it uses bash features. ### Code: function die () # write error to stderr and exit { [ $# -gt 0 ] && echo "$PN: $@" >&2 exit 1 } PN=${0##*/} # basename of script PD=${0%/*} [ "$PD" = "$0" ] && PD=. # if PATH includes PWD ## This should be the autogen directory. cd $PD cd ../ [ -d autogen ] || die "Could not locate autogen directory" function usage () { cat 1>&2 < /dev/null" EXIT while getopts ":hcfq" option ; do case $option in (h) usage ;; (c) commit=1 ;; (f) force=1 ;; (q) quiet=1 ;; (\?) die "Bad option -$OPTARG" ;; (:) die "Option -$OPTARG requires an argument" ;; (*) die "getopts error" ;; esac done shift $(( --OPTIND )) OPTIND=1 [ $# -eq 0 ] || die "Wrong number of arguments" [ "$quiet" ] && exec 1> /dev/null echo "Running bzr status..." bzr status -S $sources >| $tempfile || die "bzr status error for sources" while read stat file; do case $stat in M) echo "Locally modified: $file" [ "$force" ] || die "There are local modifications" ;; *) die "Unexpected status ($stat) for $file" ;; esac done < $tempfile echo "Running autoreconf..." autoreconf -i -I m4 2>| $tempfile retval=$? ## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr. if [ "$quiet" ]; then grep -v 'installing `\.' $tempfile 1>&2 else cat "$tempfile" 1>&2 fi [ $retval -ne 0 ] && die "autoreconf error" cp $genfiles autogen/ cd autogen echo "Checking status of generated files..." bzr status -S $basegen >| $tempfile || \ die "bzr status error for generated files" modified= while read stat file; do [ "$stat" != "M" ] && die "Unexpected status ($stat) for generated $file" modified="$modified $file" done < $tempfile [ "$modified" ] || { echo "No files were modified" exit 0 } echo "Modified file(s): $modified" [ "$commit" ] || exit 0 echo "Committing..." ## bzr status output is annoyingly always relative to top-level, not PWD. cd ../ bzr commit -m "Auto-commit of generated files." $modified || \ die "bzr commit error" echo "Committed files: $modified" exit ### update_autogen ends here