1 How to prepare a new release 2 ---------------------------- 3 4 . include/freetype/freetype.h: Update `FREETYPE_MAJOR`, 5 `FREETYPE_MINOR`, and `FREETYPE_PATCH`. 6 7 . Update version numbers in all files where necessary (for example, do 8 a grep for both '2.10.4' and '2104' for release 2.10.4). 9 10 . builds/unix/configure.raw: Update `version_info`. 11 12 . docs/CHANGES: Document differences to last release. 13 14 . README: Update. 15 16 . docs/VERSIONS.TXT: Document changed `version_info`. 17 18 . Clone the git archive to another directory with 19 20 git clone -l -s . ../freetype.test 21 22 or something like this and run 23 24 make distclean; make devel; make 25 make distclean; make devel; make multi 26 make distclean; make devel CC=g++; make CC=g++ 27 make distclean; make devel CC=g++; make multi CC=g++ 28 29 sh autogen.sh 30 make distclean; ./configure CC=g++; make 31 32 in the cloned repository to test compilation with both gcc and g++. 33 34 Note that it is normally not necessary to test standard C 35 compilation with the `configure`, `meson`, and `cmake` build tools 36 since this is done by the CI process of 'gitlab.freetype.org' for 37 every commit. 38 39 . Test C++ compilation for 'freetype-demos' too (using `git clone` as 40 above). 41 42 . Run `src/tools/chktrcmp.py` and check that there are no undefined 43 `trace_XXXX` macros. 44 45 . After pushing the new release, tag the git repositories ('freetype', 46 'freetype-demos') with 47 48 git tag VER-<version> -m "" -u <committer> 49 50 and push the tags with 51 52 git push --tags 53 54 . Check with 55 56 git clean -ndx 57 58 that the git directory is really clean (and remove extraneous files 59 if necessary). 60 61 . Say `make dist` in both the 'freetype' and 'freetype-demos' 62 repositories to generate the `.tar.gz`, `.tar.xz`, and `.zip` files. 63 64 . Create the doc bundles (`freetype-doc-<version>.tar.gz`, 65 `freetype-doc-<version>.tar.xz`, `ftdoc<version>.zip`). This is 66 everything in 67 68 <freetype-web git repository>/freetype2/docs 69 70 except the `reference` subdirectory. Do *not* use option `-l` from 71 zip! 72 73 . Run the following script (with updated `$VERSION`, `$SAVANNAH_USER`, 74 and `$SOURCEFORGE_USER` variables) to sign and upload the bundles to 75 both Savannah and SourceForge. The signing code has been taken from 76 the `gnupload` script (part of the 'automake' bundle). 77 78 #!/bin/sh 79 80 VERSION=2.12.0 81 SAVANNAH_USER=wl 82 SOURCEFORGE_USER=wlemb 83 GPG_KEY_ID=BE6C3AAC63AD8E3F 84 85 ##################################################################### 86 87 GPG="/usr/bin/gpg --batch --no-tty --local-user $GPG_KEY_ID" 88 89 version=`echo $VERSION | sed "s/\\.//g"` 90 91 FREETYPE_PACKAGES="freetype-$VERSION.tar.gz \ 92 freetype-$VERSION.tar.xz \ 93 ft$version.zip" 94 FT2DEMOS_PACKAGES="ft2demos-$VERSION.tar.gz \ 95 ft2demos-$VERSION.tar.xz \ 96 ftdmo$version.zip" 97 FTDOC_PACKAGES="freetype-doc-$VERSION.tar.gz \ 98 freetype-doc-$VERSION.tar.xz \ 99 ftdoc$version.zip" 100 101 PACKAGE_LIST="$FREETYPE_PACKAGES \ 102 $FT2DEMOS_PACKAGES \ 103 $FTDOC_PACKAGES" 104 105 set -e 106 unset passphrase 107 108 PATH=/empty echo -n "Enter GPG passphrase: " 109 stty -echo 110 read -r passphrase 111 stty echo 112 echo 113 114 for f in $PACKAGE_LIST; do 115 if test ! -f $f; then 116 echo "$0: Cannot find \`$f'" 1>&2 117 exit 1 118 else 119 : 120 fi 121 done 122 123 for f in $PACKAGE_LIST; do 124 echo "Signing $f..." 125 rm -f $f.sig 126 echo $passphrase | $GPG --passphrase-fd 0 -ba -o $f.sig $f 127 done 128 129 FREETYPE_SIGNATURES= 130 for i in $FREETYPE_PACKAGES; do 131 FREETYPE_SIGNATURES="$FREETYPE_SIGNATURES $i.sig" 132 done 133 134 FT2DEMOS_SIGNATURES= 135 for i in $FT2DEMOS_PACKAGES; do 136 FT2DEMOS_SIGNATURES="$FT2DEMOS_SIGNATURES $i.sig" 137 done 138 139 FTDOC_SIGNATURES= 140 for i in $FTDOC_PACKAGES; do 141 FTDOC_SIGNATURES="$FTDOC_SIGNATURES $i.sig" 142 done 143 144 SIGNATURE_LIST="$FREETYPE_SIGNATURES \ 145 $FT2DEMOS_SIGNATURES \ 146 $FTDOC_SIGNATURES" 147 148 scp $PACKAGE_LIST $SIGNATURE_LIST \ 149 $SAVANNAH_USER@dl.sv.nongnu.org:/releases/freetype/ 150 151 rsync -avP -e ssh $FREETYPE_PACKAGES $FREETYPE_SIGNATURES \ 152 $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/ 153 rsync -avP -e ssh $FT2DEMOS_PACKAGES $FT2DEMOS_SIGNATURES \ 154 $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-demos/$VERSION/ 155 rsync -avP -e ssh $FTDOC_PACKAGES $FTDOC_SIGNATURES \ 156 $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-docs/$VERSION/ 157 158 # EOF 159 160 . Prepare a `README` file for SourceForge and upload it with the 161 following script (with updated `$VERSION` and `$SOURCEFORGE_USER` 162 variables). 163 164 #!/bin/sh 165 166 VERSION=2.10.4 167 SOURCEFORGE_USER=wlemb 168 169 ##################################################################### 170 171 rsync -avP -e ssh README \ 172 $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/ 173 174 # EOF 175 176 . On SourceForge, tag the just uploaded `ftXXX.zip` and 177 `freetype-XXX.tar.xz` files as the default files to download for 178 'Windows' and 'Others', respectively. 179 180 . Trigger the automatic generation of the online API reference by 181 updating the `FT_VERSION` variable in file `.gitlab-ci.yml` of the 182 'freetype-web' repository. 183 184 . Announce new release on 'freetype-announce@nongnu.org' and to 185 relevant newsgroups. The text should include 186 187 - SHA256 checksums of all files, 188 - instructions how to verify the bundles using the `.sig` file data, 189 - the PGP public key used to sign the archives. 190 191 ---------------------------------------------------------------------- 192 193 Copyright (C) 2003-2022 by 194 David Turner, Robert Wilhelm, and Werner Lemberg. 195 196 This file is part of the FreeType project, and may only be used, 197 modified, and distributed under the terms of the FreeType project 198 license, LICENSE.TXT. By continuing to use, modify, or distribute 199 this file you indicate that you have read the license and understand 200 and accept it fully. 201 202 203 --- end of release --- 204