How to prepare a new release
----------------------------

. include/freetype/freetype.h:  Update FREETYPE_MAJOR, FREETYPE_MINOR,
  and FREETYPE_PATCH.

. Update version numbers in all files where necessary (for example, do
  a grep for both `2.3.1' and `231' for release 2.3.1).

. builds/unix/configure.raw: Update `version_info'.

. docs/CHANGES: Document differences to last release.

. README: Update.

. docs/VERSION.DLL: Document changed `version_info'.

. ChangeLog: Announce  new release  (both in  freetype2  and  ft2demos
  modules).

. Tag the CVS (freetype2, ft2demos).

  TODO: Tag the home page CVS on savannah.nongnu.org.

. Say `make  dist'  in both  the  freetype2 and  ft2demos  modules  to
  generate the .tar.gz, .tar.bz2, and .zip files.

. Create     the     doc    bundles    (freetype-doc-<version>.tar.gz,
  freetype-doc-<version>.tar.bz2,    ftdoc<version>.zip).    This   is
  everything below

    freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/freetype2/docs/

  except the `reference' subdirectory.   Do *not* use option `-l' from
  zip!

  Run   the   following   script    (with   updated   `$VERSION'   and
  `$SAVANNAH_USER'  variables) to sign and upload  the bundles to both
  Savannah and SourceForge.  The signing code  has been taken from the
  `gnupload' script (part of the automake bundle).

    #!/bin/sh

    VERSION=2.3.1
    SAVANNAH_USER=wl

    #####################################################################

    GPG='/usr/bin/gpg --batch --no-tty'

    version=`echo $VERSION | sed "s/\\.//g"`

    UNIX_PACKAGES="freetype ft2demos freetype-doc"
    WINDOWS_PACKAGES="ft ftdmo ftdoc"
    UNIX_ZIP="tar.gz tar.bz2"
    WINDOWS_ZIP="zip"

    PACKAGE_LIST=
    for i in $UNIX_PACKAGES; do
      for j in $UNIX_ZIP; do
        PACKAGE_LIST="$PACKAGE_LIST $i-$VERSION.$j"
      done
    done
    for i in $WINDOWS_PACKAGES; do
      for j in $WINDOWS_ZIP; do
        PACKAGE_LIST="$PACKAGE_LIST $i$version.$j"
      done
    done

    set -e
    unset passphrase

    PATH=/empty echo -n "Enter GPG passphrase: "
    stty -echo
    read -r passphrase
    stty echo
    echo

    for f in $PACKAGE_LIST; do
      if test ! -f $f; then
        echo "$0: Cannot find \`$f'" 1>&2
        exit 1
      else
        :
      fi
    done

    for f in $PACKAGE_LIST; do
      echo "Signing $f..."
      rm -f $f.sig
      echo $passphrase | $GPG --passphrase-fd 0 -ba -o $f.sig $f
    done

    SIGNATURE_LIST=
    for i in $PACKAGE_LIST; do
      SIGNATURE_LIST="$SIGNATURE_LIST $i.sig"
    done

    scp $PACKAGE_LIST $SIGNATURE_LIST \
      $SAVANNAH_USER@dl.sv.nongnu.org:/releases/freetype/

    for f in $PACKAGE_LIST $SIGNATURE_LIST; do
      ncftpput upload.sf.net /incoming $f
    done

    # EOF

. While files on savannah.gnu.org are automatically moved to the right
  directory, it must be done manually on SourceForge.  Do that now.

. Update the FreeType release notes on SourceForge.

. Copy the reference files (generated by `make dist') to

    freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/freetype2/docs/reference

  and

    shell.sf.net:/home/groups/f/fr/freetype/htdocs/freetype2/docs/reference

  TODO: Create  FreeType  home  page  CVS  on savannah.nongnu.org  and
        update it accordingly.

        Write script to automatically do this.

        Mirror FreeType's savannah home page everywhere.

. Update

    freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/index2.html

  and copy it to

    shell.sf.net:/home/groups/f/fr/freetype/htdocs/index2.html

. Announce new release on freetype-announce@nongnu.org and to relevant
  newsgroups.

----------------------------------------------------------------------

Copyright 2003, 2005, 2006, 2007 by
David Turner, Robert Wilhelm, and Werner Lemberg.

This  file is  part of  the FreeType  project, and  may only  be used,
modified,  and distributed  under the  terms of  the  FreeType project
license,  LICENSE.TXT.  By  continuing to  use, modify,  or distribute
this file you  indicate that you have read  the license and understand
and accept it fully.


--- end of release ---
