blob: 33ffb7bb21a8e4bf260b967a910cb940863ed821 [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file defs.h
2 * General definitions that are meant to be included from header files.
3 */
4
Sylvain Munaut12ba7782014-06-16 10:13:40 +02005#pragma once
Jacob Erlbeck6b262182013-08-14 12:26:27 +02006
7/*! \defgroup utils General-purpose utility functions
8 * @{
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02009 * \file defs.h */
Jacob Erlbeck6b262182013-08-14 12:26:27 +020010
Neels Hofmeyr87e45502017-06-20 00:17:59 +020011/*! Check for gcc and version.
Jacob Erlbeck6b262182013-08-14 12:26:27 +020012 *
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
Neels Hofmeyr87e45502017-06-20 00:17:59 +020026/*! Set the deprecated attribute with a message.
Jacob Erlbeck6b262182013-08-14 12:26:27 +020027 */
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
Vadim Yanitskiy87b51432019-11-07 22:15:13 +070046# define OSMO_DEPRECATED_OUTSIDE(text)
Pau Espin Pedrol69dfe5a2017-06-17 23:18:11 +020047#else
48# define OSMO_DEPRECATED_OUTSIDE_LIBOSMOCORE OSMO_DEPRECATED("For internal use inside libosmocore only.")
Vadim Yanitskiy87b51432019-11-07 22:15:13 +070049# define OSMO_DEPRECATED_OUTSIDE(text) OSMO_DEPRECATED(text)
Pau Espin Pedrol69dfe5a2017-06-17 23:18:11 +020050#endif
51
Jacob Erlbeck3f74d9e2013-08-14 18:13:45 +020052#undef _OSMO_HAS_ATTRIBUTE_DEPRECATED_WITH_MESSAGE
53#undef _OSMO_HAS_ATTRIBUTE_DEPRECATED
54
Jacob Erlbeck6b262182013-08-14 12:26:27 +020055/*! @} */