1 /*
2  * Name:        wx/dlimpexp.h
3  * Purpose:     Macros for declaring DLL-imported/exported functions
4  * Author:      Vadim Zeitlin
5  * Modified by:
6  * Created:     16.10.2003 (extracted from wx/defs.h)
7  * RCS-ID:      $Id: dlimpexp.h 49563 2007-10-31 20:46:21Z VZ $
8  * Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
9  * Licence:     wxWindows licence
10  */
11 
12 /*
13     This is a C file, not C++ one, do not use C++ comments here!
14  */
15 
16 #ifndef _WX_DLIMPEXP_H_
17 #define _WX_DLIMPEXP_H_
18 
19 #if defined(__WXMSW__)
20     /*
21        __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well
22        as VC++ and gcc
23      */
24 #    if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__)
25 #        define WXEXPORT __declspec(dllexport)
26 #        define WXIMPORT __declspec(dllimport)
27 #    else /* compiler doesn't support __declspec() */
28 #        define WXEXPORT
29 #        define WXIMPORT
30 #    endif
31 #elif defined(__WXPM__)
32 #    if defined (__WATCOMC__)
33 #        define WXEXPORT __declspec(dllexport)
34         /*
35            __declspec(dllimport) prepends __imp to imported symbols. We do NOT
36            want that!
37          */
38 #        define WXIMPORT
39 #    elif defined(__EMX__)
40 #        define WXEXPORT
41 #        define WXIMPORT
42 #    elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
43 #        define WXEXPORT _Export
44 #        define WXIMPORT _Export
45 #    endif
46 #elif defined(__WXMAC__) || defined(__WXCOCOA__)
47 #    ifdef __MWERKS__
48 #        define WXEXPORT __declspec(export)
49 #        define WXIMPORT __declspec(import)
50 #    endif
51 #elif defined(__CYGWIN__)
52 #    define WXEXPORT __declspec(dllexport)
53 #    define WXIMPORT __declspec(dllimport)
54 #endif
55 
56 /* for other platforms/compilers we don't anything */
57 #ifndef WXEXPORT
58 #    define WXEXPORT
59 #    define WXIMPORT
60 #endif
61 
62 /*
63    We support building wxWidgets as a set of several libraries but we don't
64    support arbitrary combinations of libs/DLLs: either we build all of them as
65    DLLs (in which case WXMAKINGDLL is defined) or none (it isn't).
66 
67    However we have a problem because we need separate WXDLLEXPORT versions for
68    different libraries as, for example, wxString class should be dllexported
69    when compiled in wxBase and dllimported otherwise, so we do define separate
70    WXMAKING/USINGDLL_XYZ constants for each component XYZ.
71  */
72 #ifdef WXMAKINGDLL
73 #    if wxUSE_BASE
74 #        define WXMAKINGDLL_BASE
75 #    endif
76 
77 #    define WXMAKINGDLL_NET
78 #    define WXMAKINGDLL_CORE
79 #    define WXMAKINGDLL_ADV
80 #    define WXMAKINGDLL_QA
81 #    define WXMAKINGDLL_ODBC
82 #    define WXMAKINGDLL_DBGRID
83 #    define WXMAKINGDLL_HTML
84 #    define WXMAKINGDLL_GL
85 #    define WXMAKINGDLL_XML
86 #    define WXMAKINGDLL_XRC
87 #    define WXMAKINGDLL_AUI
88 #    define WXMAKINGDLL_RICHTEXT
89 #    define WXMAKINGDLL_MEDIA
90 #endif /* WXMAKINGDLL */
91 
92 /*
93    WXDLLEXPORT maps to export declaration when building the DLL, to import
94    declaration if using it or to nothing at all if we don't use wxWin as DLL
95  */
96 #ifdef WXMAKINGDLL_BASE
97 #    define WXDLLIMPEXP_BASE WXEXPORT
98 #    define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type
99 #elif defined(WXUSINGDLL)
100 #    define WXDLLIMPEXP_BASE WXIMPORT
101 #    define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type
102 #else /* not making nor using DLL */
103 #    define WXDLLIMPEXP_BASE
104 #    define WXDLLIMPEXP_DATA_BASE(type) type
105 #endif
106 
107 #ifdef WXMAKINGDLL_NET
108 #    define WXDLLIMPEXP_NET WXEXPORT
109 #    define WXDLLIMPEXP_DATA_NET(type) WXEXPORT type
110 #elif defined(WXUSINGDLL)
111 #    define WXDLLIMPEXP_NET WXIMPORT
112 #    define WXDLLIMPEXP_DATA_NET(type) WXIMPORT type
113 #else /* not making nor using DLL */
114 #    define WXDLLIMPEXP_NET
115 #    define WXDLLIMPEXP_DATA_NET(type) type
116 #endif
117 
118 #ifdef WXMAKINGDLL_CORE
119 #    define WXDLLIMPEXP_CORE WXEXPORT
120 #    define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type
121 #elif defined(WXUSINGDLL)
122 #    define WXDLLIMPEXP_CORE WXIMPORT
123 #    define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type
124 #else /* not making nor using DLL */
125 #    define WXDLLIMPEXP_CORE
126 #    define WXDLLIMPEXP_DATA_CORE(type) type
127 #endif
128 
129 #ifdef WXMAKINGDLL_ADV
130 #    define WXDLLIMPEXP_ADV WXEXPORT
131 #    define WXDLLIMPEXP_DATA_ADV(type) WXEXPORT type
132 #elif defined(WXUSINGDLL)
133 #    define WXDLLIMPEXP_ADV WXIMPORT
134 #    define WXDLLIMPEXP_DATA_ADV(type) WXIMPORT type
135 #else /* not making nor using DLL */
136 #    define WXDLLIMPEXP_ADV
137 #    define WXDLLIMPEXP_DATA_ADV(type) type
138 #endif
139 
140 #ifdef WXMAKINGDLL_ODBC
141 #    define WXDLLIMPEXP_ODBC WXEXPORT
142 #    define WXDLLIMPEXP_DATA_ODBC(type) WXEXPORT type
143 #elif defined(WXUSINGDLL)
144 #    define WXDLLIMPEXP_ODBC WXIMPORT
145 #    define WXDLLIMPEXP_DATA_ODBC(type) WXIMPORT type
146 #else /* not making nor using DLL */
147 #    define WXDLLIMPEXP_ODBC
148 #    define WXDLLIMPEXP_DATA_ODBC(type) type
149 #endif
150 
151 #ifdef WXMAKINGDLL_QA
152 #    define WXDLLIMPEXP_QA WXEXPORT
153 #    define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type
154 #elif defined(WXUSINGDLL)
155 #    define WXDLLIMPEXP_QA WXIMPORT
156 #    define WXDLLIMPEXP_DATA_QA(type) WXIMPORT type
157 #else /* not making nor using DLL */
158 #    define WXDLLIMPEXP_QA
159 #    define WXDLLIMPEXP_DATA_QA(type) type
160 #endif
161 
162 #ifdef WXMAKINGDLL_DBGRID
163 #    define WXDLLIMPEXP_DBGRID WXEXPORT
164 #    define WXDLLIMPEXP_DATA_DBGRID(type) WXEXPORT type
165 #elif defined(WXUSINGDLL)
166 #    define WXDLLIMPEXP_DBGRID WXIMPORT
167 #    define WXDLLIMPEXP_DATA_DBGRID(type) WXIMPORT type
168 #else /* not making nor using DLL */
169 #    define WXDLLIMPEXP_DBGRID
170 #    define WXDLLIMPEXP_DATA_DBGRID(type) type
171 #endif
172 
173 #ifdef WXMAKINGDLL_HTML
174 #    define WXDLLIMPEXP_HTML WXEXPORT
175 #    define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type
176 #elif defined(WXUSINGDLL)
177 #    define WXDLLIMPEXP_HTML WXIMPORT
178 #    define WXDLLIMPEXP_DATA_HTML(type) WXIMPORT type
179 #else /* not making nor using DLL */
180 #    define WXDLLIMPEXP_HTML
181 #    define WXDLLIMPEXP_DATA_HTML(type) type
182 #endif
183 
184 #ifdef WXMAKINGDLL_GL
185 #    define WXDLLIMPEXP_GL WXEXPORT
186 #elif defined(WXUSINGDLL)
187 #    define WXDLLIMPEXP_GL WXIMPORT
188 #else /* not making nor using DLL */
189 #    define WXDLLIMPEXP_GL
190 #endif
191 
192 #ifdef WXMAKINGDLL_XML
193 #    define WXDLLIMPEXP_XML WXEXPORT
194 #elif defined(WXUSINGDLL)
195 #    define WXDLLIMPEXP_XML WXIMPORT
196 #else /* not making nor using DLL */
197 #    define WXDLLIMPEXP_XML
198 #endif
199 
200 #ifdef WXMAKINGDLL_XRC
201 #    define WXDLLIMPEXP_XRC WXEXPORT
202 #elif defined(WXUSINGDLL)
203 #    define WXDLLIMPEXP_XRC WXIMPORT
204 #else /* not making nor using DLL */
205 #    define WXDLLIMPEXP_XRC
206 #endif
207 
208 #ifdef WXMAKINGDLL_AUI
209 #    define WXDLLIMPEXP_AUI WXEXPORT
210 #elif defined(WXUSINGDLL)
211 #    define WXDLLIMPEXP_AUI WXIMPORT
212 #else /* not making nor using DLL */
213 #    define WXDLLIMPEXP_AUI
214 #endif
215 
216 #ifdef WXMAKINGDLL_RICHTEXT
217 #    define WXDLLIMPEXP_RICHTEXT WXEXPORT
218 #elif defined(WXUSINGDLL)
219 #    define WXDLLIMPEXP_RICHTEXT WXIMPORT
220 #else /* not making nor using DLL */
221 #    define WXDLLIMPEXP_RICHTEXT
222 #endif
223 
224 #ifdef WXMAKINGDLL_MEDIA
225 #    define WXDLLIMPEXP_MEDIA WXEXPORT
226 #elif defined(WXUSINGDLL)
227 #    define WXDLLIMPEXP_MEDIA WXIMPORT
228 #else /* not making nor using DLL */
229 #    define WXDLLIMPEXP_MEDIA
230 #endif
231 
232 /* for backwards compatibility, define suffix-less versions too */
233 #define WXDLLEXPORT WXDLLIMPEXP_CORE
234 #define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE
235 
236 /* wx-2.9 introduces new macros for forward declarations, include them
237  * here for forward compatibility:
238 
239    GCC warns about using __attribute__ (and also __declspec in mingw32 case) on
240    forward declarations while MSVC complains about forward declarations without
241    __declspec for the classes later declared with it, so we need a separate set
242    of macros for forward declarations to hide this difference:
243  */
244 #if defined(__WINDOWS__) && defined(__GNUC__)
245     #define WXDLLIMPEXP_FWD_BASE
246     #define WXDLLIMPEXP_FWD_NET
247     #define WXDLLIMPEXP_FWD_CORE
248     #define WXDLLIMPEXP_FWD_ADV
249     #define WXDLLIMPEXP_FWD_QA
250     #define WXDLLIMPEXP_FWD_HTML
251     #define WXDLLIMPEXP_FWD_GL
252     #define WXDLLIMPEXP_FWD_XML
253     #define WXDLLIMPEXP_FWD_XRC
254     #define WXDLLIMPEXP_FWD_AUI
255     #define WXDLLIMPEXP_FWD_RICHTEXT
256     #define WXDLLIMPEXP_FWD_MEDIA
257     #define WXDLLIMPEXP_FWD_STC
258 #else
259     #define WXDLLIMPEXP_FWD_BASE      WXDLLIMPEXP_BASE
260     #define WXDLLIMPEXP_FWD_NET       WXDLLIMPEXP_NET
261     #define WXDLLIMPEXP_FWD_CORE      WXDLLIMPEXP_CORE
262     #define WXDLLIMPEXP_FWD_ADV       WXDLLIMPEXP_ADV
263     #define WXDLLIMPEXP_FWD_QA        WXDLLIMPEXP_QA
264     #define WXDLLIMPEXP_FWD_HTML      WXDLLIMPEXP_HTML
265     #define WXDLLIMPEXP_FWD_GL        WXDLLIMPEXP_GL
266     #define WXDLLIMPEXP_FWD_XML       WXDLLIMPEXP_XML
267     #define WXDLLIMPEXP_FWD_XRC       WXDLLIMPEXP_XRC
268     #define WXDLLIMPEXP_FWD_AUI       WXDLLIMPEXP_AUI
269     #define WXDLLIMPEXP_FWD_RICHTEXT  WXDLLIMPEXP_RICHTEXT
270     #define WXDLLIMPEXP_FWD_MEDIA     WXDLLIMPEXP_MEDIA
271     #define WXDLLIMPEXP_FWD_STC       WXDLLIMPEXP_STC
272 #endif
273 
274 #endif /* _WX_DLIMPEXP_H_ */
275 
276