2 ### update_autogen - update the generated files in Emacs autogen/ directory
4 ## Copyright (C) 2011 Free Software Foundation, Inc.
6 ## Author: Glenn Morris <rgm@gnu.org>
8 ## This file is part of GNU Emacs.
10 ## GNU Emacs is free software: you can redistribute it and/or modify
11 ## it under the terms of the GNU General Public License as published by
12 ## the Free Software Foundation, either version 3 of the License, or
13 ## (at your option) any later version.
15 ## GNU Emacs is distributed in the hope that it will be useful,
16 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ## GNU General Public License for more details.
20 ## You should have received a copy of the GNU General Public License
21 ## along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
25 ## This is a helper script to update the pre-built generated files in
26 ## the autogen/ directory. This is suitable for running from cron.
27 ## Only Emacs maintainers need use this, so it uses bash features.
31 die
() # write error to stderr and exit
33 [ $# -gt 0 ] && echo "$PN: $@" >&2
37 PN
=${0##*/} # basename of script
40 [ "$PD" = "$0" ] && PD
=.
# if PATH includes PWD
42 ## This should be the autogen directory.
45 [ -d autogen
] || die
"Could not locate autogen directory"
51 Usage: ${PN} [-f] [-c] [-q]
52 Update the generated files in the Emacs autogen/ directory.
54 -f: force an update even if the source files are locally modified.
55 -c: if the update succeeds and the generated files are modified,
56 commit them (caution).
57 -q: be quiet; only give error messages, not status messages.
70 sources
="configure.in lib/Makefile.am"
71 genfiles
="configure aclocal.m4 src/config.in lib/Makefile.in compile config.guess config.sub depcomp install-sh missing"
73 for g
in $genfiles; do
74 basegen
="$basegen ${g##*/}"
77 [ "$basegen" ] || die
"internal error"
81 trap "rm -f $tempfile 2> /dev/null" EXIT
84 while getopts ":hcfq" option
; do
94 (\?) die
"Bad option -$OPTARG" ;;
96 (:) die
"Option -$OPTARG requires an argument" ;;
98 (*) die
"getopts error" ;;
101 shift $
(( --OPTIND ))
104 [ $# -eq 0 ] || die
"Wrong number of arguments"
107 [ "$quiet" ] && exec 1> /dev
/null
110 echo "Running bzr status..."
112 bzr status
-S $sources >|
$tempfile || die
"bzr status error for sources"
114 while read stat
file; do
118 echo "Locally modified: $file"
119 [ "$force" ] || die
"There are local modifications"
122 *) die
"Unexpected status ($stat) for $file" ;;
127 echo "Running autoreconf..."
129 autoreconf
-i -I m4 2>|
$tempfile
133 ## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr.
134 if [ "$quiet" ]; then
135 grep -v 'installing `\.' $tempfile 1>&2
140 [ $retval -ne 0 ] && die
"autoreconf error"
143 cp $genfiles autogen
/
148 echo "Checking status of generated files..."
150 bzr status
-S $basegen >|
$tempfile || \
151 die
"bzr status error for generated files"
156 while read stat
file; do
158 [ "$stat" != "M" ] && die
"Unexpected status ($stat) for generated $file"
160 modified
="$modified $file"
166 echo "No files were modified"
170 echo "Modified file(s): $modified"
172 [ "$commit" ] ||
exit 0
177 ## bzr status output is annoyingly always relative to top-level, not PWD.
180 bzr commit
-m "Auto-commit of generated files." $modified || \
181 die
"bzr commit error"
184 echo "Committed files: $modified"
188 ### update_autogen ends here