[692] | 1 | /***************************************************************************/
|
---|
| 2 | /* */
|
---|
| 3 | /* ftconfig.h */
|
---|
| 4 | /* */
|
---|
| 5 | /* ANSI-specific configuration file (specification only). */
|
---|
| 6 | /* */
|
---|
| 7 | /* Copyright 1996-2001, 2002, 2003, 2004 by */
|
---|
| 8 | /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
---|
| 9 | /* */
|
---|
| 10 | /* This file is part of the FreeType project, and may only be used, */
|
---|
| 11 | /* modified, and distributed under the terms of the FreeType project */
|
---|
| 12 | /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
---|
| 13 | /* this file you indicate that you have read the license and */
|
---|
| 14 | /* understand and accept it fully. */
|
---|
| 15 | /* */
|
---|
| 16 | /***************************************************************************/
|
---|
| 17 |
|
---|
| 18 |
|
---|
| 19 | /*************************************************************************/
|
---|
| 20 | /* */
|
---|
| 21 | /* This header file contains a number of macro definitions that are used */
|
---|
| 22 | /* by the rest of the engine. Most of the macros here are automatically */
|
---|
| 23 | /* determined at compile time, and you should not need to change it to */
|
---|
| 24 | /* port FreeType, except to compile the library with a non-ANSI */
|
---|
| 25 | /* compiler. */
|
---|
| 26 | /* */
|
---|
| 27 | /* Note however that if some specific modifications are needed, we */
|
---|
| 28 | /* advise you to place a modified copy in your build directory. */
|
---|
| 29 | /* */
|
---|
| 30 | /* The build directory is usually `freetype/builds/<system>', and */
|
---|
| 31 | /* contains system-specific files that are always included first when */
|
---|
| 32 | /* building the library. */
|
---|
| 33 | /* */
|
---|
| 34 | /* This ANSI version should stay in `include/freetype/config'. */
|
---|
| 35 | /* */
|
---|
| 36 | /*************************************************************************/
|
---|
| 37 |
|
---|
| 38 |
|
---|
| 39 | #ifndef __FTCONFIG_H__
|
---|
| 40 | #define __FTCONFIG_H__
|
---|
| 41 |
|
---|
| 42 | #include <ft2build.h>
|
---|
| 43 | #include FT_CONFIG_OPTIONS_H
|
---|
| 44 | #include FT_CONFIG_STANDARD_LIBRARY_H
|
---|
| 45 |
|
---|
| 46 | FT_BEGIN_HEADER
|
---|
| 47 |
|
---|
| 48 |
|
---|
| 49 | /*************************************************************************/
|
---|
| 50 | /* */
|
---|
| 51 | /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
|
---|
| 52 | /* */
|
---|
| 53 | /* These macros can be toggled to suit a specific system. The current */
|
---|
| 54 | /* ones are defaults used to compile FreeType in an ANSI C environment */
|
---|
| 55 | /* (16bit compilers are also supported). Copy this file to your own */
|
---|
| 56 | /* `freetype/builds/<system>' directory, and edit it to port the engine. */
|
---|
| 57 | /* */
|
---|
| 58 | /*************************************************************************/
|
---|
| 59 |
|
---|
| 60 |
|
---|
| 61 | /* There are systems (like the Texas Instruments 'C54x) where a `char' */
|
---|
| 62 | /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
|
---|
| 63 | /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
|
---|
| 64 | /* is probably unexpected. */
|
---|
| 65 | /* */
|
---|
| 66 | /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
|
---|
| 67 | /* `char' type. */
|
---|
| 68 |
|
---|
| 69 | #ifndef FT_CHAR_BIT
|
---|
| 70 | #define FT_CHAR_BIT CHAR_BIT
|
---|
| 71 | #endif
|
---|
| 72 |
|
---|
| 73 |
|
---|
| 74 | /* The size of an `int' type. */
|
---|
| 75 | #if FT_UINT_MAX == 0xFFFFUL
|
---|
| 76 | #define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
|
---|
| 77 | #elif FT_UINT_MAX == 0xFFFFFFFFUL
|
---|
| 78 | #define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
|
---|
| 79 | #elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
|
---|
| 80 | #define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
|
---|
| 81 | #else
|
---|
| 82 | #error "Unsupported size of `int' type!"
|
---|
| 83 | #endif
|
---|
| 84 |
|
---|
| 85 | /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
|
---|
| 86 | /* DM642) is recognized but avoided. */
|
---|
| 87 | #if FT_ULONG_MAX == 0xFFFFFFFFUL
|
---|
| 88 | #define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
|
---|
| 89 | #elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
|
---|
| 90 | #define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
|
---|
| 91 | #elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
|
---|
| 92 | #define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
|
---|
| 93 | #else
|
---|
| 94 | #error "Unsupported size of `long' type!"
|
---|
| 95 | #endif
|
---|
| 96 |
|
---|
| 97 |
|
---|
| 98 | /* Preferred alignment of data */
|
---|
| 99 | #define FT_ALIGNMENT 8
|
---|
| 100 |
|
---|
| 101 |
|
---|
| 102 | /* FT_UNUSED is a macro used to indicate that a given parameter is not */
|
---|
| 103 | /* used -- this is only used to get rid of unpleasant compiler warnings */
|
---|
| 104 | #ifndef FT_UNUSED
|
---|
| 105 | #define FT_UNUSED( arg ) ( (arg) = (arg) )
|
---|
| 106 | #endif
|
---|
| 107 |
|
---|
| 108 |
|
---|
| 109 | /*************************************************************************/
|
---|
| 110 | /* */
|
---|
| 111 | /* AUTOMATIC CONFIGURATION MACROS */
|
---|
| 112 | /* */
|
---|
| 113 | /* These macros are computed from the ones defined above. Don't touch */
|
---|
| 114 | /* their definition, unless you know precisely what you are doing. No */
|
---|
| 115 | /* porter should need to mess with them. */
|
---|
| 116 | /* */
|
---|
| 117 | /*************************************************************************/
|
---|
| 118 |
|
---|
| 119 |
|
---|
| 120 | /*************************************************************************/
|
---|
| 121 | /* */
|
---|
| 122 | /* Mac support */
|
---|
| 123 | /* */
|
---|
| 124 | /* This is the only necessary change, so it is defined here instead */
|
---|
| 125 | /* providing a new configuration file. */
|
---|
| 126 | /* */
|
---|
| 127 | #if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
|
---|
| 128 | ( defined( __MWERKS__ ) && defined( macintosh ) )
|
---|
| 129 | #define FT_MACINTOSH 1
|
---|
| 130 | #endif
|
---|
| 131 |
|
---|
| 132 |
|
---|
| 133 | /*************************************************************************/
|
---|
| 134 | /* */
|
---|
| 135 | /* IntN types */
|
---|
| 136 | /* */
|
---|
| 137 | /* Used to guarantee the size of some specific integers. */
|
---|
| 138 | /* */
|
---|
| 139 | typedef signed short FT_Int16;
|
---|
| 140 | typedef unsigned short FT_UInt16;
|
---|
| 141 |
|
---|
| 142 | #if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
|
---|
| 143 |
|
---|
| 144 | typedef signed int FT_Int32;
|
---|
| 145 | typedef unsigned int FT_UInt32;
|
---|
| 146 |
|
---|
| 147 | #elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
|
---|
| 148 |
|
---|
| 149 | typedef signed long FT_Int32;
|
---|
| 150 | typedef unsigned long FT_UInt32;
|
---|
| 151 |
|
---|
| 152 | #else
|
---|
| 153 | #error "no 32bit type found -- please check your configuration files"
|
---|
| 154 | #endif
|
---|
| 155 |
|
---|
| 156 | /* look up an integer type that is at least 32 bits */
|
---|
| 157 | #if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
|
---|
| 158 |
|
---|
| 159 | typedef int FT_Fast;
|
---|
| 160 | typedef unsigned int FT_UFast;
|
---|
| 161 |
|
---|
| 162 | #elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
|
---|
| 163 |
|
---|
| 164 | typedef long FT_Fast;
|
---|
| 165 | typedef unsigned long FT_UFast;
|
---|
| 166 |
|
---|
| 167 | #endif
|
---|
| 168 |
|
---|
| 169 |
|
---|
| 170 | /* determine whether we have a 64-bit int type for platforms without */
|
---|
| 171 | /* Autoconf */
|
---|
| 172 | #if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
|
---|
| 173 |
|
---|
| 174 | /* FT_LONG64 must be defined if a 64-bit type is available */
|
---|
| 175 | #define FT_LONG64
|
---|
| 176 | #define FT_INT64 long
|
---|
| 177 |
|
---|
| 178 | #elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
---|
| 179 |
|
---|
| 180 | /* this compiler provides the __int64 type */
|
---|
| 181 | #define FT_LONG64
|
---|
| 182 | #define FT_INT64 __int64
|
---|
| 183 |
|
---|
| 184 | #elif defined( __BORLANDC__ ) /* Borland C++ */
|
---|
| 185 |
|
---|
| 186 | /* XXXX: We should probably check the value of __BORLANDC__ in order */
|
---|
| 187 | /* to test the compiler version. */
|
---|
| 188 |
|
---|
| 189 | /* this compiler provides the __int64 type */
|
---|
| 190 | #define FT_LONG64
|
---|
| 191 | #define FT_INT64 __int64
|
---|
| 192 |
|
---|
| 193 | #elif defined( __WATCOMC__ ) /* Watcom C++ */
|
---|
| 194 |
|
---|
| 195 | /* Watcom doesn't provide 64-bit data types */
|
---|
| 196 |
|
---|
| 197 | #elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
---|
| 198 |
|
---|
| 199 | #define FT_LONG64
|
---|
| 200 | #define FT_INT64 long long int
|
---|
| 201 |
|
---|
| 202 | #elif defined( __GNUC__ )
|
---|
| 203 |
|
---|
| 204 | /* GCC provides the "long long" type */
|
---|
| 205 | #define FT_LONG64
|
---|
| 206 | #define FT_INT64 long long int
|
---|
| 207 |
|
---|
| 208 | #endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
|
---|
| 209 |
|
---|
| 210 |
|
---|
| 211 | #define FT_BEGIN_STMNT do {
|
---|
| 212 | #define FT_END_STMNT } while ( 0 )
|
---|
| 213 | #define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
---|
| 214 |
|
---|
| 215 |
|
---|
| 216 | /*************************************************************************/
|
---|
| 217 | /* */
|
---|
| 218 | /* A 64-bit data type will create compilation problems if you compile */
|
---|
| 219 | /* in strict ANSI mode. To avoid them, we disable their use if */
|
---|
| 220 | /* __STDC__ is defined. You can however ignore this rule by */
|
---|
| 221 | /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
|
---|
| 222 | /* */
|
---|
| 223 | #if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
|
---|
| 224 |
|
---|
| 225 | #ifdef __STDC__
|
---|
| 226 |
|
---|
| 227 | /* undefine the 64-bit macros in strict ANSI compilation mode */
|
---|
| 228 | #undef FT_LONG64
|
---|
| 229 | #undef FT_INT64
|
---|
| 230 |
|
---|
| 231 | #endif /* __STDC__ */
|
---|
| 232 |
|
---|
| 233 | #endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
---|
| 234 |
|
---|
| 235 |
|
---|
| 236 | #ifdef FT_MAKE_OPTION_SINGLE_OBJECT
|
---|
| 237 |
|
---|
| 238 | #define FT_LOCAL( x ) static x
|
---|
| 239 | #define FT_LOCAL_DEF( x ) static x
|
---|
| 240 |
|
---|
| 241 | #else
|
---|
| 242 |
|
---|
| 243 | #ifdef __cplusplus
|
---|
| 244 | #define FT_LOCAL( x ) extern "C" x
|
---|
| 245 | #define FT_LOCAL_DEF( x ) extern "C" x
|
---|
| 246 | #else
|
---|
| 247 | #define FT_LOCAL( x ) extern x
|
---|
| 248 | #define FT_LOCAL_DEF( x ) x
|
---|
| 249 | #endif
|
---|
| 250 |
|
---|
| 251 | #endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
|
---|
| 252 |
|
---|
| 253 |
|
---|
| 254 | #ifndef FT_BASE
|
---|
| 255 |
|
---|
| 256 | #ifdef __cplusplus
|
---|
| 257 | #define FT_BASE( x ) extern "C" x
|
---|
| 258 | #else
|
---|
| 259 | #define FT_BASE( x ) extern x
|
---|
| 260 | #endif
|
---|
| 261 |
|
---|
| 262 | #endif /* !FT_BASE */
|
---|
| 263 |
|
---|
| 264 |
|
---|
| 265 | #ifndef FT_BASE_DEF
|
---|
| 266 |
|
---|
| 267 | #ifdef __cplusplus
|
---|
| 268 | #define FT_BASE_DEF( x ) extern "C" x
|
---|
| 269 | #else
|
---|
| 270 | #define FT_BASE_DEF( x ) extern x
|
---|
| 271 | #endif
|
---|
| 272 |
|
---|
| 273 | #endif /* !FT_BASE_DEF */
|
---|
| 274 |
|
---|
| 275 |
|
---|
| 276 | #ifndef FT_EXPORT
|
---|
| 277 |
|
---|
| 278 | #ifdef __cplusplus
|
---|
| 279 | #define FT_EXPORT( x ) extern "C" x
|
---|
| 280 | #else
|
---|
| 281 | #define FT_EXPORT( x ) extern x
|
---|
| 282 | #endif
|
---|
| 283 |
|
---|
| 284 | #endif /* !FT_EXPORT */
|
---|
| 285 |
|
---|
| 286 |
|
---|
| 287 | #ifndef FT_EXPORT_DEF
|
---|
| 288 |
|
---|
| 289 | #ifdef __cplusplus
|
---|
| 290 | #define FT_EXPORT_DEF( x ) extern "C" x
|
---|
| 291 | #else
|
---|
| 292 | #define FT_EXPORT_DEF( x ) extern x
|
---|
| 293 | #endif
|
---|
| 294 |
|
---|
| 295 | #endif /* !FT_EXPORT_DEF */
|
---|
| 296 |
|
---|
| 297 |
|
---|
| 298 | #ifndef FT_EXPORT_VAR
|
---|
| 299 |
|
---|
| 300 | #ifdef __cplusplus
|
---|
| 301 | #define FT_EXPORT_VAR( x ) extern "C" x
|
---|
| 302 | #else
|
---|
| 303 | #define FT_EXPORT_VAR( x ) extern x
|
---|
| 304 | #endif
|
---|
| 305 |
|
---|
| 306 | #endif /* !FT_EXPORT_VAR */
|
---|
| 307 |
|
---|
| 308 | /* The following macros are needed to compile the library with a */
|
---|
| 309 | /* C++ compiler and with 16bit compilers. */
|
---|
| 310 | /* */
|
---|
| 311 |
|
---|
| 312 | /* This is special. Within C++, you must specify `extern "C"' for */
|
---|
| 313 | /* functions which are used via function pointers, and you also */
|
---|
| 314 | /* must do that for structures which contain function pointers to */
|
---|
| 315 | /* assure C linkage -- it's not possible to have (local) anonymous */
|
---|
| 316 | /* functions which are accessed by (global) function pointers. */
|
---|
| 317 | /* */
|
---|
| 318 | /* */
|
---|
| 319 | /* FT_CALLBACK_DEF is used to _define_ a callback function. */
|
---|
| 320 | /* */
|
---|
| 321 | /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
|
---|
| 322 | /* contains pointers to callback functions. */
|
---|
| 323 | /* */
|
---|
| 324 | /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
|
---|
| 325 | /* that contains pointers to callback functions. */
|
---|
| 326 | /* */
|
---|
| 327 | /* */
|
---|
| 328 | /* Some 16bit compilers have to redefine these macros to insert */
|
---|
| 329 | /* the infamous `_cdecl' or `__fastcall' declarations. */
|
---|
| 330 | /* */
|
---|
| 331 | #ifndef FT_CALLBACK_DEF
|
---|
| 332 | #ifdef __cplusplus
|
---|
| 333 | #define FT_CALLBACK_DEF( x ) extern "C" x
|
---|
| 334 | #else
|
---|
| 335 | #define FT_CALLBACK_DEF( x ) static x
|
---|
| 336 | #endif
|
---|
| 337 | #endif /* FT_CALLBACK_DEF */
|
---|
| 338 |
|
---|
| 339 | #ifndef FT_CALLBACK_TABLE
|
---|
| 340 | #ifdef __cplusplus
|
---|
| 341 | #define FT_CALLBACK_TABLE extern "C"
|
---|
| 342 | #define FT_CALLBACK_TABLE_DEF extern "C"
|
---|
| 343 | #else
|
---|
| 344 | #define FT_CALLBACK_TABLE extern
|
---|
| 345 | #define FT_CALLBACK_TABLE_DEF /* nothing */
|
---|
| 346 | #endif
|
---|
| 347 | #endif /* FT_CALLBACK_TABLE */
|
---|
| 348 |
|
---|
| 349 |
|
---|
| 350 | FT_END_HEADER
|
---|
| 351 |
|
---|
| 352 |
|
---|
| 353 | #endif /* __FTCONFIG_H__ */
|
---|
| 354 |
|
---|
| 355 |
|
---|
| 356 | /* END */
|
---|