-*- outline -*- Here are most of the steps we (maintainers) follow when making a release. We assume that the following environment variables are set: GPG_KEY_ID - your gpg key ID CURRENT_VERSION - the next release version PREVIOUS_VERSION - the previous release version * Making a snapshot release ** Update 'gnulib' git submodule: ./gitsub.sh upgrade git add gnulib git commit -m 'Update to newest gnulib' ** Run these commands, in this order: # Forcing a specific version number, without having to set a git tag. echo $CURRENT_VERSION > .tarball-version ./autogen.sh ./configure make make dist # To prevent auto-updating '.version' file by GNUmakefile due to # regenerated PO files, specify Makefile manually. make -f Makefile distcheck Then you will get a distribution tarball: gettext-$CURRENT_VERSION-*.tar.gz If necessary, produce variants with higher compression (takes 7 minutes): gzip -d -c < gettext-$CURRENT_VERSION-*.tar.gz | xz -c -e > gettext-$CURRENT_VERSION-*.tar.xz gzip -d -c < gettext-$CURRENT_VERSION-*.tar.gz | lzip -c -9 > gettext-$CURRENT_VERSION-*.tar.lz Rename it e.g. gettext-ss.tar.xz ** Verify that gettext-runtime/po/POTFILES.in gettext-tools/po/POTFILES.in are complete. Test the snapshot tarball. If it seems good, then upload to alpha.gnu.org: gnulib/build-aux/gnupload --to alpha.gnu.org:gettext \ gettext-ss.tar.xz Notify translators and testers, by sending an email to: coordinator@translationproject.org platform-testers@gnu.org ** Finally: rm -f .tarball-version * Making an official release ** Create a branch for release git checkout -b release-$CURRENT_VERSION or # Forcing a specific version number, without having to set a git tag. echo $CURRENT_VERSION > .tarball-version ** Update files: - gettext-runtime/doc/matrix.texi Update with information from the Translation Project, by running run.sh in gettext-runtime/doc/Admin/. Copy resulting matrix.texi into gettext-runtime/doc/. Update the STATUS date in nls.texi. - gettext-runtime/intl/locale.alias Update with glibc's intl/locale.alias. - gettext-runtime/intl/localcharset.h - gettext-runtime/intl/localcharset.c Update with libcharset inside libiconv. Check that gnulib/lib/{localcharset.h,localcharset.c} agree with it, except for copyright header changes. - gettext-runtime/po/Makefile.in.in Update Origin version. - gettext-runtime/m4/*.m4 Update version at the first line. - gettext-runtime/intl/libgnuintl.in.h Update LIBINTL_VERSION. - libtextstyle/version.sh Update VERSION_NUMBER and RELEASE_DATE. - gettext-tools/libgettextpo/gettext-po.in.h Update LIBGETTEXTPO_VERSION. - gettext-runtime/intl/Makefile.am - libtextstyle/lib/Makefile.am - gettext-tools/libgettextpo/Makefile.am Update -version-info arguments, according to libtool versioning (info "(libtool) Updating version info"). Preferrably using the gnulib/build-aux/libtool-next-version program. Or manually, using these rules: * increment LTV_REVISION, * if any interfaces (functions/variables/classes) have been removed or changed [i.e. backwards compatibility has been broken], increment LTV_CURRENT, set LTV_REVISION to 0, set LTV_AGE to 0. * otherwise: * if any interfaces (functions/variables/classes) have been added, increment LTV_CURRENT, set LTV_REVISION to 0, increment LTV_AGE. - gettext-tools/emacs/po-mode.el Update po-mode-version-string, if there is any change. - gettext-runtime/src/envsubst.c gettext-runtime/src/gettext.c gettext-runtime/src/gettext.sh.in gettext-runtime/src/ngettext.c gettext-tools/misc/autopoint.in gettext-tools/misc/convert-archive.in gettext-tools/misc/gettextize.in gettext-tools/src/cldr-plurals.c gettext-tools/src/hostname.c gettext-tools/src/msgattrib.c gettext-tools/src/msgcat.c gettext-tools/src/msgcmp.c gettext-tools/src/msgcomm.c gettext-tools/src/msgconv.c gettext-tools/src/msgen.c gettext-tools/src/msgexec.c gettext-tools/src/msgfilter.c gettext-tools/src/msgfmt.c gettext-tools/src/msggrep.c gettext-tools/src/msginit.c gettext-tools/src/msgmerge.c gettext-tools/src/msgunfmt.c gettext-tools/src/msguniq.c gettext-tools/src/recode-sr-latin.c gettext-tools/src/urlget.c gettext-tools/src/xgettext.c Update copyright years of the --version output of all programs. - NEWS - gettext-runtime/libasprintf/NEWS - gettext-runtime/NEWS - libtextstyle/NEWS Add news entries if any. ** Update autopoint related files: - gettext-tools/configure.ac Update ARCHIVE_VERSION. - gettext-tools/misc/autopoint.in Update the 'case' statement around line 371 to include the latest release. ** If you got any translation updates, update translations: rsync -Lrtvz translationproject.org::tp/latest/gettext-runtime/ \ gettext-runtime/po/new Optionally merge: cd gettext-runtime/po make update-po cd new for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-runtime.pot; done mv *.po ../ cd ..; rm -rf new rsync -Lrtvz translationproject.org::tp/latest/gettext-tools/ \ gettext-tools/po/new Optionally merge: cd gettext-tools/po make update-po cd new for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-tools.pot; done mv *.po ../ cd ..; rm -rf new rsync -Lrtvz translationproject.org::tp/latest/gettext-examples/ \ gettext-tools/examples/po/new Optionally merge: cd gettext-tools/examples/po make update-po cd new for f in *.po; do msgmerge --update --lang=${f%.po} --previous $f ../gettext-examples.pot; done mv *.po ../ cd ..; rm -rf new Adjust LINGUAS files if any of the languages has been added or removed since the last release. Commit the changes. ** Create a release: git clean -xdff git checkout . # Forcing a specific version number, without having to set a git tag. echo $CURRENT_VERSION > .tarball-version ./autogen.sh ./configure --disable-shared make distcheck-hook make make distcheck This last "make distcheck" is supposed to fail: The tests autopoint-2, autopoint-3 fail. Make 'autopoint' work in the new release: (cd gettext-tools/misc ./add-to-archive ../../gettext-$CURRENT_VERSION.tar.gz) Update the examples: Update the AM_GNU_GETTEXT_VERSION argument in the gettext-tools/examples/hello-*/configure.ac and gettext-tools/examples/hello-c++-kde/configure.in.in. gettext-tools/examples/hello-c/m4/Makefile.am gettext-tools/examples/hello-c/autoclean.sh gettext-tools/examples/hello-c-gnome/m4/Makefile.am gettext-tools/examples/hello-c-gnome/autoclean.sh gettext-tools/examples/hello-c-gnome3/m4/Makefile.am gettext-tools/examples/hello-c-gnome3/autoclean.sh gettext-tools/examples/hello-c++/m4/Makefile.am gettext-tools/examples/hello-c++/autoclean.sh gettext-tools/examples/hello-c++-kde/m4/Makefile.am gettext-tools/examples/hello-c++-kde/autoclean.sh gettext-tools/examples/hello-c++-gnome/m4/Makefile.am gettext-tools/examples/hello-c++-gnome/autoclean.sh gettext-tools/examples/hello-objc/m4/Makefile.am gettext-tools/examples/hello-objc/autoclean.sh gettext-tools/examples/hello-objc-gnome/m4/Makefile.am gettext-tools/examples/hello-objc-gnome/autoclean.sh Update list of .m4 files (brought in by autopoint). Install the gettext package, so as to overwrite or override the locally installed 'autopoint' with the newest version: $ type autopoint autopoint is SOME_PREFIX/bin/autopoint $ make -k distclean $ ./configure --prefix=SOME_PREFIX && make && make install Then check the build infrastructure of the examples by running $ cd gettext-tools/examples $ ./check-examples Finally really make the release tarball: # To prevent auto-updating '.version' file by GNUmakefile due to # regenerated PO files, specify Makefile manually. make -f Makefile distcheck If necessary, produce variants with higher compression (takes 7 minutes): gzip -d -c < gettext-$CURRENT_VERSION.tar.gz | xz -c -e > gettext-$CURRENT_VERSION.tar.xz gzip -d -c < gettext-$CURRENT_VERSION.tar.gz | lzip -c -9 > gettext-$CURRENT_VERSION.tar.lz Add a git tag (an annotated tag, not a lightweight tag): git commit --allow-empty -m "Release $CURRENT_VERSION" git tag -a -m "Release $CURRENT_VERSION" v$CURRENT_VERSION ** Upload tarballs: gnulib/build-aux/gnupload --to ftp.gnu.org:gettext \ gettext-$CURRENT_VERSION.tar.{gz,xz,lz} ** Upload autopoint archive to alpha.gnu.org: This is needed to compile git master after the release (as autogen.sh fetches the archive). xz -c -e < gettext-tools/misc/archive.dir.tar > archive.dir-$CURRENT_VERSION.tar.xz gnulib/build-aux/gnupload \ --to alpha.gnu.org:gettext \ --symlink-regex archive.dir-$CURRENT_VERSION.tar.xz ** Finally: rm -f .tarball-version ** Merge release-$CURRENT_VERSION branch to master and push the changes to the remote repository: git checkout master git merge release-$CURRENT_VERSION git push origin master git push origin release-$CURRENT_VERSION ** Update the homepage on www.gnu.org: - Bump the version number in gettext.html. - Update FAQ.html from gettext-tools/doc/FAQ.html. ** Regenerate the documentation for www.gnu.org: cp gnulib/build-aux/gendocs.sh gettext-tools/doc cp gnulib/doc/gendocs_template gettext-tools/doc cp -p gettext-runtime/doc/*.texi gettext-tools/doc cp build-aux/texinfo.tex gettext-tools/doc (cd gettext-tools/doc LC_ALL=C ./gendocs.sh --email bug-gnu-gettext gettext "GNU gettext") cp gnulib/build-aux/gendocs.sh gettext-runtime/libasprintf cp gnulib/doc/gendocs_template gettext-runtime/libasprintf cp build-aux/texinfo.tex gettext-runtime/libasprintf (cd gettext-runtime/libasprintf LC_ALL=C ./gendocs.sh --email bug-gnu-gettext autosprintf "GNU autosprintf") cp gnulib/build-aux/gendocs.sh libtextstyle/doc cp gnulib/doc/gendocs_template libtextstyle/doc cp build-aux/texinfo.tex libtextstyle/doc (cd libtextstyle/doc LC_ALL=C ./gendocs.sh --email bug-gnu-gettext libtextstyle "GNU libtextstyle") FIXME: Add a script to automate this process. Copy the resulting manual/ directories. Commit the resulting manual/ directories in CVS, and for every removed HTML file (that corresponds to a deleted node) add a line to the .symlinks file in the same directory. ** Announce on info-gnu The announcement template can be generated with: gnulib/build-aux/announce-gen \ --release-type stable \ --package-name gettext \ --previous-version $PREVIOUS_VERSION \ --current-version $CURRENT_VERSION \ --gpg-key-id $GPG_KEY_ID \ --url-directory https://ftp.gnu.org/gnu/gettext \ --bootstrap-tools=autoconf,automake,libtool,bison,gnulib \ --gnulib-version=$(cd gnulib && git describe) * Submit a News entry on https://savannah.gnu.org/projects/gettext/