aboutsummaryrefslogtreecommitdiff
path: root/lib/cpluff/libcpluff/cpluffdef.h.in
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cpluff/libcpluff/cpluffdef.h.in')
-rw-r--r--lib/cpluff/libcpluff/cpluffdef.h.in200
1 files changed, 200 insertions, 0 deletions
diff --git a/lib/cpluff/libcpluff/cpluffdef.h.in b/lib/cpluff/libcpluff/cpluffdef.h.in
new file mode 100644
index 0000000000..1c089f4e4d
--- /dev/null
+++ b/lib/cpluff/libcpluff/cpluffdef.h.in
@@ -0,0 +1,200 @@
+/*-------------------------------------------------------------------------
+ * C-Pluff, a plug-in framework for C
+ * Copyright 2007 Johannes Lehtinen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *-----------------------------------------------------------------------*/
+
+/** @file
+ * Common defines shared by C-Pluff C and C++ APIs.
+ * This file is automatically included by the top level C and C++
+ * API header files. There should be no need to include it explicitly.
+ */
+
+#ifndef CPLUFFDEF_H_
+#define CPLUFFDEF_H_
+
+
+/* ------------------------------------------------------------------------
+ * Version information
+ * ----------------------------------------------------------------------*/
+
+/**
+ * @defgroup versionInfo Version information
+ * @ingroup cDefines cxxDefines
+ *
+ * C-Pluff version information. Notice that this version information
+ * is static version information included in header files. The
+ * macros introduced here can be used for compile time checks.
+ */
+/*@{*/
+
+/**
+ * The C-Pluff release version string. This string identifies a specific
+ * version of the C-Pluff distribution. Compile time software compatibility
+ * checks should use #CP_VERSION_MAJOR and #CP_VERSION_MINOR instead.
+ */
+#define CP_VERSION "@PACKAGE_VERSION@"
+
+/**
+ * The major version number component of the release version. This is an
+ * integer.
+ */
+#define CP_VERSION_MAJOR @CP_VERSION_MAJOR@
+
+/**
+ * The minor version number component of the release version. This is an
+ * integer.
+ */
+#define CP_VERSION_MINOR @CP_VERSION_MINOR@
+
+/*@}*/
+
+
+/* ------------------------------------------------------------------------
+ * Symbol visibility
+ * ----------------------------------------------------------------------*/
+
+/**
+ * @defgroup symbolVisibility Symbol visibility
+ * @ingroup cDefines cxxDefines
+ *
+ * Macros for controlling inter-module symbol visibility and linkage. These
+ * macros have platform specific values. #CP_EXPORT, #CP_IMPORT and #CP_HIDDEN
+ * can be reused by plug-in implementations for better portability. The
+ * complexity is mostly due to Windows DLL exports and imports.
+ *
+ * @anchor symbolVisibilityExample
+ * Each module should usually define its own macro to declare API symbols with
+ * #CP_EXPORT and #CP_IMPORT as necessary. For example, a mobule could define
+ * a macro @c MY_API in the API header file as follows.
+ *
+ * @code
+ * #ifndef MY_API
+ * # define MY_API CP_IMPORT
+ * #endif
+ * @endcode
+ *
+ * By default the API symbols would then be marked for import which is correct
+ * when client modules are including the API header file. When compiling the
+ * module itself the option @c -DMY_API=CP_EXPORT would be passed to the compiler to
+ * override the API header file and to mark the API symbols for export.
+ * The overriding definition could also be included in module source files or
+ * in an internal header file before including the API header file.
+ */
+/*@{*/
+
+/**
+ * @def CP_EXPORT
+ *
+ * Declares a symbol to be exported for inter-module usage. When compiling the
+ * module which defines the symbol this macro should be placed
+ * at the start of the symbol declaration to ensure that the symbol is exported
+ * to other modules. However, when compiling other modules the declaration of
+ * the symbol should start with #CP_IMPORT.
+ * See @ref symbolVisibilityExample "the example" of how to do this.
+ */
+
+/**
+ * @def CP_IMPORT
+ *
+ * Declares a symbol to be imported from another module. When compiling a
+ * module which uses the symbol this macro should be placed at the start of
+ * the symbol declaration to ensure that the symbol is imported from the
+ * defining module. However, when compiling the defining module the declaration
+ * of the symbol should start with #CP_EXPORT.
+ * See @ref symbolVisibilityExample "the example" of how to do this.
+ */
+
+/**
+ * @def CP_HIDDEN
+ *
+ * Declares a symbol hidden from other modules. This macro should be
+ * placed at the start of the symbol declaration to hide the symbol from other
+ * modules (if supported by the platform). This macro is not intended to be
+ * used with symbols declared as "static" which are already internal to the
+ * object file. Some platforms do not support hiding of symbols and therefore
+ * unique prefixes should be used for global symbols internal to the module
+ * even when they are declared using this macro.
+ */
+
+#if defined(_WIN32)
+# define CP_EXPORT __declspec(dllexport)
+# define CP_IMPORT extern __declspec(dllimport)
+# define CP_HIDDEN
+#elif defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
+# define CP_EXPORT
+# define CP_IMPORT extern
+# define CP_HIDDEN __attribute__ ((visibility ("hidden")))
+#else
+# define CP_EXPORT
+# define CP_IMPORT extern
+# define CP_HIDDEN
+#endif
+
+/*@}*/
+
+
+/* ------------------------------------------------------------------------
+ * GCC attributes
+ * ----------------------------------------------------------------------*/
+
+/**
+ * @defgroup cDefinesGCCAttributes GCC attributes
+ * @ingroup cDefines cxxDefines
+ *
+ * These macros conditionally define GCC attributes for declarations.
+ * They are used in C-Pluff API declarations to enable better optimization
+ * and error checking when using GCC. In non-GCC platforms they have
+ * empty values.
+ */
+/*@{*/
+
+/**
+ * @def CP_GCC_PURE
+ *
+ * Declares a function as pure function having no side effects.
+ * This attribute is supported in GCC since version 2.96.
+ * Such functions can be subject to common subexpression elimination
+ * and loop optimization.
+ */
+
+/**
+ * @def CP_GCC_NONNULL
+ *
+ * Specifies that some pointer arguments to a function should have
+ * non-NULL values. Takes a variable length list of argument indexes as
+ * arguments. This attribute is supported in GCC since version 3.3.
+ * It can be used for enhanced error checking and some optimizations.
+ */
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#define CP_GCC_PURE __attribute__((pure))
+#else
+#define CP_GCC_PURE
+#endif
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+#define CP_GCC_NONNULL(...) __attribute__((nonnull (__VA_ARGS__)))
+#else
+#define CP_GCC_NONNULL(...)
+#endif
+
+/*@}*/
+
+#endif /*CPLUFFDEF_H_*/