1/* graphene-version.h: Versioning macros
2 *
3 * SPDX-License-Identifier: MIT
4 *
5 * Copyright 2014 Emmanuele Bassi
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 * THE SOFTWARE.
24 */
25
26#pragma once
27
28#if !defined(GRAPHENE_H_INSIDE) && !defined(GRAPHENE_COMPILATION)
29#error "Only graphene.h can be included directly."
30#endif
31
32#include "graphene-version.h"
33
34/**
35 * GRAPHENE_ENCODE_VERSION:
36 * @major: a major version
37 * @minor: a minor version
38 * @micro: a micro version
39 *
40 * Encodes the given components into a value that can be used for
41 * version checks.
42 *
43 * Since: 1.0
44 */
45#define GRAPHENE_ENCODE_VERSION(major,minor,micro) \
46 ((major) << 24 | (minor) << 16 | (micro) << 8)
47
48#define _GRAPHENE_ENCODE_VERSION(maj,min) \
49 ((maj) << 16 | (min) << 8)
50
51#ifdef GRAPHENE_DISABLE_DEPRECATION_WARNINGS
52# define GRAPHENE_DEPRECATED _GRAPHENE_PUBLIC
53# define GRAPHENE_DEPRECATED_FOR(f) _GRAPHENE_PUBLIC
54# define GRAPHENE_UNAVAILABLE(maj,min) _GRAPHENE_PUBLIC
55#else
56# define GRAPHENE_DEPRECATED _GRAPHENE_DEPRECATED _GRAPHENE_PUBLIC
57# define GRAPHENE_DEPRECATED_FOR(f) _GRAPHENE_DEPRECATED_FOR(f) _GRAPHENE_PUBLIC
58# define GRAPHENE_UNAVAILABLE(maj,min) _GRAPHENE_UNAVAILABLE(maj,min) _GRAPHENE_PUBLIC
59#endif
60
61/**
62 * GRAPHENE_VERSION:
63 *
64 * The current version of the library, as encoded through
65 * the %GRAPHENE_ENCODE_VERSION macro. Can be used for version
66 * checking, for instance:
67 *
68 * |[<!-- language="C" -->
69 * #if GRAPHENE_VERSION >= GRAPHENE_ENCODE_VERSION (1, 2, 3)
70 * // code that uses API introduced after version 1.2.3
71 * #endif
72 * ]|
73 *
74 * Since: 1.0
75 */
76#define GRAPHENE_VERSION \
77 GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION, \
78 GRAPHENE_MINOR_VERSION, \
79 GRAPHENE_MICRO_VERSION)
80
81#define GRAPHENE_CHECK_VERSION(major,minor,micro) \
82 ((major) > GRAPHENE_MAJOR_VERSION || \
83 (major) == GRAPHENE_MAJOR_VERSION && (minor) > GRAPHENE_MINOR_VERSION || \
84 (major) == GRAPHENE_MAJOR_VERSION && (minor) == GRAPHENE_MINOR_VERSION && (micro) >= GRAPHENE_MICRO_VERSION)
85
86/* evaluates to the current stable release; for development cycles
87 * this means the next stable target.
88 */
89#if (GRAPHENE_MINOR_VERSION == 99)
90# define GRAPHENE_VERSION_CUR_STABLE (_GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION + 1, 0))
91#elif (GRAPHENE_MINOR_VERSION % 2)
92# define GRAPHENE_VERSION_CUR_STABLE (_GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION, GRAPHENE_MINOR_VERSION + 1))
93#else
94# define GRAPHENE_VERSION_CUR_STABLE (_GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION, GRAPHENE_MINOR_VERSION))
95#endif
96
97/* evaluates to the previous stable version */
98#if (GRAPHENE_MINOR_VERSION == 99)
99# define GRAPHENE_VERSION_PREV_STABLE (_GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION + 1, 0))
100#elif (GRAPHENE_MINOR_VERSION % 2)
101# define GRAPHENE_VERSION_PREV_STABLE (_GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION, GRAPHENE_MINOR_VERSION - 1))
102#else
103# define GRAPHENE_VERSION_PREV_STABLE (_GRAPHENE_ENCODE_VERSION (GRAPHENE_MAJOR_VERSION, GRAPHENE_MINOR_VERSION - 2))
104#endif
105
106/* version defines
107 *
108 * remember to add new macros at the beginning of each development cycle
109 */
110
111#define GRAPHENE_VERSION_1_0 (_GRAPHENE_ENCODE_VERSION (1, 0))
112#define GRAPHENE_VERSION_1_2 (_GRAPHENE_ENCODE_VERSION (1, 2))
113#define GRAPHENE_VERSION_1_4 (_GRAPHENE_ENCODE_VERSION (1, 4))
114#define GRAPHENE_VERSION_1_6 (_GRAPHENE_ENCODE_VERSION (1, 6))
115#define GRAPHENE_VERSION_1_8 (_GRAPHENE_ENCODE_VERSION (1, 8))
116#define GRAPHENE_VERSION_1_10 (_GRAPHENE_ENCODE_VERSION (1, 10))
117
118#ifndef GRAPHENE_VERSION_MIN_REQUIRED
119# define GRAPHENE_VERSION_MIN_REQUIRED (GRAPHENE_VERSION_1_0)
120#endif
121
122#ifndef GRAPHENE_VERSION_MAX_ALLOWED
123# if GRAPHENE_VERSION_MIN_REQUIRED > GRAPHENE_VERSION_PREV_STABLE
124# define GRAPHENE_VERSION_MAX_ALLOWED (GRAPHENE_VERSION_MIN_REQUIRED)
125# else
126# define GRAPHENE_VERSION_MAX_ALLOWED (GRAPHENE_VERSION_CUR_STABLE)
127# endif
128#endif
129
130/* sanity checks */
131#if GRAPHENE_VERSION_MAX_ALLOWED < GRAPHENE_VERSION_MIN_REQUIRED
132# error "GRAPHENE_VERSION_MAX_ALLOWED must be >= GRAPHENE_VERSION_MIN_REQUIRED"
133#endif
134#if GRAPHENE_VERSION_MIN_REQUIRED < GRAPHENE_VERSION_1_0
135# error "GRAPHENE_VERSION_MIN_REQUIRED must be >= GRAPHENE_VERSION_1_0"
136#endif
137
138/* unconditional */
139#define GRAPHENE_DEPRECATED_IN_1_0 GRAPHENE_DEPRECATED
140#define GRAPHENE_DEPRECATED_IN_1_0_FOR(f) GRAPHENE_DEPRECATED_FOR(f)
141#define GRAPHENE_AVAILABLE_IN_1_0 _GRAPHENE_PUBLIC
142
143/* Graphene 1.2 */
144#if GRAPHENE_VERSION_MIN_REQUIRED >= GRAPHENE_VERSION_1_2
145# define GRAPHENE_DEPRECATED_IN_1_2 GRAPHENE_DEPRECATED
146# define GRAPHENE_DEPRECATED_IN_1_2_FOR(f) GRAPHENE_DEPRECATED_FOR(f)
147#else
148# define GRAPHENE_DEPRECATED_IN_1_2 _GRAPHENE_PUBLIC
149# define GRAPHENE_DEPRECATED_IN_1_2_FOR(f) _GRAPHENE_PUBLIC
150#endif
151
152#if GRAPHENE_VERSION_MAX_ALLOWED < GRAPHENE_VERSION_1_2
153# define GRAPHENE_AVAILABLE_IN_1_2 GRAPHENE_UNAVAILABLE(1,2)
154#else
155# define GRAPHENE_AVAILABLE_IN_1_2 _GRAPHENE_PUBLIC
156#endif
157
158/* Graphene 1.4 */
159#if GRAPHENE_VERSION_MIN_REQUIRED >= GRAPHENE_VERSION_1_4
160# define GRAPHENE_DEPRECATED_IN_1_4 GRAPHENE_DEPRECATED
161# define GRAPHENE_DEPRECATED_IN_1_4_FOR(f) GRAPHENE_DEPRECATED_FOR(f)
162#else
163# define GRAPHENE_DEPRECATED_IN_1_4 _GRAPHENE_PUBLIC
164# define GRAPHENE_DEPRECATED_IN_1_4_FOR(f) _GRAPHENE_PUBLIC
165#endif
166
167#if GRAPHENE_VERSION_MAX_ALLOWED < GRAPHENE_VERSION_1_4
168# define GRAPHENE_AVAILABLE_IN_1_4 GRAPHENE_UNAVAILABLE(1,4)
169#else
170# define GRAPHENE_AVAILABLE_IN_1_4 _GRAPHENE_PUBLIC
171#endif
172
173/* Graphene 1.6 */
174#if GRAPHENE_VERSION_MIN_REQUIRED >= GRAPHENE_VERSION_1_6
175# define GRAPHENE_DEPRECATED_IN_1_6 GRAPHENE_DEPRECATED
176# define GRAPHENE_DEPRECATED_IN_1_6_FOR(f) GRAPHENE_DEPRECATED_FOR(f)
177#else
178# define GRAPHENE_DEPRECATED_IN_1_6 _GRAPHENE_PUBLIC
179# define GRAPHENE_DEPRECATED_IN_1_6_FOR(f) _GRAPHENE_PUBLIC
180#endif
181
182#if GRAPHENE_VERSION_MAX_ALLOWED < GRAPHENE_VERSION_1_6
183# define GRAPHENE_AVAILABLE_IN_1_6 GRAPHENE_UNAVAILABLE(1,6)
184#else
185# define GRAPHENE_AVAILABLE_IN_1_6 _GRAPHENE_PUBLIC
186#endif
187
188/* Graphene 1.8 */
189#if GRAPHENE_VERSION_MIN_REQUIRED >= GRAPHENE_VERSION_1_8
190# define GRAPHENE_DEPRECATED_IN_1_8 GRAPHENE_DEPRECATED
191# define GRAPHENE_DEPRECATED_IN_1_8_FOR(f) GRAPHENE_DEPRECATED_FOR(f)
192#else
193# define GRAPHENE_DEPRECATED_IN_1_8 _GRAPHENE_PUBLIC
194# define GRAPHENE_DEPRECATED_IN_1_8_FOR(f) _GRAPHENE_PUBLIC
195#endif
196
197#if GRAPHENE_VERSION_MAX_ALLOWED < GRAPHENE_VERSION_1_8
198# define GRAPHENE_AVAILABLE_IN_1_8 GRAPHENE_UNAVAILABLE(1,8)
199#else
200# define GRAPHENE_AVAILABLE_IN_1_8 _GRAPHENE_PUBLIC
201#endif
202
203/* Graphene 1.10 */
204#if GRAPHENE_VERSION_MIN_REQUIRED >= GRAPHENE_VERSION_1_10
205# define GRAPHENE_DEPRECATED_IN_1_10 GRAPHENE_DEPRECATED
206# define GRAPHENE_DEPRECATED_IN_1_10_FOR(f) GRAPHENE_DEPRECATED_FOR(f)
207#else
208# define GRAPHENE_DEPRECATED_IN_1_10 _GRAPHENE_PUBLIC
209# define GRAPHENE_DEPRECATED_IN_1_10_FOR(f) _GRAPHENE_PUBLIC
210#endif
211
212#if GRAPHENE_VERSION_MAX_ALLOWED < GRAPHENE_VERSION_1_10
213# define GRAPHENE_AVAILABLE_IN_1_10 GRAPHENE_UNAVAILABLE(1,10)
214#else
215# define GRAPHENE_AVAILABLE_IN_1_10 _GRAPHENE_PUBLIC
216#endif
217

source code of gtk/subprojects/graphene/include/graphene-version-macros.h