]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - binutils/README-how-to-make-a-release
2.41 Release sources
[thirdparty/binutils-gdb.git] / binutils / README-how-to-make-a-release
index 2edbf191b3736cacc0f1b3f11a45d21bc8d87fa1..a9917927d02fe271f632435f8360a2ffb273ba8a 100644 (file)
@@ -15,28 +15,36 @@ 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.
 
+Note - when performing a release it is helpful to edit this document
+as you go, updating the example commands so that they are ready for
+the release that follows.
+
 -------------------------------------------------
 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).
+  1. Choose dates for the branch and release.  Weekends are better
+     because they are less busy.  It is typical to leave two weeks
+     between creating the branch and creating the release.
+     
+     Send an email out warning contributors about the forthcoming
+     branch and release.
 
   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 ....
 
+  2.5 If you have not built from the sources recently then now is the
+      time to check that they still work...
+
   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.
+     elfcpp, gas, gold, gprof, include, ld, libctf, opcodes and toplevel.
 
      Add a note of the name of the new branch to binutils/BRANCHES.
 
@@ -44,8 +52,8 @@ Approx time to complete from here: 2 hours ....
 
   4. Create the release branch using:
 
-       git branch binutils-2_38-branch
-        git push origin binutils-2_38-branch
+       git branch binutils-2_41-branch
+        git push origin binutils-2_41-branch
 
      If you get a message like:
      
@@ -55,7 +63,7 @@ Approx time to complete from here: 2 hours ....
 
   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
+        git clone ssh://sourceware.org/git/binutils-gdb.git -b binutils-2_41-branch 2.41
 
      If you get a message about being in a "detached head" state, something
      has gone wrong...
@@ -77,25 +85,31 @@ Approx time to complete from here: 2 hours ....
      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)":
+     new one.  E.g. rename "2.41 (HEAD)" to 2.41, and create
+     "2.42 (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:
+     of the next release and the BRANCH to indicate that it is almost
+     ready for the release.
+
+     So if the release is going to be 2.41 then the version number on
+     the BRANCH should be set to 2.40.90 - ie almost, but not quite 2.41,
+     and the version number on the MAINLINE should be set to 2.41.50 -
+     ie half way to 2.42 release.
+
+     So the branch bfd/version.m4 has:
      
-       m4_define([BFD_VERSION], [2.38.50])
+       m4_define([BFD_VERSION], [2.40.90])
        
-     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.
+     and the mainline has:
 
-       m4_define([BFD_VERSION], [2.37.90])
+       m4_define([BFD_VERSION], [2.41.50])
 
      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"
+     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
@@ -111,16 +125,33 @@ Approx time to complete from here: 2 hours ....
          
      b. Create a source tarball of the BRANCH sources:
 
-          ./src-release -x binutils
+          ./src-release.sh -x binutils
+
+        FIXME: Not sure if the following steps are needed...
+       
+       Add a .dirstamp file to the gas/doc subdirectory:
+
+          touch -d <today's date> binutils-2.<release>/gas/doc/.dirstamp
+          tar rvf binutils-<release>.tar binutils-<release>/gas/doc/.ditstamp
+          rm binutils-<release>.tar.xz
+          xz -9 binutils-<release>.tar
+
+          eg:
+           touch -d 2023-06-01 binutils-2.40.90/gas/doc/.dirstamp
+           tar rvf binutils-2.40.90.tar binutils-2.40.90/gas/doc/.ditstamp
+            rm binutils-2.40.90.tar.xz
+            xz -9 binutils-2.40.90.tar
+           
+        ...END OF FIXME   
 
      c. Build a test target using this tarball.
 
-           cp binutils-2.37.90.tar.xz /dev/shm
+           cp binutils-2.40.90.tar.xz /dev/shm
           pushd /dev/shm
-          tar xvf binutils-2.36.90.tar.xz
+          tar xvf binutils-2.40.90.tar.xz
           mkdir build
           cd build
-          ../binutils-2.37.90/configure --quiet --enable-gold
+          ../binutils-2.40.90/configure --quiet --enable-gold
           make
           popd
 
@@ -128,8 +159,8 @@ Approx time to complete from here: 2 hours ....
 
      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
