This page was produced by an automated import process, and may have formatting errors; feel free to fix.

Create a Release

The process of creating and then making available a release is broken down into a number of stages. The first part addresses the technical process of creating a releasable tar ball. The later stages address the process of releasing that tar ball.

When making a release candidate just the first section is needed. [Create-a-release-candidate ]

Create a release candidate

The objective at this stage is to create a set of tar balls that can be made available as a formal release (or as a less formal release candidate). [Freeze-the-branch ]

Freeze the branch

Send out an e-mail notifying everyone that the branch is frozen to []. [Establish-a-few-defaults_002e ]

Establish a few defaults.

$  b=gdb_5_2-branch
$  v=5.2
$  t=/sourceware/snapshot-tmp/gdbadmin-tmp
$  echo $t/$b/$v
$  mkdir -p $t/$b/$v
$  cd $t/$b/$v
$  pwd
$  which autoconf


Check out the relevant modules:

$  for m in gdb insight
( mkdir -p $m && cd $m && cvs -q -f -d /cvs/src co -P -r $b $m )


Update relevant files.

Major releases get their comments added as part of the mainline. Minor releases should probably mention any significant bugs that were fixed.

Don’t forget to include the ChangeLog entry.

$  emacs gdb/src/gdb/NEWS
c-x 4 a
c-x c-s c-x c-c
$  cp gdb/src/gdb/NEWS insight/src/gdb/NEWS 
$  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog 

You’ll need to update:

$  emacs gdb/src/gdb/README
c-x 4 a
c-x c-s c-x c-c
$  cp gdb/src/gdb/README insight/src/gdb/README 
$  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog 

Maintainer note: Hopefully the README file was reviewed before the initial branch was cut so just a simple substitute is needed to get it updated.

Maintainer note: Other projects generate README and INSTALL from the core documentation. This might be worth pursuing.

$  echo $v > gdb/src/gdb/
$  cat gdb/src/gdb/
$  emacs gdb/src/gdb/
c-x 4 a
... Bump to version ...
c-x c-s c-x c-c
$  cp gdb/src/gdb/ insight/src/gdb/ 
$  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog 

Do the dirty work

This is identical to the process used to create the daily snapshot.

$  for m in gdb insight
( cd $m/src && gmake -f src-release $m.tar )

If the top level source directory does not have src-release (GDB version 5.3.1 or earlier), try these commands instead:

$  for m in gdb insight
( cd $m/src && gmake -f $m.tar )

Check the source files

You’re looking for files that have mysteriously disappeared. distclean has the habit of deleting files it shouldn’t.

$  ( cd gdb/src && cvs -f -q -n update )
M djunpack.bat
? gdb-5.1.91.tar
? proto-toplev
… lots of generated files …
M gdb/ChangeLog
M gdb/NEWS
… lots of generated files …

Don’t worry about the or gdb/ They were generated (and yes was also generated only something strange with CVS means that they didn’t get suppressed). Fixing it would be nice though. [Create-compressed-versions-of-the-release ]

Create compressed versions of the release

$  cp */src/*.tar .
$  cp */src/*.bz2 .
$  ls -F
gdb/ gdb-5.2.tar insight/ insight-5.2.tar
$  for m in gdb insight
bzip2 -v -9 -c $m-$v.tar > $m-$v.tar.bz2
gzip -v -9 -c $m-$v.tar > $m-$v.tar.gz


Sanity check the tar ball

Pick a popular machine (Solaris/PPC?) and try the build on that.

$  bunzip2 < gdb-5.2.tar.bz2 | tar xpf -
$  cd gdb-5.2
$  ./configure 
$  make
$  ./gdb/gdb ./gdb/gdb
GNU gdb 5.2
(gdb)  b main
Breakpoint 1 at 0x80732bc: file main.c, line 734.
(gdb)  run
Starting program: /tmp/gdb-5.2/gdb/gdb 

Breakpoint 1, main (argc=1, argv=0xbffff8b4) at main.c:734
734       catch_errors (captured_main, &args, "", RETURN_MASK_ALL);
(gdb)  print args
$1 = {argc = 136426532, argv = 0x821b7f0}

Make a release candidate available

If this is a release candidate then the only remaining steps are:

  1. Commit and ChangeLog

  2. Tweak (and ChangeLog to read L.M.N-DATE-cvs so that the version substitution process can restart.

  3. Make the release candidate available in []

  4. Notify the relevant mailing lists ( [] and [] that the candidate is available. [Make-a-formal-release-available ]

Make a formal release available

(And you thought all that was required was to post an e-mail.) [Install-on-sware ]

Install on sware

Copy the new files to both the release and the old release directory:

$  cp *.bz2 *.gz ~ftp/pub/gdb/old-releases/
$  cp *.bz2 *.gz ~ftp/pub/gdb/releases

Clean up the releases directory so that only the most recent releases are available (e.g. keep 5.2 and 5.2.1 but remove 5.1):

$  cd ~ftp/pub/gdb/releases
$  rm &#8230;

Update the file README and .message in the releases directory:

$  vi README
$  rm -f .message
$  ln README .message

Update the web pages.

This file, which is posted as the official announcement, includes:

These files include:

These pages also need to be regenerate using

You need to find the magic command that is used to generate the online docs from the .tar.bz2. The best way is to look in the output from one of the nightly cron jobs and then just edit accordingly. Something like:

$  ~/ss/update-web-docs \
 ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
 $PWD/www \
 /www/sourceware/htdocs/gdb/download/onlinedocs \

Just like the online documentation. Something like:

$  /bin/sh ~/ss/update-web-ari \
 ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
 $PWD/www \
 /www/sourceware/htdocs/gdb/download/ari \

Shadow the pages onto gnu

Something goes here. [Install-the-GDB-tar-ball-on-GNU ]

Install the GDB tar ball on GNU

At the time of writing, the GNU machine was in ~ftp/gnu/gdb. [Make-the-ANNOUNCEMENT ]

Make the {{{ANNOUNCEMENT}}}

Post the ANNOUNCEMENT file you created above to:


The release is out but you’re still not finished. [Commit-outstanding-changes ]

Commit outstanding changes

In particular you’ll need to commit any changes to:

Tag the release

Something like:

$  d=`date -u +%Y-%m-%d`
$  echo $d
$  ( cd insight/src/gdb && cvs -f -q update )
$  ( cd insight/src && cvs -f -q tag gdb_5_2-$d-release )

Insight is used since that contains more of the release than GDB. [Mention-the-release-on-the-trunk ]

Mention the release on the trunk

Just put something in the ChangeLog so that the trunk also indicates when the release was made. [Restart-gdb_002fversion_002ein ]

Restart {{{gdb/}}}

If gdb/ does not have the string ‘DATE’ then builds will not include the checkout date in their resulting version. Having committed all the release changes it can be set to 5.2.0_DATE-cvs which will restart things.

Don’t forget the ChangeLog. [Merge-into-trunk ]

Merge into trunk

The files committed to the branch may also need changes merged into the trunk. [Revise-the-release-schedule ]

Revise the release schedule

Post a revised release schedule to [ GDB Discussion List] with an updated announcement. The schedule can be generated by running:

$  ~/ss/schedule `date +%s` schedule

The first parameter is approximate date/time in seconds (from the epoch) of the most recent release.

Also update the schedule cronjob. [Post-release ]

Post release

Remove any OBSOLETE code.

None: Internals Create-a-Release (last edited 2013-08-20 23:40:33 by StanShebs)

All content (C) 2008 Free Software Foundation. For terms of use, redistribution, and modification, please see the WikiLicense page.