diff options
Diffstat (limited to 'include/pugl/attributes.h')
-rw-r--r-- | include/pugl/attributes.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/include/pugl/attributes.h b/include/pugl/attributes.h new file mode 100644 index 0000000..75322ee --- /dev/null +++ b/include/pugl/attributes.h @@ -0,0 +1,59 @@ +// Copyright 2012-2022 David Robillard <d@drobilla.net> +// SPDX-License-Identifier: ISC + +#ifndef PUGL_ATTRIBUTES_H +#define PUGL_ATTRIBUTES_H + +// Public declaration scope +#ifdef __cplusplus +# define PUGL_BEGIN_DECLS extern "C" { +# define PUGL_END_DECLS } +#else +# define PUGL_BEGIN_DECLS ///< Begin public API definitions +# define PUGL_END_DECLS ///< End public API definitions +#endif + +// Symbol exposed in the public API +#ifndef PUGL_API +# if defined(_WIN32) && !defined(PUGL_STATIC) && defined(PUGL_INTERNAL) +# define PUGL_API __declspec(dllexport) +# elif defined(_WIN32) && !defined(PUGL_STATIC) +# define PUGL_API __declspec(dllimport) +# elif defined(__GNUC__) +# define PUGL_API __attribute__((visibility("default"))) +# else +# define PUGL_API +# endif +#endif + +// Deprecated API +#ifndef PUGL_DISABLE_DEPRECATED +# if defined(__clang__) +# define PUGL_DEPRECATED_BY(rep) __attribute__((deprecated("", rep))) +# elif defined(__GNUC__) +# define PUGL_DEPRECATED_BY(rep) __attribute__((deprecated("Use " rep))) +# else +# define PUGL_DEPRECATED_BY(rep) +# endif +#endif + +// GCC function attributes +#if defined(__GNUC__) +# define PUGL_CONST_FUNC __attribute__((const)) +# define PUGL_MALLOC_FUNC __attribute__((malloc)) +#else +# define PUGL_CONST_FUNC ///< Only reads its parameters +# define PUGL_MALLOC_FUNC ///< Allocates memory +#endif + +/// A const function in the public API that only reads parameters +#define PUGL_CONST_API \ + PUGL_API \ + PUGL_CONST_FUNC + +/// A malloc function in the public API that returns allocated memory +#define PUGL_MALLOC_API \ + PUGL_API \ + PUGL_MALLOC_FUNC + +#endif // PUGL_ATTRIBUTES_H |