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