introduced the new <freetype/config/ftbuild.h> file to determine
where is the top-level include directory for all public, configuration
and internal header files..
diff --git a/ChangeLog b/ChangeLog
index 2b59ede..c96e9f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2000-11-30  David Turner  <david.turner@freetype.ogr>
+
+	* include/config/ftbuild.h, include/internal/internal.h: added
+	a new configuration file used to determine where are all public,
+	configuration and internal header files for FreeType 2. I also
+	modified all headers under "include/freetype" to reflect this
+	change. Note that we still need to change the library source 
+	files themselves though..
+
+	* include/freetype.h: modified all public, configuration and
+	internal header files to use the new
+	
 2000-11-30  Tom Kacvinsky  <tjk@ams.org>
 
 	* t2objs.c (T2_Init_Face): Added calculation of `face->height' for
diff --git a/include/freetype/cache/ftcchunk.h b/include/freetype/cache/ftcchunk.h
index 4dfa03d..50e06da 100644
--- a/include/freetype/cache/ftcchunk.h
+++ b/include/freetype/cache/ftcchunk.h
@@ -42,15 +42,18 @@
   /*************************************************************************/
 
 
-#ifndef FTCCHUNK_H
-#define FTCCHUNK_H
+#ifndef __FTCCHUNK_H__
+#define __FTCCHUNK_H__
 
-#include <freetype/cache/ftcmanag.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CACHE_H
+#include   FT_CACHE_MANAGER_H
+
+FT_BEGIN_HEADER
+
 
   /* maximum number of chunk sets in a given chunk cache */
 #define  FTC_MAX_CHUNK_SETS  16
@@ -205,12 +208,9 @@
                                                  FT_UInt         *aindex );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTCCHUNK_H */
+#endif /* __FTCCHUNK_H__ */
 
 
 /* END */
diff --git a/include/freetype/cache/ftcglyph.h b/include/freetype/cache/ftcglyph.h
index b99748f..812eaf1 100644
--- a/include/freetype/cache/ftcglyph.h
+++ b/include/freetype/cache/ftcglyph.h
@@ -50,17 +50,18 @@
   /*************************************************************************/
 
 
-#ifndef FTCGLYPH_H
-#define FTCGLYPH_H
+#ifndef __FTCGLYPH_H__
+#define __FTCGLYPH_H__
 
-
-#include <freetype/cache/ftcmanag.h>
-#include <stddef.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CACHE_H
+#include   FT_CACHE_MANAGER_H
+#include   <stddef.h>
+
+FT_BEGIN_HEADER
 
 
   /* maximum number of glyph sets per glyph cache; must be < 256 */
@@ -200,13 +201,9 @@
                                                  FT_UInt          gindex,
                                                  FTC_GlyphNode   *anode );
 
+FT_END_HEADER
 
-#ifdef __cplusplus
-  }
-#endif
-
-
-#endif /* FTCGLYPH_H */
+#endif /* __FTCGLYPH_H__ */
 
 
 /* END */
diff --git a/include/freetype/cache/ftcimage.h b/include/freetype/cache/ftcimage.h
index 8c457c7..e68988e 100644
--- a/include/freetype/cache/ftcimage.h
+++ b/include/freetype/cache/ftcimage.h
@@ -23,16 +23,17 @@
   /*************************************************************************/
 
 
-#ifndef FTCIMAGE_H
-#define FTCIMAGE_H
+#ifndef __FTCIMAGE_H__
+#define __FTCIMAGE_H__
 
-
-#include <freetype/cache/ftcglyph.h>
-#include <freetype/ftglyph.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CACHE_H
+#include   FT_CACHE_INTERNAL_GLYPH_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -160,12 +161,9 @@
                                                  FT_Glyph        *aglyph );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTCIMAGE_H */
+#endif /* __FTCIMAGE_H__ */
 
 
 /* END */
diff --git a/include/freetype/cache/ftcmanag.h b/include/freetype/cache/ftcmanag.h
index d43f505..ce1e980 100644
--- a/include/freetype/cache/ftcmanag.h
+++ b/include/freetype/cache/ftcmanag.h
@@ -59,17 +59,17 @@
   /*************************************************************************/
 
 
-#ifndef FTCMANAG_H
-#define FTCMANAG_H
+#ifndef __FTCMANAG_H__
+#define __FTCMANAG_H__
 
-#include <freetype/ftcache.h>
-#include <freetype/cache/ftlru.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CACHE_H
+#include   FT_CACHE_INTERNAL_LRU_H
 
+FT_BEGIN_HEADER
 
 #define FTC_MAX_FACES_DEFAULT  2
 #define FTC_MAX_SIZES_DEFAULT  4
@@ -360,13 +360,11 @@
 
   } FTC_CacheRec;
 
+  /* */
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTCMANAG_H */
+#endif /* __FTCMANAG_H__ */
 
 
 /* END */
diff --git a/include/freetype/cache/ftcsbits.h b/include/freetype/cache/ftcsbits.h
index a167f69..9104d21 100644
--- a/include/freetype/cache/ftcsbits.h
+++ b/include/freetype/cache/ftcsbits.h
@@ -16,18 +16,18 @@
 /***************************************************************************/
 
 
-#ifndef FTCSBITS_H
-#define FTCSBITS_H
+#ifndef __FTCSBITS_H__
+#define __FTCSBITS_H__
 
-
-#include <freetype/cache/ftcchunk.h>
-#include <freetype/cache/ftcimage.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CACHE_H
+#include   FT_CACHE_INTERNAL_CHUNK_H
+#include   FT_CACHE_IMAGE_H
 
+FT_BEGIN_HEADER
 
   /* handle to small bitmap */
   typedef struct FTC_SBitRec_*  FTC_SBit;
@@ -60,14 +60,9 @@
                                                 FTC_Image_Desc*  desc,
                                                 FT_UInt          gindex,
                                                 FTC_SBit        *sbit );
+FT_END_HEADER
 
-
-#ifdef __cplusplus
-  }
-#endif
-
-
-#endif /* FTCSBITS_H */
+#endif /* __FTCSBITS_H__ */
 
 
 /* END */
diff --git a/include/freetype/cache/ftlru.h b/include/freetype/cache/ftlru.h
index ed77fe2..5b7b2c8 100644
--- a/include/freetype/cache/ftlru.h
+++ b/include/freetype/cache/ftlru.h
@@ -55,15 +55,16 @@
   /*************************************************************************/
 
 
-#ifndef FTLRU_H
-#define FTLRU_H
+#ifndef __FTLRU_H__
+#define __FTLRU_H__
 
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
   /* generic key type */
@@ -138,40 +139,48 @@
   } FT_LruRec;
 
 
-  FT_EXPORT( FT_Error )  FT_Lru_New( const FT_Lru_Class*  clazz,
-                                     FT_UInt              max_elements,
-                                     FT_Pointer           user_data,
-                                     FT_Memory            memory,
-                                     FT_Bool              pre_alloc,
-                                     FT_Lru              *anlru );
-
-  FT_EXPORT( void )      FT_Lru_Reset( FT_Lru  lru );
-
-  FT_EXPORT( void )      FT_Lru_Done ( FT_Lru  lru );
+  FT_EXPORT( FT_Error )
+  FT_Lru_New( const FT_Lru_Class*  clazz,
+              FT_UInt              max_elements,
+              FT_Pointer           user_data,
+              FT_Memory            memory,
+              FT_Bool              pre_alloc,
+              FT_Lru              *anlru );
 
 
-  FT_EXPORT( FT_Error )  FT_Lru_Lookup_Node( FT_Lru        lru,
-                                             FT_LruKey     key,
-                                             FT_LruNode   *anode );
-
-  FT_EXPORT( FT_Error )  FT_Lru_Lookup( FT_Lru       lru,
-                                        FT_LruKey    key,
-                                        FT_Pointer  *anobject );
+  FT_EXPORT( void )
+  FT_Lru_Reset( FT_Lru  lru );
 
 
-  FT_EXPORT( void )      FT_Lru_Remove_Node( FT_Lru      lru,
-                                             FT_LruNode  node );
-
-  FT_EXPORT( void )      FT_Lru_Remove_Selection( FT_Lru           lru,
-                                                  FT_Lru_Selector  selector,
-                                                  FT_Pointer       data );
-
-#ifdef __cplusplus
-  }
-#endif
+  FT_EXPORT( void )
+  FT_Lru_Done ( FT_Lru  lru );
 
 
-#endif /* FTLRU_H */
+  FT_EXPORT( FT_Error )
+  FT_Lru_Lookup_Node( FT_Lru        lru,
+                      FT_LruKey     key,
+                      FT_LruNode   *anode );
+
+
+  FT_EXPORT( FT_Error )
+  FT_Lru_Lookup( FT_Lru       lru,
+                 FT_LruKey    key,
+                 FT_Pointer  *anobject );
+
+
+  FT_EXPORT( void )
+  FT_Lru_Remove_Node( FT_Lru      lru,
+                      FT_LruNode  node );
+		      
+
+  FT_EXPORT( void )
+  FT_Lru_Remove_Selection( FT_Lru           lru,
+                           FT_Lru_Selector  selector,
+                           FT_Pointer       data );
+
+FT_END_HEADER
+
+#endif /* __FTLRU_H__ */
 
 
 /* END */
diff --git a/include/freetype/config/ftbuild.h b/include/freetype/config/ftbuild.h
new file mode 100644
index 0000000..059c547
--- /dev/null
+++ b/include/freetype/config/ftbuild.h
@@ -0,0 +1,186 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftbuild.h                                                              */
+/*                                                                         */
+/*    This file is used to define important macros needed to               */
+/*    perform a build of the FreeType 2 library..                          */
+/*                                                                         */
+/*  Copyright 1996-2000 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.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+#ifndef __FT_BUILD_H__
+#define __FT_BUILD_H__
+
+/****************************************************************************
+ *
+ * the macro FT_ROOT is used to define the root of all public header
+ * files for FreeType 2. By default, it is set to "freetype", which
+ * means that all public files should be included with a line like:
+ *
+ *  #include <freetype/....>
+ *
+ * you can re-define it to something different, depending on the way
+ * you installed the library on your system.
+ *
+ */
+#ifndef    FT_ROOT
+#  define  FT_ROOT  freetype
+#endif
+
+/****************************************************************************
+ *
+ * the macro FT_CONFIG_ROOT is used to define the root of all configuration
+ * header files for FreeType 2. By default, it is set to "freetype/config",
+ * which means that all config files should be included with a line like:
+ *
+ *  #include <freetype/config/...>
+ *
+ * you can re-define it to something different, depending on the way
+ * you installed the library on your system.
+ *
+ */
+#ifndef    FT_CONFIG_ROOT
+#  define  FT_CONFIG_ROOT   FT_ROOT/config
+#endif
+
+/****************************************************************************
+ *
+ * the macro FT_PUBLIC_FILE is used to include a FreeType 2 public file
+ * its parameter is the file pathname, relative to the public root of a
+ * given header file.
+ */
+#define    FT_PUBLIC_FILE(x)   <FT_ROOT/x>
+
+
+/****************************************************************************
+ *
+ * the macro FT_CONFIG_FILE is used to include a FreeType 2 config file
+ * its parameter is the file pathname, relative to the configurationroot of a
+ * given header file.
+ */
+#define    FT_CONFIG_FILE(x)   <FT_CONFIG_ROOT/x>
+
+
+/****************************************************************************
+ *
+ * the macro FT_INTERNAL_FILE is used to include a FreeType 2 internal file
+ * its parameter is the file pathname, relative to the configurationroot of a
+ * given header file.
+ */
+#define    FT_INTERNAL_FILE(x) <FT_ROOT/internal/x>
+
+/****************************************************************************
+ *
+ * the macro FT_COMPONENT_FILE is used to include a given FreeType 2 component
+ * source file (be it a header, a C source file, or an included file).
+ *
+ * it's first argument is the component/module's directory according to
+ * the normal FT2 source directory hierarchy, and the second one the
+ * file name.
+ *
+ * note that you can also put all library source files in a single
+ * directory and compile them normally by defining the macro
+ * FT_FLAT_COMPILATION
+ */
+#define    FT_COMPONENT_FILE(d,x)   <FT_ROOT/d/x>
+
+
+/****************************************************************************
+ *
+ * the macro FT_SOURCE_FILE is used to include a given FreeType 2 component
+ * source file (be it a header, a C source file, or an included file).
+ *
+ * it's first argument is the component/module's directory according to
+ * the normal FT2 source directory hierarchy, and the second one the
+ * file name.
+ *
+ * note that you can also put all library source files in a single
+ * directory and compile them normally by defining the macro
+ * FT_FLAT_COMPILATION
+ */
+#ifdef  FT_FLAT_COMPILATION
+#  define    FT_SOURCE_FILE(d,x)   <d/x>
+#else
+#  define    FT_SOURCE_FILE(d,x)   "x"
+#endif
+
+
+/****************************************************************************
+ *
+ * <Macro> FT_BEGIN_HEADER
+ *
+ * <Description>
+ *    this macro is used in association with @FT_END_HEADER in header
+ *    files to ensure that the declarations within are properly encapsulated
+ *    in an 'extern "C" { .. }' block when included from a C++ compiler
+ */
+#ifdef __cplusplus
+#  define  FT_BEGIN_HEADER  extern "C" {
+#else
+#  define  FT_BEGIN_HEADER  /* nothing */
+#endif
+
+/****************************************************************************
+ *
+ * <Macro> FT_END_HEADER
+ *
+ * <Description>
+ *    this macro is used in association with @FT_BEGIN_HEADER in header
+ *    files to ensure that the declarations within are properly encapsulated
+ *    in an 'extern "C" { .. }' block when included from a C++ compiler
+ */
+#ifdef __cplusplus
+#  define  FT_END_HEADER  }
+#else
+#  define  FT_END_HEADER  /* nothing */
+#endif
+
+/****************************************************************************
+ *
+ * we will now define several aliases for the FreeType 2 public and
+ * configuration files..
+ *
+ */
+
+/* configuration files */
+#define  FT_CONFIG_CONFIG_H   FT_CONFIG_FILE(ftconfig.h)
+#define  FT_CONFIG_OPTIONS_H  FT_CONFIG_FILE(ftoption.h)
+#define  FT_CONFIG_MODULES_H  FT_CONFIG_FILE(ftmodule.h)
+
+/* public headers */
+#define  FT_ERRORS_H            FT_PUBLIC_FILE(fterrors.h)
+#define  FT_SYSTEM_H            FT_PUBLIC_FILE(ftsystem.h)
+#define  FT_IMAGE_H             FT_PUBLIC_FILE(ftimage.h)
+
+#define  FT_TYPES_H             FT_PUBLIC_FILE(fttypes.h)
+
+#define  FT_FREETYPE_H          FT_PUBLIC_FILE(freetype.h)
+#define  FT_GLYPH_H             FT_PUBLIC_FILE(ftglyph.h)
+#define  FT_BBOX_H              FT_PUBLIC_FILE(ftbbox.h)
+#define  FT_CACHE_H             FT_PUBLIC_FILE(ftcache.h)
+#define  FT_LIST_H              FT_PUBLIC_FILE(ftlist.h)
+#define  FT_MAC_H               FT_PUBLIC_FILE(ftmac.h)
+#define  FT_MULTIPLE_MASTERS_H  FT_PUBLIC_FILE(ftmm.h)
+#define  FT_MODULE_H            FT_PUBLIC_FILE(ftmodule.h)
+#define  FT_NAMES_H             FT_PUBLIC_FILE(ftnames.h)
+#define  FT_OUTLINE_H           FT_PUBLIC_FILE(ftoutln.h)
+#define  FT_RENDER_H            FT_PUBLIC_FILE(ftrender.h)
+#define  FT_SYNTHESIS_H         FT_PUBLIC_FILE(ftsynth.h)
+#define  FT_TYPE1_TABLES_H      FT_PUBLIC_FILE(t1tables.h)
+#define  FT_TRUETYPE_NAMES_H    FT_PUBLIC_FILE(ttnameid.h)
+#define  FT_TRUETYPE_TABLES_H   FT_PUBLIC_FILE(tttables.h)
+#define  FT_TRUETYPE_TAGS_H     FT_PUBLIC_FILE(tttags.h)
+
+/* now include internal headers definitions from <freetype/internal/..>*/
+#include FT_PUBLIC_FILE(internal/internal.h)
+
+#endif /* __FT_BUILD_H__ */
+
diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
index 71a081a..dc92d94 100644
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -36,18 +36,18 @@
   /*************************************************************************/
 
 
-#ifndef FTCONFIG_H
-#define FTCONFIG_H
-
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
 
   /* Include the header file containing all developer build options */
-#include <freetype/config/ftoption.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef   FT_BUILD_H
+#define   FT_BUILD_H   <freetype/config/ftbuild.h>
 #endif
 
+#include  FT_BUILD_H
+#include  FT_CONFIG_OPTIONS_H
+
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -263,13 +263,10 @@
 
 #endif /* __cplusplus */
 
-
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
 
-#endif /* FTCONFIG_H */
+#endif /* __FTCONFIG_H__ */
 
 
 /* END */
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
index 48bc711..2b0793a 100644
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -16,9 +16,14 @@
 /***************************************************************************/
 
 
-#ifndef FREETYPE_H
-#define FREETYPE_H
+#ifndef __FREETYPE_H__
+#define __FREETYPE_H__
 
+/* include potentially build-specific directives and macros */
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
+#endif
+#include   FT_BUILD_H
 
   /*************************************************************************/
   /*                                                                       */
@@ -38,15 +43,11 @@
 #define FREETYPE_MINOR 0
 
 
-#include <freetype/config/ftconfig.h>   /* read configuration information */
-#include <freetype/fterrors.h>
-#include <freetype/fttypes.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
 
-
-#ifdef __cplusplus
-  extern "C" {
-#endif
-
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*************************************************************************/
@@ -2287,12 +2288,9 @@
 
   /* */
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FREETYPE_H */
+#endif /* __FREETYPE_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftbbox.h b/include/freetype/ftbbox.h
index db73d9f..5a8d2e7 100644
--- a/include/freetype/ftbbox.h
+++ b/include/freetype/ftbbox.h
@@ -30,12 +30,13 @@
 #ifndef FTBBOX_H
 #define FTBBOX_H
 
-#include <freetype/freetype.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
 
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -62,9 +63,9 @@
                                               FT_BBox     *abbox );
 
 
-#ifdef __cplusplus
-  }
-#endif
+  /* */
+
+FT_END_HEADER
 
 #endif /* FTBBOX_H */
 
diff --git a/include/freetype/ftcache.h b/include/freetype/ftcache.h
index b39d852..9de1bc2 100644
--- a/include/freetype/ftcache.h
+++ b/include/freetype/ftcache.h
@@ -31,16 +31,24 @@
   /*************************************************************************/
 
 
-#ifndef FTCACHE_H
-#define FTCACHE_H
+#ifndef __FTCACHE_H__
+#define __FTCACHE_H__
 
-
-#include <freetype/ftglyph.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_GLYPH_H
+
+FT_BEGIN_HEADER
+
+#define  FT_CACHE_MANAGER_H               FT_PUBLIC_FILE(cache/ftcmanag.h)
+#define  FT_CACHE_IMAGE_H                 FT_PUBLIC_FILE(cache/ftcimage.h)
+#define  FT_CACHE_SMALL_BITMAPS_H         FT_PUBLIC_FILE(cache/ftcsbits.h)
+
+#define  FT_CACHE_INTERNAL_LRU_H          FT_PUBLIC_FILE(cache/ftlru.h)
+#define  FT_CACHE_INTERNAL_GLYPH_H        FT_PUBLIC_FILE(cache/ftcglyph.h)
+#define  FT_CACHE_INTERNAL_CHUNK_H        FT_PUBLIC_FILE(cache/ftcchunk.h)
 
 
   /*************************************************************************/
@@ -324,12 +332,9 @@
                            FTC_Cache        *acache );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTCACHE_H */
+#endif /* __FTCACHE_H__ */
 
 
 /* END */
diff --git a/include/freetype/fterrors.h b/include/freetype/fterrors.h
index 036899b..b8269d8 100644
--- a/include/freetype/fterrors.h
+++ b/include/freetype/fterrors.h
@@ -43,23 +43,23 @@
   /*************************************************************************/
 
 
-#ifndef FTERRORS_H
-#define FTERRORS_H
+#ifndef __FTERRORS_H__
+#define __FTERRORS_H__
 
 
 #undef FT_NEED_EXTERN_C
 
-#ifndef FT_ERRORDEF
 
-#define FT_ERRORDEF( e, v, s )  e = v,
-#define FT_ERROR_START_LIST     enum {
-#define FT_ERROR_END_LIST       FT_Err_Max };
+#ifndef   FT_ERRORDEF
 
+#  define FT_ERRORDEF( e, v, s )  e = v,
+#  define FT_ERROR_START_LIST     enum {
+#  define FT_ERROR_END_LIST       FT_Err_Max };
 
-#ifdef __cplusplus
-#define FT_NEED_EXTERN_C
-  extern "C" {
-#endif
+#  ifdef __cplusplus
+#    define FT_NEED_EXTERN_C
+     extern "C" {
+#  endif
 
 #endif /* !FT_ERRORDEF */
 
@@ -196,8 +196,7 @@
   }
 #endif
 
-
-#endif /* FTERRORS_H */
+#endif /* __FTERRORS_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftglyph.h b/include/freetype/ftglyph.h
index 9126d4d..010327c 100644
--- a/include/freetype/ftglyph.h
+++ b/include/freetype/ftglyph.h
@@ -29,14 +29,17 @@
   /*************************************************************************/
 
 
-#ifndef FTGLYPH_H
-#define FTGLYPH_H
+#ifndef __FTGLYPH_H__
+#define __FTGLYPH_H__
 
-#include <freetype/freetype.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
+
 
   /* forward declaration to a private type */
   typedef struct FT_Glyph_Class_  FT_Glyph_Class;
@@ -427,11 +430,9 @@
   FT_EXPORT( FT_Error )  FT_Matrix_Invert( FT_Matrix*  matrix );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-#endif /* FTGLYPH_H */
+#endif /* __FTGLYPH_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftlist.h b/include/freetype/ftlist.h
index bca83de..bf84787 100644
--- a/include/freetype/ftlist.h
+++ b/include/freetype/ftlist.h
@@ -24,14 +24,16 @@
   /*************************************************************************/
 
 
-#ifndef FTLIST_H
-#define FTLIST_H
+#ifndef __FTLIST_H__
+#define __FTLIST_H__
 
-#include <freetype/freetype.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -213,11 +215,8 @@
                                        void*               user );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-#endif /* FTLIST_H */
-
+#endif /* __FTLIST_H__ */
 
 /* END */
diff --git a/include/freetype/ftmac.h b/include/freetype/ftmac.h
index 3e528e2..a036c55 100644
--- a/include/freetype/ftmac.h
+++ b/include/freetype/ftmac.h
@@ -25,8 +25,8 @@
 /***************************************************************************/
 
 
-#ifndef FT_MAC_H
-#define FT_MAC_H
+#ifndef __FT_MAC_H__
+#define __FT_MAC_H__
 
 
 #ifdef __cplusplus
@@ -75,7 +75,7 @@
 #endif
 
 
-#endif /* FT_MAC_H */
+#endif /* __FT_MAC_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftmm.h b/include/freetype/ftmm.h
index 6c9b1dc..7734786 100644
--- a/include/freetype/ftmm.h
+++ b/include/freetype/ftmm.h
@@ -16,15 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTMM_H
-#define FTMM_H
+#ifndef __FTMM_H__
+#define __FTMM_H__
 
-#include <freetype/t1tables.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_TYPE1_TABLES_H
 
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -167,11 +168,9 @@
                            FT_Fixed*  coords );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-#endif /* FTMM_H */
+#endif /* __FTMM_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftmodule.h b/include/freetype/ftmodule.h
index bfe37b0..fd07aaa 100644
--- a/include/freetype/ftmodule.h
+++ b/include/freetype/ftmodule.h
@@ -16,16 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTMODULE_H
-#define FTMODULE_H
+#ifndef __FTMODULE_H__
+#define __FTMODULE_H__
 
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
 
+FT_BEGIN_HEADER
 
   /* module bit flags */
   typedef enum  FT_Module_Flags_
@@ -266,12 +266,9 @@
   FT_EXPORT( void )  FT_Add_Default_Modules( FT_Library  library );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTMODULE_H */
+#endif /* __FTMODULE_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftnames.h b/include/freetype/ftnames.h
index f56684d..aabe18f 100644
--- a/include/freetype/ftnames.h
+++ b/include/freetype/ftnames.h
@@ -19,16 +19,16 @@
 /***************************************************************************/
 
 
-#ifndef FTNAMES_H
-#define FTNAMES_H
+#ifndef __FTNAMES_H__
+#define __FTNAMES_H__
 
-
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -121,12 +121,9 @@
                                            FT_SfntName  *aname );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTNAMES_H */
+#endif /* __FTNAMES_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftoutln.h b/include/freetype/ftoutln.h
index 3827980..37e6b4b 100644
--- a/include/freetype/ftoutln.h
+++ b/include/freetype/ftoutln.h
@@ -17,15 +17,16 @@
 /***************************************************************************/
 
 
-#ifndef FTOUTLN_H
-#define FTOUTLN_H
+#ifndef __FTOUTLN_H__
+#define __FTOUTLN_H__
 
-
-#include <freetype/freetype.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -315,13 +316,9 @@
                                             FT_Outline*        outline,
                                             FT_Raster_Params*  params );
 
+FT_END_HEADER
 
-#ifdef __cplusplus
-  }
-#endif
-
-
-#endif /* FTOUTLN_H */
+#endif /* __FTOUTLN_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftrender.h b/include/freetype/ftrender.h
index aab57a7..2a19fc0 100644
--- a/include/freetype/ftrender.h
+++ b/include/freetype/ftrender.h
@@ -16,16 +16,17 @@
 /***************************************************************************/
 
 
-#ifndef FTRENDER_H
-#define FTRENDER_H
+#ifndef __FTRENDER_H__
+#define __FTRENDER_H__
 
-#include <freetype/ftmodule.h>
-#include <freetype/ftglyph.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_MODULE_H
+#include   FT_GLYPH_H
+
+FT_BEGIN_HEADER
 
 
   /* create a new glyph object */
@@ -180,13 +181,11 @@
                                           FT_UInt        num_params,
                                           FT_Parameter*  parameters );
 
+  /* */
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTRENDER_H */
+#endif /* __FTRENDER_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftsynth.h b/include/freetype/ftsynth.h
index 8952969..e51aacf 100644
--- a/include/freetype/ftsynth.h
+++ b/include/freetype/ftsynth.h
@@ -34,16 +34,16 @@
   /*************************************************************************/
 
 
-#ifndef FTSYNTH_H
-#define FTSYNTH_H
+#ifndef __FTSYNTH_H__
+#define __FTSYNTH_H__
 
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
 
+FT_BEGIN_HEADER
 
   /* This code is completely experimental -- use with care! */
   /* It will probably be completely rewritten in the future */
@@ -56,13 +56,10 @@
                                              FT_Outline*   outline,
                                              FT_Pos*       advance );
 
-
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
 
-#endif /* FTSYNTH_H */
+#endif /* __FTSYNTH_H__ */
 
 
 /* END */
diff --git a/include/freetype/ftsystem.h b/include/freetype/ftsystem.h
index 4311a3d..7620bd6 100644
--- a/include/freetype/ftsystem.h
+++ b/include/freetype/ftsystem.h
@@ -38,8 +38,8 @@
   typedef void*  (*FT_Alloc_Func)( FT_Memory  memory,
                                    long       size );
 
-  typedef void  (*FT_Free_Func)( FT_Memory  memory,
-                                 void*      block );
+  typedef void   (*FT_Free_Func)( FT_Memory  memory,
+                                  void*      block );
 
   typedef void*  (*FT_Realloc_Func)( FT_Memory  memory,
                                      long       cur_size,
diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h
index f3e6f1a..e5eabb6 100644
--- a/include/freetype/fttypes.h
+++ b/include/freetype/fttypes.h
@@ -16,18 +16,19 @@
 /***************************************************************************/
 
 
-#ifndef FTTYPES_H
-#define FTTYPES_H
+#ifndef __FTTYPES_H__
+#define __FTTYPES_H__
 
-
-#include <freetype/ftsystem.h>
-#include <freetype/ftimage.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
 
+#include   FT_BUILD_H
+#include   FT_SYSTEM_H
+#include   FT_IMAGE_H
+#include   <stddef.h>
+
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -395,16 +396,13 @@
 
   } FT_ListRec;
 
+  /* */
 
 #define FT_IS_EMPTY( list )  ( (list).head == 0 )
 
+FT_END_HEADER
 
-#ifdef __cplusplus
-  }
-#endif
-
-
-#endif /* FTTYPES_H */
+#endif /* __FTTYPES_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/autohint.h b/include/freetype/internal/autohint.h
index cb9daf5..958ee9b 100644
--- a/include/freetype/internal/autohint.h
+++ b/include/freetype/internal/autohint.h
@@ -24,8 +24,8 @@
   /*************************************************************************/
 
 
-#ifndef AUTOHINT_H
-#define AUTOHINT_H
+#ifndef __AUTOHINT_H__
+#define __AUTOHINT_H__
 
 
   /*************************************************************************/
@@ -69,14 +69,13 @@
   /*                                                                       */
   /*************************************************************************/
 
-
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
 
+FT_BEGIN_HEADER
 
   typedef struct FT_AutoHinterRec_  *FT_AutoHinter;
 
@@ -194,12 +193,9 @@
   } FT_AutoHinter_Interface;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* AUTOHINT_H */
+#endif /* __AUTOHINT_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/fnttypes.h b/include/freetype/internal/fnttypes.h
index 99ff9f2..38b01f8 100644
--- a/include/freetype/internal/fnttypes.h
+++ b/include/freetype/internal/fnttypes.h
@@ -17,13 +17,16 @@
 /***************************************************************************/
 
 
-#ifndef FNTTYPES_H
-#define FNTTYPES_H
+#ifndef __FNTTYPES_H__
+#define __FNTTYPES_H__
 
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
   typedef struct  WinMZ_Header_
@@ -145,12 +148,9 @@
   } FNT_FaceRec, *FNT_Face;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FNTTYPES_H */
+#endif /* __FNTTYPES_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftcalc.h b/include/freetype/internal/ftcalc.h
index dfc6b52..bac7370 100644
--- a/include/freetype/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -16,15 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTCALC_H
-#define FTCALC_H
+#ifndef __FTCALC_H__
+#define __FTCALC_H__
 
-#include <freetype/freetype.h>
-#include <freetype/config/ftconfig.h>   /* for FT_LONG64 */
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
 #ifdef FT_LONG64
@@ -216,12 +217,9 @@
 #define ROUND_F26DOT6( x )     ( x >= 0 ? (    ( (x) + 32 ) & -64 )     \
                                         : ( -( ( 32 - (x) ) & -64 ) ) )
 
+FT_END_HEADER
 
-#ifdef __cplusplus
-  }
-#endif
-
-#endif /* FTCALC_H */
+#endif /* __FTCALC_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftdebug.h b/include/freetype/internal/ftdebug.h
index 36c60e2..30fc1fe 100644
--- a/include/freetype/internal/ftdebug.h
+++ b/include/freetype/internal/ftdebug.h
@@ -16,16 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTDEBUG_H
-#define FTDEBUG_H
+#ifndef __FTDEBUG_H__
+#define __FTDEBUG_H__
 
-#include <freetype/config/ftconfig.h>   /* for FT_DEBUG_LEVEL_TRACE, */
-                                        /* FT_DEBUG_LEVEL_ERROR      */
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CONFIG_CONFIG_H
 
+FT_BEGIN_HEADER
 
 #ifdef FT_DEBUG_LEVEL_TRACE
 
@@ -218,12 +218,9 @@
 #define FT_TRACE7( varformat )  FT_TRACE( 7, varformat )
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTDEBUG_H */
+#endif /* __FTDEBUG_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftdriver.h b/include/freetype/internal/ftdriver.h
index bdf580a..85706a7 100644
--- a/include/freetype/internal/ftdriver.h
+++ b/include/freetype/internal/ftdriver.h
@@ -16,17 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTDRIVER_H
-#define FTDRIVER_H
+#ifndef __FTDRIVER_H__
+#define __FTDRIVER_H__
 
-
-#include <freetype/ftmodule.h>
-#include <freetype/config/ftconfig.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_MODULE_H
+
+FT_BEGIN_HEADER
 
 
   typedef FT_Error  (*FTDriver_initFace)     ( FT_Stream      stream,
@@ -181,12 +180,9 @@
   } FT_Driver_Class;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTDRIVER_H */
+#endif /* __FTDRIVER_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftextend.h b/include/freetype/internal/ftextend.h
index 0a7b972..69fe313 100644
--- a/include/freetype/internal/ftextend.h
+++ b/include/freetype/internal/ftextend.h
@@ -16,17 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTEXTEND_H
-#define FTEXTEND_H
+#ifndef __FTEXTEND_H__
+#define __FTEXTEND_H__
 
-
-#include <freetype/internal/ftobjs.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_INTERNAL_OBJECTS_H
 
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -200,12 +199,9 @@
                                         void**       extension_interface );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTEXTEND_H */
+#endif /* __FTEXTEND_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftmemory.h b/include/freetype/internal/ftmemory.h
index ad1d266..a5b9b87 100644
--- a/include/freetype/internal/ftmemory.h
+++ b/include/freetype/internal/ftmemory.h
@@ -16,18 +16,17 @@
 /***************************************************************************/
 
 
-#ifndef FTMEMORY_H
-#define FTMEMORY_H
+#ifndef __FTMEMORY_H__
+#define __FTMEMORY_H__
 
-
-#include <freetype/config/ftconfig.h>
-#include <freetype/fttypes.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_CONFIG_CONFIG_H
+#include   FT_TYPES_H
 
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -202,12 +201,9 @@
 #define FREE( _pointer_ )  FT_Free( memory, (void**)&(_pointer_) )
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTMEMORY_H */
+#endif /* __FTMEMORY_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h
index 7cbb0af..95c1e65 100644
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -23,19 +23,20 @@
   /*************************************************************************/
 
 
-#ifndef FTOBJS_H
-#define FTOBJS_H
+#ifndef __FTOBJS_H__
+#define __FTOBJS_H__
 
-#include <freetype/internal/ftmemory.h>
-#include <freetype/ftrender.h>
-#include <freetype/internal/ftdriver.h>
-#include <freetype/internal/autohint.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
 
+#include FT_BUILD_H
+#include FT_RENDER_H
+#include FT_INTERNAL_MEMORY_H
+#include FT_INTERNAL_DRIVER_H
+#include FT_INTERNAL_AUTOHINT_H
+
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -739,12 +740,9 @@
 #endif
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTOBJS_H */
+#endif /* __FTOBJS_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h
index e33147a..3eaede7 100644
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -16,16 +16,16 @@
 /***************************************************************************/
 
 
-#ifndef FTSTREAM_H
-#define FTSTREAM_H
+#ifndef __FTSTREAM_H__
+#define __FTSTREAM_H__
 
-#include <freetype/internal/ftobjs.h>
-#include <stddef.h>                     /* for offsetof() macro */
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_INTERNAL_OBJECTS_H
+
+FT_BEGIN_HEADER
 
 
   /* format of an 8-bit frame_op value = [ xxxxx | e | s ] */
@@ -358,12 +358,9 @@
         ( ( error = FT_Read_Fields( stream, fields, object ) ) != FT_Err_Ok )
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* FTSTREAM_H */
+#endif /* __FTSTREAM_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h
new file mode 100644
index 0000000..cfe8b4a
--- /dev/null
+++ b/include/freetype/internal/internal.h
@@ -0,0 +1,29 @@
+/* this file is automatically included by <freetype/config/ftbuild.h> */
+/* do not include it manually !!                                      */
+
+/* internal header files */
+#define  FT_INTERNAL_OBJECTS_H            FT_INTERNAL_FILE(ftobjs.h)
+#define  FT_INTERNAL_STREAM_H             FT_INTERNAL_FILE(ftstream.h)
+#define  FT_INTERNAL_MEMORY_H             FT_INTERNAL_FILE(ftmemory.h)
+#define  FT_INTERNAL_EXTENSION_H          FT_INTERNAL_FILE(ftextend.h)
+#define  FT_INTERNAL_DEBUG_H              FT_INTERNAL_FILE(ftdebug.h)
+#define  FT_INTERNAL_CALC_H               FT_INTERNAL_FILE(ftcalc.h)
+#define  FT_INTERNAL_DRIVER_H             FT_INTERNAL_FILE(ftdriver.h)
+
+#define  FT_INTERNAL_SFNT_H               FT_INTERNAL_FILE(sfnt.h)
+
+#define  FT_INTERNAL_TRUETYPE_TYPES_H     FT_INTERNAL_FILE(tttypes.h)
+#define  FT_INTERNAL_TRUETYPE_ERRORS_H    FT_INTERNAL_FILE(tterrors.h)
+
+#define  FT_INTERNAL_TYPE1_ERRORS_H       FT_INTERNAL_FILE(t1errors.h)
+#define  FT_INTERNAL_TYPE1_TYPES_H        FT_INTERNAL_FILE(t1types.h)
+
+#define  FT_INTERNAL_CFF_ERRORS_H         FT_INTERNAL_FILE(t2errors.h)
+#define  FT_INTERNAL_CFF_TYPES_H          FT_INTERNAL_FILE(t2types.h)
+
+#define  FT_INTERNAL_POSTSCRIPT_NAMES_H   FT_INTERNAL_FILE(psnames.h)
+#define  FT_INTERNAL_POSTSCRIPT_AUX_H     FT_INTERNAL_FILE(psaux.h)
+
+#define  FT_INTERNAL_AUTOHINT_H           FT_INTERNAL_FILE(autohint.h)
+#define  FT_INTERNAL_FNT_TYPES_H          FT_INTERNAL_FILE(fnttypes.h)
+
diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h
index 7f8716d..3db7049 100644
--- a/include/freetype/internal/psaux.h
+++ b/include/freetype/internal/psaux.h
@@ -17,16 +17,17 @@
 /***************************************************************************/
 
 
-#ifndef PSAUX_H
-#define PSAUX_H
+#ifndef __PSAUX_H__
+#define __PSAUX_H__
 
-
-#include <freetype/internal/ftobjs.h>
-#include <freetype/internal/t1types.h>
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_INTERNAL_OBJECTS_H
+#include   FT_INTERNAL_TYPE1_TYPES_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -627,11 +628,9 @@
   } PSAux_Interface;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-#endif /* PSAUX_H */
+#endif /* __PSAUX_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/psnames.h b/include/freetype/internal/psnames.h
index 7254ca7..cb6233f 100644
--- a/include/freetype/internal/psnames.h
+++ b/include/freetype/internal/psnames.h
@@ -17,17 +17,16 @@
 /***************************************************************************/
 
 
-#ifndef PSNAMES_H
-#define PSNAMES_H
+#ifndef __PSNAMES_H__
+#define __PSNAMES_H__
 
-
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
 
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -219,12 +218,9 @@
   } PSNames_Interface;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* PSNAMES_H */
+#endif /* __PSNAMES_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/sfnt.h b/include/freetype/internal/sfnt.h
index f9cc0ac..6815ce6 100644
--- a/include/freetype/internal/sfnt.h
+++ b/include/freetype/internal/sfnt.h
@@ -16,19 +16,17 @@
 /***************************************************************************/
 
 
-#ifndef SFNT_H
-#define SFNT_H
+#ifndef __SFNT_H__
+#define __SFNT_H__
 
-
-#include <freetype/freetype.h>
-#include <freetype/internal/ftdriver.h>
-#include <freetype/internal/tttypes.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_INTERNAL_DRIVER_H
+#include   FT_INTERNAL_TRUETYPE_TYPES_H
 
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -524,12 +522,9 @@
   } SFNT_Interface;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* SFNT_H */
+#endif /* __SFNT_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/t1errors.h b/include/freetype/internal/t1errors.h
index a81be21..79fdf69 100644
--- a/include/freetype/internal/t1errors.h
+++ b/include/freetype/internal/t1errors.h
@@ -16,8 +16,8 @@
 /***************************************************************************/
 
 
-#ifndef T1ERRORS_H
-#define T1ERRORS_H
+#ifndef __T1ERRORS_H__
+#define __T1ERRORS_H__
 
 
 #ifdef __cplusplus
@@ -71,7 +71,7 @@
 #endif
 
 
-#endif /* T1ERRORS_H */
+#endif /* __T1ERRORS_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/t1types.h b/include/freetype/internal/t1types.h
index b25f653..2f27a07 100644
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -17,17 +17,17 @@
 /***************************************************************************/
 
 
-#ifndef T1TYPES_H
-#define T1TYPES_H
+#ifndef __T1TYPES_H__
+#define __T1TYPES_H__
 
-
-#include <freetype/t1tables.h>
-#include <freetype/internal/psnames.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_TYPE1_TABLES_H
+#include   FT_INTERNAL_POSTSCRIPT_NAMES_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -189,12 +189,9 @@
   } CID_FaceRec;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* T1TYPES_H */
+#endif /* __T1TYPES_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/t2errors.h b/include/freetype/internal/t2errors.h
index dc872c4..7a3d397 100644
--- a/include/freetype/internal/t2errors.h
+++ b/include/freetype/internal/t2errors.h
@@ -16,8 +16,8 @@
 /***************************************************************************/
 
 
-#ifndef T2ERRORS_H
-#define T2ERRORS_H
+#ifndef __T2ERRORS_H__
+#define __T2ERRORS_H__
 
 
 #ifdef __cplusplus
@@ -125,7 +125,7 @@
 #endif
 
 
-#endif /* T2ERRORS_H */
+#endif /* __T2ERRORS_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/t2types.h b/include/freetype/internal/t2types.h
index c2a23ae..c4e8dc2 100644
--- a/include/freetype/internal/t2types.h
+++ b/include/freetype/internal/t2types.h
@@ -17,16 +17,16 @@
 /***************************************************************************/
 
 
-#ifndef T2TYPES_H
-#define T2TYPES_H
+#ifndef __T2TYPES_H__
+#define __T2TYPES_H__
 
-
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -38,7 +38,7 @@
   /*    A structure used to model a CFF Index table.                       */
   /*                                                                       */
   /* <Fields>                                                              */
-  /*    stream      :: XXX                                                 */
+  /*    stream      :: source input stream                                 */
   /*                                                                       */
   /*    count       :: The number of elements in the index.                */
   /*                                                                       */
@@ -47,7 +47,7 @@
   /*    data_offset :: The position of first data byte in the index's      */
   /*                   bytes.                                              */
   /*                                                                       */
-  /*    offsets     :: XXX                                                 */
+  /*    offsets     :: table of element offsets in the index               */
   /*                                                                       */
   /*    bytes       :: If the index is loaded in memory, its bytes.        */
   /*                                                                       */
@@ -79,6 +79,7 @@
     FT_Int     paint_type;
     FT_Int     charstring_type;
     FT_Matrix  font_matrix;
+    FT_Vector  font_offset;
     FT_ULong   unique_id;
     FT_BBox    font_bbox;
     FT_Pos     stroke_width;
@@ -217,12 +218,9 @@
   } CFF_Font;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* T2TYPES_H */
+#endif /* __T2TYPES_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/tterrors.h b/include/freetype/internal/tterrors.h
index c987623..3f6c334 100644
--- a/include/freetype/internal/tterrors.h
+++ b/include/freetype/internal/tterrors.h
@@ -16,8 +16,8 @@
 /***************************************************************************/
 
 
-#ifndef TTERRORS_H
-#define TTERRORS_H
+#ifndef __TTERRORS_H__
+#define __TTERRORS_H__
 
 
 #ifdef __cplusplus
@@ -125,7 +125,7 @@
 #endif
 
 
-#endif /* TTERRORS_H */
+#endif /* __TTERRORS_H__ */
 
 
 /* END */
diff --git a/include/freetype/internal/tttypes.h b/include/freetype/internal/tttypes.h
index 5657fa3..ef74ac2 100644
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -17,17 +17,17 @@
 /***************************************************************************/
 
 
-#ifndef TTTYPES_H
-#define TTTYPES_H
+#ifndef __TTTYPES_H__
+#define __TTTYPES_H__
 
-
-#include <freetype/tttables.h>
-#include <freetype/internal/ftobjs.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H  <freetype/config/ftbuild.h>
 #endif
+#include   FT_BUILD_H
+#include   FT_TRUETYPE_TABLES_H
+#include   FT_INTERNAL_OBJECTS_H
+
+FT_BEGIN_HEADER
 
 
   /*************************************************************************/
@@ -1591,12 +1591,9 @@
   };
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* TTTYPES_H */
+#endif /* __TTTYPES_H__ */
 
 
 /* END */
diff --git a/include/freetype/t1tables.h b/include/freetype/t1tables.h
index 1b89df0..212627f 100644
--- a/include/freetype/t1tables.h
+++ b/include/freetype/t1tables.h
@@ -17,17 +17,17 @@
 /***************************************************************************/
 
 
-#ifndef T1TABLES_H
-#define T1TABLES_H
+#ifndef __T1TABLES_H__
+#define __T1TABLES_H__
 
-
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
 
+#include FT_BUILD_H
+#include FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
   /* Note that we separate font data in T1_FontInfo and T1_Private */
   /* structures in order to support Multiple Master fonts.         */
@@ -235,12 +235,9 @@
   } CID_Info;
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* T1TABLES_H */
+#endif /* __T1TABLES_H__ */
 
 
 /* END */
diff --git a/include/freetype/ttnameid.h b/include/freetype/ttnameid.h
index b6aeb46..fcb1d96 100644
--- a/include/freetype/ttnameid.h
+++ b/include/freetype/ttnameid.h
@@ -16,8 +16,8 @@
 /***************************************************************************/
 
 
-#ifndef TTNAMEID_H
-#define TTNAMEID_H
+#ifndef __TTNAMEID_H__
+#define __TTNAMEID_H__
 
 
 #ifdef __cplusplus
@@ -718,7 +718,7 @@
 #endif
 
 
-#endif /* TTNAMEID_H */
+#endif /* __TTNAMEID_H__ */
 
 
 /* END */
diff --git a/include/freetype/tttables.h b/include/freetype/tttables.h
index a1f0afa..6de013f 100644
--- a/include/freetype/tttables.h
+++ b/include/freetype/tttables.h
@@ -17,17 +17,17 @@
 /***************************************************************************/
 
 
-#ifndef TTTABLES_H
-#define TTTABLES_H
+#ifndef __TTTABLES_H__
+#define __TTTABLES_H__
 
-
-#include <freetype/freetype.h>
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
 
+#include FT_BUILD_H
+#include FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
   /*************************************************************************/
   /*                                                                       */
@@ -570,12 +570,9 @@
                                          FT_Sfnt_Tag  tag );
 
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* TTTABLES_H */
+#endif /* __TTTABLES_H__ */
 
 
 /* END */
diff --git a/include/freetype/tttags.h b/include/freetype/tttags.h
index 203ebe7..4ab1669 100644
--- a/include/freetype/tttags.h
+++ b/include/freetype/tttags.h
@@ -16,17 +16,17 @@
 /***************************************************************************/
 
 
-#ifndef TTAGS_H
-#define TTAGS_H
+#ifndef __TTAGS_H__
+#define __TTAGS_H__
 
-
-#include <freetype/freetype.h>   /* for MAKE_TT_TAG() */
-
-
-#ifdef __cplusplus
-  extern "C" {
+#ifndef    FT_BUILD_H
+#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
 #endif
 
+#include FT_BUILD_H
+#include FT_FREETYPE_H
+
+FT_BEGIN_HEADER
 
 #define TTAG_cmap  FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
 #define TTAG_cvt   FT_MAKE_TAG( 'c', 'v', 't', ' ' )
@@ -66,12 +66,9 @@
 #define TTAG_vhea  FT_MAKE_TAG( 'v', 'h', 'e', 'a' )
 #define TTAG_vmtx  FT_MAKE_TAG( 'v', 'm', 't', 'x' )
 
-#ifdef __cplusplus
-  }
-#endif
+FT_END_HEADER
 
-
-#endif /* TTAGS_H */
+#endif /* __TTAGS_H__ */
 
 
 /* END */