summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qcompilerdetection.h
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-03-28 16:21:40 -0300
committerQt by Nokia <qt-info@nokia.com>2012-04-21 05:09:20 +0200
commit4d55ba046c8485e632fd7d86152c8f505e4145c7 (patch)
tree3472990610ec13d8305b26684314c9bd8b5d9e4f /src/corelib/global/qcompilerdetection.h
parent32758d917e3a7fd0d2e344d89d9ccaf0361326d8 (diff)
Move Q_DECL_{IMPORT,EXPORT,HIDDEN} to qcompilerdetection.h
Mindful of QT_VISIBILITY_AVAILABLE and Q_OS_WIN for GCC: when GCC is used on Windows (i.e., MinGW or potentially Cygwin), use the declspec variant so we produce proper DLL imports and exports. When used on other platforms, rely on configure adding QT_VISIBILITY_AVAILABLE to qconfig.h, which confirms that the -fvisibility argument is available. That flag has been available since GCC 4.0 on ELF targets, but it could be missing on some other targets. Change-Id: I3dbc0043c1eaee0c469c5b1dc8bf05842fe9cd47 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/global/qcompilerdetection.h')
-rw-r--r--src/corelib/global/qcompilerdetection.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index d6267b52b3..c48f3da84d 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -93,6 +93,8 @@
# define Q_UNREACHABLE() __assume(0)
# define Q_NORETURN __declspec(noreturn)
# define Q_DECL_DEPRECATED __declspec(deprecated)
+# define Q_DECL_EXPORT __declspec(dllexport)
+# define Q_DECL_IMPORT __declspec(dllimport)
/* Intel C++ disguising as Visual C++: the `using' keyword avoids warnings */
# if defined(__INTEL_COMPILER)
# define Q_DECL_VARIABLE_DEPRECATED
@@ -143,6 +145,15 @@
# define __is_empty(X) false
# define __is_pod(X) false
# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
+# ifdef Q_OS_LINUX
+# define Q_DECL_EXPORT __attribute__((visibility("default")))
+# define Q_DECL_IMPORT __attribute__((visibility("default")))
+# define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
+# else
+# define Q_DECL_EXPORT __declspec(dllexport)
+# define Q_DECL_IMPORT __declspec(dllimport)
+# endif
+
#elif defined(__GNUC__)
# define Q_CC_GNU
# define Q_C_CALLBACKS
@@ -167,6 +178,15 @@
# endif
# endif
+# ifdef Q_OS_WIN
+# define Q_DECL_EXPORT __declspec(dllexport)
+# define Q_DECL_IMPORT __declspec(dllimport)
+# elif defined(QT_VISIBILITY_AVAILABLE)
+# define Q_DECL_EXPORT __attribute__((visibility("default")))
+# define Q_DECL_IMPORT __attribute__((visibility("default")))
+# define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
+# endif
+
# define Q_ALIGNOF(type) __alignof__(type)
# define Q_TYPEOF(expr) __typeof__(expr)
# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
@@ -649,6 +669,15 @@
#ifndef Q_DECL_VARIABLE_DEPRECATED
# define Q_DECL_VARIABLE_DEPRECATED Q_DECL_DEPRECATED
#endif
+#ifndef Q_DECL_EXPORT
+# define Q_DECL_EXPORT
+#endif
+#ifndef Q_DECL_IMPORT
+# define Q_DECL_IMPORT
+#endif
+#ifndef Q_DECL_HIDDEN
+# define Q_DECL_HIDDEN
+#endif
/*
Workaround for static const members on MSVC++.