The CVS  archive doesn't  contain pre-built configuration  scripts for
UNIXish platforms.  To generate them say

  sh autogen.sh

which in turn depends on the following packages:

  automake (1.10.1)
  libtool (2.2.4)
  autoconf (2.62)

The versions given  in parentheses are known to  work.  Newer versions
should work too, of course.   Note that autogen.sh also sets up proper
file permissions for the `configure' and auxiliary scripts.

A very common problem is that this script complains that the `aclocal'
program doesn't accept a `--force' option:

  generating `configure.ac'
  running `aclocal -I . --force'
  aclocal: unrecognized option -- `--force'
  Try `aclocal --help' for more information.
  error while running `aclocal -I . --force'

This  means that  your version  of the  automake package  is  too old.
Please update it before trying to build FreeType.


For static builds which  don't use platform specific optimizations, no
configure script is necessary at all; saying

  make setup ansi
  make

should work on all platforms which have GNU make (or makepp).


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

Copyright 2005, 2006, 2007, 2008 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 README.CVS ---
