X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5f9c3802c194876119112b727f8568301e5a7a9d..6f41c10973643552837c6bd38b23779e65a2eaa3:/include/wx/dlimpexp.h?ds=sidebyside

diff --git a/include/wx/dlimpexp.h b/include/wx/dlimpexp.h
index d7495ecb9b..9e497270e1 100644
--- a/include/wx/dlimpexp.h
+++ b/include/wx/dlimpexp.h
@@ -22,14 +22,25 @@
 #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__)
@@ -46,11 +57,6 @@
 #        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)
@@ -86,9 +92,12 @@
 #    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 */
 
 /*
@@ -131,12 +140,23 @@
 #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
@@ -204,12 +224,23 @@
 #    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
@@ -229,11 +260,25 @@
 #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
 
 /*
@@ -253,9 +298,11 @@
     #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
@@ -267,9 +314,11 @@
     #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 */