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

  3. When branch day arrives add markers for the upcoming release to
     the NEWS files in gas, ld, gold and binutils.

     Likewise for the ChangeLog files in: bfd, binutils, config, 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_33-branch
        git push origin binutils-2_33-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_33-branch 2.33

     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.33 (HEAD)" to 2.33, and create "2.34
     (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.33.51])
       
     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.32.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.

  8. 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-<version>.tar.xz /dev/shm
	   cd /dev/shm
	   tar xvf binutils-<version>.tar.xz
	   mkdir build
	   cd build
	   ../<version>/configure --quiet --enable-gold
	   make

        If there are problems, fix them.

     d. Upload the pre-release snapshot to the sourceware FTP site:

          cd <branch-sources>
          scp binutils-<version>.tar.xz sourceware.org:~ftp/pub/binutils/snapshots
          ssh sourceware.org md5sum ~ftp/pub/binutils/snapshots/binutils-<version>.tar.xz

     e. Clean up the source directory again.

         git clean -fdx .

   9. Tell the Translation Project where to find the new tarball.
      <coordinator@translationproject.org>
      qv: http://translationproject.org/html/maintainers.html

------------------------------------------------------------------------
Dear Translation Project

  The 2.3x release branch has been created for the FSF binutils.

  A snapshot of the branch sources can be found here:

    https://sourceware.org/pub/binutils/snapshots/binutils-2.3x.90.tar.xz

  We hope to make the official release of the sources on the 8th July
  although that could change if there are important bugs that need to
  be fixed before the release.
------------------------------------------------------------------------

  10. 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 2.3x branch has now been created:

     git clone git://sourceware.org/git/binutils-gdb.git -b binutils-2_3x-branch 2.3x

  A snapshot of the sources is also available here:

    https://sourceware.org/pub/binutils/snapshots/binutils-2.3x.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. Saturday 27th Jan.  Which I hope will be enough time for everyone
  to get their final fixes in.
------------------------------------------------------------------------

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

  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.29.90" becomes "2.30".  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:

            % find . -depth -name autom4te.cache -exec rm -r {} \;

  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. 

  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.

  26. Tag the branch with the new release number:

            git tag -a binutils-2_3x
	      [optional: add "-u XXXXX" to sign with a gpg key]
	    git push origin binutils-2_3x

        NB/ If you do sign the binaries make sure to use a key
	that has been published with the FSF.

  27. Upload the tarballs to ftp.gnu.org.

       gnupload --to ftp.gnu.org:binutils binutils-2.3x.tar.*

      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.3x.tar.*
 	 chmod 644 binutils-2.3x.tar.*
	 quit

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

  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
      and then upload and rename the directories as needed.  (sftp
      does not appear to support recursive uploads however, so the
      directories will have to be made by hand).

         cd as
	 lcd <build-dir>/gas/doc/as.html
	 put *
	 cd ../bfd
	 lcd ../../../bfd/doc/bfd.html
	 put *
	 cd ../binutils
	 lcd ../../../binutils/doc/binutils.html
	 put *
	 cd ../gprof
	 lcd ../../../gprof/gprof.html
	 put *
	 cd ../ld
	 lcd ../../ld/ld.html
	 put *
	 
      Edit the top level binutils index.html file to change the links
      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.

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

  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.
      (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 patched no longer
      need special approval.

  34. Examine the bfd/config.bfd file 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.
       c.1. Remove spurious autom4te.cache files:

          find . -depth -name autom4te.cache -exec rm -r {} \;
	  
       d. Commit the updates along with a "this-is-the-2.3x.y-release"
          note in all of the changelogs.
       e. 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

       f. Check that your file creation mask will create the
          correct file permissions.  Eg:

	    umask 022

       g. Create the release tarballs:
       
            ./src-release -b -g -l -x binutils

       h. Check that the files in the tarballs have the correct
          permissions.

       i. Edit bfd/development.sh and set "development=true".
       j. Commit this change into the git repository.
       k. Clean up the source tree.
       
            git clean -dfx .

  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-2.3x.y.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-2.3x.y.tar.*
 	 chmod 644 binutils-2.3x.y.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

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

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