Home | History | Annotate | Line # | Download | only in binutils
README-how-to-make-a-release revision 1.1.1.2
      1 		README for MAKING BINUTILS RELEASES
      2 
      3 This is a collection of notes on how to perform a binutils release.  A
      4 lot of this information can also be found in the maintain.texi file in
      5 the gnulib project:
      6 
      7   https://www.gnu.org/software/gnulib/
      8 
      9 It is useful to have a cloned copy of the sources of this project as
     10 it also contains an upload script used to install tarballs on the GNU
     11 FTP server.
     12 
     13 Make sure that you have upload authority on sourceware and fencepost.
     14 Beware - this is an involved process and can take weeks to complete.
     15 See the maintain.texi file for details on how to obtain these
     16 permissions.
     17 
     18 -------------------------------------------------
     19 How to perform a release.
     20 -------------------------------------------------
     21 
     22   1. Send an email out warning contributors about the forthcoming
     23      branch.  Set a date for the branch (weekends are better because
     24      they are less busy).
     25 
     26   2. When the branch date is near:  Update the libiberty and config
     27      directories and the top level configure files.
     28 
     29   3. When branch day arrives add markers for the upcoming release to
     30      the NEWS files in gas, ld, and binutils.  No need to update NEWS
     31      in the gold directory - it has its own release numbering.
     32 
     33      Likewise for the ChangeLog files in: bfd, binutils, config, cpu,
     34      elfcpp, gas, gold, gprof, include, ld, libctf, opcodes and toplevel.
     35 
     36      Add a note of the name of the new branch to binutils/BRANCHES.
     37 
     38      Commit these changes.
     39 
     40   4. Create the release branch using:
     41 
     42 	git branch binutils-2_34-branch
     43         git push origin binutils-2_34-branch
     44 
     45      If you get a message like:
     46      
     47        remote: fatal: Invalid revision range 0000000000000000000000000000000000000000..f974f26cb16cc6fe3946f163c787a05e713fb77b
     48        
     49      It appears that this can be ignored...
     50 
     51   5. Make sure that the branch is there.  IE check out the branch sources:
     52   
     53         git clone ssh://sourceware.org/git/binutils-gdb.git -b binutils-2_34-branch 2.34
     54 
     55      If you get a message about being in a "detached head" state, something
     56      has gone wrong...
     57 
     58      Keep the checked out sources - they are going to be needed in future
     59      steps.
     60 
     61   6. Update "BINUTILS_BRANCH" in gdbadmin's crontab:
     62 
     63      Log in as gdbadmin on sourceware.org, and then:
     64 
     65         $ cd crontab
     66         $ vi crontab
     67         [change BINUTILS_BRANCH]
     68         $ cvs ci crontab
     69         $ crontab crontab
     70 
     71      If you do not have access to this account, please feel free to
     72      ask Joel Brobecker <brobecker AT adacore DOT com>.
     73 
     74   7. Rename the current HEAD version entry in Bugzilla, and create a
     75      new one.  E.g. rename "2.34 (HEAD)" to 2.34, and create "2.34
     76      (HEAD)":
     77      
     78         https://sourceware.org/bugzilla/editversions.cgi?product=binutils
     79 
     80   8. Update bfd/version.m4 on HEAD to indicate that is now a snapshot
     81      of the next release:
     82      
     83        m4_define([BFD_VERSION], [2.34.51])
     84        
     85      Update the release number in bfd/version.m4 for the branch.
     86      The branch only needs the point value set to 90 as the release
     87      has not actually happened yet.
     88 
     89        m4_define([BFD_VERSION], [2.33.90])
     90 
     91      Regenerate various files on both branch and HEAD by configuring
     92      with "--enable-maintainer-mode --enable-gold" and then building
     93      with "make all-binutils all-gas all-gold all-gprof all-ld"
     94 
     95      Add ChangeLog entries for the updated files.  Commit the changes.
     96      Make sure that this includes the .pot files as well as the
     97      configure and makefiles.
     98 
     99   8. Create an initial pre-release:
    100 
    101      a. Remove any auto-generated files, in order to force the
    102         src-release script to rebuild them.
    103 	 
    104           cd <branch-sources>
    105           git clean -fdx .
    106 	  
    107      b. Create a source tarball of the BRANCH sources:
    108 
    109           ./src-release -x binutils
    110 
    111      c. Build a test target using this tarball.
    112 
    113            cp binutils-<version>.tar.xz /dev/shm
    114 	   cd /dev/shm
    115 	   tar xvf binutils-<version>.tar.xz
    116 	   mkdir build
    117 	   cd build
    118 	   ../<version>/configure --quiet --enable-gold
    119 	   make
    120 
    121         If there are problems, fix them.
    122 
    123      d. Upload the pre-release snapshot to the sourceware FTP site:
    124 
    125           cd <branch-sources>
    126           scp binutils-<version>.tar.xz sourceware.org:~ftp/pub/binutils/snapshots
    127           ssh sourceware.org md5sum ~ftp/pub/binutils/snapshots/binutils-<version>.tar.xz
    128 
    129      e. Clean up the source directory again.
    130 
    131          git clean -fdx .
    132 
    133    9. Tell the Translation Project where to find the new tarball.
    134       <coordinator (a] translationproject.org>
    135       qv: http://translationproject.org/html/maintainers.html
    136 
    137 ------------------------------------------------------------------------
    138 Dear Translation Project
    139 
    140   The 2.3x release branch has been created for the FSF binutils.
    141 
    142   A snapshot of the branch sources can be found here:
    143 
    144     https://sourceware.org/pub/binutils/snapshots/binutils-2.3x.90.tar.xz
    145 
    146   We hope to make the official release of the sources on the 8th July
    147   although that could change if there are important bugs that need to
    148   be fixed before the release.
    149 ------------------------------------------------------------------------
    150 
    151   10. Announce the availability of the snapshot and the branch on the
    152       binutils mailing list.  Set a date for when the release will
    153       actually happen.  Something like:
    154       
    155 ------------------------------------------------------------------------
    156 Hi Everyone, 
    157 
    158   The 2.3x branch has now been created:
    159 
    160      git clone git://sourceware.org/git/binutils-gdb.git -b binutils-2_3x-branch 2.3x
    161 
    162   A snapshot of the sources is also available here:
    163 
    164     https://sourceware.org/pub/binutils/snapshots/binutils-2.3x.90.tar.xz
    165 
    166   Please could all patches for the branch be run by me.
    167   The rules for the branch are:
    168 
    169     * No new features.
    170     * Target specific bug fixes are OK.
    171     * Generic bug fixes are OK if they are important and widely tested.
    172     * Documentation updates/fixes are OK.
    173     * Translation updates are OK.
    174     * Fixes for testsuite failures are OK.
    175 
    176   Ideally I would like to make the release happen in two weeks time,
    177   i.e. Saturday 27th Jan.  Which I hope will be enough time for everyone
    178   to get their final fixes in.
    179 ------------------------------------------------------------------------
    180 
    181   11. Build various different toolchains, test them and nag
    182       maintainers to fix any testsuite failures for their
    183       architectures...
    184 
    185 
    186 When the time comes to actually make the release....
    187 
    188 
    189   20. Make sure that the branch sources still build, test and install 
    190       correctly.  Make sure that the sources are clean, without any
    191       patch files (.reg .orig *~) left over.
    192 
    193          cd <branch>
    194 	 git clean -dfx .
    195 
    196   21. Update the release number in bfd/version.m4 on the release
    197       branch to a whole new minor version number, without a point
    198       value.  Eg "2.29.90" becomes "2.30".  Change bfd/development.sh
    199       to set all values to "false".  Regenerate the configure and
    200       makefiles.  And *info* files.  Add ChangeLog entries for the
    201       updates and add a  "this-is-the-2.3x-release" comment and
    202       commit.
    203 
    204   22. Check that your file creation mask will create the
    205       correct file permissions.  Eg:
    206 
    207       	    % umask
    208 	    22
    209 
    210       Remove any spurious autom4te.cache files left over from the
    211       reconfiguring:
    212 
    213             % find . -depth -name autom4te.cache -exec rm -r {} \;
    214 
    215   23. Note - check to see if any new files have been added to the top
    216       level of the source directory, but which are not in the
    217       DEVO_SUPPORT variable in the src-release.sh script.  If they are
    218       needed then add them.
    219 
    220        Create the release tarballs:
    221   
    222             ./src-release.sh -b -g -l -x binutils
    223 
    224   24. Check that the files in the tarballs have the correct
    225       permissions. 
    226 
    227   25. Sanity check the release on x86_64-pc-linux-gnu by building and
    228       running the testsuites (gas, gold, binutils and ld).  Make the
    229       source directory read-only before building.  Also test
    230       "make install".  If necessary fix any problems.
    231 
    232   26. Tag the branch with the new release number:
    233 
    234             git tag -a binutils-2_3x
    235 	      [optional: add "-u XXXXX" to sign with a gpg key]
    236 	    git push origin binutils-2_3x
    237 
    238         NB/ If you do sign the binaries make sure to use a key
    239 	that has been published with the FSF.
    240 
    241   27. Upload the tarballs to ftp.gnu.org.
    242 
    243        gnupload --to ftp.gnu.org:binutils binutils-2.3x.tar.*
    244 
    245       The gnupload script is in the gnulib/build-aux directory.
    246 
    247       Check for an email response from the upload.  If necessary
    248       fix any problems.
    249 
    250   28. Upload the tarballs (and signatures) to sourceware.org:
    251 
    252        sftp sourceware.org
    253          cd /sourceware/ftp/pub/binutils/releases
    254  	 put binutils-2.3x.tar.*
    255  	 chmod 644 binutils-2.3x.tar.*
    256 	 quit
    257 
    258       FIXME: Should the signatures (created by the gnupload script in
    259       step 29) be uploaded as well ?
    260 
    261   29. Update web pages.  For sourceware.org:
    262 
    263       Create a new documentation folder on the sourceware.org web
    264       pages as /sourceware/www/sourceware/htdocs/binutils/docs-2.3x.
    265 
    266        sftp sourceware.org
    267          cd /sourceware/www/sourceware/htdocs/binutils
    268 	 mkdir docs-2.3x
    269 	 cd docs-2.3x
    270 	 mkdir as bfd binutils gprof ld
    271 	 cd ../docs-2.3(x-1)
    272 	 get index.html
    273 
    274       Update the (local copy of the) index.html file to point to the
    275       new documentation and mention the new version and then upload it.
    276 
    277 	 cd ../docs-2.3x
    278 	 put index.html
    279 
    280       Make the html documentation locally with the "make html" command
    281       and then upload and rename the directories as needed.  (sftp
    282       does not appear to support recursive uploads however, so the
    283       directories had to be made by hand, as shown above).
    284 
    285          cd as
    286 	 lcd <build-dir>/gas/doc/as.html
    287 	 put *
    288 	 cd ../bfd
    289 	 lcd ../../../bfd/doc/bfd.html
    290 	 put *
    291 	 cd ../binutils
    292 	 lcd ../../../binutils/doc/binutils.html
    293 	 put *
    294 	 cd ../gprof
    295 	 lcd ../../../gprof/gprof.html
    296 	 put *
    297 	 cd ../ld
    298 	 lcd ../../ld/ld.html
    299 	 put *
    300 	 
    301       Edit the top level binutils index.html file to change the links
    302       to the new documentation.
    303 
    304          cd ../../..
    305 	 get index.html
    306 	 [edit]
    307 	 put index.html
    308          rm docs
    309 	 ln -s docs-2.3x docs
    310 	 quit
    311 
    312       Check that the new web page is correct.
    313 
    314       For the www.gnu.org site you have to email webmasters (a] gnu.org
    315       and ask them to make the change(s).
    316 
    317   30. Send emails to binutils (a] sourceware.org, info-gnu (a] gnu.org and
    318       David Edelsohn <dje.gcc (a] gmail.com> announcing the new release.
    319       Sign the email and include the checksum:
    320 
    321           md5sum binutils-2.3x.tar.*
    322 
    323       (The email to Davis is so that he can update the GNU Toolchain
    324       social media).  Something like this:
    325       -----------------------------------------------------------------------
    326         Hi Everyone,
    327 
    328         We are pleased to announce that version 2.3x of the GNU Binutils project
    329         sources have been released and are now available for download at:
    330 
    331           https://ftp.gnu.org/gnu/binutils
    332           https://sourceware.org/pub/binutils/releases/
    333 
    334           checksums: xxxx
    335 
    336        This release contains numerous bug fixes, and also the
    337        following new features:
    338 
    339           <extract info from the NEWS files>
    340 
    341        Our thanks go out to all of the binutils contributors, past and
    342        present, for helping to make this release possible.
    343 
    344       -----------------------------------------------------------------------
    345 
    346   31. Clean up the source tree:
    347 
    348         git clean -fdx .
    349 
    350   32. Edit bfd/development.sh on the branch and set the development flag
    351       to "true".  (Leave the experimental flag set to "false").  Also bump
    352       the version in bfd/version.m4 by adding a trailing .0, so that the
    353       date suffix keeps the version lower than the trunk version.
    354       Regenerate files.  Commit these changes.
    355 
    356   33. Email the binutils list telling everyone that the 2.3x branch
    357       is now open for business as usual and that patched no longer
    358       need special approval.
    359 
    360   34. Examine the bfd/config.bfd file and move any pending obsolete
    361       targets into the definitely obsolete section.  Create a
    362       changelog entry and commit.
    363       
    364 -------------------------------------------------
    365 How to perform a point release.
    366 -------------------------------------------------
    367 
    368 A point release is easier than a normal release since a lot of the
    369 work has already been done.  The branch has been created, the
    370 translations updated and the documentation uploaded.  So the procedure
    371 looks like this:
    372 
    373   0. Decide that a point release is necessary.
    374 
    375      Usually this only happens when a sufficient number of serious
    376      bugs have been found and fixed since the previous release, and a
    377      new official release is not imminent.
    378 
    379   1. Tell the community that a point release is happening.  Ask
    380      maintainers to ensure that their ports are up to date on the
    381      release branch.  Ask the community if there are any bug fixes
    382      which are missing from the branch.  Allow some time for the
    383      responses to this step.
    384 
    385   2. Make sure that the branch sources build, test and install
    386      correctly.
    387 
    388   2.5 Prepare a list of the bugs which have been fixed.  This
    389       will be needed for step 8.
    390 
    391   3. In the branch sources:
    392 
    393        a. Update the minor release number in bfd/version.m4.
    394        b. Edit bfd/development.sh, set "development=false".
    395        c. Regenerate the configure files.
    396        c.1. Remove spurious autom4te.cache files:
    397 
    398           find . -depth -name autom4te.cache -exec rm -r {} \;
    399 	  
    400        d. Commit the updates along with a "this-is-the-2.3x.y-release"
    401           note in all of the changelogs.
    402        e. Tag the branch with the new release number:
    403 
    404             git tag -a binutils-2_3x_y
    405 	      [optional: add "-u XXXXX" to sign with a gpg key]
    406 	    git push origin binutils-2_3x_y
    407 
    408        f. Check that your file creation mask will create the
    409           correct file permissions.  Eg:
    410 
    411 	    umask 022
    412 
    413        g. Create the release tarballs:
    414        
    415             ./src-release -b -g -l -x binutils
    416 
    417        h. Check that the files in the tarballs have the correct
    418           permissions.
    419 
    420        i. Edit bfd/development.sh and set "development=true".
    421        j. Commit this change into the git repository.
    422 
    423   4. [If paranoid - upload the tarballs to one of the FTP servers and
    424       ask people to test it before going on to step 5].
    425 
    426   5. Upload the tarballs to ftp.gnu.org.
    427 
    428        gnupload --to ftp.gnu.org:binutils binutils-2.3x.y.tar.*
    429 
    430      The gnupload script is in the gnulib/build-aux directory.
    431 
    432   6. Upload the tarballs to sourceware.org:
    433 
    434        sftp sourceware.org
    435          cd /sourceware/ftp/pub/binutils/releases
    436  	 put binutils-2.3x.y.tar.*
    437  	 chmod 644 binutils-2.3x.y.tar.*
    438 	 quit
    439 
    440     It is OK to upload the signatures as well.
    441 
    442   7. Update web pages.  For sourceware.org:
    443 
    444       * Log on to sourceware.org
    445       * Go to /sourceware/www/sourceware/htdocs/binutils
    446       * Edit index.html
    447 
    448       For the www.gnu.org site you have to email webmasters (a] gnu.org
    449       and ask them to make the change(s).
    450 
    451   8. Send an emails to the binutils list, info-gnu (a] gnu.org and
    452      David Edelsohn <dje.gcc (a] gmail.com> announcing the new release.
    453      (The email to Davis is so that he can update the GNU Toolchain
    454      social media).  Something like this:
    455 
    456 ------------------------------------------------------------------------
    457 Hi Everyone,
    458 
    459   We are pleased to announce that version 2.3x.y of the GNU Binutils
    460   project sources have been released and are now available for download at:
    461 
    462     https://ftp.gnu.org/gnu/binutils
    463     https://sourceware.org/pub/binutils/releases/
    464 
    465   This is a point release over the previous 2.3x version, containing bug
    466   fixes but no new features.
    467 
    468   Our thanks go out to all of the binutils contributors, past and
    469   present, for helping to make this release possible.
    470 
    471   Here is a list of the bugs that have been fixed:
    472     xx
    473     xx
    474     xx
    475     xx
    476 --------------------------------------------------------------------------
    477   9. Clean up the source tree.
    478        
    479             git clean -dfx .
    480 
    481  10. Edit bfd/development.sh on the branch and set the development flag
    482      to "true".  Commit this change.
    483 
    484 
    486 Copyright (C) 2017-2020 Free Software Foundation, Inc.
    487 
    488 Copying and distribution of this file, with or without modification,
    489 are permitted in any medium without royalty provided the copyright
    490 notice and this notice are preserved.
    491