From 9f85fadca801033e8873e918a52e80fd12426734 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 2 Jan 2023 17:22:55 -0500 Subject: Move attributes to a separate header --- include/pugl/attributes.h | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 include/pugl/attributes.h (limited to 'include/pugl/attributes.h') 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 +// 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 -- cgit v1.2.1