X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0ff20b9f009c108493550d259b0c78dc44dcfdff..10d302224e3555520f3e3c29d4dc7b7a9654b295:/include/wx/dlimpexp.h diff --git a/include/wx/dlimpexp.h b/include/wx/dlimpexp.h index e2baeb9f04..13078ba563 100644 --- a/include/wx/dlimpexp.h +++ b/include/wx/dlimpexp.h @@ -16,7 +16,10 @@ #ifndef _WX_DLIMPEXP_H_ #define _WX_DLIMPEXP_H_ -#if defined(__WINDOWS__) +#if defined(HAVE_VISIBILITY) +# define WXEXPORT __attribute__ ((visibility("default"))) +# define WXIMPORT __attribute__ ((visibility("default"))) +#elif defined(__WINDOWS__) /* __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well as VC++ and gcc @@ -51,9 +54,6 @@ #elif defined(__CYGWIN__) # define WXEXPORT __declspec(dllexport) # define WXIMPORT __declspec(dllimport) -#elif defined(HAVE_VISIBILITY) -# define WXEXPORT __attribute__ ((visibility("default"))) -# define WXIMPORT #endif /* for other platforms/compilers we don't anything */ @@ -81,8 +81,6 @@ # define WXMAKINGDLL_CORE # define WXMAKINGDLL_ADV # define WXMAKINGDLL_QA -# define WXMAKINGDLL_ODBC -# define WXMAKINGDLL_DBGRID # define WXMAKINGDLL_HTML # define WXMAKINGDLL_GL # define WXMAKINGDLL_XML @@ -141,17 +139,6 @@ # define WXDLLIMPEXP_DATA_ADV(type) type #endif -#ifdef WXMAKINGDLL_ODBC -# define WXDLLIMPEXP_ODBC WXEXPORT -# define WXDLLIMPEXP_DATA_ODBC(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_ODBC WXIMPORT -# define WXDLLIMPEXP_DATA_ODBC(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_ODBC -# define WXDLLIMPEXP_DATA_ODBC(type) type -#endif - #ifdef WXMAKINGDLL_QA # define WXDLLIMPEXP_QA WXEXPORT # define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type @@ -163,17 +150,6 @@ # define WXDLLIMPEXP_DATA_QA(type) type #endif -#ifdef WXMAKINGDLL_DBGRID -# define WXDLLIMPEXP_DBGRID WXEXPORT -# define WXDLLIMPEXP_DATA_DBGRID(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_DBGRID WXIMPORT -# define WXDLLIMPEXP_DATA_DBGRID(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_DBGRID -# define WXDLLIMPEXP_DATA_DBGRID(type) type -#endif - #ifdef WXMAKINGDLL_HTML # define WXDLLIMPEXP_HTML WXEXPORT # define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type @@ -241,16 +217,18 @@ #define WXDLLIMPEXP_STC #endif -/* GCC warns about using __attribute__ on forward declarations, so we need - another set of macros for them: */ -#if defined(HAVE_VISIBILITY) +/* + GCC warns about using __attribute__ (and also __declspec in mingw32 case) on + forward declarations while MSVC complains about forward declarations without + __declspec for the classes later declared with it, so we need a separate set + of macros for forward declarations to hide this difference: + */ +#if defined(HAVE_VISIBILITY) || (defined(__WINDOWS__) && defined(__GNUC__)) #define WXDLLIMPEXP_FWD_BASE #define WXDLLIMPEXP_FWD_NET #define WXDLLIMPEXP_FWD_CORE #define WXDLLIMPEXP_FWD_ADV #define WXDLLIMPEXP_FWD_QA - #define WXDLLIMPEXP_FWD_ODBC - #define WXDLLIMPEXP_FWD_DBGRID #define WXDLLIMPEXP_FWD_HTML #define WXDLLIMPEXP_FWD_GL #define WXDLLIMPEXP_FWD_XML @@ -265,8 +243,6 @@ #define WXDLLIMPEXP_FWD_CORE WXDLLIMPEXP_CORE #define WXDLLIMPEXP_FWD_ADV WXDLLIMPEXP_ADV #define WXDLLIMPEXP_FWD_QA WXDLLIMPEXP_QA - #define WXDLLIMPEXP_FWD_ODBC WXDLLIMPEXP_ODBC - #define WXDLLIMPEXP_FWD_DBGRID WXDLLIMPEXP_DBGRID #define WXDLLIMPEXP_FWD_HTML WXDLLIMPEXP_HTML #define WXDLLIMPEXP_FWD_GL WXDLLIMPEXP_GL #define WXDLLIMPEXP_FWD_XML WXDLLIMPEXP_XML @@ -281,5 +257,34 @@ #define WXDLLEXPORT WXDLLIMPEXP_CORE #define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE +/* + MSVC up to 6.0 needs to be explicitly told to export template instantiations + used by the DLL clients, use this macro to do it like this: + + template class Foo { ... }; + WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( Foo ) + + (notice that currently we only need this for the wxBase library) + */ +#if defined(__VISUALC__) && (__VISUALC__ <= 1200) + #ifdef WXMAKINGDLL_BASE + #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \ + template class WXDLLIMPEXP_BASE decl; + #else + /* + We need to disable this warning when using this macro, as + recommended by Microsoft itself: + + http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b168958 + */ + #pragma warning(disable:4231) + + #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \ + extern template class WXDLLIMPEXP_BASE decl; + #endif +#else /* not VC <= 6 */ + #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) +#endif /* VC6/others */ + #endif /* _WX_DLIMPEXP_H_ */