From 4bc048be257a08bf7878456cddba2f8db412cf39 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 29 Aug 2012 12:09:31 +0200 Subject: [PATCH] Let qVersion() be extern "C" if this is not a namespace build This allows one to even dlopen() QtCore and call qVersion, to figure out which version it is. A bit crazy, but someone might want to do it. Change-Id: I932460515d07bed3f0e41c8ab2b46fc268ca73ff Reviewed-by: Qt Doc Bot Reviewed-by: Oswald Buddenhagen Reviewed-by: Olivier Goffart Reviewed-by: Lars Knoll --- src/corelib/global/qglobal.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index ac67d33..66b5049 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -333,6 +333,19 @@ typedef double qreal; do { extern int QT_MANGLE_NAMESPACE(qCleanupResources_ ## name) (); \ QT_MANGLE_NAMESPACE(qCleanupResources_ ## name) (); } while (0) +/* + * If we're compiling C++ code: + * - and this is a non-namespace build, declare qVersion as extern "C" + * - and this is a namespace build, declare it as a regular function + * (we're already inside QT_BEGIN_NAMESPACE / QT_END_NAMESPACE) + * If we're compiling C code, simply declare the function. If Qt was compiled + * in a namespace, qVersion isn't callable anyway. + */ +#if !defined(QT_NAMESPACE) && defined(__cplusplus) && !defined(Q_QDOC) +extern "C" +#endif +Q_CORE_EXPORT const char *qVersion() Q_DECL_NOTHROW; + #if defined(__cplusplus) #ifndef Q_CONSTRUCTOR_FUNCTION @@ -558,7 +571,6 @@ Q_NORETURN Q_CORE_EXPORT void qTerminate() Q_DECL_NOTHROW; # endif #endif -Q_CORE_EXPORT const char *qVersion() Q_DECL_NOTHROW; Q_CORE_EXPORT bool qSharedBuild() Q_DECL_NOTHROW; #ifndef Q_OUTOFLINE_TEMPLATE -- 2.7.4