#elif defined(__WINDOWS__)
/*
__declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well
- as VC++ and gcc
+ as VC++.
*/
-# if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__)
+# if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__WATCOMC__)
# define WXEXPORT __declspec(dllexport)
# define WXIMPORT __declspec(dllimport)
-# else /* compiler doesn't support __declspec() */
-# define WXEXPORT
-# define WXIMPORT
+ /*
+ While gcc also supports __declspec(dllexport), it creates unusably huge
+ DLL files since gcc 4.5 (while taking horribly long amounts of time),
+ see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43601. Because of this
+ we rely on binutils auto export/import support which seems to work
+ quite well for 4.5+.
+ */
+# elif defined(__GNUC__) && !wxCHECK_GCC_VERSION(4, 5)
+ /*
+ __declspec could be used here too but let's use the native
+ __attribute__ instead for clarity.
+ */
+# define WXEXPORT __attribute__((dllexport))
+# define WXIMPORT __attribute__((dllimport))
# endif
#elif defined(__WXPM__)
# if defined (__WATCOMC__)
# define WXEXPORT _Export
# define WXIMPORT _Export
# endif
-#elif defined(__WXMAC__) || defined(__WXCOCOA__)
-# ifdef __MWERKS__
-# define WXEXPORT __declspec(export)
-# define WXIMPORT __declspec(import)
-# endif
#elif defined(__CYGWIN__)
# define WXEXPORT __declspec(dllexport)
# define WXIMPORT __declspec(dllimport)
# define WXMAKINGDLL_XML
# define WXMAKINGDLL_XRC
# define WXMAKINGDLL_AUI
+# define WXMAKINGDLL_RIBBON
+# define WXMAKINGDLL_PROPGRID
# define WXMAKINGDLL_RICHTEXT
# define WXMAKINGDLL_MEDIA
# define WXMAKINGDLL_STC
+# define WXMAKINGDLL_WEBVIEW
#endif /* WXMAKINGDLL */
/*
#ifdef WXMAKINGDLL_BASE
# define WXDLLIMPEXP_BASE WXEXPORT
# define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type
+# if defined(HAVE_VISIBILITY)
+# define WXDLLIMPEXP_INLINE_BASE WXEXPORT
+# else
+# define WXDLLIMPEXP_INLINE_BASE
+# endif
#elif defined(WXUSINGDLL)
# define WXDLLIMPEXP_BASE WXIMPORT
# define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type
+# if defined(HAVE_VISIBILITY)
+# define WXDLLIMPEXP_INLINE_BASE WXIMPORT
+# else
+# define WXDLLIMPEXP_INLINE_BASE
+# endif
#else /* not making nor using DLL */
# define WXDLLIMPEXP_BASE
# define WXDLLIMPEXP_DATA_BASE(type) type
+# define WXDLLIMPEXP_INLINE_BASE
#endif
#ifdef WXMAKINGDLL_NET
#ifdef WXMAKINGDLL_CORE
# define WXDLLIMPEXP_CORE WXEXPORT
# define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type
+# if defined(HAVE_VISIBILITY)
+# define WXDLLIMPEXP_INLINE_CORE WXEXPORT
+# else
+# define WXDLLIMPEXP_INLINE_CORE
+# endif
#elif defined(WXUSINGDLL)
# define WXDLLIMPEXP_CORE WXIMPORT
# define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type
+# if defined(HAVE_VISIBILITY)
+# define WXDLLIMPEXP_INLINE_CORE WXIMPORT
+# else
+# define WXDLLIMPEXP_INLINE_CORE
+# endif
#else /* not making nor using DLL */
# define WXDLLIMPEXP_CORE
# define WXDLLIMPEXP_DATA_CORE(type) type
+# define WXDLLIMPEXP_INLINE_CORE
#endif
#ifdef WXMAKINGDLL_ADV
# define WXDLLIMPEXP_AUI
#endif
+#ifdef WXMAKINGDLL_RIBBON
+# define WXDLLIMPEXP_RIBBON WXEXPORT
+#elif defined(WXUSINGDLL)
+# define WXDLLIMPEXP_RIBBON WXIMPORT
+#else /* not making nor using DLL */
+# define WXDLLIMPEXP_RIBBON
+#endif
+
+#ifdef WXMAKINGDLL_PROPGRID
+# define WXDLLIMPEXP_PROPGRID WXEXPORT
+# define WXDLLIMPEXP_DATA_PROPGRID(type) WXEXPORT type
+#elif defined(WXUSINGDLL)
+# define WXDLLIMPEXP_PROPGRID WXIMPORT
+# define WXDLLIMPEXP_DATA_PROPGRID(type) WXIMPORT type
+#else /* not making nor using DLL */
+# define WXDLLIMPEXP_PROPGRID
+# define WXDLLIMPEXP_DATA_PROPGRID(type) type
+#endif
+
#ifdef WXMAKINGDLL_RICHTEXT
# define WXDLLIMPEXP_RICHTEXT WXEXPORT
#elif defined(WXUSINGDLL)
#endif
#ifdef WXMAKINGDLL_STC
- #define WXDLLIMPEXP_STC WXEXPORT
+# define WXDLLIMPEXP_STC WXEXPORT
+# define WXDLLIMPEXP_DATA_STC(type) WXEXPORT type
+#elif defined(WXUSINGDLL)
+# define WXDLLIMPEXP_STC WXIMPORT
+# define WXDLLIMPEXP_DATA_STC(type) WXIMPORT type
+#else /* not making nor using DLL */
+# define WXDLLIMPEXP_STC
+# define WXDLLIMPEXP_DATA_STC(type) type
+#endif
+
+#ifdef WXMAKINGDLL_WEBVIEW
+# define WXDLLIMPEXP_WEBVIEW WXEXPORT
+# define WXDLLIMPEXP_DATA_WEBVIEW(type) WXEXPORT type
#elif defined(WXUSINGDLL)
- #define WXDLLIMPEXP_STC WXIMPORT
+# define WXDLLIMPEXP_WEBVIEW WXIMPORT
+# define WXDLLIMPEXP_DATA_WEBVIEW(type) WXIMPORT type
#else /* not making nor using DLL */
- #define WXDLLIMPEXP_STC
+# define WXDLLIMPEXP_WEBVIEW
+# define WXDLLIMPEXP_DATA_WEBVIEW(type) type
#endif
/*
#define WXDLLIMPEXP_FWD_XML
#define WXDLLIMPEXP_FWD_XRC
#define WXDLLIMPEXP_FWD_AUI
+ #define WXDLLIMPEXP_FWD_PROPGRID
#define WXDLLIMPEXP_FWD_RICHTEXT
#define WXDLLIMPEXP_FWD_MEDIA
#define WXDLLIMPEXP_FWD_STC
+ #define WXDLLIMPEXP_FWD_WEBVIEW
#else
#define WXDLLIMPEXP_FWD_BASE WXDLLIMPEXP_BASE
#define WXDLLIMPEXP_FWD_NET WXDLLIMPEXP_NET
#define WXDLLIMPEXP_FWD_XML WXDLLIMPEXP_XML
#define WXDLLIMPEXP_FWD_XRC WXDLLIMPEXP_XRC
#define WXDLLIMPEXP_FWD_AUI WXDLLIMPEXP_AUI
+ #define WXDLLIMPEXP_FWD_PROPGRID WXDLLIMPEXP_PROPGRID
#define WXDLLIMPEXP_FWD_RICHTEXT WXDLLIMPEXP_RICHTEXT
#define WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_MEDIA
#define WXDLLIMPEXP_FWD_STC WXDLLIMPEXP_STC
+ #define WXDLLIMPEXP_FWD_WEBVIEW WXDLLIMPEXP_WEBVIEW
#endif
/* for backwards compatibility, define suffix-less versions too */
template <typename T> class Foo { ... };
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( Foo<int> )
- (notice that currently we only need this for the wxBase library)
+ (notice that currently we only need this for wxBase and wxCore libraries)
*/
#if defined(__VISUALC__) && (__VISUALC__ <= 1200)
#ifdef WXMAKINGDLL_BASE
#define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \
template class WXDLLIMPEXP_BASE decl;
+ #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl) \
+ template class WXDLLIMPEXP_CORE decl;
#else
/*
We need to disable this warning when using this macro, as
#define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \
extern template class WXDLLIMPEXP_BASE decl;
+ #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl) \
+ extern template class WXDLLIMPEXP_CORE decl;
#endif
#else /* not VC <= 6 */
#define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl)
+ #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl)
#endif /* VC6/others */
#endif /* _WX_DLIMPEXP_H_ */