]> git.saurik.com Git - bison.git/blame - README-hacking
maint: style changes
[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
bcbbf654
AD
171** make maintainer-check-valgrind
172This target uses valgrind both to check bison, and the generated parsers.
173
174This is not mature on Mac OS X. First, Valgrind does support the way bison
175calls m4, so Valgrind cannot be used to check bison on Mac OS X.
176
177Second, there are many errors that come from the platform itself, not from
178bison. build-aux/darwin11.4.0.valgrind addresses some of them.
179
180Third, valgrind issues warnings such as:
181
182 --99312:0:syswrap- WARNING: Ignoring sigreturn( ..., UC_RESET_ALT_STACK );
183
184which cause the test to fail uselessly. It is hard to ignore these errors
185with a major overhaul of the way instrumentation is performed in the test
186suite. So currently, do not try to run valgrind on Mac OS X.
187
2ed0e35f
AD
188** Release checks
189Try to run the test suite with more severe conditions before a
190release:
191
192- Configure the package with --enable-gcc-warnings, so that one checks
193 that 1. Bison compiles cleanly, 2. the parsers it produces compile
194 cleanly too.
195
4d4777c7
AD
196- Maybe build with -DGNULIB_POSIXCHECK, which suggests gnulib modules
197 that can fix portability issues. See if you really want to pay
198 attention to its warnings; there's no need to obey blindly to it
199 (<http://lists.gnu.org/archive/html/bison-patches/2012-05/msg00057.html>).
fb9a3976 200
4d4777c7 201- Check with "make syntax-check" if there are issues diagnosed by
a0cd287e
AD
202 gnulib.
203
4d4777c7
AD
204- run "make maintainer-check" which:
205 - runs "valgrind -q bison" to run Bison under Valgrind.
1f1b791b 206 - runs the parsers under Valgrind.
f377f69f 207 - runs the test suite with G++ as C compiler...
2ed0e35f 208
4d4777c7 209- run "make maintainer-push-check", which runs "make maintainer-check"
9126263e
JD
210 while activating the push implementation and its pull interface wrappers
211 in many test cases that were originally written to exercise only the
212 pull implementation. This makes certain the push implementation can
213 perform every task the pull implementation can.
214
4d4777c7 215- run "make maintainer-xml-check", which runs "make maintainer-check"
9126263e
JD
216 while checking Bison's XML automaton report for every working grammar
217 passed to Bison in the test suite. The check just diffs the output of
218 Bison's included XSLT style sheets with the output of --report=all and
219 --graph.
220
4d4777c7 221- running "make maintainer-release-check" takes care of running
a0cd287e
AD
222 maintainer-check, maintainer-push-check and maintainer-xml-check.
223
2ed0e35f 224- Change tests/atlocal/CFLAGS to add your preferred options. For
4d4777c7
AD
225 instance, "-traditional" to check that the parsers are K&R. Note
226 that it does not make sense for glr.c, which should be ANSI, but
227 currently is actually GNU C, nor for lalr1.cc.
2ed0e35f 228
2ed0e35f
AD
229
230* Release Procedure
4d4777c7
AD
231This section needs to be updated to take into account features from
232gnulib. In particular, be sure to read README-release.
2ed0e35f 233
a898435b
JD
234** Update the submodules. See above.
235
845346b3
JD
236** Update maintainer tools, such as Autoconf. See above.
237
d67e37a7
JD
238** Try to get the *.pot files to the Translation Project at least one
239week before a stable release, to give them time to translate them.
240Before generating the *.pot files, make sure that po/POTFILES.in and
241runtime-po/POTFILES.in list all files with translatable strings.
242This helps: grep -l '\<_(' *
ddc65ffd 243
2ed0e35f
AD
244** Tests
245See above.
246
247** Update the foreign files
4d4777c7 248Running "./bootstrap" in the top level should update them all for you.
e476c87d
PE
249This covers PO files too. Sometimes a PO file contains problems that
250causes it to be rejected by recent Gettext releases; please report
251these to the Translation Project.
2ed0e35f 252
548e2104 253** Update README
8ebc7dca
JD
254Make sure the information in README is current. Most notably, make sure
255it recommends a version of GNU M4 that is compatible with the latest
256Bison sources.
257
258** Check copyright years.
259We update years in copyright statements throughout Bison once at the
4d4777c7 260start of every year by running "make update-copyright". However, before
8ebc7dca
JD
261a release, it's good to verify that it's actually been run. Besides the
262copyright statement for each Bison file, check the copyright statements
263that the skeletons insert into generated parsers, and check all
264occurrences of PACKAGE_COPYRIGHT_YEAR in configure.ac.
548e2104 265
6733d024 266** Update NEWS, commit and tag.
a59a6dde
AD
267See do-release-commit-and-tag in README-release. For a while, we used
268beta names such as "2.6_rc1". Now that we use gnulib in the release
269procedure, we must use "2.5.90", which has the additional benefit of
270being properly sorted in "git tag -l".
2ed0e35f 271
6733d024 272** make alpha, beta, or stable
4d4777c7 273See README-release.
548e2104 274
4d4777c7
AD
275** Upload
276There are two ways to upload the tarballs to the GNU servers: using
277gnupload (from gnulib), or by hand. Obviously prefer the former. But
278in either case, be sure to read the following paragraph.
279
280*** Setup
281You need "gnupg".
2ed0e35f 282
4d4777c7
AD
283Make sure your public key has been uploaded at least to
284keys.gnupg.net. You can upload it with:
548e2104 285
4d4777c7 286 gpg --keyserver keys.gnupg.net --send-keys F125BDF3
2ed0e35f 287
4d4777c7 288where F125BDF3 should be replaced with your key ID.
2ed0e35f 289
4d4777c7
AD
290*** Using gnupload
291You need "ncftp".
292
6537c71f 293At the end "make stable" (or alpha/beta) will display the procedure to
6733d024 294run. Just copy and paste it in your shell.
4d4777c7
AD
295
296*** By hand
2ed0e35f 297
548e2104 298The generic GNU upload procedure is at:
2ed0e35f 299
548e2104
JD
300 http://www.gnu.org/prep/maintain/maintain.html#Automated-FTP-Uploads
301
015e86a7 302Follow the instructions there to register your information so you're permitted
4d4777c7 303to upload.
015e86a7
JD
304
305Here's a brief reminder of how to roll the tarballs and upload them:
548e2104
JD
306
307*** make distcheck
308*** gpg -b bison-2.3b.tar.gz
4d4777c7 309*** In a file named "bison-2.3b.tar.gz.directive", type:
548e2104
JD
310
311 version: 1.1
312 directory: bison
313 filename: bison-2.3b.tar.gz
314
315*** gpg --clearsign bison-2.3b.tar.gz.directive
316*** ftp ftp-upload.gnu.org # Log in as anonymous.
317*** cd /incoming/alpha # cd /incoming/ftp for full release.
318*** put bison-2.3b.tar.gz # This can take a while.
319*** put bison-2.3b.tar.gz.sig
320*** put bison-2.3b.tar.gz.directive.asc
abd189e8 321*** Repeat all these steps for bison-2.3b.tar.xz.
2ed0e35f 322
5bc993d9
JD
323** Update Bison manual on www.gnu.org.
324
325*** You need a non-anonymous checkout of the web pages directory.
326
327 $ cvs -d YOUR_USERID@cvs.savannah.gnu.org:/web/bison checkout bison
328
329*** Get familiar with the instructions for web page maintainers.
330http://www.gnu.org/server/standards/readme_index.html
331http://www.gnu.org/server/standards/README.software.html
332especially the note about symlinks.
333
334*** Build the web pages.
335Assuming BISON_CHECKOUT refers to a checkout of the Bison dir, and
336BISON_WWW_CHECKOUT refers to the web directory created above, do:
337
338 $ cd $BISON_CHECKOUT/doc
339 $ make stamp-vti
340 $ ../build-aux/gendocs.sh -o "$BISON_WWW_CHECKOUT/manual" \
341 bison "Bison - GNU parser generator"
342 $ cd $BISON_WWW_CHECKOUT
343
344Verify that the result looks sane.
345
346*** Commit the modified and the new files.
347
348*** Remove old files.
349Find the files which have not been overwritten (because they belonged to
350sections that have been removed or renamed):
351
352 $ cd manual/html_node
353 $ ls -lt
354
355Remove these files and commit their removal to CVS. For each of these
356files, add a line to the file .symlinks. This will ensure that
357hyperlinks to the removed files will redirect to the entire manual; this
358is better than a 404 error.
359
360There is a problem with 'index.html' being written twice (once for POSIX
361function 'index', once for the table of contents); you can ignore this
362issue.
363
2ed0e35f 364** Announce
6733d024
AD
365The "make stable" (or alpha/beta) command just created a template,
366$HOME/announce-bison-X.Y. Otherwise, to generate it, run:
548e2104
JD
367
368 make RELEASE_TYPE=alpha gpg_key_ID=F125BDF3 announcement
369
5a3c69f1 370where alpha can be replaced by beta or stable and F125BDF3 should be
83e34842
JD
371replaced with your key ID.
372
373Complete/fix the announcement file. The generated list of recipients
374(info-gnu@gnu.org, bug-bison@gnu.org, help-bison@gnu.org,
375bison-patches@gnu.org, and coordinator@translationproject.org) is
4d4777c7
AD
376appropriate for a stable release or a "serious beta". For any other
377release, drop at least info-gnu@gnu.org. For an example of how to
378fill out the rest of the template, search the mailing list archives
379for the most recent release announcement.
83e34842
JD
380
381For a stable release, send the same announcement on the comp.compilers
382newsgroup by sending email to compilers@iecc.com. Do not make any Cc as
383the moderator will throw away anything cross-posted or Cc'ed. It really
384needs to be a separate message.
43a91d61 385
6733d024
AD
386** Prepare NEWS
387So that developers don't accidentally add new items to the old NEWS
388entry, create a new empty entry in line 3 (without the two leading
389spaces):
548e2104 390
6733d024 391 * Noteworthy changes in release ?.? (????-??-??) [?]
548e2104
JD
392
393Push these changes.
394
2ed0e35f
AD
395-----
396
c932d613 397Copyright (C) 2002-2005, 2007-2012 Free Software Foundation, Inc.
2ed0e35f
AD
398
399This file is part of GNU Bison.
400
f16b0819 401This program is free software: you can redistribute it and/or modify
2ed0e35f 402it under the terms of the GNU General Public License as published by
f16b0819
PE
403the Free Software Foundation, either version 3 of the License, or
404(at your option) any later version.
2ed0e35f 405
f16b0819 406This program is distributed in the hope that it will be useful,
2ed0e35f
AD
407but WITHOUT ANY WARRANTY; without even the implied warranty of
408MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
409GNU General Public License for more details.
410
411You should have received a copy of the GNU General Public License
f16b0819 412along with this program. If not, see <http://www.gnu.org/licenses/>.
bcbbf654
AD
413
414 LocalWords: Automake Autoconf Gettext Gzip Rsync Valgrind gnulib submodules
415 LocalWords: submodule init cd distcheck checkin ChangeLog valgrind sigreturn
416 LocalWords: UC gcc DGNULIB POSIXCHECK xml XSLT glr lalr README po runtime rc
417 LocalWords: gnupload gnupg gpg keyserver BDF ncftp filename clearsign cvs dir
418 LocalWords: symlinks vti html lt POSIX Cc'ed
419
420Local Variables:
421mode: outline
422fill-column: 76
423End: