-*- 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-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-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-gettext libtextstyle "GNU libtextstyle")

  Copy the resulting manual/ directories:

    (cd gettext-tools/doc/manual && tar cf - .) | (cd ../www.gnu.org/gettext/manual && tar xf -)
    (cd gettext-runtime/libasprintf/manual && tar cf - .) | (cd ../www.gnu.org/gettext/libasprintf/manual && tar xf -)
    (cd libtextstyle/doc/manual && tar cf - .) | (cd ../www.gnu.org/gettext/libtextstyle/manual && tar xf -)

  FIXME: Add a script to automate this process.

  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/
