| README for MAKING BINUTILS RELEASES |
| |
| This is a collection of notes on how to perform a binutils release. A |
| lot of this information can also be found in the maintain.texi file in |
| the gnulib project: |
| |
| https://www.gnu.org/software/gnulib/ |
| |
| It is useful to have a cloned copy of the sources of this project as |
| it also contains an upload script used to install tarballs on the GNU |
| FTP server. |
| |
| Make sure that you have upload authority on sourceware and fencepost. |
| See the maintain.texi file for details on how to obtain these |
| permissions. |
| |
| Note - when performing a release it is helpful to edit this document |
| as you go, updating the example commands so that they are ready for |
| the release that follows. |
| |
| ------------------------------------------------- |
| How to perform a release. |
| ------------------------------------------------- |
| |
| 1. Choose dates for the branch and release. Weekends are better |
| because they are less busy. It is typical to leave two weeks |
| between creating the branch and creating the release. |
| |
| Send an email out warning contributors about the forthcoming |
| branch and release. |
| |
| 2. When the branch date is near: Update the libiberty and config |
| directories and the top level Makefile and configure files. Also |
| consider updating the toplevel libtool files. |
| |
| ------------------------------------------------- |
| How to create the release branch. |
| ------------------------------------------------- |
| |
| Approx time to complete from here: 2 hours ... |
| |
| 2.5 If you have not built from the sources recently then now is the |
| time to check that they still work... |
| |
| 3. When branch day arrives add markers for the upcoming release to |
| the NEWS files in gas, ld, and binutils. No need to update NEWS |
| in the gold directory - it has its own release numbering. |
| |
| Likewise for the ChangeLog files in: bfd, binutils, cpu, |
| elfcpp, gas, gold, gprof, include, ld, libctf, opcodes and toplevel. |
| |
| Add a note of the name of the new branch to binutils/BRANCHES. |
| |
| Commit these changes. |
| |
| 4. Create the release branch using: |
| |
| git branch binutils-2_44-branch |
| git push origin binutils-2_44-branch |
| |
| If you get a message like: |
| |
| remote: fatal: Invalid revision range 0000000000000000000000000000000000000000..f974f26cb16cc6fe3946f163c787a05e713fb77b |
| |
| It appears that this can be ignored... |
| |
| 5. Make sure that the branch is there. IE check out the branch sources: |
| |
| git clone ssh://sourceware.org/git/binutils-gdb.git -b binutils-2_44-branch 2.44 |
| |
| If you get a message about being in a "detached head" state, something |
| has gone wrong... |
| |
| Keep the checked out sources - they are going to be needed in future |
| steps. |
| |
| 6. Update "BINUTILS_BRANCH" in gdbadmin's crontab: |
| |
| Log in as gdbadmin on sourceware.org, and then: |
| |
| $ cd crontab |
| $ vi crontab |
| [change BINUTILS_BRANCH] |
| $ cvs ci crontab |
| $ crontab crontab |
| |
| If you do not have access to this account, please feel free to |
| ask Joel Brobecker <brobecker AT adacore DOT com>. |
| |
| 7. Rename the current HEAD version entry in Bugzilla, and create a |
| new one. E.g. rename "2.44 (HEAD)" to 2.44, and create |
| "2.45 (HEAD)": |
| |
| https://sourceware.org/bugzilla/editversions.cgi?product=binutils |
| |
| 8. Update bfd/version.m4 on HEAD to indicate that is now a snapshot |
| of the next release and the BRANCH to indicate that it is almost |
| ready for the release. |
| |
| So if the release is going to be 2.44 then the version number on |
| the BRANCH should be set to 2.43.90 - ie almost, but not quite 2.44, |
| and the version number on the MAINLINE should be set to 2.44.50 - |
| ie half way to 2.45 release. |
| |
| So the BRANCH bfd/version.m4 has: |
| |
| m4_define([BFD_VERSION], [2.43.90]) |
| |
| and the MAINLINE has: |
| |
| m4_define([BFD_VERSION], [2.44.50]) |
| |
| Regenerate various files on both branch and HEAD by configuring |
| with "--enable-maintainer-mode --enable-gold --enable-shared" and then building |
| with "make -j1 all-binutils all-gas all-gold all-gprof all-gprofng all-ld" |
| |
| Add ChangeLog entries for the updated files. Commit the changes. |
| Make sure that this includes the .pot files as well as the |
| configure and makefiles. |
| |
| 9. Create an initial pre-release: |
| |
| a. Remove any auto-generated files, in order to force the |
| src-release script to rebuild them. |
| |
| cd <branch-sources> |
| git clean -fdx |
| |
| b. Create a source tarball of the BRANCH sources: |
| |
| ./src-release.sh -x binutils |
| |
| FIXME: Not sure if the following steps are needed... |
| |
| Add a .dirstamp file to the gas/doc subdirectory: |
| |
| touch -d `date +%Y-%m-%d` binutils-2.43.90/gas/doc/.dirstamp |
| tar rvf binutils-2.43.90.tar binutils-2.43.90/gas/doc/.dirstamp |
| rm binutils-2.43.90.tar.xz |
| xz -9 -k binutils-2.43.90.tar |
| |
| ...END OF FIXME |
| |
| c. Build a test target using this tarball. |
| |
| cp binutils-*.tar.xz /dev/shm |
| pushd /dev/shm |
| tar xvf binutils-*.tar.xz |
| mkdir build |
| cd build |
| ../binutils-*/configure --quiet --enable-gold |
| make |
| popd |
| |
| If there are problems, fix them. |
| |
| d. Upload the pre-release snapshot to the sourceware FTP site: |
| |
| scp binutils-2.43.90.tar.xz sourceware.org:/var/ftp/pub/binutils/snapshots |
| ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.43.90.tar.xz |
| |
| Paranoia: Compare the checksum with the local version. |
| |
| e. Clean up the source directory again. |
| |
| git clean -fdx |
| |
| 10. Tell the Translation Project where to find the new tarball. |
| <coordinator@translationproject.org> |
| qv: https://translationproject.org/html/maintainers.html |
| |
| ------------------------------------------------------------------------ |
| Dear Translation Project |
| |
| The 2.43 release branch has been created for the GNU Binutils project. |
| |
| A snapshot of the branch sources can be found here: |
| |
| https://sourceware.org/pub/binutils/snapshots/binutils-2.42.90.tar.xz |
| |
| We hope to make the official release of the sources on the <DATE> |
| although that could change if there are important bugs that need to |
| be fixed before the release. |
| ------------------------------------------------------------------------ |
| |
| 11. Announce the availability of the snapshot and the branch on the |
| binutils mailing list. Set a date for when the release will |
| actually happen. Something like: |
| |
| ------------------------------------------------------------------------ |
| Hi Everyone, |
| |
| The <NEW_VERSION> branch has now been created: |
| |
| git clone git://sourceware.org/git/binutils-gdb.git -b binutils-<NEW_VERSION>-branch |
| |
| A snapshot of the sources is also available here: |
| |
| https://sourceware.org/pub/binutils/snapshots/binutils-<OLD_VERSION>.90.tar.xz |
| |
| Please could all patches for the branch be run by me. |
| The rules for the branch are: |
| |
| * No new features. |
| * Target specific bug fixes are OK. |
| * Generic bug fixes are OK if they are important and widely tested. |
| * Documentation updates/fixes are OK. |
| * Translation updates are OK. |
| * Fixes for testsuite failures are OK. |
| |
| Ideally I would like to make the release happen in two weeks time, |
| i.e. <DATE>. Which I hope will be enough time for everyone |
| to get their final fixes in. |
| ------------------------------------------------------------------------ |
| |
| 12. Build various different toolchains, test them and nag |
| maintainers to fix any testsuite failures for their |
| architectures... |
| |
| ============================================================================== |
| ============================================================================== |
| |
| For the next few weeks, monitor the mailing list for new translations |
| and respond to any requests to have patches applied to the branch. |
| |
| ============================================================================== |
| ============================================================================== |
| |
| Then, a couple of weeks later ... |
| |
| ------------------------------------------------- |
| How to create the release. |
| ------------------------------------------------- |
| |
| 20. Make sure that the branch sources still build, test and install |
| correctly. Make sure that the sources are clean, without any |
| patch files (.reg .orig *~) left over. |
| |
| cd <branch> |
| git pull |
| git clean -fdx |
| cd <builds> |
| make |
| |
| 21. a. Update the release number in bfd/version.m4 on the release |
| branch to a whole new minor version number, without a point |
| value. Eg "2.43.90" becomes "2.44". NB/ Not: "2.44.00" |
| |
| b. Change bfd/development.sh to set all values to "false". |
| |
| c. Regenerate the configure and makefiles. And *info* files. |
| |
| cd <build-configured-with-enable-maintainer-mode> |
| make -j1 all-gas all-ld all-binutils all-gprof all-gold all-gprofng all-libctf |
| make info |
| |
| d. Create a ChangeLog from the git refs for all of the commits |
| from when changelog entries were no longer required: |
| |
| gitlog-to-changelog --since=2021-07-03 > ChangeLog.git |
| git add ChangeLog.git |
| |
| The gitlog-to-changelog script is part of the sources |
| of the "config" project. |
| |
| Add an entry for ChangeLog.git to the src-release.sh script's |
| DEVO_SUPPORT list, so that it is included in the release. |
| |
| FIXME: it would be better if the ChangeLog.git file was permanently |
| added to the src-release.sh script, but this mean that it would have |
| to exist in the master repository, and that the GDB project would |
| need to agree to have it there. |
| |
| e. Add ChangeLog entries for all of the updates and add a |
| "this-is-the-2.43-release" comment and commit. |
| |
| git add . |
| git commit -m "this-is-the-2.44-release" |
| git push |
| |
| 22. Check that your file creation mask will create the |
| correct file permissions. Eg: |
| |
| % umask |
| 22 |
| |
| Remove any spurious autom4te.cache files left over from the |
| reconfiguring: |
| |
| git clean -fdx |
| |
| 23. Note - check to see if any new files have been added to the top |
| level of the source directory, but which are not in the |
| DEVO_SUPPORT variable in the src-release.sh script. If they are |
| needed then add them. |
| |
| PARANOIA: Check that there are no pending commits: |
| |
| git status |
| |
| Then create the release tarballs: |
| |
| ./src-release.sh -b -g -l -x -z binutils |
| |
| OR ... for a more reproducible tarball: |
| |
| ./src-release.sh -b -g -l -x -z -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` binutils |
| |
| 24. Check that the files in the tarballs have the correct |
| permissions. |
| |
| tar tvf binutils-*.tar.xz | grep -e "---" |
| |
| Also check that the man files are not empty. (cf PR 28144). |
| |
| tar tvf binutils-*.tar.xz | grep -e "\.1" |
| |
| 25. Sanity check the release on x86_64-pc-linux-gnu by building and |
| running the testsuites (gas, gold, binutils and ld). |
| Make the source directory read-only before building. |
| Also test 'make install'. |
| Also build the html and pdf documentation files. |
| If necessary fix any problems. |
| |
| pushd /dev/shm |
| mkdir delme |
| cd delme |
| tar xvf <path-to-sources>/binutils-2.*.tar.lz |
| chmod -R -w binutils-2.* |
| mkdir build |
| cd build |
| ../binutils-2.*/configure --quiet --enable-gold --prefix=`pwd`/install --enable-plugins --enable-shared |
| make -j1 all-gas all-gold all-ld all-binutils all-gprof all-gprofng |
| make check-gas check-binutils check-ld check-gold |
| make install-gas install-gold install-ld install-binutils install-gprofng |
| |
| # Needed for step 29... |
| make html pdf html-libctf pdf-libctf html-libsframe pdf-libsframe |
| |
| popd |
| |
| 26. Tag the branch with the new release number: |
| [optional: add "-u XXXXX" to sign with a gpg key] |
| enter a tag message such as: "Official GNU Binutils 2.4x release" |
| |
| git tag -a <TAG> -u <Your Key> |
| eg: |
| git tag -a binutils-2_44 -u DD9E3C4F <=== Be careful to get the tag right |
| or: |
| git tag -a binutils-2_44 -u DD9E3C4F -m "Official GNU Binutils 2.43 release" |
| |
| NB/ If you do sign the binaries make sure to use a key |
| that has been published with the FSF. |
| |
| Then push the release: |
| |
| git push origin binutils-2_44 |
| |
| If you get an error message along the lines of: |
| "Invalid revision range ..." |
| you can ignore it. |
| |
| 27. Upload the tarballs to ftp.gnu.org. |
| |
| gnupload --to ftp.gnu.org:binutils binutils-2.44.tar.* |
| |
| Be prepared to provide the password for the key, if you |
| signed the binaries. |
| |
| The gnupload script is in the gnulib/build-aux directory. |
| It uses the ncftp package for transmitting the files. |
| |
| NB/ This step can be done in PARALLEL with step 28. |
| |
| Check for an email response from the upload. If necessary |
| fix any problems. (The response might take a while, so |
| proceed with the next steps if you are confident that |
| everything is OK). |
| |
| 28. Upload the tarballs (and signatures) to sourceware.org: |
| |
| sftp sourceware.org |
| cd /sourceware/ftp/pub/binutils/releases |
| put binutils-2.4*.tar.* |
| chmod 644 binutils-2.4*.tar.* |
| quit |
| |
| 29. Update web pages. For sourceware.org: |
| |
| Clone the documentation (if you have not already done so): |
| |
| git clone ssh://sourceware.org/git/binutils-htdocs |
| |
| Create a new docs sub-directory and move into it: |
| |
| cd binutils-htdocs |
| mkdir docs-2.44 |
| cd docs-2.44 |
| |
| Copy the index.html from the previous release |
| |
| cp ../docs/index.html . |
| |
| Update the index.html file to reference this new release and to |
| point back to the current (now old) release. |
| |
| If necessary make the html documentation locally with the "make |
| html" command. (This should have been done by step 25 above). |
| |
| Copy in the documentation files: |
| |
| cp -r <build-dir>/gas/doc/as . |
| cp <build-dir>/gas/doc/as.html . |
| cp <build-dir>/gas/doc/as.pdf . |
| |
| cp -r <build-dir>/bfd/doc/bfd . |
| cp <build-dir>/bfd/doc/bfd.html . |
| cp <build-dir>/bfd/doc/bfd.pdf . |
| |
| cp -r <build-dir>/binutils/binutils_html binutils [NB/ Path not like others] |
| cp <build-dir>/binutils/doc/binutils.html . |
| cp <build-dir>/binutils/doc/binutils.pdf . |
| |
| cp -r <build-dir>/gprof/doc/gprof . |
| cp <build-dir>/gprof/gprof.html . [NB/ Path not like others] |
| cp <build-dir>/gprof/gprof.pdf . [NB/ Path not like others] |
| |
| cp -r <build-dir>/ld/doc/ld . |
| cp <build-dir>/ld/ld.html . [NB/ Path not like others] |
| cp <build-dir>/ld/ld.pdf . [NB/ Path not like others] |
| |
| [NB/ The gprofng documentation does not have a node-per-page selection] |
| cp <build-dir>/gprofng/doc/gprof.html . |
| cp <build-dir>/gprofng/doc/gprof.pdf . |
| |
| cp <build-dir>/libctf/doc/ctf-spec.html . |
| cp <build-dir>/libctf/doc/ctf-spec.pdf . |
| |
| cp <build-dir>/libsframe/doc/sframe-spec.html . |
| cp <build-dir>/libsframe/doc/sframe-spec.pdf . |
| |
| Update the symbolic link. |
| |
| cd .. [Should now be in be in binutils-htdocs/ ] |
| rm docs |
| ln -s docs-2.44 docs |
| |
| Edit index.html file to change the links to point to the new |
| release, mention any new features, update dates and so on. |
| |
| Check that the new web page is correct: |
| |
| file:///<path-to-binutils-htdocs>/index.html |
| |
| Add the new directories and files, commit and push the changes: |
| |
| git add . |
| git commit -m"Update documenation for the 2.4x release"a |
| git push |
| |
| |
| 29.1 For the www.gnu.org site you have to email webmasters@gnu.org |
| and ask them to copy the change(s): |
| --------------------------------------- |
| Hi FSF Webmasters, |
| |
| Please could the GNU Binutils webpage at: |
| |
| https://www.gnu.org/software/binutils/binutils.html |
| |
| be updated to indicate that there is now a newer version available |
| (2.4x). I have already updated the related page on the Sourceware |
| website so this might be useful as a template: |
| |
| https://sourceware.org/binutils/ |
| |
| Thanks very much. |
| |
| Cheers |
| -------------------------------------- |
| |
| 30. Send emails to binutils@sourceware.org, info-gnu@gnu.org and |
| David Edelsohn <dje.gcc@gmail.com> announcing the new release. |
| Sign the email and include the checksum: |
| |
| sha256sum binutils-2.4*.tar.* |
| |
| (The email to Davis is so that he can update the GNU Toolchain |
| social media). Something like this: |
| ----------------------------------------------------------------------- |
| Hi Everyone, |
| |
| We are pleased to announce that version 2.4x of the GNU Binutils project |
| sources have been released and are now available for download at: |
| |
| https://ftp.gnu.org/gnu/binutils |
| https://sourceware.org/pub/binutils/releases/ |
| |
| checksums: xxxx |
| |
| As an experiment these tarballs were made with the new "-r <date>" |
| option supported by the src-release.sh script. This attempts to make |
| reproducible tarballs by sorting the files and passing the |
| "--mtime=<date>" option to tar. The date used for these tarballs was |
| obtained by running: |
| |
| git log -1 --format=%cd --date=format:%F bfd/version.m4 |
| |
| This release contains numerous bug fixes, and also the |
| following new features: |
| |
| <extract info from the NEWS files> |
| |
| For more information see: |
| |
| https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=gas/NEWS;;hb=refs/tags/binutils-2_4x |
| https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=ld/NEWS;hb=refs/tags/binutils-2_4x |
| https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=binutils/NEWS;hb=refs/tags/binutils-2_4x |
| |
| Our thanks go out to all of the binutils contributors, past and |
| present, for helping to make this release possible. |
| |
| ----------------------------------------------------------------------- |
| |
| 31. Clean up the source tree: |
| |
| git clean -fdx . |
| |
| 32. Edit bfd/development.sh on the branch and set the development flag |
| to "true". (Leave the experimental flag set to "false"). Also bump |
| the version in bfd/version.m4 by adding a trailing .0, so that the |
| date suffix keeps the version lower than the trunk version. |
| Regenerate files. Commit these changes. |
| |
| 33. Email the binutils list telling everyone that the 2.4x branch |
| is now open for business as usual and that patches no longer |
| need special approval. |
| |
| 34. Examine the bfd/config.bfd file in the mainline sources and move |
| any pending obsolete targets into the definitely obsolete |
| section. Create a changelog entry and commit. |
| |
| Sit back and relax, you are all done. |
| -------------------------------------------------------------------------- |
| How to perform a POINT release. |
| -------------------------------------------------------------------------- |
| |
| A point release is easier than a normal release since a lot of the |
| work has already been done. The branch has been created, the |
| translations updated and the documentation uploaded. So the procedure |
| looks like this: |
| |
| 0. Decide that a point release is necessary. |
| |
| Usually this only happens when a sufficient number of serious |
| bugs have been found and fixed since the previous release, and a |
| new official release is not imminent. |
| |
| 1. Tell the community that a point release is happening. Ask |
| maintainers to ensure that their ports are up to date on the |
| release branch. Ask the community if there are any bug fixes |
| which are missing from the branch. Allow some time for the |
| responses to this step. |
| |
| 2. Make sure that the branch sources build, test and install |
| correctly. |
| |
| 2.5 Prepare a list of the bugs which have been fixed. This |
| will be needed for step 9. |
| |
| 3. In the branch sources: |
| |
| a. Update the minor release number in bfd/version.m4. |
| b. Edit bfd/development.sh, set "development=false". |
| c. Regenerate the configure files. |
| d. Remove spurious autom4te.cache files: |
| |
| git clean -fdx |
| |
| e. Update the changelog: |
| |
| gitlog-to-changelog --since=2021-07-03 > ChangeLog.git |
| |
| f. Commit the updates along with a "this-is-the-2.4x.y-release" |
| comment. |
| |
| git add . |
| git commit -m"..." |
| git push |
| |
| f. Tag the branch with the new release number. Optional: add |
| "-u XXXXX" to sign with a gpg key, and -m "..." for a |
| comment. eg: |
| |
| git tag -a binutils-2_43_1 |
| or: |
| git tag -a binutils-2_43_1 -u DD9E3C4F -m "Official GNU Binutils 2.43.1 release" |
| |
| Then push it: |
| |
| git push origin binutils-2_43_1 |
| |
| g. Check that your file creation mask will create the |
| correct file permissions. Ie: |
| |
| umask 022 |
| |
| h. Create the release tarballs: |
| |
| ./src-release.sh -b -g -l -x -z binutils |
| or: |
| ./src-release.sh -b -g -l -x -z -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` binutils |
| |
| i. Check that the files in the tarballs have the correct |
| permissions. |
| |
| tar tvf binutils-*.tar.xz | grep -e "---" |
| |
| 4. [If paranoid - upload the tarballs to one of the FTP servers and |
| ask people to test it before going on to step 5]. |
| |
| 5. Upload the tarballs to ftp.gnu.org. |
| |
| gnupload --to ftp.gnu.org:binutils binutils-*.tar.* |
| |
| The gnupload script is in the gnulib/build-aux directory. |
| |
| 6. Upload the tarballs to sourceware.org: |
| |
| sftp sourceware.org |
| cd /sourceware/ftp/pub/binutils/releases |
| put binutils-*.tar.* |
| chmod 644 binutils-*.tar.* |
| quit |
| |
| It is OK to upload the signatures as well. |
| |
| 7. Clean the source tree again |
| |
| git clean -fdx |
| |
| Edit bfd/development.sh and set "development=true". |
| |
| Commit this change. |
| |
| 8. Update web pages. For sourceware.org: |
| |
| * Clone the binutils documentation: git clone ssh://sourceware.org/git/binutils-htdocs |
| * Edit index.html and update the latest release number (if this |
| is a latest release). |
| * Add new documentation (if necessary). |
| * Commit and push the changes. |
| |
| For the www.gnu.org site you have to email webmasters@gnu.org |
| and ask them to make the change(s). |
| |
| 9. Send an emails to the binutils list, info-gnu@gnu.org and |
| David Edelsohn <dje.gcc@gmail.com> announcing the new release. |
| (The email to Davis is so that he can update the GNU Toolchain |
| social media). Something like this: |
| |
| ------------------------------------------------------------------------ |
| Hi Everyone, |
| |
| We are pleased to announce that version 2.4x.y of the GNU Binutils |
| project sources have been released and are now available for download at: |
| |
| https://ftp.gnu.org/gnu/binutils |
| https://sourceware.org/pub/binutils/releases/ |
| |
| This is a point release over the previous 2.4x version, containing bug |
| fixes but no new features. |
| |
| Our thanks go out to all of the binutils contributors, past and |
| present, for helping to make this release possible. |
| |
| Here is a list of the bugs that have been fixed: |
| xx |
| xx |
| xx |
| xx |
| -------------------------------------------------------------------------- |
| |
| 10. Create a new Bugzilla entry for the point release. |
| |
| https://sourceware.org/bugzilla/editversions.cgi?product=binutils |
| |
| And a new milestone too: |
| |
| https://sourceware.org/bugzilla/editmilestones.cgi?product=binutils |
| |
| Copyright (C) 2017-2024 Free Software Foundation, Inc. |
| |
| Copying and distribution of this file, with or without modification, |
| are permitted in any medium without royalty provided the copyright |
| notice and this notice are preserved. |