summaryrefslogtreecommitdiff
path: root/TelepathyQt/global.h.in
blob: 6b8ec44074f6833484038578cf56918d02460cb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/**
 * This file is part of TelepathyQt
 *
 * @copyright Copyright (C) 2009 Collabora Ltd. <http://www.collabora.co.uk/>
 * @copyright Copyright (C) 2009 Nokia Corporation
 * @license LGPL 2.1
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#ifndef _TelepathyQt_global_h_HEADER_GUARD_
#define _TelepathyQt_global_h_HEADER_GUARD_

#ifndef IN_TP_QT_HEADER
#error IN_TP_QT_HEADER
#endif

#include <QtGlobal>

#define TP_QT_MAJOR_VERSION @TP_QT_MAJOR_VERSION@
#define TP_QT_MINOR_VERSION @TP_QT_MINOR_VERSION@
#define TP_QT_MICRO_VERSION @TP_QT_MICRO_VERSION@
#define TP_QT_VERSION ((TP_QT_MAJOR_VERSION<<16)|(TP_QT_MINOR_VERSION<<8)|(TP_QT_MICRO_VERSION))

/**
 * @def TP_QT_VERSION_CHECK
 * @ingroup macros
 *
 * The TP_QT_VERSION_CHECK macro can be used to do condition compilation
 * in TelepathyQt-based applications and libraries.
 *
 * \code
 * #if (TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 6))
 *     Tp::BaseConnectionAvatarsInterfacePtr avatarsIface;
 * #endif
 * \endcode
 */
#define TP_QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))

#ifdef BUILDING_TP_QT
#  define TP_QT_EXPORT Q_DECL_EXPORT
#else
#  define TP_QT_EXPORT Q_DECL_IMPORT
#endif

#if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE)
#  define TP_QT_NO_EXPORT __attribute__((visibility("hidden")))
#endif

#ifndef TP_QT_NO_EXPORT
#  define TP_QT_NO_EXPORT
#endif

/**
 * @def TP_QT_DEPRECATED
 * @ingroup macros
 *
 * The TP_QT_DEPRECATED macro can be used to trigger compile-time
 * warnings with newer compilers when deprecated functions are used.
 *
 * For non-inline functions, the macro gets inserted at front of the
 * function declaration, right before the return type:
 *
 * \code
 * TP_QT_DEPRECATED void deprecatedFunctionA();
 * TP_QT_DEPRECATED int deprecatedFunctionB() const;
 * \endcode
 *
 * For functions which are implemented inline,
 * the TP_QT_DEPRECATED macro is inserted at the front, right before the
 * return type, but after "static", "inline" or "virtual":
 *
 * \code
 * TP_QT_DEPRECATED void deprecatedInlineFunctionA() { .. }
 * virtual TP_QT_DEPRECATED int deprecatedInlineFunctionB() { .. }
 * static TP_QT_DEPRECATED bool deprecatedInlineFunctionC() { .. }
 * inline TP_QT_DEPRECATED bool deprecatedInlineFunctionD() { .. }
 * \endcode
 *
 * You can also mark whole structs or classes as deprecated, by inserting the
 * TP_QT_DEPRECATED macro after the struct/class keyword, but before the
 * name of the struct/class:
 *
 * \code
 * class TP_QT_DEPRECATED DeprecatedClass { };
 * struct TP_QT_DEPRECATED DeprecatedStruct { };
 * \endcode
 *
 * \note If the class you want to deprecate is a QObject and needs to be exported,
 *       you should use TP_QT_EXPORT_DEPRECATED instead.
 *
 * \note
 * It does not make much sense to use the TP_QT_DEPRECATED keyword for a
 * Qt signal; this is because usually get called by the class which they belong
 * to, and one would assume that a class author does not use deprecated methods
 * of his own class. The only exception to this are signals which are connected
 * to other signals; they get invoked from moc-generated code. In any case,
 * printing a warning message in either case is not useful.
 * For slots, it can make sense (since slots can be invoked directly) but be
 * aware that if the slots get triggered by a signal, they will get called from
 * moc code as well and thus the warnings are useless.
 *
 * \note
 * TP_QT_DEPRECATED cannot be used for constructors.
 */
#ifndef TP_QT_DEPRECATED
#  ifdef TP_QT_DEPRECATED_WARNINGS
#    ifdef BUILDING_TP_QT
#      define TP_QT_DEPRECATED
#    else
#      define TP_QT_DEPRECATED Q_DECL_DEPRECATED
#    endif
#  else
#    define TP_QT_DEPRECATED
#  endif
#endif

/**
 * @def TP_QT_EXPORT_DEPRECATED
 * @ingroup macros
 *
 * The TP_QT_EXPORT_DEPRECATED macro can be used to trigger compile-time
 * warnings with newer compilers when deprecated functions are used, and
 * export the symbol.
 *
 * This macro simply expands to TP_QT_DEPRECATED TP_QT_EXPORT, and needs
 * to be used only when you need to deprecate a class which is a QObject
 * and needs to be exported. This is because the following:
 *
 * \code
 * class TP_QT_DEPRECATED TP_QT_EXPORT Class : public QObject
 * \endcode
 *
 * Wouldn't be recognized from moc to be a valid QObject class, and hence
 * would be skipped. Instead, you should do:
 *
 * \code
 * class TP_QT_EXPORT_DEPRECATED Class : public QObject
 * \endcode
 *
 * For any other use, please use TP_QT_DEPRECATED instead.
 */
#ifndef TP_QT_EXPORT_DEPRECATED
#  define TP_QT_EXPORT_DEPRECATED TP_QT_DEPRECATED TP_QT_EXPORT
#endif

#endif