| 		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. | 
 | Beware - this is an involved process and can take weeks to complete. | 
 | See the maintain.texi file for details on how to obtain these | 
 | permissions. | 
 |  | 
 | ------------------------------------------------- | 
 | How to perform a release. | 
 | ------------------------------------------------- | 
 |  | 
 |   1. Send an email out warning contributors about the forthcoming | 
 |      branch.  Set a date for the branch (weekends are better because | 
 |      they are less busy). | 
 |  | 
 |   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. | 
 |  | 
 |  | 
 | Approx time to complete from here: 2 hours .... | 
 |  | 
 |   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, config, cpu, | 
 |      elfcpp, gas, gold, gprof, include, ld, libctf, libiberty, 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_38-branch | 
 |         git push origin binutils-2_38-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_38-branch 2.38 | 
 |  | 
 |      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.38 (HEAD)" to 2.38, and create | 
 |      "2.39 (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: | 
 |       | 
 |        m4_define([BFD_VERSION], [2.38.50]) | 
 |         | 
 |      Update the release number in bfd/version.m4 for the BRANCH. | 
 |      The branch only needs the point value set to 90 as the release | 
 |      has not actually happened yet. | 
 |  | 
 |        m4_define([BFD_VERSION], [2.37.90]) | 
 |  | 
 |      Regenerate various files on both branch and HEAD by configuring | 
 |      with "--enable-maintainer-mode --enable-gold" and then building | 
 |      with "make all-binutils all-gas all-gold all-gprof 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 -x binutils | 
 |  | 
 |      c. Build a test target using this tarball. | 
 |  | 
 |            cp binutils-2.37.90.tar.xz /dev/shm | 
 | 	   pushd /dev/shm | 
 | 	   tar xvf binutils-2.36.90.tar.xz | 
 | 	   mkdir build | 
 | 	   cd build | 
 | 	   ../binutils-2.37.90/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.37.90.tar.xz sourceware.org:~ftp/pub/binutils/snapshots | 
 |           ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.37.90.tar.xz | 
 |  | 
 |      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.38 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.37.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... | 
 |  | 
 | ============================================================================== | 
 |  | 
 | When the time comes to actually make 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 clean -fdx | 
 |  | 
 |   21. 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.36.90" becomes "2.37".  Change bfd/development.sh | 
 |       to set all values to "false".  Regenerate the configure and | 
 |       makefiles.  And *info* files.  Add ChangeLog entries for the | 
 |       updates and add a  "this-is-the-2.3x-release" comment and | 
 |       commit. | 
 |  | 
 |   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. | 
 |  | 
 |        Create the release tarballs: | 
 |    | 
 |             ./src-release.sh -b -g -l -x binutils | 
 |  | 
 |   24. Check that the files in the tarballs have the correct | 
 |       permissions.  (FIXME: How to do this ?) | 
 |  | 
 |   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".  If necessary fix any problems. | 
 |  | 
 |         cd /dev/shm | 
 | 	mkdir delme | 
 | 	cd delme | 
 | 	tar xvf <path-to-sources>/binutils-2.*.tar.xz | 
 | 	chmod -R -w binutils-2.* | 
 | 	mkdir build | 
 | 	cd build | 
 | 	../binutils-2.X/configure --enable-gold --prefix=`pwd`/install --enable-plugins | 
 | 	make all-gas all-gold all-ld all-binutils all-gprof | 
 | 	make check-gas check-binutils check-ld check-gold | 
 |         make install-gas install-gold install-ld install-binutils | 
 |  | 
 |         # Needed for step 29... | 
 |         make html pdf | 
 |  | 
 |   26. Tag the branch with the new release number: | 
 |  | 
 |             git tag -a binutils-2_3x     <=== Be careful to get the tag right | 
 | 	      [optional: add "-u XXXXX" to sign with a gpg key] | 
 | 	      enter a tag message such as: "Official Binutils 2.3x 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_3x | 
 |  | 
 |         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.3*.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. | 
 |  | 
 |       Check for an email response from the upload.  If necessary | 
 |       fix any problems. | 
 |  | 
 |   28. Upload the tarballs (and signatures) to sourceware.org: | 
 |  | 
 |        sftp sourceware.org | 
 |          cd /sourceware/ftp/pub/binutils/releases | 
 |  	 put binutils-2.3*.tar.* | 
 |  	 chmod 644 binutils-2.3x.tar.* | 
 | 	 quit | 
 |  | 
 |       FIXME: Are the signatures (created by the gnupload script in step 27) needed ? | 
 |       [The above commands upload them and nobody has complained, so suggest that they | 
 |       are retained]. | 
 |  | 
 |   29. Update web pages.  For sourceware.org: | 
 |  | 
 |       Create a new documentation folder on the sourceware.org web | 
 |       pages as /sourceware/www/sourceware/htdocs/binutils/docs-2.3x. | 
 |  | 
 |        sftp sourceware.org | 
 |          cd /sourceware/www/sourceware/htdocs/binutils | 
 | 	 mkdir docs-2.3x | 
 | 	 cd docs-2.3x | 
 | 	 mkdir as bfd binutils gprof ld | 
 | 	 cd ../docs-2.3(x-1) | 
 | 	 get index.html | 
 |  | 
 |       Update the (local copy of the) index.html file to point to the | 
 |       new documentation and mention the new version and then upload it. | 
 |  | 
 | 	 cd ../docs-2.3x | 
 | 	 put index.html | 
 |  | 
 |       Make the html documentation locally with the "make html" command | 
 |       (see step 25 above).  Then upload and rename the directories as | 
 |       needed.  (sftp does not appear to support recursive uploads | 
 |       however, so the directories had to be made by hand, as shown above). | 
 |  | 
 |          cd as | 
 | 	 lcd <build-dir>/gas/doc/ | 
 | 	 put -R as                {be patient - this takes a long time...} | 
 | 	 put as.html | 
 | 	 put as.pdf | 
 | 	 cd ../bfd | 
 | 	 lcd ../../../bfd/doc/ | 
 | 	 put -R bfd | 
 | 	 put bfd.html | 
 | 	 put bfd.pdf | 
 | 	 cd ../binutils | 
 | 	 lcd ../../../binutils/doc/ | 
 | 	 put -R binutils | 
 | 	 put binutils.html | 
 | 	 put binutils.pdf | 
 | 	 cd ../gprof | 
 | 	 lcd ../../../gprof/ | 
 | 	 put -R doc/gprof | 
 | 	 put gprof.html | 
 | 	 put gprof.pdf | 
 | 	 cd ../ld | 
 | 	 lcd ../../ld/ | 
 | 	 put -R doc/ld | 
 | 	 put ld.html | 
 | 	 put ld.pdf | 
 | 	  | 
 |       Edit the top level binutils index.html file to change the links | 
 |       to point to the new documentation. | 
 |  | 
 |          cd ../.. | 
 | 	 get index.html | 
 | 	 [edit] | 
 | 	 put index.html | 
 |          rm docs | 
 | 	 ln -s docs-2.3x docs | 
 | 	 quit | 
 |  | 
 |       Check that the new web page is correct: | 
 |        | 
 |           https://sourceware.org/binutils/ | 
 | 	   | 
 |       For the www.gnu.org site you have to email webmasters@gnu.org | 
 |       and ask them to make 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.3x).  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.3*.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.3x 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 | 
 |  | 
 |         This release contains numerous bug fixes, and also the | 
 |         following new features: | 
 |  | 
 |           <extract info from the NEWS files> | 
 |  | 
 |         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.3x 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. | 
 |  | 
 |  | 
 |  | 
 |  | 
 | -------------------------------------------------------------------------- | 
 | 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 8. | 
 |  | 
 |   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. Commit the updates along with a "this-is-the-2.3x.y-release" | 
 |           note in all of the changelogs. | 
 |        f. Tag the branch with the new release number: | 
 |  | 
 |             git tag -a binutils-2_3x_y | 
 | 	      [optional: add "-u XXXXX" to sign with a gpg key] | 
 | 	    git push origin binutils-2_3x_y | 
 |  | 
 |        g. Check that your file creation mask will create the | 
 |           correct file permissions.  Ie: | 
 |  | 
 | 	    umask 022 | 
 |  | 
 |        h. Create the release tarballs: | 
 |         | 
 |             ./src-release -b -g -l -x binutils | 
 |  | 
 |        i. Check that the files in the tarballs have the correct | 
 |           permissions. | 
 |  | 
 |        j. Clean the source tree again | 
 |         | 
 | 	    git clean -fdx | 
 | 	   | 
 |        k. Edit bfd/development.sh and set "development=true". | 
 |        l. Commit this change. | 
 |  | 
 |   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. Update web pages.  For sourceware.org: | 
 |  | 
 |       * Log on to sourceware.org | 
 |       * Go to /sourceware/www/sourceware/htdocs/binutils | 
 |       * Edit index.html and update the latest release number (if this is a latest release) | 
 |  | 
 |       For the www.gnu.org site you have to email webmasters@gnu.org | 
 |       and ask them to make the change(s). | 
 |  | 
 |   8. 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.3x.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.3x 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 | 
 | -------------------------------------------------------------------------- | 
 |  | 
 |   9. 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-2021 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. |