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