+          scp binutils-2.40.90.tar.xz sourceware.org:/var/ftp/pub/binutils/snapshots
+          ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.40.90.tar.xz
 
      e. Clean up the source directory again.
 
@@ -142,11 +173,11 @@ Approx time to complete from here: 2 hours ....
 ------------------------------------------------------------------------
 Dear Translation Project
 
-  The 2.38 release branch has been created for the GNU Binutils 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.37.90.tar.xz
+    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
@@ -199,14 +230,41 @@ When the time comes to actually make the release....
          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.
+  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.40.90" becomes "2.41".  NB/ Not: "2.41.00"
+
+      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 all-libctf
+           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.
+
+         Add an entry for ChangeLog.git to the src-release.sh script's
+        DEVO_SUPPORT list, so that it is included in the release.
+
+        FIXME: it would be better if the ChangeLog.git file was permanently
+        added to the src-release.sh script, but this mean that it would have
+        to exist in the master repository, and that the GDB project would
+        need to agree to have it there.
+       
+      e. Add ChangeLog entries for all of the updates and add a
+         "this-is-the-2.41-release" comment and commit.
+
+          git add .
+           git commit
+          git push
+          
   22. Check that your file creation mask will create the
       correct file permissions.  Eg:
 
@@ -223,79 +281,90 @@ When the time comes to actually make the release....
       DEVO_SUPPORT variable in the src-release.sh script.  If they are
       needed then add them.
 
-       Create the release tarballs:
+      Create the release tarballs:
   
             ./src-release.sh -b -g -l -x binutils
 
