w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

public-macros.h
Go to the documentation of this file.
1 /****************************************************************************
2  *
3  * config/public-macros.h
4  *
5  * Define a set of compiler macros used in public FreeType headers.
6  *
7  * Copyright (C) 2020 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  * The definitions in this file are used by the public FreeType headers
20  * and thus should be considered part of the public API.
21  *
22  * Other compiler-specific macro definitions that are not exposed by the
23  * FreeType API should go into
24  * `include/freetype/internal/compiler-macros.h` instead.
25  */
26 #ifndef FREETYPE_CONFIG_PUBLIC_MACROS_H_
27 #define FREETYPE_CONFIG_PUBLIC_MACROS_H_
28 
29  /*
30  * `FT_BEGIN_HEADER` and `FT_END_HEADER` might have already been defined
31  * by `freetype/config/ftheader.h`, but we don't want to include this
32  * header here, so redefine the macros here only when needed. Their
33  * definition is very stable, so keeping them in sync with the ones in the
34  * header should not be a maintenance issue.
35  */
36 #ifndef FT_BEGIN_HEADER
37 #ifdef __cplusplus
38 #define FT_BEGIN_HEADER extern "C" {
39 #else
40 #define FT_BEGIN_HEADER /* empty */
41 #endif
42 #endif /* FT_BEGIN_HEADER */
43 
44 #ifndef FT_END_HEADER
45 #ifdef __cplusplus
46 #define FT_END_HEADER }
47 #else
48 #define FT_END_HEADER /* empty */
49 #endif
50 #endif /* FT_END_HEADER */
51 
52 
54 
55  /*
56  * Mark a function declaration as public. This ensures it will be
57  * properly exported to client code. Place this before a function
58  * declaration.
59  *
60  * NOTE: This macro should be considered an internal implementation
61  * detail, and not part of the FreeType API. It is only defined here
62  * because it is needed by `FT_EXPORT`.
63  */
64 
65  /* Visual C, mingw */
66 #if defined( _WIN32 )
67 
68 #if defined( FT2_BUILD_LIBRARY ) && defined( DLL_EXPORT )
69 #define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllexport )
70 #elif defined( DLL_IMPORT )
71 #define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllimport )
72 #endif
73 
74  /* gcc, clang */
75 #elif ( defined( __GNUC__ ) && __GNUC__ >= 4 ) || defined( __clang__ )
76 #define FT_PUBLIC_FUNCTION_ATTRIBUTE \
77  __attribute__(( visibility( "default" ) ))
78 
79  /* Sun */
80 #elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
81 #define FT_PUBLIC_FUNCTION_ATTRIBUTE __global
82 #endif
83 
84 
85 #ifndef FT_PUBLIC_FUNCTION_ATTRIBUTE
86 #define FT_PUBLIC_FUNCTION_ATTRIBUTE /* empty */
87 #endif
88 
89 
90  /*
91  * Define a public FreeType API function. This ensures it is properly
92  * exported or imported at build time. The macro parameter is the
93  * function's return type as in:
94  *
95  * FT_EXPORT( FT_Bool )
96  * FT_Object_Method( FT_Object obj,
97  * ... );
98  *
99  * NOTE: This requires that all `FT_EXPORT` uses are inside
100  * `FT_BEGIN_HEADER ... FT_END_HEADER` blocks. This guarantees that the
101  * functions are exported with C linkage, even when the header is included
102  * by a C++ source file.
103  */
104 #define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x
105 
106  /*
107  * `FT_UNUSED` indicates that a given parameter is not used -- this is
108  * only used to get rid of unpleasant compiler warnings.
109  *
110  * Technically, this was not meant to be part of the public API, but some
111  * third-party code depends on it.
112  */
113 #ifndef FT_UNUSED
114 #define FT_UNUSED( arg ) ( (arg) = (arg) )
115 #endif
116 
117 
119 
120 #endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */
#define FT_END_HEADER
Definition: public-macros.h:48