Remove some files that autoreconf can supply.
[bpt/emacs.git] / autogen / update_autogen
CommitLineData
66b87493
GM
1#!/bin/bash
2### update_autogen - update the generated files in Emacs autogen/ directory
3
4## Copyright (C) 2011 Free Software Foundation, Inc.
5
6## Author: Glenn Morris <rgm@gnu.org>
7
8## This file is part of GNU Emacs.
9
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.
14
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.
19
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/>.
22
23### Commentary:
24
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.
28
29### Code:
30
31function die () # write error to stderr and exit
32{
33 [ $# -gt 0 ] && echo "$PN: $@" >&2
34 exit 1
35}
36
37PN=${0##*/} # basename of script
38PD=${0%/*}
39
40[ "$PD" = "$0" ] && PD=. # if PATH includes PWD
41
42## This should be the autogen directory.
43cd $PD
44cd ../
45[ -d autogen ] || die "Could not locate autogen directory"
46
47
48function usage ()
49{
50 cat 1>&2 <<EOF
51Usage: ${PN} [-f] [-c] [-q]
52Update the generated files in the Emacs autogen/ directory.
53Options:
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.
58EOF
59 exit 1
60}
61
62
63## Defaults.
64
65force=
66commit=
67quiet=
68
69## Parameters.
70sources="configure.in lib/Makefile.am"
f6ca84c0 71genfiles="configure aclocal.m4 src/config.in lib/Makefile.in compile config.guess config.sub depcomp install-sh missing"
66b87493
GM
72
73for g in $genfiles; do
74 basegen="$basegen ${g##*/}"
75done
76
77[ "$basegen" ] || die "internal error"
78
79tempfile=/tmp/$PN.$$
80
81trap "rm -f $tempfile 2> /dev/null" EXIT
82
83
84while getopts ":hcfq" option ; do
85 case $option in
86 (h) usage ;;
87
88 (c) commit=1 ;;
89
90 (f) force=1 ;;
91
92 (q) quiet=1 ;;
93
94 (\?) die "Bad option -$OPTARG" ;;
95
96 (:) die "Option -$OPTARG requires an argument" ;;
97
98 (*) die "getopts error" ;;
99 esac
100done
101shift $(( --OPTIND ))
102OPTIND=1
103
104[ $# -eq 0 ] || die "Wrong number of arguments"
105
106
904a432c 107[ "$quiet" ] && exec 1> /dev/null
66b87493
GM
108
109
904a432c 110echo "Running bzr status..."
66b87493
GM
111
112bzr status -S $sources >| $tempfile || die "bzr status error for sources"
113
114while read stat file; do
115
116 case $stat in
117 M)
904a432c 118 echo "Locally modified: $file"
66b87493
GM
119 [ "$force" ] || die "There are local modifications"
120 ;;
121
122 *) die "Unexpected status ($stat) for $file" ;;
123 esac
124done < $tempfile
125
126
904a432c 127echo "Running autoreconf..."
66b87493 128
f6ca84c0
GM
129autoreconf -i -I m4 2>| $tempfile
130
131retval=$?
132
133## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr.
134if [ "$quiet" ]; then
135 grep -v 'installing `\.' $tempfile 1>&2
136else
137 cat "$tempfile" 1>&2
138fi
139
140[ $retval -ne 0 ] && die "autoreconf error"
66b87493
GM
141
142
143cp $genfiles autogen/
144
145
146cd autogen
147
904a432c 148echo "Checking status of generated files..."
66b87493
GM
149
150bzr status -S $basegen >| $tempfile || \
151 die "bzr status error for generated files"
152
153
154modified=
155
156while read stat file; do
157
158 [ "$stat" != "M" ] && die "Unexpected status ($stat) for generated $file"
159
160 modified="$modified $file"
161
162done < $tempfile
163
164
165[ "$modified" ] || {
904a432c 166 echo "No files were modified"
66b87493
GM
167 exit 0
168}
169
904a432c 170echo "Modified file(s): $modified"
66b87493
GM
171
172[ "$commit" ] || exit 0
173
174
904a432c 175echo "Committing..."
66b87493
GM
176
177## bzr status output is annoyingly always relative to top-level, not PWD.
178cd ../
179
904a432c 180bzr commit -m "Auto-commit of generated files." $modified || \
66b87493
GM
181 die "bzr commit error"
182
183
904a432c 184echo "Committed files: $modified"
66b87493
GM
185
186exit
187
188### update_autogen ends here