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 See the maintain.texi file for details on how to obtain these 15 permissions. 16 17 Note - when performing a release it is helpful to edit this document 18 as you go, updating the example commands so that they are ready for 19 the release that follows. 20 21 ------------------------------------------------- 22 How to perform a release. 23 ------------------------------------------------- 24 25 1. Choose dates for the branch and release. Weekends are better 26 because they are less busy. It is typical to leave two weeks 27 between creating the branch and creating the release. 28 29 Send an email out warning contributors about the forthcoming 30 branch and release. 31 32 2. When the branch date is near: Update the libiberty and config 33 directories and the top level Makefile and configure files. Also 34 consider updating the toplevel libtool files. 35 36 ------------------------------------------------- 37 How to create the release branch. 38 ------------------------------------------------- 39 40 Approx time to complete from here: 2 hours ... 41 42 2.5 If you have not built from the sources recently then now is the 43 time to check that they still work... 44 45 3. When branch day arrives add markers for the upcoming release to 46 the NEWS files in gas, ld, and binutils. No need to update NEWS 47 in the gold directory - it has its own release numbering. 48 49 Likewise for the ChangeLog files in: bfd, binutils, cpu, 50 elfcpp, gas, gold, gprof, include, ld, libctf, opcodes and toplevel. 51 52 Add a note of the name of the new branch to binutils/BRANCHES. 53 54 Commit these changes. 55 56 4. Create the release branch using: 57 58 git branch binutils-2_45-branch 59 git push origin binutils-2_45-branch 60 61 If you get a message like: 62 63 remote: fatal: Invalid revision range 0000000000000000000000000000000000000000..f974f26cb16cc6fe3946f163c787a05e713fb77b 64 65 It appears that this can be ignored... 66 67 5. Make sure that the branch is there. IE check out the branch sources: 68 69 git clone ssh://sourceware.org/git/binutils-gdb.git -b binutils-2_45-branch 2.45 70 71 If you get a message about being in a "detached head" state, something 72 has gone wrong... 73 74 Keep the checked out sources - they are going to be needed in future 75 steps. 76 77 6. Update "BINUTILS_BRANCH" in gdbadmin's crontab: 78 79 Log in as gdbadmin on sourceware.org, and then: 80 81 $ cd crontab 82 $ vi crontab 83 [change BINUTILS_BRANCH] 84 $ cvs ci crontab 85 $ crontab crontab 86 87 If you do not have access to this account, please feel free to 88 ask Joel Brobecker <brobecker AT adacore DOT com>. 89 90 7. Rename the current HEAD version entry in Bugzilla, and create a 91 new one. E.g. rename "2.45 (HEAD)" to 2.45, and create 92 "2.46 (HEAD)": 93 94 https://sourceware.org/bugzilla/editversions.cgi?product=binutils 95 96 8. Update bfd/version.m4 on HEAD to indicate that is now a snapshot 97 of the next release and the BRANCH to indicate that it is almost 98 ready for the release. 99 100 So if the release is going to be 2.45 then the version number on 101 the BRANCH should be set to 2.44.90 - ie almost, but not quite 2.45, 102 and the version number on the MAINLINE should be set to 2.45.50 - 103 ie half way to 2.46 release. 104 105 So the BRANCH bfd/version.m4 has: 106 107 m4_define([BFD_VERSION], [2.44.90]) 108 109 and the MAINLINE has: 110 111 m4_define([BFD_VERSION], [2.45.50]) 112 113 Regenerate various files on both branch and HEAD by configuring 114 with "--enable-maintainer-mode --enable-gold --enable-shared" and then building 115 with "make -j1 all-binutils all-gas all-gold all-gprof all-gprofng all-ld" 116 117 Add ChangeLog entries for the updated files. Commit the changes. 118 Make sure that this includes the .pot files as well as the 119 configure and makefiles. 120 121 9. Create an initial pre-release: 122 123 a. Remove any auto-generated files, in order to force the 124 src-release script to rebuild them. 125 126 cd <branch-sources> 127 git clean -fdx 128 129 b. Create a source tarball of the BRANCH sources: 130 131 If this is an EVEN numbered release: 132 133 ./src-release.sh -x binutils_with_gold 134 135 If this is an ODD numbered release: 136 137 ./src-release.sh -x binutils 138 139 FIXME: Not sure if the following steps are needed... 140 141 Add a .dirstamp file to the gas/doc subdirectory: 142 143 touch -d `date +%Y-%m-%d` binutils-2.44.90/gas/doc/.dirstamp 144 tar rvf binutils-2.44.90.tar binutils-2.44.90/gas/doc/.dirstamp 145 rm binutils-2.44.90.tar.xz 146 xz -9 -k binutils-2.44.90.tar 147 148 ...END OF FIXME 149 150 c. Build a test target using this tarball. 151 152 cp binutils-*.tar.xz /dev/shm 153 pushd /dev/shm 154 tar xvf binutils-*.tar.xz 155 mkdir build 156 cd build 157 ../binutils-*/configure --quiet --enable-gold 158 make 159 popd 160 161 If there are problems, fix them. 162 163 d. Upload the pre-release snapshot to the sourceware FTP site: 164 165 scp binutils-2.44.90.tar.xz sourceware.org:/var/ftp/pub/binutils/snapshots 166 ssh sourceware.org sha256sum ~ftp/pub/binutils/snapshots/binutils-2.44.90.tar.xz 167 168 Paranoia: Compare the checksum with the local version. 169 170 e. Clean up the source directory again. 171 172 git clean -fdx 173 174 10. Tell the Translation Project where to find the new tarball. 175 <coordinator (a] translationproject.org> 176 qv: https://translationproject.org/html/maintainers.html 177 178 ------------------------------------------------------------------------ 179 Dear Translation Project 180 181 The 2.45 release branch has been created for the GNU Binutils project. 182 183 A snapshot of the branch sources can be found here: 184 185 https://sourceware.org/pub/binutils/snapshots/binutils-2.44.90.tar.xz 186 187 We hope to make the official release of the sources on the <DATE> 188 although that could change if there are important bugs that need to 189 be fixed before the release. 190 ------------------------------------------------------------------------ 191 192 11. Announce the availability of the snapshot and the branch on the 193 binutils mailing list. Set a date for when the release will 194 actually happen. Something like: 195 196 ------------------------------------------------------------------------ 197 Hi Everyone, 198 199 The <NEW_VERSION> branch has now been created: 200 201 git clone git://sourceware.org/git/binutils-gdb.git -b binutils-<NEW_VERSION>-branch 202 203 A snapshot of the sources is also available here: 204 205 https://sourceware.org/pub/binutils/snapshots/binutils-<OLD_VERSION>.90.tar.xz 206 207 Please could all patches for the branch be run by me. 208 The rules for the branch are: 209 210 * No new features. 211 * Target specific bug fixes are OK. 212 * Generic bug fixes are OK if they are important and widely tested. 213 * Documentation updates/fixes are OK. 214 * Translation updates are OK. 215 * Fixes for testsuite failures are OK. 216 217 Ideally I would like to make the release happen in two weeks time, 218 i.e. <DATE>. Which I hope will be enough time for everyone 219 to get their final fixes in. 220 ------------------------------------------------------------------------ 221 222 12. Build various different toolchains, test them and nag 223 maintainers to fix any testsuite failures for their 224 architectures... 225 226 ============================================================================== 227 ============================================================================== 228 229 For the next few weeks, monitor the mailing list for new translations 230 and respond to any requests to have patches applied to the branch. 231 232 ============================================================================== 233 ============================================================================== 234 235 Then, a couple of weeks later ... 236 237 ------------------------------------------------- 238 How to create the release. 239 ------------------------------------------------- 240 241 20. Make sure that the branch sources still build, test and install 242 correctly. Make sure that the sources are clean, without any 243 patch files (.reg .orig *~) left over. 244 245 cd <branch> 246 git pull 247 git clean -fdx 248 cd <builds> 249 make 250 251 21. a. Update the release number in bfd/version.m4 on the release 252 branch to a whole new minor version number, without a point 253 value. Eg "2.44.90" becomes "2.45". NB/ Not: "2.45.00" 254 255 b. Change bfd/development.sh to set all values to "false". 256 257 c. Regenerate the configure and makefiles. And *info* files. 258 259 cd <build-configured-with-enable-maintainer-mode> 260 make -j1 all-gas all-ld all-binutils all-gprof all-gold all-gprofng all-libctf 261 make info 262 263 d. Create a ChangeLog from the git refs for all of the commits 264 from when changelog entries were no longer required: 265 266 gitlog-to-changelog --since=2021-07-03 > ChangeLog.git 267 git add ChangeLog.git 268 269 The gitlog-to-changelog script is part of the sources 270 of the "config" project. 271 272 Add an entry for ChangeLog.git to the src-release.sh script's 273 DEVO_SUPPORT list, so that it is included in the release. 274 275 FIXME: it would be better if the ChangeLog.git file was permanently 276 added to the src-release.sh script, but this mean that it would have 277 to exist in the master repository, and that the GDB project would 278 need to agree to have it there. 279 280 e. Add ChangeLog entries for all of the updates and add a 281 "this-is-the-2.43-release" comment and commit. 282 283 git add . 284 git commit -m "This is the 2.45 release" 285 git push 286 287 22. Check that your file creation mask will create the 288 correct file permissions. Eg: 289 290 % umask 291 22 292 293 Remove any spurious autom4te.cache files left over from the 294 reconfiguring: 295 296 git clean -fdx 297 298 23. Note - check to see if any new files have been added to the top 299 level of the source directory, but which are not in the 300 DEVO_SUPPORT variable in the src-release.sh script. If they are 301 needed then add them. 302 303 PARANOIA: Check that there are no pending commits: 304 305 git status 306 307 Then create the release tarballs: 308 309 If this is an EVEN numbered release: 310 311 ./src-release.sh -b -g -l -x -z binutils_with_gold 312 313 If this is an ODD numbered release: 314 315 ./src-release.sh -b -g -l -x -z binutils 316 317 OR ... for a more reproducible tarball: 318 319 ./src-release.sh -b -g -l -x -z \ 320 -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` \ 321 [binutils | binutils_with_gold] 322 323 24. Check that the files in the tarballs have the correct 324 permissions. 325 326 tar tvf binutils-*.tar | grep -e "---" 327 328 Also check that the man files are not empty. (cf PR 28144). 329 330 tar tvf binutils-*.tar | grep -e "\.1" 331 332 25. Sanity check the release on x86_64-pc-linux-gnu by building and 333 running the testsuites (gas, gold, binutils and ld). 334 Make the source directory read-only before building. 335 Also test 'make install'. 336 Also build the html and pdf documentation files. 337 If necessary fix any problems. 338 339 pushd /dev/shm 340 mkdir delme 341 cd delme 342 tar xvf <path-to-sources>/binutils-2.*.tar.lz 343 chmod -R -w binutils-2.* 344 mkdir build 345 cd build 346 ../binutils-2.*/configure --quiet --enable-gold --prefix=`pwd`/install --enable-plugins --enable-shared 347 348 make -j1 all-gas all-ld all-binutils all-gprof all-gprofng 349 make check-gas check-binutils check-ld 350 make install-gas install-ld install-binutils install-gprofng 351 352 If this is an ODD numbered release: 353 354 make -j1 all-gold 355 make check-gold 356 make install-gold 357 358 Needed for step 29... 359 360 make html pdf html-libctf pdf-libctf html-libsframe pdf-libsframe 361 362 popd 363 364 26. Tag the branch with the new release number: 365 [optional: add "-u XXXXX" to sign with a gpg key] 366 enter a tag message such as: "Official GNU Binutils 2.4x release" 367 368 git tag -a <TAG> -u <Your Key> 369 eg: 370 git tag -a binutils-2_44 -u DD9E3C4F <=== Be careful to get the tag right 371 or: 372 git tag -a binutils-2_44 -u DD9E3C4F -m "Official GNU Binutils 2.44 release" 373 374 NB/ If you do sign the binaries make sure to use a key 375 that has been published with the FSF. 376 377 Then push the release: 378 379 git push origin binutils-2_44 380 381 If you get an error message along the lines of: 382 "Invalid revision range ..." 383 you can ignore it. 384 385 27. Upload the tarballs to ftp.gnu.org. 386 387 gnupload --to ftp.gnu.org:binutils binutils-2.44.tar.* 388 389 Be prepared to provide the password for the key, if you 390 signed the binaries. 391 392 The gnupload script is in the build-aux/ directory of the gnulib 393 project's srouces. It uses the ncftp package for transmitting 394 the files. 395 396 NB/ This step can be done in PARALLEL with step 28. 397 398 Check for an email response from the upload. If necessary 399 fix any problems. (The response might take a while, so 400 proceed with the next steps if you are confident that 401 everything is OK). 402 403 28. Upload the tarballs (and signatures) to sourceware.org: 404 405 sftp sourceware.org 406 cd /sourceware/ftp/pub/binutils/releases 407 put binutils-2.4*.tar.* 408 chmod 644 binutils-2.4*.tar.* 409 quit 410 411 29. Update web pages. For sourceware.org: 412 413 Clone the documentation (if you have not already done so): 414 415 git clone ssh://sourceware.org/git/binutils-htdocs 416 417 Create a new docs sub-directory and move into it: 418 419 cd binutils-htdocs 420 mkdir docs-2.45 421 cd docs-2.45 422 423 Copy the index.html from the previous release 424 425 cp ../docs/index.html . 426 427 Update the index.html file to reference this new release and to 428 point back to the current (now old) release. Update the last 429 modified date as well. 430 431 If necessary make the html documentation locally with the "make 432 html" command. (This should have been done by step 25 above). 433 434 Copy in the documentation files: 435 436 cp -r <build-dir>/gas/doc/as . 437 cp <build-dir>/gas/doc/as.html . 438 cp <build-dir>/gas/doc/as.pdf . 439 440 cp -r <build-dir>/bfd/doc/bfd . 441 cp <build-dir>/bfd/doc/bfd.html . 442 cp <build-dir>/bfd/doc/bfd.pdf . 443 444 cp -r <build-dir>/binutils/binutils_html binutils [NB/ Path not like others] 445 cp <build-dir>/binutils/doc/binutils.html . 446 cp <build-dir>/binutils/doc/binutils.pdf . 447 448 cp -r <build-dir>/gprof/doc/gprof . 449 cp <build-dir>/gprof/gprof.html . [NB/ Path not like others] 450 cp <build-dir>/gprof/gprof.pdf . [NB/ Path not like others] 451 452 cp -r <build-dir>/ld/doc/ld . 453 cp <build-dir>/ld/ld.html . [NB/ Path not like others] 454 cp <build-dir>/ld/ld.pdf . [NB/ Path not like others] 455 456 [NB/ The gprofng documentation does not have a node-per-page selection] 457 cp <build-dir>/gprofng/doc/gprof.html . 458 cp <build-dir>/gprofng/doc/gprof.pdf . 459 460 cp <build-dir>/libctf/doc/ctf-spec.html . 461 cp <build-dir>/libctf/doc/ctf-spec.pdf . 462 463 cp <build-dir>/libsframe/doc/sframe-spec.html . 464 cp <build-dir>/libsframe/doc/sframe-spec.pdf . 465 466 Update the symbolic link. 467 468 cd .. [Should now be in be in binutils-htdocs/ ] 469 rm docs 470 ln -s docs-2.45 docs 471 472 Edit index.html file to change the links to point to the new 473 release, mention any new features, update dates and so on. 474 475 Check that the new web page is correct: 476 477 file:///<path-to-binutils-htdocs>/index.html 478 479 Add the new directories and files, commit and push the changes: 480 481 git add . 482 git commit -m"Update documenation for the 2.45 release" 483 git push 484 485 486 29.1 For the www.gnu.org site you have to email webmasters (a] gnu.org 487 and ask them to copy the change(s): 488 --------------------------------------- 489 Hi FSF Webmasters, 490 491 Please could the GNU Binutils webpage at: 492 493 https://www.gnu.org/software/binutils/binutils.html 494 495 be updated to indicate that there is now a newer version available 496 (2.4x). I have already updated the related page on the Sourceware 497 website so this might be useful as a template: 498 499 https://sourceware.org/binutils/ 500 501 Thanks very much. 502 503 Cheers 504 -------------------------------------- 505 506 30. Send emails to binutils (a] sourceware.org, info-gnu (a] gnu.org and 507 David Edelsohn <dje.gcc (a] gmail.com> announcing the new release. 508 Sign the email and include the checksum: 509 510 sha256sum binutils-2.4*.tar.* 511 512 (The email to Davis is so that he can update the GNU Toolchain 513 social media). Something like this: 514 ----------------------------------------------------------------------- 515 Hi Everyone, 516 517 We are pleased to announce that version 2.4x of the GNU Binutils project 518 sources have been released and are now available for download at: 519 520 https://ftp.gnu.org/gnu/binutils 521 https://sourceware.org/pub/binutils/releases/ 522 523 checksums: xxxx 524 525 These tarballs were made with the "-r <date>" option supported by 526 the src-release.sh script. This attempts to make reproducible 527 tarballs by sorting the files and passing the "--mtime=<date>" option 528 to tar. The date used for these tarballs was obtained by running: 529 530 git log -1 --format=%cd --date=format:%F bfd/version.m4 531 532 This release contains numerous bug fixes, and also the 533 following new features: 534 535 <extract info from the NEWS files> 536 537 For more information see: 538 539 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=gas/NEWS;;hb=refs/tags/binutils-2_4x 540 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=ld/NEWS;hb=refs/tags/binutils-2_4x 541 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=binutils/NEWS;hb=refs/tags/binutils-2_4x 542 543 Our thanks go out to all of the binutils contributors, past and 544 present, for helping to make this release possible. 545 546 ----------------------------------------------------------------------- 547 548 31. Clean up the source tree: 549 550 git clean -fdx . 551 552 32. Edit bfd/development.sh on the branch and set the development flag 553 to "true". (Leave the experimental flag set to "false"). Also bump 554 the version in bfd/version.m4 by adding a trailing .0, so that the 555 date suffix keeps the version lower than the trunk version. 556 Regenerate files. Commit these changes. 557 558 33. Email the binutils list telling everyone that the 2.4x branch 559 is now open for business as usual and that patches no longer 560 need special approval. 561 562 34. Examine the bfd/config.bfd file in the mainline sources and move 563 any pending obsolete targets into the definitely obsolete 564 section. Create a changelog entry and commit. 565 566 Sit back and relax, you are all done. 567 568 -------------------------------------------------------------------------- 569 How to perform a POINT release. 570 -------------------------------------------------------------------------- 571 572 A point release is easier than a normal release since a lot of the 573 work has already been done. The branch has been created, the 574 translations updated and the documentation uploaded. So the procedure 575 looks like this: 576 577 0. Decide that a point release is necessary. 578 579 Usually this only happens when a sufficient number of serious 580 bugs have been found and fixed since the previous release, and a 581 new official release is not imminent. 582 583 1. Tell the community that a point release is happening. Ask 584 maintainers to ensure that their ports are up to date on the 585 release branch. Ask the community if there are any bug fixes 586 which are missing from the branch. Allow some time for the 587 responses to this step. 588 589 2. Make sure that the branch sources build, test and install 590 correctly. 591 592 2.5 Prepare a list of the bugs which have been fixed. This 593 will be needed for step 9. 594 595 3. In the branch sources: 596 597 a. Update the minor release number in bfd/version.m4. 598 b. Edit bfd/development.sh, set "development=false". 599 c. Regenerate the configure files. 600 d. Remove spurious autom4te.cache files: 601 602 git clean -fdx 603 604 e. Update the changelog: 605 606 gitlog-to-changelog --since=2021-07-03 > ChangeLog.git 607 608 f. Commit the updates along with a "this-is-the-2.4x.y-release" 609 comment. 610 611 git add . 612 git commit -m"..." 613 git push 614 615 f. Tag the branch with the new release number. Optional: add 616 "-u XXXXX" to sign with a gpg key, and -m "..." for a 617 comment. eg: 618 619 git tag -a binutils-2_43_1 620 or: 621 git tag -a binutils-2_43_1 -u DD9E3C4F -m "Official GNU Binutils 2.43.1 release" 622 623 Then push it: 624 625 git push origin binutils-2_43_1 626 627 g. Check that your file creation mask will create the 628 correct file permissions. Ie: 629 630 umask 022 631 632 h. Create the release tarballs: 633 634 ./src-release.sh -b -g -l -x -z [ binutils | binutils_with_gold ] 635 or: 636 ./src-release.sh -b -g -l -x -z 637 -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` 638 [ binutils | binutils_with_gold ] 639 640 i. Check that the files in the tarballs have the correct 641 permissions. 642 643 tar tvf binutils-*.tar.xz | grep -e "---" 644 645 4. [If paranoid - upload the tarballs to one of the FTP servers and 646 ask people to test it before going on to step 5]. 647 648 5. Upload the tarballs to ftp.gnu.org. 649 650 gnupload --to ftp.gnu.org:binutils binutils-*.tar.* 651 652 The gnupload script is in the gnulib/build-aux directory. 653 654 6. Upload the tarballs to sourceware.org: 655 656 sftp sourceware.org 657 cd /sourceware/ftp/pub/binutils/releases 658 put binutils-*.tar.* 659 chmod 644 binutils-*.tar.* 660 quit 661 662 It is OK to upload the signatures as well. 663 664 7. Clean the source tree again 665 666 git clean -fdx 667 668 Edit bfd/development.sh and set "development=true". 669 670 Commit this change. 671 672 8. Update web pages. For sourceware.org: 673 674 * Clone the binutils documentation: git clone ssh://sourceware.org/git/binutils-htdocs 675 * Edit index.html and update the latest release number (if this 676 is a latest release). 677 * Add new documentation (if necessary). 678 * Commit and push the changes. 679 680 For the www.gnu.org site you have to email webmasters (a] gnu.org 681 and ask them to make the change(s). 682 683 9. Send an emails to the binutils list, info-gnu (a] gnu.org and 684 David Edelsohn <dje.gcc (a] gmail.com> announcing the new release. 685 (The email to Davis is so that he can update the GNU Toolchain 686 social media). Something like this: 687 688 ------------------------------------------------------------------------ 689 Hi Everyone, 690 691 We are pleased to announce that version 2.4x.y of the GNU Binutils 692 project sources have been released and are now available for download at: 693 694 https://ftp.gnu.org/gnu/binutils 695 https://sourceware.org/pub/binutils/releases/ 696 697 This is a point release over the previous 2.4x version, containing bug 698 fixes but no new features. 699 700 Our thanks go out to all of the binutils contributors, past and 701 present, for helping to make this release possible. 702 703 Here is a list of the bugs that have been fixed: 704 xx 705 xx 706 xx 707 xx 708 -------------------------------------------------------------------------- 709 710 10. Create a new Bugzilla entry for the point release. 711 712 https://sourceware.org/bugzilla/editversions.cgi?product=binutils 713 714 And a new milestone too: 715 716 https://sourceware.org/bugzilla/editmilestones.cgi?product=binutils 717 719 Copyright (C) 2017-2025 Free Software Foundation, Inc. 720 721 Copying and distribution of this file, with or without modification, 722 are permitted in any medium without royalty provided the copyright 723 notice and this notice are preserved. 724