		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.37.90" becomes "2.38".  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.38-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.

           tar tvf binutils-2.37.tar.bz2 | grep -e "---"

  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.lz
	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"

            eg: git tag -a binutils-2_37 -u DD9E3C4F

        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
	 mkdir bfd
	 mkdir binutils
	 mkdir gprof
	 mkdir 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/as
	 put *                {be patient - this takes a long time...}
	 lcd ..
	 cd ..
	 put as.html
	 put as.pdf
	 cd ../bfd
	 lcd ../../bfd/doc/bfd
	 put *
	 cd ..
	 lcd ..
	 put bfd.html
	 put bfd.pdf
	 cd ../binutils
	 lcd ../../binutils/doc/binutils
	 put *
	 cd ..
	 lcd ..
	 put binutils.html
	 put binutils.pdf
	 cd ../gprof
	 lcd ../../gprof/doc/gprof
	 put *
	 cd ..
	 lcd ../..
	 put gprof.html
	 put gprof.pdf
	 cd ../ld
	 lcd ../ld/doc/ld
	 put *
	 cd ..
	 lcd ../..
	 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.
