		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_40-branch
        git push origin binutils-2_40-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_40-branch 2.40

     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 and the BRANCH to indicated that it is almost
     ready for the release.

     So if the release is going to be 2.40 then the version number on
     the BRANCH should be set to 2.39.90 - ie almost, but not quite 2.40,
     and the version number on the MAINLINE should be set to 2.40.50 -
     ie half way to 2.41 release.

     So the branch bfd/version.m4 has:
     
       m4_define([BFD_VERSION], [2.39.90])
       
     and the mainline has:

       m4_define([BFD_VERSION], [2.40.50])

     Regenerate various files on both branch and HEAD by configuring
     with "--enable-maintainer-mode --enable-gold --enable-shared" and then building
     with "make 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

     c. Build a test target using this tarball.

           cp binutils-2.39.90.tar.xz /dev/shm
	   pushd /dev/shm
	   tar xvf binutils-2.39.90.tar.xz
	   mkdir build
	   cd build
	   ../binutils-2.39.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.39.90.tar.xz sourceware.org:/var/ftp/pub/binutils/snapshots
          ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.39.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.40 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.39.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. 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.39.90" becomes "2.40".

      b. Change bfd/development.sh to set all values to "false".

      c. Regenerate the configure and makefiles.  And *info* files.

            make all-gas all-ld all-binutils all-gprof all-gold all-gprofng
	    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.
	
      e. Add ChangeLog entries for all of the updates and add a
         "this-is-the-2.38-release" comment and commit.

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

      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-*.tar.bz2 | 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.  (Note - the gprofng
      sources need a writeable doc/ directory.  This is a bug that needs
      to be fixed).
      Also test "make install".
      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.*
	chmod +w binutils-2.*/gprofng/doc
	mkdir build
	cd build
	../binutils-2.*/configure --quiet --enable-gold --prefix=`pwd`/install --enable-plugins --enable-shared
	make 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

        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.3x release"

	    git tag -a binutils-2_40 -u DD9E3C4F      <=== Be careful to get the tag right

        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_40

        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.3*.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/binutils      <=== NB/ Path not like others
	 put *
	 cd ..
	 lcd ../doc
	 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-2022 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.
