blob: 48c5392b651b7aaae11e11c65068fd23e7231def [file] [log] [blame]
#ifndef AXIS2_DEFINES_H
#define AXIS2_DEFINES_H
/**
* @file axis2_defines.h
* @brief Useful definitions, which may have platform concerns
*/
#include <stddef.h>
#ifdef __cplusplus
extern "C"
{
#endif
/**
* Type definitions
*/
typedef char axis2_char_t;
typedef int axis2_bool_t;
typedef int axis2_status_t;
typedef unsigned int axis2_ssize_t;
/* These constant definitions should later be moved to platform dependant
* files
*/
#define AXIS2_EOLN '\0'
/**
* Boolean values
*/
#define AXIS2_TRUE 1
#define AXIS2_FALSE 0
/**
* Exporting
*/
#if defined(WIN32)
#define AXIS2_EXPORT __declspec(dllexport)
#else
#define AXIS2_EXPORT
#endif
/**
* Importing
*/
#if defined(WIN32)
#define AXIS2_IMPORT __declspec(dllimport)
#else
#define AXIS2_IMPORT
#endif
/**
* Calling Conventions
*/
#if defined(__GNUC__)
#define AXIS2_CALL __attribute__((cdecl))
#else
#if defined(__unix)
#define AXIS2_CALL
#else /* WIN32 */
#define AXIS2_CALL __stdcall
#endif
#endif
#ifdef DOXYGEN
/* define these just so doxygen documents them */
/**
* AXIS2_DECLARE_STATIC is defined when including Axis2's Core headers,
* to provide static linkage when the dynamic library may be unavailable.
*
* @see AXIS2_DECLARE_EXPORT
*
* AXIS2_DECLARE_STATIC and AXIS2_DECLARE_EXPORT are left undefined when
* including Axis2's Core headers, to import and link the symbols from the
* dynamic Axis2 Core library and assure appropriate indirection and calling
* conventions at compile time.
*/
# define AXIS2_DECLARE_STATIC
/**
* AXIS2_DECLARE_EXPORT is defined when building the Axis2 Core dynamic
* library, so that all public symbols are exported.
*
* @see AXIS2_DECLARE_STATIC
*/
# define AXIS2_DECLARE_EXPORT
#endif /* def DOXYGEN */
#if !defined(WIN32)
/**
* Axis2 Core functions are declared with AXIS2_DECLARE(), so they may
* use the most appropriate calling convention. Other
* Core functions with variable arguments must use AXIS2_DECLARE_NONSTD().
* @code
* AXIS2_DECLARE(rettype) axis2_func(args)
* @endcode
*/
#define AXIS2_DECLARE(type) type AXIS2_CALL
/**
* Axis2 Core variable argument and hook functions are declared with
* AXIS2_DECLARE_NONSTD(), as they must use the C language calling convention.
* @see AXIS2_DECLARE
* @code
* AXIS2_DECLARE_NONSTD(rettype) axis2_func(args [...])
* @endcode
*/
#define AXIS2_DECLARE_NONSTD(type) type
/**
* Axis2 Core variables are declared with AXIS2_DECLARE_DATA.
* This assures the appropriate indirection is invoked at compile time.
*
* @code
* AXIS2_DECLARE_DATA type axis2_variable
* @endcode
*/
#define AXIS2_DECLARE_DATA
#elif defined(AXIS2_DECLARE_STATIC)
#define AXIS2_DECLARE(type) type AXIS2_CALL
#define AXIS2_DECLARE_NONSTD(type) type
#define AXIS2_DECLARE_DATA
#elif defined(AXIS2_DECLARE_EXPORT)
#define AXIS2_DECLARE(type) AXIS2_EXPORT type AXIS2_CALL
#define AXIS2_DECLARE_NONSTD(type) AXIS2_EXPORT type
#define AXIS2_DECLARE_DATA AXIS2_EXPORT
#else
#define AXIS2_DECLARE(type) AXIS2_IMPORT type AXIS2_CALL
#define AXIS2_DECLARE_NONSTD(type) AXIS2_IMPORT type
#define AXIS2_DECLARE_DATA AXIS2_IMPORT
#endif
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_DEFINES_H */