1/* ftconfig.h. Generated from ftconfig.in by configure. */
2/***************************************************************************/
3/* */
4/* ftconfig.in */
5/* */
6/* UNIX-specific configuration file (specification only). */
7/* */
8/* Copyright 1996-2017 by */
9/* David Turner, Robert Wilhelm, and Werner Lemberg. */
10/* */
11/* This file is part of the FreeType project, and may only be used, */
12/* modified, and distributed under the terms of the FreeType project */
13/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
14/* this file you indicate that you have read the license and */
15/* understand and accept it fully. */
16/* */
17/***************************************************************************/
18
19
20 /*************************************************************************/
21 /* */
22 /* This header file contains a number of macro definitions that are used */
23 /* by the rest of the engine. Most of the macros here are automatically */
24 /* determined at compile time, and you should not need to change it to */
25 /* port FreeType, except to compile the library with a non-ANSI */
26 /* compiler. */
27 /* */
28 /* Note however that if some specific modifications are needed, we */
29 /* advise you to place a modified copy in your build directory. */
30 /* */
31 /* The build directory is usually `builds/<system>', and contains */
32 /* system-specific files that are always included first when building */
33 /* the library. */
34 /* */
35 /*************************************************************************/
36
37
38#ifndef FTCONFIG_H_
39#define FTCONFIG_H_
40
41#include <ft2build.h>
42#include FT_CONFIG_OPTIONS_H
43#include FT_CONFIG_STANDARD_LIBRARY_H
44
45
46FT_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 /* `builds/<system>' directory, and edit it to port the engine. */
57 /* */
58 /*************************************************************************/
59
60
61#define HAVE_UNISTD_H 1
62#define HAVE_FCNTL_H 1
63#define HAVE_STDINT_H 1
64
65
66 /* There are systems (like the Texas Instruments 'C54x) where a `char' */
67 /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
68 /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
69 /* is probably unexpected. */
70 /* */
71 /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
72 /* `char' type. */
73
74#ifndef FT_CHAR_BIT
75#define FT_CHAR_BIT CHAR_BIT
76#endif
77
78
79/* #undef FT_USE_AUTOCONF_SIZEOF_TYPES */
80#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES
81
82#define SIZEOF_INT 4
83#define SIZEOF_LONG __SIZEOF_LONG__
84#define FT_SIZEOF_INT SIZEOF_INT
85#define FT_SIZEOF_LONG SIZEOF_LONG
86
87#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
88
89 /* Following cpp computation of the bit length of int and long */
90 /* is copied from default include/freetype/config/ftconfig.h. */
91 /* If any improvement is required for this file, it should be */
92 /* applied to the original header file for the builders that */
93 /* do not use configure script. */
94
95 /* The size of an `int' type. */
96#if FT_UINT_MAX == 0xFFFFUL
97#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
98#elif FT_UINT_MAX == 0xFFFFFFFFUL
99#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
100#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
101#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
102#else
103#error "Unsupported size of `int' type!"
104#endif
105
106 /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
107 /* DM642) is recognized but avoided. */
108#if FT_ULONG_MAX == 0xFFFFFFFFUL
109#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
110#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
111#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
112#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
113#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
114#else
115#error "Unsupported size of `long' type!"
116#endif
117
118#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
119
120
121 /* FT_UNUSED is a macro used to indicate that a given parameter is not */
122 /* used -- this is only used to get rid of unpleasant compiler warnings */
123#ifndef FT_UNUSED
124#define FT_UNUSED( arg ) ( (arg) = (arg) )
125#endif
126
127
128 /*************************************************************************/
129 /* */
130 /* AUTOMATIC CONFIGURATION MACROS */
131 /* */
132 /* These macros are computed from the ones defined above. Don't touch */
133 /* their definition, unless you know precisely what you are doing. No */
134 /* porter should need to mess with them. */
135 /* */
136 /*************************************************************************/
137
138
139 /*************************************************************************/
140 /* */
141 /* Mac support */
142 /* */
143 /* This is the only necessary change, so it is defined here instead */
144 /* providing a new configuration file. */
145 /* */
146#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
147 /* no Carbon frameworks for 64bit 10.4.x */
148 /* AvailabilityMacros.h is available since Mac OS X 10.2, */
149 /* so guess the system version by maximum errno before inclusion */
150#include <errno.h>
151#ifdef ECANCELED /* defined since 10.2 */
152#include "AvailabilityMacros.h"
153#endif
154#if defined( __LP64__ ) && \
155 ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
156#undef FT_MACINTOSH
157#endif
158
159#elif defined( __SC__ ) || defined( __MRC__ )
160 /* Classic MacOS compilers */
161#include "ConditionalMacros.h"
162#if TARGET_OS_MAC
163#define FT_MACINTOSH 1
164#endif
165
166#endif
167
168
169 /* Fix compiler warning with sgi compiler */
170#if defined( __sgi ) && !defined( __GNUC__ )
171#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
172#pragma set woff 3505
173#endif
174#endif
175
176
177 /*************************************************************************/
178 /* */
179 /* <Section> */
180 /* basic_types */
181 /* */
182 /*************************************************************************/
183
184
185 /*************************************************************************/
186 /* */
187 /* <Type> */
188 /* FT_Int16 */
189 /* */
190 /* <Description> */
191 /* A typedef for a 16bit signed integer type. */
192 /* */
193 typedef signed short FT_Int16;
194
195
196 /*************************************************************************/
197 /* */
198 /* <Type> */
199 /* FT_UInt16 */
200 /* */
201 /* <Description> */
202 /* A typedef for a 16bit unsigned integer type. */
203 /* */
204 typedef unsigned short FT_UInt16;
205
206 /* */
207
208
209 /* this #if 0 ... #endif clause is for documentation purposes */
210#if 0
211
212 /*************************************************************************/
213 /* */
214 /* <Type> */
215 /* FT_Int32 */
216 /* */
217 /* <Description> */
218 /* A typedef for a 32bit signed integer type. The size depends on */
219 /* the configuration. */
220 /* */
221 typedef signed XXX FT_Int32;
222
223
224 /*************************************************************************/
225 /* */
226 /* <Type> */
227 /* FT_UInt32 */
228 /* */
229 /* A typedef for a 32bit unsigned integer type. The size depends on */
230 /* the configuration. */
231 /* */
232 typedef unsigned XXX FT_UInt32;
233
234
235 /*************************************************************************/
236 /* */
237 /* <Type> */
238 /* FT_Int64 */
239 /* */
240 /* A typedef for a 64bit signed integer type. The size depends on */
241 /* the configuration. Only defined if there is real 64bit support; */
242 /* otherwise, it gets emulated with a structure (if necessary). */
243 /* */
244 typedef signed XXX FT_Int64;
245
246
247 /*************************************************************************/
248 /* */
249 /* <Type> */
250 /* FT_UInt64 */
251 /* */
252 /* A typedef for a 64bit unsigned integer type. The size depends on */
253 /* the configuration. Only defined if there is real 64bit support; */
254 /* otherwise, it gets emulated with a structure (if necessary). */
255 /* */
256 typedef unsigned XXX FT_UInt64;
257
258 /* */
259
260#endif
261
262#if FT_SIZEOF_INT == 4
263
264 typedef signed int FT_Int32;
265 typedef unsigned int FT_UInt32;
266
267#elif FT_SIZEOF_LONG == 4
268
269 typedef signed long FT_Int32;
270 typedef unsigned long FT_UInt32;
271
272#else
273#error "no 32bit type found -- please check your configuration files"
274#endif
275
276
277 /* look up an integer type that is at least 32 bits */
278#if FT_SIZEOF_INT >= 4
279
280 typedef int FT_Fast;
281 typedef unsigned int FT_UFast;
282
283#elif FT_SIZEOF_LONG >= 4
284
285 typedef long FT_Fast;
286 typedef unsigned long FT_UFast;
287
288#endif
289
290
291 /* determine whether we have a 64-bit int type */
292 /* (mostly for environments without `autoconf') */
293#if FT_SIZEOF_LONG == 8
294
295 /* FT_LONG64 must be defined if a 64-bit type is available */
296#define FT_LONG64
297#define FT_INT64 long
298#define FT_UINT64 unsigned long
299
300 /* we handle the LLP64 scheme separately for GCC and clang, */
301 /* suppressing the `long long' warning */
302#elif ( FT_SIZEOF_LONG == 4 ) && \
303 defined( HAVE_LONG_LONG_INT ) && \
304 defined( __GNUC__ )
305#pragma GCC diagnostic ignored "-Wlong-long"
306#define FT_LONG64
307#define FT_INT64 long long int
308#define FT_UINT64 unsigned long long int
309
310 /*************************************************************************/
311 /* */
312 /* A 64-bit data type may create compilation problems if you compile */
313 /* in strict ANSI mode. To avoid them, we disable other 64-bit data */
314 /* types if __STDC__ is defined. You can however ignore this rule */
315 /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
316 /* */
317#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
318
319#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
320
321#define FT_LONG64
322#define FT_INT64 long long int
323#define FT_UINT64 unsigned long long int
324
325#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
326
327 /* this compiler provides the __int64 type */
328#define FT_LONG64
329#define FT_INT64 __int64
330#define FT_UINT64 unsigned __int64
331
332#elif defined( __BORLANDC__ ) /* Borland C++ */
333
334 /* XXXX: We should probably check the value of __BORLANDC__ in order */
335 /* to test the compiler version. */
336
337 /* this compiler provides the __int64 type */
338#define FT_LONG64
339#define FT_INT64 __int64
340#define FT_UINT64 unsigned __int64
341
342#elif defined( __WATCOMC__ ) /* Watcom C++ */
343
344 /* Watcom doesn't provide 64-bit data types */
345
346#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
347
348#define FT_LONG64
349#define FT_INT64 long long int
350#define FT_UINT64 unsigned long long int
351
352#elif defined( __GNUC__ )
353
354 /* GCC provides the `long long' type */
355#define FT_LONG64
356#define FT_INT64 long long int
357#define FT_UINT64 unsigned long long int
358
359#endif /* __STDC_VERSION__ >= 199901L */
360
361#endif /* FT_SIZEOF_LONG == 8 */
362
363#ifdef FT_LONG64
364 typedef FT_INT64 FT_Int64;
365 typedef FT_UINT64 FT_UInt64;
366#endif
367
368
369#ifdef _WIN64
370 /* only 64bit Windows uses the LLP64 data model, i.e., */
371 /* 32bit integers, 64bit pointers */
372#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
373#else
374#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
375#endif
376
377
378 /*************************************************************************/
379 /* */
380 /* miscellaneous */
381 /* */
382 /*************************************************************************/
383
384
385#define FT_BEGIN_STMNT do {
386#define FT_END_STMNT } while ( 0 )
387#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
388
389
390 /* typeof condition taken from gnulib's `intprops.h' header file */
391#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
392 ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
393 defined( __IBM__TYPEOF__ ) ) || \
394 ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
395#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
396#else
397#define FT_TYPEOF( type ) /* empty */
398#endif
399
400
401#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
402
403#define FT_LOCAL( x ) static x
404#define FT_LOCAL_DEF( x ) static x
405
406#else
407
408#ifdef __cplusplus
409#define FT_LOCAL( x ) extern "C" x
410#define FT_LOCAL_DEF( x ) extern "C" x
411#else
412#define FT_LOCAL( x ) extern x
413#define FT_LOCAL_DEF( x ) x
414#endif
415
416#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
417
418#define FT_LOCAL_ARRAY( x ) extern const x
419#define FT_LOCAL_ARRAY_DEF( x ) const x
420
421
422#ifndef FT_BASE
423
424#ifdef __cplusplus
425#define FT_BASE( x ) extern "C" x
426#else
427#define FT_BASE( x ) extern x
428#endif
429
430#endif /* !FT_BASE */
431
432
433#ifndef FT_BASE_DEF
434
435#ifdef __cplusplus
436#define FT_BASE_DEF( x ) x
437#else
438#define FT_BASE_DEF( x ) x
439#endif
440
441#endif /* !FT_BASE_DEF */
442
443
444#ifndef FT_EXPORT
445
446#ifdef __cplusplus
447#define FT_EXPORT( x ) extern "C" x
448#else
449#define FT_EXPORT( x ) extern x
450#endif
451
452#endif /* !FT_EXPORT */
453
454
455#ifndef FT_EXPORT_DEF
456
457#ifdef __cplusplus
458#define FT_EXPORT_DEF( x ) extern "C" x
459#else
460#define FT_EXPORT_DEF( x ) extern x
461#endif
462
463#endif /* !FT_EXPORT_DEF */
464
465
466#ifndef FT_EXPORT_VAR
467
468#ifdef __cplusplus
469#define FT_EXPORT_VAR( x ) extern "C" x
470#else
471#define FT_EXPORT_VAR( x ) extern x
472#endif
473
474#endif /* !FT_EXPORT_VAR */
475
476 /* The following macros are needed to compile the library with a */
477 /* C++ compiler and with 16bit compilers. */
478 /* */
479
480 /* This is special. Within C++, you must specify `extern "C"' for */
481 /* functions which are used via function pointers, and you also */
482 /* must do that for structures which contain function pointers to */
483 /* assure C linkage -- it's not possible to have (local) anonymous */
484 /* functions which are accessed by (global) function pointers. */
485 /* */
486 /* */
487 /* FT_CALLBACK_DEF is used to _define_ a callback function. */
488 /* */
489 /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
490 /* contains pointers to callback functions. */
491 /* */
492 /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
493 /* that contains pointers to callback functions. */
494 /* */
495 /* */
496 /* Some 16bit compilers have to redefine these macros to insert */
497 /* the infamous `_cdecl' or `__fastcall' declarations. */
498 /* */
499#ifndef FT_CALLBACK_DEF
500#ifdef __cplusplus
501#define FT_CALLBACK_DEF( x ) extern "C" x
502#else
503#define FT_CALLBACK_DEF( x ) static x
504#endif
505#endif /* FT_CALLBACK_DEF */
506
507#ifndef FT_CALLBACK_TABLE
508#ifdef __cplusplus
509#define FT_CALLBACK_TABLE extern "C"
510#define FT_CALLBACK_TABLE_DEF extern "C"
511#else
512#define FT_CALLBACK_TABLE extern
513#define FT_CALLBACK_TABLE_DEF /* nothing */
514#endif
515#endif /* FT_CALLBACK_TABLE */
516
517
518FT_END_HEADER
519
520
521#endif /* FTCONFIG_H_ */
522
523
524/* END */
525