1/* ATK -  Accessibility Toolkit
2 *
3 * Copyright (C) 2012 Igalia, S.L.
4 * Copyright (C) 2014 Chun-wei Fan
5 *
6 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 * Library General Public License for more details.
17 *
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
22 */
23
24#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
25#error "Only <atk/atk.h> can be included directly."
26#endif
27
28#ifndef __ATK_VERSION_H__
29#define __ATK_VERSION_H__
30
31#include <glib.h>
32
33/**
34 * ATK_MAJOR_VERSION:
35 *
36 * Like atk_get_major_version(), but from the headers used at
37 * application compile time, rather than from the library linked
38 * against at application run time.
39 *
40 * Since: 2.7.4
41 */
42#define ATK_MAJOR_VERSION (@ATK_MAJOR_VERSION@)
43
44/**
45 * ATK_MINOR_VERSION:
46 *
47 * Like atk_get_minor_version(), but from the headers used at
48 * application compile time, rather than from the library linked
49 * against at application run time.
50 *
51 * Since: 2.7.4
52 */
53#define ATK_MINOR_VERSION (@ATK_MINOR_VERSION@)
54
55/**
56 * ATK_MICRO_VERSION:
57 *
58 * Like atk_get_micro_version(), but from the headers used at
59 * application compile time, rather than from the library linked
60 * against at application run time.
61 *
62 * Since: 2.7.4
63 */
64#define ATK_MICRO_VERSION (@ATK_MICRO_VERSION@)
65
66/**
67 * ATK_BINARY_AGE:
68 *
69 * Like atk_get_binary_age(), but from the headers used at
70 * application compile time, rather than from the library linked
71 * against at application run time.
72 *
73 * Since: 2.7.4
74 */
75#define ATK_BINARY_AGE    (@ATK_BINARY_AGE@)
76
77/**
78 * ATK_INTERFACE_AGE:
79 *
80 * Like atk_get_interface_age(), but from the headers used at
81 * application compile time, rather than from the library linked
82 * against at application run time.
83 *
84 * Since: 2.7.4
85 */
86#define ATK_INTERFACE_AGE (@ATK_INTERFACE_AGE@)
87
88/**
89 * ATK_CHECK_VERSION:
90 * @major: major version (e.g. 1 for version 1.2.5)
91 * @minor: minor version (e.g. 2 for version 1.2.5)
92 * @micro: micro version (e.g. 5 for version 1.2.5)
93 *
94 * Returns %TRUE if the version of the ATK header files is the same as
95 * or newer than the passed-in version.
96 *
97 * Since: 2.7.4
98 */
99#define ATK_CHECK_VERSION(major,minor,micro)                          \
100    (ATK_MAJOR_VERSION > (major) ||                                   \
101     (ATK_MAJOR_VERSION == (major) && ATK_MINOR_VERSION > (minor)) || \
102     (ATK_MAJOR_VERSION == (major) && ATK_MINOR_VERSION == (minor) && \
103      ATK_MICRO_VERSION >= (micro)))
104
105#ifndef _ATK_EXTERN
106#define _ATK_EXTERN extern
107#endif
108
109/**
110 * ATK_VERSION_2_2:
111 *
112 * A macro that evaluates to the 2.2 version of ATK, in a format
113 * that can be used by the C pre-processor.
114 *
115 * Since: 2.14
116 */
117#define ATK_VERSION_2_2       (G_ENCODE_VERSION (2, 2))
118
119/**
120 * ATK_VERSION_2_4:
121 *
122 * A macro that evaluates to the 2.4 version of ATK, in a format
123 * that can be used by the C pre-processor.
124 *
125 * Since: 2.14
126 */
127#define ATK_VERSION_2_4       (G_ENCODE_VERSION (2, 4))
128
129/**
130 * ATK_VERSION_2_6:
131 *
132 * A macro that evaluates to the 2.6 version of ATK, in a format
133 * that can be used by the C pre-processor.
134 *
135 * Since: 2.14
136 */
137#define ATK_VERSION_2_6       (G_ENCODE_VERSION (2, 6))
138
139/**
140 * ATK_VERSION_2_8:
141 *
142 * A macro that evaluates to the 2.8 version of ATK, in a format
143 * that can be used by the C pre-processor.
144 *
145 * Since: 2.14
146 */
147#define ATK_VERSION_2_8       (G_ENCODE_VERSION (2, 8))
148
149/**
150 * ATK_VERSION_2_10:
151 *
152 * A macro that evaluates to the 2.10 version of ATK, in a format
153 * that can be used by the C pre-processor.
154 *
155 * Since: 2.14
156 */
157
158#define ATK_VERSION_2_10       (G_ENCODE_VERSION (2, 10))
159/**
160 * ATK_VERSION_2_12:
161 *
162 * A macro that evaluates to the 2.12 version of ATK, in a format
163 * that can be used by the C pre-processor.
164 *
165 * Since: 2.14
166 */
167#define ATK_VERSION_2_12       (G_ENCODE_VERSION (2, 12))
168
169/**
170 * ATK_VERSION_2_14:
171 *
172 * A macro that evaluates to the 2.14 version of ATK, in a format
173 * that can be used by the C pre-processor.
174 *
175 * Since: 2.14
176 */
177#define ATK_VERSION_2_14       (G_ENCODE_VERSION (2, 14))
178
179/**
180 * ATK_VERSION_2_30:
181 *
182 * A macro that evaluates to the 2.30 version of ATK, in a format
183 * that can be used by the C pre-processor.
184 *
185 * Since: 2.30
186 */
187#define ATK_VERSION_2_30       (G_ENCODE_VERSION (2, 30))
188
189/**
190 * ATK_VERSION_2_36:
191 *
192 * A macro that evaluates to the 2.36 version of ATK, in a format
193 * that can be used by the C pre-processor.
194 *
195 * Since: 2.36
196 */
197#define ATK_VERSION_2_36       (G_ENCODE_VERSION (2, 36))
198
199/* evaluates to the current stable version; for development cycles,
200 * this means the next stable target
201 */
202#if (ATK_MINOR_VERSION % 2)
203#define ATK_VERSION_CUR_STABLE         (G_ENCODE_VERSION (ATK_MAJOR_VERSION, ATK_MINOR_VERSION + 1))
204#else
205#define ATK_VERSION_CUR_STABLE         (G_ENCODE_VERSION (ATK_MAJOR_VERSION, ATK_MINOR_VERSION))
206#endif
207
208/* evaluates to the previous stable version */
209#if (ATK_MINOR_VERSION % 2)
210#define ATK_VERSION_PREV_STABLE        (G_ENCODE_VERSION (ATK_MAJOR_VERSION, ATK_MINOR_VERSION - 1))
211#else
212#define ATK_VERSION_PREV_STABLE        (G_ENCODE_VERSION (ATK_MAJOR_VERSION, ATK_MINOR_VERSION - 2))
213#endif
214
215/**
216 * ATK_VERSION_MIN_REQUIRED:
217 *
218 * A macro that should be defined by the user prior to including
219 * the atk/atk.h header.
220 * The definition should be one of the predefined ATK version
221 * macros: %ATK_VERSION_2_12, %ATK_VERSION_2_14,...
222 *
223 * This macro defines the earliest version of ATK that the package is
224 * required to be able to compile against.
225 *
226 * If the compiler is configured to warn about the use of deprecated
227 * functions, then using functions that were deprecated in version
228 * %ATK_VERSION_MIN_REQUIRED or earlier will cause warnings (but
229 * using functions deprecated in later releases will not).
230 *
231 * Since: 2.14
232 */
233/* If the package sets ATK_VERSION_MIN_REQUIRED to some future
234 * ATK_VERSION_X_Y value that we don't know about, it will compare as
235 * 0 in preprocessor tests.
236 */
237#ifndef ATK_VERSION_MIN_REQUIRED
238# define ATK_VERSION_MIN_REQUIRED      (ATK_VERSION_CUR_STABLE)
239#elif ATK_VERSION_MIN_REQUIRED == 0
240# undef  ATK_VERSION_MIN_REQUIRED
241# define ATK_VERSION_MIN_REQUIRED      (ATK_VERSION_CUR_STABLE + 2)
242#endif
243
244/**
245 * ATK_VERSION_MAX_ALLOWED:
246 *
247 * A macro that should be defined by the user prior to including
248 * the atk/atk.h header.
249 * The definition should be one of the predefined ATK version
250 * macros: %ATK_VERSION_2_12, %ATK_VERSION_2_14,...
251 *
252 * This macro defines the latest version of the ATK API that the
253 * package is allowed to make use of.
254 *
255 * If the compiler is configured to warn about the use of deprecated
256 * functions, then using functions added after version
257 * %ATK_VERSION_MAX_ALLOWED will cause warnings.
258 *
259 * Unless you are using ATK_CHECK_VERSION() or the like to compile
260 * different code depending on the ATK version, then this should be
261 * set to the same value as %ATK_VERSION_MIN_REQUIRED.
262 *
263 * Since: 2.14
264 */
265#if !defined (ATK_VERSION_MAX_ALLOWED) || (ATK_VERSION_MAX_ALLOWED == 0)
266# undef ATK_VERSION_MAX_ALLOWED
267# define ATK_VERSION_MAX_ALLOWED      (ATK_VERSION_CUR_STABLE)
268#endif
269
270/* sanity checks */
271#if ATK_VERSION_MIN_REQUIRED > ATK_VERSION_CUR_STABLE
272#error "ATK_VERSION_MIN_REQUIRED must be <= ATK_VERSION_CUR_STABLE"
273#endif
274#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_MIN_REQUIRED
275#error "ATK_VERSION_MAX_ALLOWED must be >= ATK_VERSION_MIN_REQUIRED"
276#endif
277#if ATK_VERSION_MIN_REQUIRED < ATK_VERSION_2_2
278#error "ATK_VERSION_MIN_REQUIRED must be >= ATK_VERSION_2_2"
279#endif
280
281/* these macros are used to mark deprecated functions, and thus have to be
282 * exposed in a public header.
283 *
284 * do *not* use them in other libraries depending on Atk: use G_DEPRECATED
285 * and G_DEPRECATED_FOR, or use your own wrappers around them.
286 */
287#ifdef ATK_DISABLE_DEPRECATION_WARNINGS
288#define ATK_DEPRECATED _ATK_EXTERN
289#define ATK_DEPRECATED_FOR(f) _ATK_EXTERN
290#define ATK_UNAVAILABLE(maj,min) _ATK_EXTERN
291#else
292#define ATK_DEPRECATED G_DEPRECATED _ATK_EXTERN
293#define ATK_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _ATK_EXTERN
294#define ATK_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _ATK_EXTERN
295#endif
296
297#define ATK_AVAILABLE_IN_ALL _ATK_EXTERN
298
299/* XXX: Every new stable minor release should add a set of macros here */
300
301#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_2
302# define ATK_DEPRECATED_IN_2_2                ATK_DEPRECATED
303# define ATK_DEPRECATED_IN_2_2_FOR(f)         ATK_DEPRECATED_FOR(f)
304#else
305# define ATK_DEPRECATED_IN_2_2                _ATK_EXTERN
306# define ATK_DEPRECATED_IN_2_2_FOR(f)         _ATK_EXTERN
307#endif
308
309#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_2
310# define ATK_AVAILABLE_IN_2_2                 ATK_UNAVAILABLE(2, 2)
311#else
312# define ATK_AVAILABLE_IN_2_2                 _ATK_EXTERN
313#endif
314
315#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_4
316# define ATK_DEPRECATED_IN_2_4                ATK_DEPRECATED
317# define ATK_DEPRECATED_IN_2_4_FOR(f)         ATK_DEPRECATED_FOR(f)
318#else
319# define ATK_DEPRECATED_IN_2_4                _ATK_EXTERN
320# define ATK_DEPRECATED_IN_2_4_FOR(f)         _ATK_EXTERN
321#endif
322
323#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_4
324# define ATK_AVAILABLE_IN_2_4                 ATK_UNAVAILABLE(2, 4)
325#else
326# define ATK_AVAILABLE_IN_2_4                 _ATK_EXTERN
327#endif
328
329#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_6
330# define ATK_DEPRECATED_IN_2_6                ATK_DEPRECATED
331# define ATK_DEPRECATED_IN_2_6_FOR(f)         ATK_DEPRECATED_FOR(f)
332#else
333# define ATK_DEPRECATED_IN_2_6                _ATK_EXTERN
334# define ATK_DEPRECATED_IN_2_6_FOR(f)         _ATK_EXTERN
335#endif
336
337#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_6
338# define ATK_AVAILABLE_IN_2_6                 ATK_UNAVAILABLE(2, 6)
339#else
340# define ATK_AVAILABLE_IN_2_6                 _ATK_EXTERN
341#endif
342
343#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_8
344# define ATK_DEPRECATED_IN_2_8                ATK_DEPRECATED
345# define ATK_DEPRECATED_IN_2_8_FOR(f)         ATK_DEPRECATED_FOR(f)
346#else
347# define ATK_DEPRECATED_IN_2_8                _ATK_EXTERN
348# define ATK_DEPRECATED_IN_2_8_FOR(f)         _ATK_EXTERN
349#endif
350
351#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_8
352# define ATK_AVAILABLE_IN_2_8                 ATK_UNAVAILABLE(2, 8)
353#else
354# define ATK_AVAILABLE_IN_2_8                 _ATK_EXTERN
355#endif
356
357#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_10
358# define ATK_DEPRECATED_IN_2_10                ATK_DEPRECATED
359# define ATK_DEPRECATED_IN_2_10_FOR(f)         ATK_DEPRECATED_FOR(f)
360#else
361# define ATK_DEPRECATED_IN_2_10                _ATK_EXTERN
362# define ATK_DEPRECATED_IN_2_10_FOR(f)         _ATK_EXTERN
363#endif
364
365#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_10
366# define ATK_AVAILABLE_IN_2_10                 ATK_UNAVAILABLE(2, 10)
367#else
368# define ATK_AVAILABLE_IN_2_10                 _ATK_EXTERN
369#endif
370
371#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_12
372# define ATK_DEPRECATED_IN_2_12                ATK_DEPRECATED
373# define ATK_DEPRECATED_IN_2_12_FOR(f)         ATK_DEPRECATED_FOR(f)
374#else
375# define ATK_DEPRECATED_IN_2_12                _ATK_EXTERN
376# define ATK_DEPRECATED_IN_2_12_FOR(f)         _ATK_EXTERN
377#endif
378
379#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_12
380# define ATK_AVAILABLE_IN_2_12                 ATK_UNAVAILABLE(2, 12)
381#else
382# define ATK_AVAILABLE_IN_2_12                 _ATK_EXTERN
383#endif
384
385#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_14
386# define ATK_DEPRECATED_IN_2_14                ATK_DEPRECATED
387# define ATK_DEPRECATED_IN_2_14_FOR(f)         ATK_DEPRECATED_FOR(f)
388#else
389# define ATK_DEPRECATED_IN_2_14                _ATK_EXTERN
390# define ATK_DEPRECATED_IN_2_14_FOR(f)         _ATK_EXTERN
391#endif
392
393#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_14
394# define ATK_AVAILABLE_IN_2_14                 ATK_UNAVAILABLE(2, 14)
395#else
396# define ATK_AVAILABLE_IN_2_14                 _ATK_EXTERN
397#endif
398
399#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_30
400# define ATK_DEPRECATED_IN_2_30                ATK_DEPRECATED
401# define ATK_DEPRECATED_IN_2_30_FOR(f)         ATK_DEPRECATED_FOR(f)
402#else
403# define ATK_DEPRECATED_IN_2_30                _ATK_EXTERN
404# define ATK_DEPRECATED_IN_2_30_FOR(f)         _ATK_EXTERN
405#endif
406
407#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_30
408# define ATK_AVAILABLE_IN_2_30                 ATK_UNAVAILABLE(2, 30)
409#else
410# define ATK_AVAILABLE_IN_2_30                 _ATK_EXTERN
411#endif
412
413#if ATK_VERSION_MIN_REQUIRED >= ATK_VERSION_2_36
414# define ATK_DEPRECATED_IN_2_36                ATK_DEPRECATED
415# define ATK_DEPRECATED_IN_2_36_FOR(f)         ATK_DEPRECATED_FOR(f)
416#else
417# define ATK_DEPRECATED_IN_2_36                _ATK_EXTERN
418# define ATK_DEPRECATED_IN_2_36_FOR(f)         _ATK_EXTERN
419#endif
420
421#if ATK_VERSION_MAX_ALLOWED < ATK_VERSION_2_36
422# define ATK_AVAILABLE_IN_2_36                 ATK_UNAVAILABLE(2, 36)
423#else
424# define ATK_AVAILABLE_IN_2_36                 _ATK_EXTERN
425#endif
426
427ATK_AVAILABLE_IN_2_8
428guint atk_get_major_version (void) G_GNUC_CONST;
429ATK_AVAILABLE_IN_2_8
430guint atk_get_minor_version (void) G_GNUC_CONST;
431ATK_AVAILABLE_IN_2_8
432guint atk_get_micro_version (void) G_GNUC_CONST;
433ATK_AVAILABLE_IN_2_8
434guint atk_get_binary_age    (void) G_GNUC_CONST;
435ATK_AVAILABLE_IN_2_8
436guint atk_get_interface_age (void) G_GNUC_CONST;
437
438#define atk_major_version atk_get_major_version ()
439#define atk_minor_version atk_get_minor_version ()
440#define atk_micro_version atk_get_micro_version ()
441#define atk_binary_age atk_get_binary_age ()
442#define atk_interface_age atk_get_interface_age ()
443
444#endif /* __ATK_VERSION_H__ */
445