4#if !defined(QVERSIONTAGGING_H)
5#define QVERSIONTAGGING_H
7#include <QtCore/qcompilerdetection.h>
8#include <QtCore/qtconfigmacros.h>
9#include <QtCore/qtversionchecks.h>
10#include <QtCore/qtypes.h>
78#if !defined(QT_NO_VERSION_TAGGING) && (defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_STATIC))
80# define QT_NO_VERSION_TAGGING
84# ifdef Q_PROCESSOR_X86_32
86# define QT_MANGLE_IMPORT_PREFIX _imp__
89# define QT_MANGLE_IMPORT_PREFIX __imp_
91# if defined(Q_CC_MSVC_ONLY)
92# pragma section(".qtversion",read,shared)
93# define QT_VERSION_TAG_SECTION __declspec(allocate(".qtversion"))
94# define QT_VERSION_TAG_ATTRIBUTE __declspec(selectany) extern const
96# define QT_VERSION_TAG_ATTRIBUTE __attribute__((used)) constexpr inline
98# define QT_VERSION_TAG2(sym, imp) \
99 extern "C" const char * const imp; \
100 QT_VERSION_TAG_ATTRIBUTE QT_VERSION_TAG_SECTION QtPrivate::QVersionTag sym ## _used(&imp)
101# define QT_VERSION_TAG(sym, imp) QT_VERSION_TAG2(sym, imp)
102#elif defined(Q_CC_GNU) && __has_attribute(used)
104# define QT_VERSION_TAG_SECTION __attribute__((section("__DATA,.qtversion")))
106# define QT_VERSION_TAG_ATTRIBUTE __attribute__((visibility("hidden"), used))
107# define QT_VERSION_TAG2(sym, imp) \
108 extern "C" Q_DECL_IMPORT const char sym; \
109 QT_VERSION_TAG_ATTRIBUTE QT_VERSION_TAG_SECTION constexpr inline QtPrivate::QVersionTag sym ## _use(&sym)
110# define QT_VERSION_TAG(sym, imp) QT_VERSION_TAG2(sym, imp)
114# define QT_VERSION_TAG_SYMBOL(prefix, sym, m, n) sym
116# define QT_VERSION_TAG_SYMBOL2(prefix, sym, m, n) prefix ## sym ## _ ## m ## _ ## n
117# define QT_VERSION_TAG_SYMBOL(prefix, sym, m, n) QT_VERSION_TAG_SYMBOL2(prefix, sym, m, n)
120#if defined(QT_VERSION_TAG) && !defined(QT_NO_VERSION_TAGGING)
121# ifndef QT_VERSION_TAG_SECTION
122# define QT_VERSION_TAG_SECTION __attribute__((section(".qtversion")))
124# define QT_MANGLED_VERSION_TAG_IMPORT QT_VERSION_TAG_SYMBOL(QT_MANGLE_IMPORT_PREFIX, QT_MANGLE_NAMESPACE(qt_version_tag), QT_VERSION_MAJOR, QT_VERSION_MINOR)
125# define QT_MANGLED_VERSION_TAG QT_VERSION_TAG_SYMBOL(, QT_MANGLE_NAMESPACE(qt_version_tag), QT_VERSION_MAJOR, QT_VERSION_MINOR)
127QT_VERSION_TAG(QT_MANGLED_VERSION_TAG, QT_MANGLED_VERSION_TAG_IMPORT);
129# undef QT_MANGLED_VERSION_TAG
130# undef QT_MANGLED_VERSION_TAG_IMPORT
131# undef QT_VERSION_TAG_SECTION
Combined button and popup list for selecting options.
constexpr QVersionTag(const void *sym, int currentVersion=QT_VERSION)