+      OR ... for a more reproducible tarball:
+
+            ./src-release.sh -b -g -l -x -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` binutils
+
   24. Check that the files in the tarballs have the correct
       permissions.
 
-           tar tvf binutils-2.37.tar.bz2 | grep -e "---"
+           tar tvf binutils-*.tar.xz | grep -e "---"
 
       Also check that the man files are not empty.  (cf PR 28144).
 
-           tar tvf binutils-2.37.tar.xz | grep -e "\.1"
+           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.  Also test
-      "make install".  If necessary fix any problems.
+       running the testsuites (gas, gold, binutils and ld).
+      Make the source directory read-only before building.
+      Also test 'make install'.
+      Also build the html and pdf documentation files.
+      If necessary fix any problems.
 
-        cd /dev/shm
+        pushd /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
+       ../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
+        make install-gas install-gold install-ld install-binutils install-gprofng
 
         # Needed for step 29...
-        make html pdf
+       make html pdf html-libctf pdf-libctf html-libsframe pdf-libsframe
 
-  26. Tag the branch with the new release number:
+        popd
 
-            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"
+  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.4x release"
 
-            eg: git tag -a binutils-2_37 -u DD9E3C4F
+           git tag -a binutils-2_41 -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_3x
+           git push origin binutils-2_41
 
-        If you get an error message along the lines of "Invalid revision range ..." you can ignore it.
+        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.
+  27.  Upload the tarballs to ftp.gnu.org.
 
-       gnupload --to ftp.gnu.org:binutils binutils-2.3*.tar.*
+          for A in bz2 gz lz xz ; do gnupload --to ftp.gnu.org:binutils binutils-2.41.tar.$A ; done
 
-      Be prepared to provide the password for the key, if you signed the binaries.
+        Be prepared to provide the password for the key, if you
+       signed the binaries.
       
-      The gnupload script is in the gnulib/build-aux directory.
+        The gnupload script is in the gnulib/build-aux directory.
+       It uses the ncftp package for transmitting the files.
 
-      Check for an email response from the upload.  If necessary
-      fix any problems.
+        Check for an email response from the upload.  If necessary
+        fix any problems.  (The response might take a while, so
+       proceed with the next steps if you are confident that
+       everything is OK).
 
   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.*
+        put binutils-2.4*.tar.*
+        chmod 644 binutils-2.4*.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].
+      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:
 
@@ -304,8 +373,8 @@ When the time comes to actually make the release....
 
        sftp sourceware.org
          cd /sourceware/www/sourceware/htdocs/binutils
-        mkdir docs-2.3x
-        cd docs-2.3x
+        mkdir docs-2.4x
+        cd docs-2.4x
         mkdir as
         mkdir bfd
         mkdir binutils
@@ -317,13 +386,14 @@ When the time comes to actually make the release....
       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
+        cd ../docs-2.4x
         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).
+      Make the html documentation locally with the "make html" command.
+      (This should have been done by step 25 above).
+      Then upload and rename the directories as needed.
+      (Sftp does not support recursive uploads however, so the directories
+      have to be made and populated by hand).
 
          cd as
         lcd <build-dir>/gas/doc/as
@@ -332,28 +402,32 @@ When the time comes to actually make the release....
         cd ..
         put as.html
         put as.pdf
-        cd ../bfd
+        
+        cd bfd
         lcd ../../bfd/doc/bfd
         put *
         cd ..
         lcd ..
         put bfd.html
         put bfd.pdf
-        cd ../binutils
-        lcd ../../binutils/doc/binutils
+        
+        cd binutils
+        lcd ../../binutils/binutils      <=== NB/ Path not like others
         put *
         cd ..
-        lcd ..
+        lcd ../doc                       <=== Also not like the others
         put binutils.html
         put binutils.pdf
-        cd ../gprof
+        
+        cd gprof
         lcd ../../gprof/doc/gprof
         put *
         cd ..
-        lcd ../..
+        lcd ../..                        <==== Different again
         put gprof.html
         put gprof.pdf
-        cd ../ld
+        
+        cd ld
         lcd ../ld/doc/ld
         put *
         cd ..
@@ -361,15 +435,28 @@ When the time comes to actually make the release....
         put ld.html
         put ld.pdf
         
+        lcd ../gprofng/doc
+        put gprofng.html
+        put gprofng.pdf
+        
+        lcd ../../libctf/doc
+        put ctf-spec.html
+        put ctf-spec.pdf
+
+        lcd ../../libsframe/doc
+        put sframe-spec.html
+        put sframe-spec.pdf
+        
       Edit the top level binutils index.html file to change the links
       to point to the new documentation.
 
          cd ../..
         get index.html
         [edit]
+        [check that it works]
         put index.html
          rm docs
-        ln -s docs-2.3x docs
+        ln -s docs-2.4x docs
         quit
 
       Check that the new web page is correct:
@@ -377,7 +464,7 @@ When the time comes to actually make the release....
           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):
+      and ask them to copy the change(s):
 ---------------------------------------
 Hi FSF Webmasters,
 
@@ -400,14 +487,14 @@ Cheers
       David Edelsohn <dje.gcc@gmail.com> announcing the new release.
       Sign the email and include the checksum:
 
-          sha256sum binutils-2.3*.tar.*
+          sha256sum binutils-2.4*.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
+        We are pleased to announce that version 2.4x of the GNU Binutils project
         sources have been released and are now available for download at:
 
           https://ftp.gnu.org/gnu/binutils
@@ -415,11 +502,25 @@ Cheers
 
           checksums: xxxx
 
+        As an experiment these tarballs were made with the new "-r <date>"
+        option supported by the src-release.sh script.  This attempts to make
+        reproducible tarballs by sorting the files and passing the
+        "--mtime=<date>" option to tar.  The date used for these tarballs was
+        obtained by running:
+  
+          git log -1 --format=%cd --date=format:%F bfd/version.m4
+
         This release contains numerous bug fixes, and also the
         following new features:
 
           <extract info from the NEWS files>
 
+        For more information see:
+       
+          https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=gas/NEWS;;hb=refs/tags/binutils-2_4x
+          https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=ld/NEWS;hb=refs/tags/binutils-2_4x
+          https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=binutils/NEWS;hb=refs/tags/binutils-2_4x
+
         Our thanks go out to all of the binutils contributors, past and
         present, for helping to make this release possible.
 
@@ -435,7 +536,7 @@ Cheers
       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
+  33. Email the binutils list telling everyone that the 2.34 branch
       is now open for business as usual and that patches no longer
       need special approval.
 
@@ -444,8 +545,6 @@ Cheers
       section.  Create a changelog entry and commit.
 
 
-
-
 --------------------------------------------------------------------------
 How to perform a POINT release.
 --------------------------------------------------------------------------
@@ -572,7 +671,7 @@ Hi Everyone,
 
        https://sourceware.org/bugzilla/editmilestones.cgi?product=binutils
 \f
-Copyright (C) 2017-2022 Free Software Foundation, Inc.
+Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright