blob: 51ac4e51ff5e38f7b1f17cb4c800e5919c1580a2 [file] [log] [blame]
Sylvain Munaut12ba7782014-06-16 10:13:40 +02001#pragma once
Jacob Erlbeck6b262182013-08-14 12:26:27 +02002
3/*! \defgroup utils General-purpose utility functions
4 * @{
5 */
6
7/*! \file defs.h
8 * \brief General definitions that are meant to be included from header files.
9 */
10
11/*! \brief Check for gcc and version.
12 *
13 * \note Albeit glibc provides a features.h file that contains a similar
14 * definition (__GNUC_PREREQ), this definition has been copied from there
15 * to have it available with other libraries, too.
16 *
17 * \return != 0 iff gcc is used and it's version is at least maj.min.
18 */
19#if defined __GNUC__ && defined __GNUC_MINOR__
20# define OSMO_GNUC_PREREQ(maj, min) \
21 ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
22#else
23# define OSMO_GNUC_PREREQ(maj, min) 0
24#endif
25
26/*! \brief Set the deprecated attribute with a message.
27 */
Jacob Erlbeck3f74d9e2013-08-14 18:13:45 +020028#if defined(__clang__)
Jacob Erlbeckc4cc9242013-08-15 10:38:05 +020029# define _OSMO_HAS_ATTRIBUTE_DEPRECATED __has_attribute(deprecated)
30# define _OSMO_HAS_ATTRIBUTE_DEPRECATED_WITH_MESSAGE __has_extension(attribute_deprecated_with_message)
Jacob Erlbeck3f74d9e2013-08-14 18:13:45 +020031#elif defined(__GNUC__)
32# define _OSMO_HAS_ATTRIBUTE_DEPRECATED 1
Jacob Erlbeckc4cc9242013-08-15 10:38:05 +020033# define _OSMO_HAS_ATTRIBUTE_DEPRECATED_WITH_MESSAGE OSMO_GNUC_PREREQ(4,5)
Jacob Erlbeck6b262182013-08-14 12:26:27 +020034#endif
35
Jacob Erlbeckc4cc9242013-08-15 10:38:05 +020036#if _OSMO_HAS_ATTRIBUTE_DEPRECATED_WITH_MESSAGE
Jacob Erlbeck3f74d9e2013-08-14 18:13:45 +020037# define OSMO_DEPRECATED(text) __attribute__((__deprecated__(text)))
Jacob Erlbeckc4cc9242013-08-15 10:38:05 +020038#elif _OSMO_HAS_ATTRIBUTE_DEPRECATED
Jacob Erlbeck3f74d9e2013-08-14 18:13:45 +020039# define OSMO_DEPRECATED(text) __attribute__((__deprecated__))
40#else
41# define OSMO_DEPRECATED(text)
42#endif
43
Pau Espin Pedrol69dfe5a2017-06-17 23:18:11 +020044#if BUILDING_LIBOSMOCORE
45# define OSMO_DEPRECATED_OUTSIDE_LIBOSMOCORE
46#else
47# define OSMO_DEPRECATED_OUTSIDE_LIBOSMOCORE OSMO_DEPRECATED("For internal use inside libosmocore only.")
48#endif
49
Jacob Erlbeck3f74d9e2013-08-14 18:13:45 +020050#undef _OSMO_HAS_ATTRIBUTE_DEPRECATED_WITH_MESSAGE
51#undef _OSMO_HAS_ATTRIBUTE_DEPRECATED
52
Jacob Erlbeck6b262182013-08-14 12:26:27 +020053/*! @} */