README-how-to-make-a-release revision 1.1 1 1.1 christos README for MAKING BINUTILS RELEASES
2 1.1 christos
3 1.1 christos This is a collection of notes on how to perform a binutils release. A
4 1.1 christos lot of this information can also be found in the maintain.texi file in
5 1.1 christos the gnulib project:
6 1.1 christos
7 1.1 christos https://www.gnu.org/software/gnulib/
8 1.1 christos
9 1.1 christos It is useful to have a cloned copy of the sources of this project as
10 1.1 christos it also contains an upload script used to install tarballs on the GNU
11 1.1 christos FTP server.
12 1.1 christos
13 1.1 christos Make sure that you have upload authority on sourceware and fencepost.
14 1.1 christos Beware - this is an involved process and can take weeks to complete.
15 1.1 christos See the maintain.texi file for details on how to obtain these
16 1.1 christos permissions.
17 1.1 christos
18 1.1 christos -------------------------------------------------
19 1.1 christos How to perform a release.
20 1.1 christos -------------------------------------------------
21 1.1 christos
22 1.1 christos 1. Send an email out warning contributors about the forthcoming
23 1.1 christos branch. Set a date for the branch (weekends are better because
24 1.1 christos they are less busy).
25 1.1 christos
26 1.1 christos 2. When the branch date is near: Update the libiberty and config
27 1.1 christos directories and the top level configure files.
28 1.1 christos
29 1.1 christos 3. When branch day arrives add markers for the upcoming release to
30 1.1 christos gas, ld, gold and binutils NEWS files.
31 1.1 christos [If using the make-prerelease.sh script, check that
32 1.1 christos common.sh has the right values].
33 1.1 christos [make-prelease.sh command i]
34 1.1 christos Likewise for all of the ChangeLog files.
35 1.1 christos Add a note of the name of the new branch to binutils/BRANCHES.
36 1.1 christos Commit these changes.
37 1.1 christos [make-prerelease.sh command C]
38 1.1 christos
39 1.1 christos 4. Create the release branch using:
40 1.1 christos
41 1.1 christos git tag -a binutils-2_30-branch [e.g. for the 2.30 branch...]
42 1.1 christos git push --tags origin binutils-2_30-branch
43 1.1 christos
44 1.1 christos 5. Update "BINUTILS_BRANCH" in gdbadmin's crontab:
45 1.1 christos
46 1.1 christos Log in as gdbadmin on sourceware.org, and then:
47 1.1 christos
48 1.1 christos $ cd crontab
49 1.1 christos $ vi crontab
50 1.1 christos [change BINUTILS_BRANCH]
51 1.1 christos $ cvs ci crontab
52 1.1 christos $ crontab crontab
53 1.1 christos
54 1.1 christos If you do not have access to this account, please feel free to
55 1.1 christos ask Joel Brobecker <brobecker AT adacore DOT com>.
56 1.1 christos
57 1.1 christos 6. Update bfd/configure and bfd/configure.ac on HEAD to indicate
58 1.1 christos snapshot of the following release.
59 1.1 christos [make-prerelease.sh command hv + C]
60 1.1 christos
61 1.1 christos 7. Rename the current HEAD version entry in Bugzilla, and create a
62 1.1 christos new one. E.g. rename "2.30 (HEAD)" to 2.30, and create "2.31
63 1.1 christos (HEAD)":
64 1.1 christos
65 1.1 christos https://sourceware.org/bugzilla/editversions.cgi?product=binutils
66 1.1 christos
67 1.1 christos 8. Update the release number in bfd/version.m4 for the mainline and
68 1.1 christos the branch. The mainline should have the minor number
69 1.1 christos incremented, but the branch only needs the point value set to 90
70 1.1 christos as the release has not actually happened yet.
71 1.1 christos
72 1.1 christos Regenerate various files on both branch and HEAD by configuring
73 1.1 christos with --enable-maintainer-mode. NB/ Remember to build gold and
74 1.1 christos gprof. Commit the changes. Make sure that this includes the
75 1.1 christos .pot files as well as the configure and makefiles.
76 1.1 christos
77 1.1 christos 9. Create an initial prerelease:
78 1.1 christos
79 1.1 christos a. Change the version on the branch (bfd/version.m4), regenerate
80 1.1 christos the files, and check this in.
81 1.1 christos
82 1.1 christos b. Create a source tarball of the branch sources:
83 1.1 christos
84 1.1 christos ./src-release -x binutils
85 1.1 christos
86 1.1 christos c. Build a test target using this tarball.
87 1.1 christos
88 1.1 christos d. Upload the prerelease snapshot to the FTP:
89 1.1 christos
90 1.1 christos scp ../binutils-$version.tar.xz sourceware.org:~ftp/pub/binutils/snapshots
91 1.1 christos ssh sourceware.org md5sum ~ftp/pub/binutils/snapshots/binutils-$version.tar.xz
92 1.1 christos
93 1.1 christos 10. Send it to the Translation Project:
94 1.1 christos
95 1.1 christos http://translationproject.org/html/maintainers.html
96 1.1 christos
97 1.1 christos Sending mail for one of the POT files is sufficient.
98 1.1 christos
99 1.1 christos 11. Announce the availability of the snapshot and the branch on the
100 1.1 christos binutils mailing list. Set a date for when the release will
101 1.1 christos actually happen. Something like:
102 1.1 christos ------------------------------------------------------------------------
103 1.1 christos Hi Everyone,
104 1.1 christos
105 1.1 christos The 2.XX branch has now been created:
106 1.1 christos
107 1.1 christos git clone git://sourceware.org/git/binutils-gdb.git -b binutils-2_XX-branch 2.XX
108 1.1 christos
109 1.1 christos A snapshot of the sources is also available here:
110 1.1 christos
111 1.1 christos ftp://sourceware.org/pub/binutils/snapshots/binutils-2.XX.0.tar.xz
112 1.1 christos
113 1.1 christos Please could all patches for the branch be run by me.
114 1.1 christos The rules for the branch are:
115 1.1 christos
116 1.1 christos * No new features.
117 1.1 christos * Target specific bug fixes are OK.
118 1.1 christos * Generic bug fixes are OK if they are important and widely tested.
119 1.1 christos * Documentation updates/fixes are OK.
120 1.1 christos * Translation updates are OK.
121 1.1 christos * Fixes for testsuite failures are OK.
122 1.1 christos
123 1.1 christos Ideally I would like to make the release happen in two weeks time,
124 1.1 christos i.e. Saturday 27th Jan. Which I hope will be enough time for everyone
125 1.1 christos to get their final fixes in.
126 1.1 christos ------------------------------------------------------------------------
127 1.1 christos
128 1.1 christos 12. Build various different toolchains, test them and nag
129 1.1 christos maintainers to fix any testsuite failures for their
130 1.1 christos architectures...
131 1.1 christos
132 1.1 christos
133 1.1 christos When the time comes to actually make the release....
134 1.1 christos
135 1.1 christos
136 1.1 christos 20. Make sure that the branch sources still build, test and install
137 1.1 christos correctly.
138 1.1 christos
139 1.1 christos 21. Update the release number in bfd/version.m4 on the release
140 1.1 christos branch to a whole new minor version number, without a point
141 1.1 christos value. Eg "2.29.90" becomes "2.30". Change bfd/development.sh
142 1.1 christos to set the value to "false". Regenerate the configure and
143 1.1 christos makefiles. Add changelog entries for the updates and add a
144 1.1 christos "this-is-the-2.XX-release" commit and commit. Make sure to
145 1.1 christos include the .gmo files.
146 1.1 christos
147 1.1 christos 22. Check that your file creation mask will create the
148 1.1 christos correct file permissions. Eg:
149 1.1 christos
150 1.1 christos umask 022
151 1.1 christos
152 1.1 christos 23. Create the release tarballs:
153 1.1 christos
154 1.1 christos ./src-release -b -g -l -x binutils
155 1.1 christos
156 1.1 christos 24. Check that the files in the tarballs have the correct
157 1.1 christos permissions. FIXME: The tarballs will contain spurious
158 1.1 christos autom4te.cache directories which could be removed to reduce
159 1.1 christos their size.
160 1.1 christos
161 1.1 christos 25. Sanity check the release on x86_64-pc-linux-gnu by building and
162 1.1 christos running the testsuite. Make the source directory read-only
163 1.1 christos before building. Also test "make install". If necessary fix
164 1.1 christos any problems.
165 1.1 christos
166 1.1 christos 26. Tag the branch with the new release number:
167 1.1 christos
168 1.1 christos git tag -a binutils-2_XX
169 1.1 christos [optional: add "-u XXXXX" to sign with a gpg key]
170 1.1 christos git push origin binutils-2_XX
171 1.1 christos
172 1.1 christos NB/ If you do sign the binaries make sure to use a key
173 1.1 christos that has been published with the FSF.
174 1.1 christos
175 1.1 christos 27. Clean up the source tree. (Use "git status" to find new
176 1.1 christos files, and remove them).
177 1.1 christos
178 1.1 christos 28. Edit bfd/development.sh on the branch and set
179 1.1 christos "development=true". Also bump the version by adding a trailing
180 1.1 christos .0, so that the date suffix keeps the version lower than the
181 1.1 christos trunk version. Regenerate files. Commit these changes.
182 1.1 christos
183 1.1 christos 29. Upload the tarballs to ftp.gnu.org.
184 1.1 christos
185 1.1 christos gnupload --to ftp.gnu.org:binutils binutils-X.XX.tar.*
186 1.1 christos
187 1.1 christos The gnupload script is in the gnulib/build-aux directory.
188 1.1 christos
189 1.1 christos Check for an email response from the upload. If necessary
190 1.1 christos fix any problems.
191 1.1 christos
192 1.1 christos 30. Upload the tarballs (and signatures) to sourceware.org:
193 1.1 christos
194 1.1 christos sftp sourceware.org
195 1.1 christos cd /sourceware/ftp/pub/binutils/releases
196 1.1 christos put binutils-X.XX.tar.*
197 1.1 christos chmod 644 binutils-X.XX.tar.*
198 1.1 christos quit
199 1.1 christos
200 1.1 christos FIXME: Should the signatures (created by the gnupload script in
201 1.1 christos step 29) be uploaded as well ?
202 1.1 christos
203 1.1 christos 31. Update web pages. For sourceware.org:
204 1.1 christos
205 1.1 christos Create a new documentation folder on the sourceware.org web
206 1.1 christos pages as /sourceware/www/sourceware/htdocs/binutils/docs-X.XX.
207 1.1 christos Make the html documentation locally with the "make html" command
208 1.1 christos and then upload and rename the directories as needed. Create an
209 1.1 christos index.html file and then edit the docs link to point to the new
210 1.1 christos docs-X.XX directory.
211 1.1 christos
212 1.1 christos Update the sourceware.org site to point to the new documentation
213 1.1 christos and mention the new version.
214 1.1 christos
215 1.1 christos For the www.gnu.org site you have to email webmasters (a] gnu.org
216 1.1 christos and ask them to make the change(s).
217 1.1 christos
218 1.1 christos 32. Send emails to binutils (a] sourceware.org, info-gnu (a] gnu.org and
219 1.1 christos David Edelsohn <dje.gcc (a] gmail.com> announcing the new release.
220 1.1 christos Sign the email and include the checksum.
221 1.1 christos (The email to Davis is so that he can update the GNU Toolchain
222 1.1 christos social media). Something like this:
223 1.1 christos ------------------------------------------------------------------------
224 1.1 christos Hi Everyone,
225 1.1 christos
226 1.1 christos We are pleased to announce that version 2.XX of the Binutils project
227 1.1 christos sources have been released and are now available for download at:
228 1.1 christos
229 1.1 christos https://ftp.gnu.org/gnu/binutils
230 1.1 christos https://sourceware.org/pub/binutils/releases/
231 1.1 christos
232 1.1 christos checksums: xxxx
233 1.1 christos
234 1.1 christos This release contains numerous bug fixes, and also the
235 1.1 christos following new features:
236 1.1 christos
237 1.1 christos <extract info from the NEWS files>
238 1.1 christos
239 1.1 christos Our thanks go out to all of the binutils contributors, past and
240 1.1 christos present, for helping to make this release possible.
241 1.1 christos
242 1.1 christos --------------------------------------------------------------------------
243 1.1 christos
244 1.1 christos -------------------------------------------------
245 1.1 christos How to perform a point release.
246 1.1 christos -------------------------------------------------
247 1.1 christos
248 1.1 christos A point release is easier than a normal release since a lot of the
249 1.1 christos work has already been done. The branch has been created, the
250 1.1 christos translations updated and the documentation uploaded. So the procedure
251 1.1 christos looks like this:
252 1.1 christos
253 1.1 christos 0. Decide that a point release is necessary.
254 1.1 christos
255 1.1 christos Usually this only happens when a sufficient number of serious
256 1.1 christos bugs have been found and fixed since the previous release, and a
257 1.1 christos new official release is not imminent.
258 1.1 christos
259 1.1 christos 1. Tell the community that a point release is happening. Ask
260 1.1 christos maintainers to ensure that their ports are up to date on the
261 1.1 christos release branch. Ask the community if there are any bug fixes
262 1.1 christos which are missing from the branch. Allow some time for the
263 1.1 christos responses to this step.
264 1.1 christos
265 1.1 christos 2. Make sure that the branch sources build, test and install
266 1.1 christos correctly.
267 1.1 christos
268 1.1 christos 2.5 Prepare a list of the bugs which have been fixed. This
269 1.1 christos will be needed for step 8.
270 1.1 christos
271 1.1 christos 3. In the branch sources:
272 1.1 christos
273 1.1 christos a. Update the minor release number in bfd/version.m4.
274 1.1 christos b. Edit bfd/development.sh and set "development=false".
275 1.1 christos c. Regenerate the configure files.
276 1.1 christos d. Commit the updates along with a "this-is-the-2.XX.X-release"
277 1.1 christos note in all of the changelogs.
278 1.1 christos e. Tag the branch with the new release number:
279 1.1 christos
280 1.1 christos git tag -a binutils-2_XX_X
281 1.1 christos [optional: add "-u XXXXX" to sign with a gpg key]
282 1.1 christos git push origin binutils-2_XX_X
283 1.1 christos
284 1.1 christos f. Check that your file creation mask will create the
285 1.1 christos correct file permissions. Eg:
286 1.1 christos
287 1.1 christos umask 022
288 1.1 christos
289 1.1 christos g. Create the release tarballs:
290 1.1 christos ./src-release -b -g -l -x binutils
291 1.1 christos
292 1.1 christos h. Check that the files in the tarballs have the correct
293 1.1 christos permissions.
294 1.1 christos
295 1.1 christos i. Edit bfd/development.sh and set "development=true".
296 1.1 christos j. Commit this change into the git repository.
297 1.1 christos k. Clean up the source tree. (Use "git status" to find new
298 1.1 christos files, and remove them).
299 1.1 christos
300 1.1 christos FIXME: The tarballs will contain spurious autom4te.cache
301 1.1 christos directories which could be removed to reduce their size.
302 1.1 christos
303 1.1 christos 4. [If paranoid - upload the tarballs to one of the FTP servers and
304 1.1 christos ask people to test it before going on to step 5].
305 1.1 christos
306 1.1 christos 5. Upload the tarballs to ftp.gnu.org.
307 1.1 christos
308 1.1 christos gnupload --to ftp.gnu.org:binutils binutils-X.XX.X.tar.*
309 1.1 christos
310 1.1 christos The gnupload script is in the gnulib/build-aux directory.
311 1.1 christos
312 1.1 christos 6. Upload the tarballs to sourceware.org:
313 1.1 christos
314 1.1 christos sftp sourceware.org
315 1.1 christos cd /ftp/pub/binutils/releases
316 1.1 christos put binutils-X.XX.X.tar.*
317 1.1 christos chmod 644 binutils-X.XX.X.tar.*
318 1.1 christos quit
319 1.1 christos
320 1.1 christos FIXME: Should the signatures (created by the gnupload script in
321 1.1 christos step 5) be uploaded as well ?
322 1.1 christos
323 1.1 christos 7. Update web pages. For sourceware.org:
324 1.1 christos
325 1.1 christos * Log on to sourceware.org
326 1.1 christos * Go /www/htdocs/binutils
327 1.1 christos * Edit index.html
328 1.1 christos
329 1.1 christos For the www.gnu.org site you have to email webmasters (a] gnu.org
330 1.1 christos and ask them to make the change(s).
331 1.1 christos
332 1.1 christos 8. Send an emails to the binutils list, info-gnu (a] gnu.org and
333 1.1 christos David Edelsohn <dje.gcc (a] gmail.com> announcing the new release.
334 1.1 christos (The email to Davis is so that he can update the GNU Toolchain
335 1.1 christos social media). Something like this:
336 1.1 christos ------------------------------------------------------------------------
337 1.1 christos Hi Everyone,
338 1.1 christos
339 1.1 christos We are pleased to announce that version 2.XX.X of the Binutils project
340 1.1 christos sources have been released and are now available for download at:
341 1.1 christos
342 1.1 christos https://ftp.gnu.org/gnu/binutils
343 1.1 christos https://sourceware.org/pub/binutils/releases/
344 1.1 christos
345 1.1 christos This is a point release over the previous 2.XX version, containing bug
346 1.1 christos fixes but no new features.
347 1.1 christos
348 1.1 christos Our thanks go out to all of the binutils contributors, past and
349 1.1 christos present, for helping to make this release possible.
350 1.1 christos
351 1.1 christos Here is a list of the bugs that have been fixed:
352 1.1 christos xx
353 1.1 christos xx
354 1.1 christos xx
355 1.1 christos xx
356 1.1 christos --------------------------------------------------------------------------
357 1.1 christos
358 1.1 christos
360 1.1 christos Copyright (C) 2017-2018 Free Software Foundation, Inc.
361 1.1 christos
362 1.1 christos Copying and distribution of this file, with or without modification,
363 1.1 christos are permitted in any medium without royalty provided the copyright
364 notice and this notice are preserved.
365