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

xxx -- fill in stuff here -- xxx

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

  3. In the branch sources...
  
       Update the minor release number in bfd/version.m4.
       Regenerate the configure files.
       Commit the updates along with a "this-is-the-2.XX.X-release" note
       in the changelogs.
     
  4. Tag the branch with the new release number:

        git tag -a binutils-2_XX_X
	  [optional -u XXXXX to sign with a gpg key]
	  [optional -f to move an already created tag]
	  
	git push origin

  5. Create the release tarballs:

       a. Edit bfd/development.sh and set "development=false".
       b. ./src-release -b -g -l -x binutils
       c. Edit bfd/development.sh and set "development=true".

     FIXME: Really the development.sh file should be changed by the
     src-release script on the fly.  The development=false flag only
     wants to be set in the release tarballs however, not the branch
     sources as the branch will continue to have (development) patches
     checked in to it.

     FIXME: The tarballs will contain spurious autom4te.cache
     directories which could be removed to reduce their size.

  6. [If paranoid - upload the tarballs to one of the FTP servers and
      ask people to test it before going on to step 7].
      
  7. Upload the tarballs to ftp.gnu.org.

       gnupload --to ftp.gnu.org:binutils binutils-X.XX.X.tar.*

     gnupload is in the gnulib/build-aux directory.

  8. Upload the tarballs to sourceware.org:

       sftp sourceware.org
         cd /ftp/pub/binutils/releases
 	 put binutils-X.XX.X.tar.*
 	 chmod 644 binutils-X.XX.X.tar.*
	 quit

    FIXME: Should the signatures (created by the gnupload script in
    step 7) be uploaded as well ?

  9. Clean up the source tree.  (Use "git status" to find new files,
     and remove them).
  
  10. Update web pages.  For sourceware.org:

      * Log on to sourceware.org
      * Go /www/htdocs/binutils
      * Edit index.html

      For the www.gnu.org site you have to email webmasters@gnu.org
      and ask them to make the change(s).

  11. 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.XX.X of the 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.XX 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.
--------------------------------------------------------------------------


Copyright (C) 2017 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.
