]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dlimpexp.h
Build fix for wxOSX after removing position in MacCreateKeyEvent().
[wxWidgets.git] / include / wx / dlimpexp.h
index 13078ba56349ea0fc72eef08715a8e7e4c218d3c..9e497270e1a2649b91ccf669dfd1c1bab2fec1c5 100644 (file)
 #elif defined(__WINDOWS__)
     /*
        __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well
 #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)
 #        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__)
 #    endif
 #elif defined(__WXPM__)
 #    if defined (__WATCOMC__)
 #        define WXEXPORT _Export
 #        define WXIMPORT _Export
 #    endif
 #        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)
 #elif defined(__CYGWIN__)
 #    define WXEXPORT __declspec(dllexport)
 #    define WXIMPORT __declspec(dllimport)
@@ -67,7 +73,7 @@
    support arbitrary combinations of libs/DLLs: either we build all of them as
    DLLs (in which case WXMAKINGDLL is defined) or none (it isn't).
 
    support arbitrary combinations of libs/DLLs: either we build all of them as
    DLLs (in which case WXMAKINGDLL is defined) or none (it isn't).
 
-   However we have a problem because we need separate WXDLLEXPORT versions for
+   However we have a problem because we need separate WXDLLIMPEXP versions for
    different libraries as, for example, wxString class should be dllexported
    when compiled in wxBase and dllimported otherwise, so we do define separate
    WXMAKING/USINGDLL_XYZ constants for each component XYZ.
    different libraries as, for example, wxString class should be dllexported
    when compiled in wxBase and dllimported otherwise, so we do define separate
    WXMAKING/USINGDLL_XYZ constants for each component XYZ.
 #    define WXMAKINGDLL_XML
 #    define WXMAKINGDLL_XRC
 #    define WXMAKINGDLL_AUI
 #    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_RICHTEXT
 #    define WXMAKINGDLL_MEDIA
 #    define WXMAKINGDLL_STC
+#    define WXMAKINGDLL_WEBVIEW
 #endif /* WXMAKINGDLL */
 
 /*
 #endif /* WXMAKINGDLL */
 
 /*
-   WXDLLEXPORT maps to export declaration when building the DLL, to import
+   WXDLLIMPEXP_CORE maps to export declaration when building the DLL, to import
    declaration if using it or to nothing at all if we don't use wxWin as DLL
  */
 #ifdef WXMAKINGDLL_BASE
 #    define WXDLLIMPEXP_BASE WXEXPORT
 #    define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type
    declaration if using it or to nothing at all if we don't use wxWin as DLL
  */
 #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
 #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
 #else /* not making nor using DLL */
 #    define WXDLLIMPEXP_BASE
 #    define WXDLLIMPEXP_DATA_BASE(type) type
+#    define WXDLLIMPEXP_INLINE_BASE
 #endif
 
 #ifdef WXMAKINGDLL_NET
 #endif
 
 #ifdef WXMAKINGDLL_NET
 #ifdef WXMAKINGDLL_CORE
 #    define WXDLLIMPEXP_CORE WXEXPORT
 #    define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type
 #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
 #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
 #else /* not making nor using DLL */
 #    define WXDLLIMPEXP_CORE
 #    define WXDLLIMPEXP_DATA_CORE(type) type
+#    define WXDLLIMPEXP_INLINE_CORE
 #endif
 
 #ifdef WXMAKINGDLL_ADV
 #endif
 
 #ifdef WXMAKINGDLL_ADV
 #    define WXDLLIMPEXP_AUI
 #endif
 
 #    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)
 #ifdef WXMAKINGDLL_RICHTEXT
 #    define WXDLLIMPEXP_RICHTEXT WXEXPORT
 #elif defined(WXUSINGDLL)
 #endif
 
 #ifdef WXMAKINGDLL_STC
 #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)
 #elif defined(WXUSINGDLL)
-    #define WXDLLIMPEXP_STC WXIMPORT
+#    define WXDLLIMPEXP_WEBVIEW WXIMPORT
+#    define WXDLLIMPEXP_DATA_WEBVIEW(type) WXIMPORT type
 #else /* not making nor using DLL */
 #else /* not making nor using DLL */
-    #define WXDLLIMPEXP_STC
+#    define WXDLLIMPEXP_WEBVIEW
+#    define WXDLLIMPEXP_DATA_WEBVIEW(type) type
 #endif
 
 /*
 #endif
 
 /*
     #define WXDLLIMPEXP_FWD_XML
     #define WXDLLIMPEXP_FWD_XRC
     #define WXDLLIMPEXP_FWD_AUI
     #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_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
 #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_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_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 */
 #endif
 
 /* for backwards compatibility, define suffix-less versions too */
        template <typename T> class Foo { ... };
        WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( Foo<int> )
 
        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;
  */
 #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
     #else
         /*
            We need to disable this warning when using this macro, as
-           recommended by Microsoft itself: 
+           recommended by Microsoft itself:
 
            http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b168958
          */
 
            http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b168958
          */
 
         #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \
             extern template class WXDLLIMPEXP_BASE decl;
 
         #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)
     #endif
 #else /* not VC <= 6 */
     #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl)
+    #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl)
 #endif /* VC6/others */
 
 #endif /* _WX_DLIMPEXP_H_ */
 #endif /* VC6/others */
 
 #endif /* _WX_DLIMPEXP_H_ */