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  the  freetype2  and
  freetype2-demos modules).

. Clone the git archive to another directory with

    git clone -l -s . ../freetype2.test

  or something like this and run

    make distclean; make devel; make
    make distclean; make devel; make multi
    make distclean; make devel CC=g++; make CC=g++
    make distclean; make devel CC=g++; make multi CC=g++

    sh autogen.sh
    make distclean; ./configure; make
    make distclean; ./configure CC=g++; make

  in the cloned repository to test compilation with both gcc and g++.

. Test C++ compilation  for freetype2-demos too  (using `git clone' as
  above).

. Run  src/tools/chktrcmp.py  and check  that there  are no  undefined
  trace_XXXX macros.

. Tag the git repositories (freetype2, freetype2-demos) with

    git tag VER-<version> -m "" -u <committer>

  and push the tags with

    git push --tags

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

. Say `make  dist' in both the  freetype2 and freetype2-demos  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', `$SAVANNAH_USER',
  and $SOURCEFORGE_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.11
    SAVANNAH_USER=wl
    SOURCEFORGE_USER=wlemb

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

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

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

    FREETYPE_PACKAGES="freetype-$VERSION.tar.gz \
                       freetype-$VERSION.tar.bz2 \
                       ft$VERSION.zip"
    FT2DEMOS_PACKAGES="ft2demos-$VERSION.tar.gz \
                       ft2demos-$VERSION.tar.bz2 \
                       ftdmo$VERSION.zip"
    FTDOC_PACKAGES="freetype-doc-$VERSION.tar.gz \
                    freetype-doc-$VERSION.tar.bz2 \
                    ftdoc$VERSION.zip"

    PACKAGE_LIST=$FREETYPE_PACKAGES \
                 $FT2DEMOS_PACKAGES \
                 $FTDOC_PACKAGES

    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

    FREETYPE_SIGNATURES=
    for i in $FREETYPE_PACKAGES; do
      FREETYPE_SIGNATURES="$FREETYPE_SIGNATURES $i.sig"
    done

    FT2DEMOS_SIGNATURES=
    for i in $FT2DEMOS_PACKAGES; do
      FT2DEMOS_SIGNATURES="$FT2DEMOS_SIGNATURES $i.sig"
    done

    FTDOC_SIGNATURES=
    for i in $FTDOC_PACKAGES; do
      FTDOC_SIGNATURES="$FTDOC_SIGNATURES $i.sig"
    done

    SIGNATURE_LIST=$FREETYPE_SIGNATURES \
                   $FT2DEMOS_SIGNATURES \
                   $FTDOC_SIGNATURES

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

    rsync -avP -e ssh $FREETYPE_PACKAGES $FREETYPE_SIGNATURES \
      $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/
    rsync -avP -e ssh $FT2DEMOS_PACKAGES $FT2DEMOS_SIGNATURES \
      $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-demos/$VERSION/
    rsync -avP -e ssh $FTDOC_PACKAGES $FTDOC_SIGNATURES \
      $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-docs/$VERSION/

    # 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, 2009 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 ---
