Due  to our  use of  `libtool' to  generate and  install the  FreeType 2
libraries on  Unix systems, as  well as  other historical events,  it is
generally very  difficult to  know precisely which  release of  the font
engine is installed on a given system.

This file tries  to explain why and to document  ways to properly detect
FreeType on Unix.


1. Version and Release numbers
------------------------------

For each new  public release of FreeType 2, there  are generally *three*
distinct `version' numbers to consider:

  * The official FreeType 2 release number, like 2.3.1 or 2.4.10.

  * The libtool (and  Unix) specific version number,  like 13.0.7.  This
    is what `freetype-config --version' returns.

  * The platform-specific  shared object  number, used for  example when
    the library is installed as `/usr/lib/libfreetype.so.6.7.1'.

The platform-specific  number is, unsurprisingly,  platform-specific and
varies  with the  operating system  you are  using (several  variants of
Linux, FreeBSD,  Solaris, etc.).  You  should thus _never_ use  it, even
for simple tests.

The libtool-specific  number does  not equal the  release number  but is
tied to it.

The release number is available  at *compile* time through the following
macros defined in FT_FREETYPE_H:

  - FREETYPE_MAJOR: major release number
  - FREETYPE_MINOR: minor release number
  - FREETYPE_PATCH: patch release number

See below for a small autoconf fragment.

The  release  number   is  also  available  at   *runtime*  through  the
`FT_Library_Version' API.


2. History
----------

The  following   table  gives,  for   all  releases  since   2.4.0,  the
corresponding libtool number, as well  as the shared object number found
on _most_ systems, but not all of them:


    release     libtool     so
  -------------------------------
     2.6.2      18.2.12   6.12.2
     2.6.1      18.1.12   6.12.1
     2.6.0      18.0.12   6.12.0
     2.5.5      17.4.11   6.11.4
     2.5.4      17.3.11   6.11.3
     2.5.3      17.2.11   6.11.2
     2.5.2      17.1.11   6.11.1
     2.5.1      17.0.11   6.11.0
     2.5.0      16.2.10   6.10.2
     2.4.12     16.1.10   6.10.1
     2.4.11     16.0.10   6.10.0
     2.4.10     15.0.9    6.9.0
     2.4.9      14.1.8    6.8.1
     2.4.8      14.0.8    6.8.0
     2.4.7      13.2.7    6.7.2
     2.4.6      13.1.7    6.7.1
     2.4.5      13.0.7    6.7.0
     2.4.4      12.2.6    6.6.2
     2.4.3      12.1.6    6.6.1
     2.4.2      12.0.6    6.6.0
     2.4.1      11.1.5    6.5.1
     2.4.0      11.0.5    6.5.0


3. Autoconf Code Fragment
-------------------------

Lars Clausen contributed the following autoconf fragment to detect which
version of  FreeType is  installed on  a system.  This  one tests  for a
version that  is at least 2.0.9;  you should change it  to check against
other release numbers.


  AC_MSG_CHECKING([whether FreeType version is 2.0.9 or higher])
  old_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS=`freetype-config --cflags`
  AC_TRY_CPP([

#include <ft2build.h>
#include FT_FREETYPE_H
#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009
#error Freetype version too low.
#endif
  ],
  [AC_MSG_RESULT(yes)
   FREETYPE_LIBS=`freetype-config --libs`
   AC_SUBST(FREETYPE_LIBS)
   AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library])
   CPPFLAGS="$old_CPPFLAGS"],
  [AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])])

------------------------------------------------------------------------

Copyright 2002-2015 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 VERSION.DLL ---
