/*******************************************************************
 *
 *  ftconfig.h
 *
 *    Unix-specific configuration file
 *
 *  Copyright 1996-1998 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.
 *
 *
 *  This header file contains a number of macro definitions that are
 *  used by the rest of the engine. Porters are free to copy this file
 *  and adapt it to suit their own system..
 *
 *  IMPORTANT NOTE :
 *
 *    Porters, read carefully the comments in ftsys.h before trying
 *    to port this file to your system. It contains many essential
 *    remarks, and will ease your work greatly..
 *
 ******************************************************************/

#ifndef FTCONFIG_H
#define FTCONFIG_H

/*************************************************************************/
/*                                                                       */
/*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
/*                                                                       */
/*  These macros can be toggled to suit a specific system. The current   */
/*  ones are defaults used to compile FreeType in a 32-bits ANSI C       */
/*  environment. Copy this file to your own "freetype/arch/<system>"     */
/*  directory, and edit it to port the engine..                          */
/*                                                                       */
/*************************************************************************/

/* Define to empty if the keyword does not work.  */
/* #undef const */

/* Define if you have a working `mmap' system call.  */
#define  HAVE_MMAP

/* Define if you have the ANSI C header files.  */
#define STDC_HEADERS 1

/* Define if your processor stores words with the most significant
   byte first (like Motorola and SPARC, unlike Intel and VAX).  */
/* #undef WORDS_BIGENDIAN */

/* Define if the X Window System is missing or not being used.  */
/* #undef X_DISPLAY_MISSING */

/* The number of bytes in a int.  */
#define SIZEOF_INT 4

/* The number of bytes in a long.  */
#define SIZEOF_LONG 4

/* Define if you have the getpagesize function.  */
#define HAVE_GETPAGESIZE 1

/* Define if you have the memcpy function.  */
#define HAVE_MEMCPY 1

/* Define if you have the <fcntl.h> header file.  */
#define HAVE_FCNTL_H 1

/* Define if you have the <unistd.h> header file.  */
#define HAVE_UNISTD_H 1

/* Define if you have the <locale.h> header file.  */
#define HAVE_LOCALE_H 1

/* Define if you have the <libintl.h> header file.  */
#undef  HAVE_LIBINTL_H  

/* Define if you have the libintl library.  */
/* #undef HAVE_LIBINTL */

/* Preferred alignment of data */
#define  FT_ALIGNMENT  8

/* See the definition of the macro FT_CONFIG_OPTION_LITTLE_ENDIAN */
/* and FT_CONFIG_OPTION_BIG_ENDIAN below, they may need to be set */
/* according to the platform too..                                */


#include <ftoption.h>

/*************************************************************************/
/*                                                                       */
/*                       AUTOMATIC CONFIGURATION MACROS                  */
/*                                                                       */
/*  These macros are computed from the ones defined above. Don't touch   */
/*  their definition, unless you know precisely what you're doing. No    */
/*  porter should need to mess with them.                                */
/*                                                                       */
/*************************************************************************/

  /* IntN types:                                                        */
  /*                                                                    */
  /*   Used to guarantee the size of some specific integers.            */
  /*                                                                    */

  typedef signed short    FT_Int16;
  typedef unsigned short  FT_Word16;

#if SIZEOF_INT == 4

  typedef signed int      FT_Int32;
  typedef unsigned int    FT_Word32;

#elif SIZEOF_LONG == 4

  typedef signed long     FT_Int32;
  typedef unsigned long   FT_Word32;

#else
#error "no 32bit type found - please check your configuration files"
#endif

#if SIZEOF_LONG == 8

/* LONG64 must be defined when a 64-bit type is available */
#define LONG64
#define INT64   long

#else

/* GCC provides the non-ANSI 'long long' 64-bit type.  You can activate it */
/* by defining the FTCALC_USE_LONG_LONG macro in 'ftconfig.h'.  Note that  */
/* this will produce many -ansi warnings during library compilation.       */
#ifdef FTCALC_USE_LONG_LONG

#define LONG64
#define INT64   long long

#endif /* FTCALC_USE_LONG_LONG */
#endif

#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define  LOCAL_DEF   static
#define  LOCAL_FUNC  static
#else
#define  LOCAL_DEF   extern
#define  LOCAL_FUNC  /* nothing */
#endif

#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT
#define  BASE_DEF    LOCAL_DEF
#define  BASE_FUNC   LOCAL_FUNC
#else
#define  BASE_DEF    extern
#define  BASE_FUNC   /* nothing */
#endif

#ifndef  EXPORT_DEF
#define  EXPORT_DEF   extern
#endif

#ifndef  EXPORT_FUNC
#define  EXPORT_FUNC  /* nothing */
#endif


#endif /* FTCONFIG_H */
