Move Q_DECL_{IMPORT,EXPORT,HIDDEN} to qcompilerdetection.h
authorThiago Macieira <thiago.macieira@intel.com>
Wed, 28 Mar 2012 19:21:40 +0000 (16:21 -0300)
committerQt by Nokia <qt-info@nokia.com>
Sat, 21 Apr 2012 03:09:20 +0000 (05:09 +0200)
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>
src/corelib/global/qcompilerdetection.h
src/corelib/global/qglobal.h

index d6267b5..c48f3da 100644 (file)
@@ -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
 #  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
 #    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__))
 #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++.
index e50e5d5..768cf5a 100644 (file)
@@ -456,35 +456,6 @@ class QDataStream;
 
 #define QT_SUPPORTS(FEATURE) (!defined(QT_NO_##FEATURE))
 
-#if defined(Q_OS_LINUX) && defined(Q_CC_RVCT)
-#  define Q_DECL_EXPORT     __attribute__((visibility("default")))
-#  define Q_DECL_IMPORT     __attribute__((visibility("default")))
-#  define Q_DECL_HIDDEN     __attribute__((visibility("hidden")))
-#endif
-
-#ifndef Q_DECL_EXPORT
-#  if defined(Q_OS_WIN) || defined(Q_CC_RVCT)
-#    define Q_DECL_EXPORT __declspec(dllexport)
-#  elif defined(QT_VISIBILITY_AVAILABLE)
-#    define Q_DECL_EXPORT __attribute__((visibility("default")))
-#    define Q_DECL_HIDDEN __attribute__((visibility("hidden")))
-#  endif
-#  ifndef Q_DECL_EXPORT
-#    define Q_DECL_EXPORT
-#  endif
-#endif
-#ifndef Q_DECL_IMPORT
-#  if defined(Q_OS_WIN) || defined(Q_CC_RVCT)
-#    define Q_DECL_IMPORT __declspec(dllimport)
-#  else
-#    define Q_DECL_IMPORT
-#  endif
-#endif
-#ifndef Q_DECL_HIDDEN
-#  define Q_DECL_HIDDEN
-#endif
-
-
 /*
    Create Qt DLL if QT_DLL is defined (Windows only)
 */