1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 Intel Corporation.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtCore module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #include "qglobal.h"
41 
42 #define SYM QT_MANGLE_NAMESPACE(qt_version_tag)
43 //#define SSYM QT_STRINGIFY(SYM)
44 
45 #if defined(Q_CC_GNU) && defined(Q_OF_ELF) && !defined(Q_OS_ANDROID)
46 #  define make_versioned_symbol2(sym, m, n, separator)     \
47     Q_CORE_EXPORT extern const char sym ## _ ## m ## _ ## n = 0; \
48     asm(".symver " QT_STRINGIFY(sym) "_" QT_STRINGIFY(m) "_" QT_STRINGIFY(n) ", " \
49         QT_STRINGIFY(sym) separator "Qt_" QT_STRINGIFY(m) "." QT_STRINGIFY(n))
50 #else
51 #  define make_versioned_symbol2(sym, m, n, separator)
52 #endif
53 #define make_versioned_symbol(sym, m, n, separator)    make_versioned_symbol2(sym, m, n, separator)
54 
55 extern "C" {
56 #if QT_VERSION_MINOR > 0
57 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 0, "@");
58 #endif
59 #if QT_VERSION_MINOR > 1
60 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 1, "@");
61 #endif
62 #if QT_VERSION_MINOR > 2
63 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 2, "@");
64 #endif
65 #if QT_VERSION_MINOR > 3
66 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 3, "@");
67 #endif
68 #if QT_VERSION_MINOR > 4
69 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 4, "@");
70 #endif
71 #if QT_VERSION_MINOR > 5
72 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 5, "@");
73 #endif
74 #if QT_VERSION_MINOR > 6
75 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 6, "@");
76 #endif
77 #if QT_VERSION_MINOR > 7
78 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 7, "@");
79 #endif
80 #if QT_VERSION_MINOR > 8
81 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 8, "@");
82 #endif
83 #if QT_VERSION_MINOR > 9
84 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 9, "@");
85 #endif
86 #if QT_VERSION_MINOR > 10
87 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 10, "@");
88 #endif
89 #if QT_VERSION_MINOR > 11
90 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 11, "@");
91 #endif
92 #if QT_VERSION_MINOR > 12
93 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 12, "@");
94 #endif
95 #if QT_VERSION_MINOR > 13
96 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 13, "@");
97 #endif
98 #if QT_VERSION_MINOR > 14
99 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 14, "@");
100 #endif
101 #if QT_VERSION_MINOR > 15
102 make_versioned_symbol(SYM, QT_VERSION_MAJOR, 15, "@");
103 #endif
104 #if QT_VERSION_MINOR > 16
105 // We don't expect there will be a Qt 5.17
106 #  error "Please update this file with more Qt versions."
107 #endif
108 
109 // the default version:
110 make_versioned_symbol(SYM, QT_VERSION_MAJOR, QT_VERSION_MINOR, "@@");
111 }
112