Remove some files that autoreconf can supply.
[bpt/emacs.git] / autogen / update_autogen
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
31 function die () # write error to stderr and exit
32 {
33 [ $# -gt 0 ] && echo "$PN: $@" >&2
34 exit 1
35 }
36
37 PN=${0##*/} # basename of script
38 PD=${0%/*}
39
40 [ "$PD" = "$0" ] && PD=. # if PATH includes PWD
41
42 ## This should be the autogen directory.
43 cd $PD
44 cd ../
45 [ -d autogen ] || die "Could not locate autogen directory"
46
47
48 function usage ()
49 {
50 cat 1>&2 <<EOF
51 Usage: ${PN} [-f] [-c] [-q]
52 Update the generated files in the Emacs autogen/ directory.
53 Options:
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.
58 EOF
59 exit 1
60 }
61
62
63 ## Defaults.
64
65 force=
66 commit=
67 quiet=
68
69 ## Parameters.
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"
72
73 for g in $genfiles; do
74 basegen="$basegen ${g##*/}"
75 done
76
77 [ "$basegen" ] || die "internal error"
78
79 tempfile=/tmp/$PN.$$
80
81 trap "rm -f $tempfile 2> /dev/null" EXIT
82
83
84 while 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
100 done
101 shift $(( --OPTIND ))
102 OPTIND=1
103
104 [ $# -eq 0 ] || die "Wrong number of arguments"
105
106
107 [ "$quiet" ] && exec 1> /dev/null
108
109
110 echo "Running bzr status..."
111
112 bzr status -S $sources >| $tempfile || die "bzr status error for sources"
113
114 while read stat file; do
115
116 case $stat in
117 M)
118 echo "Locally modified: $file"
119 [ "$force" ] || die "There are local modifications"
120 ;;
121
122 *) die "Unexpected status ($stat) for $file" ;;
123 esac
124 done < $tempfile
125
126
127 echo "Running autoreconf..."
128
129 autoreconf -i -I m4 2>| $tempfile
130
131 retval=$?
132
133 ## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr.
134 if [ "$quiet" ]; then
135 grep -v 'installing `\.' $tempfile 1>&2
136 else
137 cat "$tempfile" 1>&2
138 fi
139
140 [ $retval -ne 0 ] && die "autoreconf error"
141
142
143 cp $genfiles autogen/
144
145
146 cd autogen
147
148 echo "Checking status of generated files..."
149
150 bzr status -S $basegen >| $tempfile || \
151 die "bzr status error for generated files"
152
153
154 modified=
155
156 while read stat file; do
157
158 [ "$stat" != "M" ] && die "Unexpected status ($stat) for generated $file"
159
160 modified="$modified $file"
161
162 done < $tempfile
163
164
165 [ "$modified" ] || {
166 echo "No files were modified"
167 exit 0
168 }
169
170 echo "Modified file(s): $modified"
171
172 [ "$commit" ] || exit 0
173
174
175 echo "Committing..."
176
177 ## bzr status output is annoyingly always relative to top-level, not PWD.
178 cd ../
179
180 bzr commit -m "Auto-commit of generated files." $modified || \
181 die "bzr commit error"
182
183
184 echo "Committed files: $modified"
185
186 exit
187
188 ### update_autogen ends here