]> git.saurik.com Git - bison.git/blame - README-hacking
lalr1.cc: check (and fix) %printer exception safety
[bison.git] / README-hacking
CommitLineData
2ed0e35f 1This file attempts to describe the rules to use when hacking Bison.
9126263e 2Don't put this file into the distribution.
2ed0e35f 3
f414d77d
AD
4Everything related to the development of Bison is on Savannah:
5
26fccd4d 6 http://savannah.gnu.org/projects/bison/
f414d77d
AD
7
8
2ed0e35f
AD
9* Administrivia
10
11** If you incorporate a change from somebody on the net:
12First, if it is a large change, you must make sure they have signed
13the appropriate paperwork. Second, be sure to add their name and
14email address to THANKS.
15
7de42e52 16** If a change fixes a test, mention the test in the commit message.
2ed0e35f
AD
17
18** Bug reports
7de42e52 19If somebody reports a new bug, mention his name in the commit message
2ed0e35f
AD
20and in the test case you write. Put him into THANKS.
21
22The correct response to most actual bugs is to write a new test case
23which demonstrates the bug. Then fix the bug, re-run the test suite,
24and check everything in.
25
f414d77d 26
427c0dda
AD
27* Hacking
28
2ed0e35f
AD
29** Visible changes
30Which include serious bug fixes, must be mentioned in NEWS.
427c0dda
AD
31
32** Translations
33Only user visible strings are to be translated: error messages, bits
34of the .output file etc. This excludes impossible error messages
35(comparable to assert/abort), and all the --trace output which is
36meant for the maintainers only.
2ed0e35f
AD
37
38
26fccd4d
AD
39* Working from the repository
40
41These notes intend to help people working on the checked-out sources.
42These requirements do not apply when building from a distribution tarball.
43
44** Requirements
45
46We've opted to keep only the highest-level sources in the repository.
47This eases our maintenance burden, (fewer merges etc.), but imposes more
48requirements on anyone wishing to build from the just-checked-out sources.
49For example, you have to use the latest stable versions of the maintainer
50tools we depend upon, including:
51
52- Automake <http://www.gnu.org/software/automake/>
53- Autoconf <http://www.gnu.org/software/autoconf/>
54- Flex <http://www.gnu.org/software/flex/>
55- Gettext <http://www.gnu.org/software/gettext/>
56- Gzip <http://www.gnu.org/software/gzip/>
57- Perl <http://www.cpan.org/>
58- Rsync <http://samba.anu.edu.au/rsync/>
59- Tar <http://www.gnu.org/software/tar/>
60
bcbbf654
AD
61Valgrind <http://valgrind.org/> is also highly recommended, if it supports
62your architecture.
26fccd4d
AD
63
64Bison is written using Bison grammars, so there are bootstrapping
65issues. The bootstrap script attempts to discover when the C code
66generated from the grammars is out of date, and to bootstrap with an
67out-of-date version of the C code, but the process is not foolproof.
68Also, you may run into similar problems yourself if you modify Bison.
69
70Only building the initial full source tree will be a bit painful.
4d4777c7
AD
71Later, after synchronizing from the repository a plain 'make' should
72be sufficient. Note, however, that when gnulib is updated, running
73'./bootstrap' again might be needed.
26fccd4d
AD
74
75** First checkout
76
77Obviously, if you are reading these notes, you did manage to check out
78this package from the repository. For the record, you will find all the
79relevant information on:
80
81 http://savannah.gnu.org/git/?group=bison
82
83Bison uses Git submodules: subscriptions to other Git repositories.
84In particular it uses gnulib, the GNU portability library. To ask Git
85to perform the first checkout of the submodules, run
86
87 $ git submodule update --init
88
89Git submodule support is weak before versions 1.6 and later, you
90should probably upgrade Git if your version is older.
91
92The next step is to get other files needed to build, which are
93extracted from other source packages:
94
95 $ ./bootstrap
96
97And there you are! Just
98
99 $ ./configure
100 $ make
101 $ make check
102
103At this point, there should be no difference between your local copy,
104and the master copy:
105
106 $ git diff
107
108should output no difference.
109
110Enjoy!
111
112** Updating
113
114The use of submodules make things somewhat different because git does
115not support recursive operations: submodules must be taken care of
116explicitly by the user.
117
118*** Updating Bison
119
4d4777c7
AD
120If you pull a newer version of a branch, say via "git pull", you might
121import requests for updated submodules. A simple "git diff" will
26fccd4d
AD
122reveal if the current version of the submodule (i.e., the actual
123contents of the gnulib directory) and the current request from the
124subscriber (i.e., the reference of the version of gnulib that the
bcbbf654 125Bison repository requests) differ. To upgrade the submodules (i.e.,
26fccd4d 126to check out the version that is actually requested by the subscriber,
4d4777c7 127run "git submodule update".
26fccd4d
AD
128
129 $ git pull
130 $ git submodule update
131
132*** Updating a submodule
133To update a submodule, say gnulib, do as follows:
134
135Get the most recent version of the master branch from git.
136
137 $ cd gnulib
138 $ git fetch
139 $ git checkout -b master --track origin/master
140
141Make sure Bison can live with that version of gnulib.
142
143 $ cd ..
144 $ ./bootstrap
145 $ make distcheck
146
147Register your changes.
148
149 $ git checkin ...
150
a898435b
JD
151For a suggestion of what gnulib commit might be stable enough for a
152formal release, see the ChangeLog in the latest gnulib snapshot at:
153
154 http://erislabs.net/ianb/projects/gnulib/
155
bcbbf654 156The Autoconf files we use are currently:
a898435b
JD
157
158 m4/m4.m4
159 lib/m4sugar/m4sugar.m4
160 lib/m4sugar/foreach.m4
161
e2eb03d4 162These files don't change very often in Autoconf, so it should be
a898435b
JD
163relatively straight-forward to examine the differences in order to
164decide whether to update.
26fccd4d 165
2ed0e35f
AD
166* Test suite
167
168** make check
169Use liberally.
170
ec78bdab
AD
171** Typical errors
172If the test suite shows failures such as the following one
173
174 .../bison/lib/getopt.h:196:8: error: redefinition of 'struct option'
175 /usr/include/getopt.h:54:8: error: previous definition of 'struct option'
176
177it probably means that some file was compiled without
10b009fa
AD
178AT_DATA_SOURCE_PROLOGUE. This error is due to the fact that our -I options
179pick up gnulib's replacement headers, such as getopt.h, and this will go
180wrong if config.h was not included first.
ec78bdab
AD
181
182See tests/local.at for details.
183
bcbbf654
AD
184** make maintainer-check-valgrind
185This target uses valgrind both to check bison, and the generated parsers.
186
187This is not mature on Mac OS X. First, Valgrind does support the way bison
188calls m4, so Valgrind cannot be used to check bison on Mac OS X.
189
190Second, there are many errors that come from the platform itself, not from
191bison. build-aux/darwin11.4.0.valgrind addresses some of them.
192
193Third, valgrind issues warnings such as:
194
195 --99312:0:syswrap- WARNING: Ignoring sigreturn( ..., UC_RESET_ALT_STACK );
196
197which cause the test to fail uselessly. It is hard to ignore these errors
198with a major overhaul of the way instrumentation is performed in the test
199suite. So currently, do not try to run valgrind on Mac OS X.
200
2ed0e35f
AD
201** Release checks
202Try to run the test suite with more severe conditions before a
203release:
204
205- Configure the package with --enable-gcc-warnings, so that one checks
206 that 1. Bison compiles cleanly, 2. the parsers it produces compile
207 cleanly too.
208
4d4777c7
AD
209- Maybe build with -DGNULIB_POSIXCHECK, which suggests gnulib modules
210 that can fix portability issues. See if you really want to pay
211 attention to its warnings; there's no need to obey blindly to it
212 (<http://lists.gnu.org/archive/html/bison-patches/2012-05/msg00057.html>).
fb9a3976 213
4d4777c7 214- Check with "make syntax-check" if there are issues diagnosed by
a0cd287e
AD
215 gnulib.
216
4d4777c7
AD
217- run "make maintainer-check" which:
218 - runs "valgrind -q bison" to run Bison under Valgrind.
1f1b791b 219 - runs the parsers under Valgrind.
f377f69f 220 - runs the test suite with G++ as C compiler...
2ed0e35f 221
4d4777c7 222- run "make maintainer-push-check", which runs "make maintainer-check"
9126263e
JD
223 while activating the push implementation and its pull interface wrappers
224 in many test cases that were originally written to exercise only the
225 pull implementation. This makes certain the push implementation can
226 perform every task the pull implementation can.
227
4d4777c7 228- run "make maintainer-xml-check", which runs "make maintainer-check"
9126263e
JD
229 while checking Bison's XML automaton report for every working grammar
230 passed to Bison in the test suite. The check just diffs the output of
231 Bison's included XSLT style sheets with the output of --report=all and
232 --graph.
233
4d4777c7 234- running "make maintainer-release-check" takes care of running
a0cd287e
AD
235 maintainer-check, maintainer-push-check and maintainer-xml-check.
236
2ed0e35f 237- Change tests/atlocal/CFLAGS to add your preferred options. For
4d4777c7
AD
238 instance, "-traditional" to check that the parsers are K&R. Note
239 that it does not make sense for glr.c, which should be ANSI, but
240 currently is actually GNU C, nor for lalr1.cc.
2ed0e35f 241
2ed0e35f
AD
242
243* Release Procedure
4d4777c7
AD
244This section needs to be updated to take into account features from
245gnulib. In particular, be sure to read README-release.
2ed0e35f 246
a898435b
JD
247** Update the submodules. See above.
248
845346b3
JD
249** Update maintainer tools, such as Autoconf. See above.
250
d67e37a7
JD
251** Try to get the *.pot files to the Translation Project at least one
252week before a stable release, to give them time to translate them.
253Before generating the *.pot files, make sure that po/POTFILES.in and
254runtime-po/POTFILES.in list all files with translatable strings.
255This helps: grep -l '\<_(' *
ddc65ffd 256
2ed0e35f
AD
257** Tests
258See above.
259
260** Update the foreign files
4d4777c7 261Running "./bootstrap" in the top level should update them all for you.
e476c87d
PE
262This covers PO files too. Sometimes a PO file contains problems that
263causes it to be rejected by recent Gettext releases; please report
264these to the Translation Project.
2ed0e35f 265
548e2104 266** Update README
8ebc7dca
JD
267Make sure the information in README is current. Most notably, make sure
268it recommends a version of GNU M4 that is compatible with the latest
269Bison sources.
270
271** Check copyright years.
272We update years in copyright statements throughout Bison once at the
4d4777c7 273start of every year by running "make update-copyright". However, before
8ebc7dca
JD
274a release, it's good to verify that it's actually been run. Besides the
275copyright statement for each Bison file, check the copyright statements
276that the skeletons insert into generated parsers, and check all
277occurrences of PACKAGE_COPYRIGHT_YEAR in configure.ac.
548e2104 278
6733d024 279** Update NEWS, commit and tag.
a59a6dde
AD
280See do-release-commit-and-tag in README-release. For a while, we used
281beta names such as "2.6_rc1". Now that we use gnulib in the release
282procedure, we must use "2.5.90", which has the additional benefit of
283being properly sorted in "git tag -l".
2ed0e35f 284
6733d024 285** make alpha, beta, or stable
4d4777c7 286See README-release.
548e2104 287
4d4777c7
AD
288** Upload
289There are two ways to upload the tarballs to the GNU servers: using
290gnupload (from gnulib), or by hand. Obviously prefer the former. But
291in either case, be sure to read the following paragraph.
292
293*** Setup
294You need "gnupg".
2ed0e35f 295
4d4777c7
AD
296Make sure your public key has been uploaded at least to
297keys.gnupg.net. You can upload it with:
548e2104 298
4d4777c7 299 gpg --keyserver keys.gnupg.net --send-keys F125BDF3
2ed0e35f 300
4d4777c7 301where F125BDF3 should be replaced with your key ID.
2ed0e35f 302
4d4777c7
AD
303*** Using gnupload
304You need "ncftp".
305
6537c71f 306At the end "make stable" (or alpha/beta) will display the procedure to
6733d024 307run. Just copy and paste it in your shell.
4d4777c7
AD
308
309*** By hand
2ed0e35f 310
548e2104 311The generic GNU upload procedure is at:
2ed0e35f 312
548e2104
JD
313 http://www.gnu.org/prep/maintain/maintain.html#Automated-FTP-Uploads
314
015e86a7 315Follow the instructions there to register your information so you're permitted
4d4777c7 316to upload.
015e86a7
JD
317
318Here's a brief reminder of how to roll the tarballs and upload them:
548e2104
JD
319
320*** make distcheck
321*** gpg -b bison-2.3b.tar.gz
4d4777c7 322*** In a file named "bison-2.3b.tar.gz.directive", type:
548e2104
JD
323
324 version: 1.1
325 directory: bison
326 filename: bison-2.3b.tar.gz
327
328*** gpg --clearsign bison-2.3b.tar.gz.directive
329*** ftp ftp-upload.gnu.org # Log in as anonymous.
330*** cd /incoming/alpha # cd /incoming/ftp for full release.
331*** put bison-2.3b.tar.gz # This can take a while.
332*** put bison-2.3b.tar.gz.sig
333*** put bison-2.3b.tar.gz.directive.asc
abd189e8 334*** Repeat all these steps for bison-2.3b.tar.xz.
2ed0e35f 335
5bc993d9
JD
336** Update Bison manual on www.gnu.org.
337
338*** You need a non-anonymous checkout of the web pages directory.
339
340 $ cvs -d YOUR_USERID@cvs.savannah.gnu.org:/web/bison checkout bison
341
342*** Get familiar with the instructions for web page maintainers.
343http://www.gnu.org/server/standards/readme_index.html
344http://www.gnu.org/server/standards/README.software.html
345especially the note about symlinks.
346
347*** Build the web pages.
348Assuming BISON_CHECKOUT refers to a checkout of the Bison dir, and
349BISON_WWW_CHECKOUT refers to the web directory created above, do:
350
351 $ cd $BISON_CHECKOUT/doc
352 $ make stamp-vti
353 $ ../build-aux/gendocs.sh -o "$BISON_WWW_CHECKOUT/manual" \
354 bison "Bison - GNU parser generator"
355 $ cd $BISON_WWW_CHECKOUT
356
357Verify that the result looks sane.
358
359*** Commit the modified and the new files.
360
361*** Remove old files.
362Find the files which have not been overwritten (because they belonged to
363sections that have been removed or renamed):
364
365 $ cd manual/html_node
366 $ ls -lt
367
368Remove these files and commit their removal to CVS. For each of these
369files, add a line to the file .symlinks. This will ensure that
370hyperlinks to the removed files will redirect to the entire manual; this
371is better than a 404 error.
372
373There is a problem with 'index.html' being written twice (once for POSIX
374function 'index', once for the table of contents); you can ignore this
375issue.
376
2ed0e35f 377** Announce
6733d024
AD
378The "make stable" (or alpha/beta) command just created a template,
379$HOME/announce-bison-X.Y. Otherwise, to generate it, run:
548e2104
JD
380
381 make RELEASE_TYPE=alpha gpg_key_ID=F125BDF3 announcement
382
5a3c69f1 383where alpha can be replaced by beta or stable and F125BDF3 should be
83e34842
JD
384replaced with your key ID.
385
386Complete/fix the announcement file. The generated list of recipients
387(info-gnu@gnu.org, bug-bison@gnu.org, help-bison@gnu.org,
388bison-patches@gnu.org, and coordinator@translationproject.org) is
4d4777c7
AD
389appropriate for a stable release or a "serious beta". For any other
390release, drop at least info-gnu@gnu.org. For an example of how to
391fill out the rest of the template, search the mailing list archives
392for the most recent release announcement.
83e34842
JD
393
394For a stable release, send the same announcement on the comp.compilers
395newsgroup by sending email to compilers@iecc.com. Do not make any Cc as
396the moderator will throw away anything cross-posted or Cc'ed. It really
397needs to be a separate message.
43a91d61 398
6733d024
AD
399** Prepare NEWS
400So that developers don't accidentally add new items to the old NEWS
401entry, create a new empty entry in line 3 (without the two leading
402spaces):
548e2104 403
6733d024 404 * Noteworthy changes in release ?.? (????-??-??) [?]
548e2104
JD
405
406Push these changes.
407
2ed0e35f
AD
408-----
409
c932d613 410Copyright (C) 2002-2005, 2007-2012 Free Software Foundation, Inc.
2ed0e35f
AD
411
412This file is part of GNU Bison.
413
f16b0819 414This program is free software: you can redistribute it and/or modify
2ed0e35f 415it under the terms of the GNU General Public License as published by
f16b0819
PE
416the Free Software Foundation, either version 3 of the License, or
417(at your option) any later version.
2ed0e35f 418
f16b0819 419This program is distributed in the hope that it will be useful,
2ed0e35f
AD
420but WITHOUT ANY WARRANTY; without even the implied warranty of
421MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
422GNU General Public License for more details.
423
424You should have received a copy of the GNU General Public License
f16b0819 425along with this program. If not, see <http://www.gnu.org/licenses/>.
bcbbf654
AD
426
427 LocalWords: Automake Autoconf Gettext Gzip Rsync Valgrind gnulib submodules
428 LocalWords: submodule init cd distcheck checkin ChangeLog valgrind sigreturn
429 LocalWords: UC gcc DGNULIB POSIXCHECK xml XSLT glr lalr README po runtime rc
430 LocalWords: gnupload gnupg gpg keyserver BDF ncftp filename clearsign cvs dir
431 LocalWords: symlinks vti html lt POSIX Cc'ed
432
433Local Variables:
434mode: outline
435fill-column: 76
436End: