186d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 286d7f5d3SJohn Marino // 386d7f5d3SJohn Marino /// \file tuklib_common.h 486d7f5d3SJohn Marino /// \brief Common definitions for tuklib modules 586d7f5d3SJohn Marino // 686d7f5d3SJohn Marino // Author: Lasse Collin 786d7f5d3SJohn Marino // 886d7f5d3SJohn Marino // This file has been put into the public domain. 986d7f5d3SJohn Marino // You can do whatever you want with this file. 1086d7f5d3SJohn Marino // 1186d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 1286d7f5d3SJohn Marino 1386d7f5d3SJohn Marino #ifndef TUKLIB_COMMON_H 1486d7f5d3SJohn Marino #define TUKLIB_COMMON_H 1586d7f5d3SJohn Marino 1686d7f5d3SJohn Marino // The config file may be replaced by a package-specific file. 1786d7f5d3SJohn Marino // It should include at least stddef.h, inttypes.h, and limits.h. 1886d7f5d3SJohn Marino #include "tuklib_config.h" 1986d7f5d3SJohn Marino 2086d7f5d3SJohn Marino // TUKLIB_SYMBOL_PREFIX is prefixed to all symbols exported by 2186d7f5d3SJohn Marino // the tuklib modules. If you use a tuklib module in a library, 2286d7f5d3SJohn Marino // you should use TUKLIB_SYMBOL_PREFIX to make sure that there 2386d7f5d3SJohn Marino // are no symbol conflicts in case someone links your library 2486d7f5d3SJohn Marino // into application that also uses the same tuklib module. 2586d7f5d3SJohn Marino #ifndef TUKLIB_SYMBOL_PREFIX 2686d7f5d3SJohn Marino # define TUKLIB_SYMBOL_PREFIX 2786d7f5d3SJohn Marino #endif 2886d7f5d3SJohn Marino 2986d7f5d3SJohn Marino #define TUKLIB_CAT_X(a, b) a ## b 3086d7f5d3SJohn Marino #define TUKLIB_CAT(a, b) TUKLIB_CAT_X(a, b) 3186d7f5d3SJohn Marino 3286d7f5d3SJohn Marino #ifndef TUKLIB_SYMBOL 3386d7f5d3SJohn Marino # define TUKLIB_SYMBOL(sym) TUKLIB_CAT(TUKLIB_SYMBOL_PREFIX, sym) 3486d7f5d3SJohn Marino #endif 3586d7f5d3SJohn Marino 3686d7f5d3SJohn Marino #ifndef TUKLIB_DECLS_BEGIN 3786d7f5d3SJohn Marino # ifdef __cplusplus 3886d7f5d3SJohn Marino # define TUKLIB_DECLS_BEGIN extern "C" { 3986d7f5d3SJohn Marino # else 4086d7f5d3SJohn Marino # define TUKLIB_DECLS_BEGIN 4186d7f5d3SJohn Marino # endif 4286d7f5d3SJohn Marino #endif 4386d7f5d3SJohn Marino 4486d7f5d3SJohn Marino #ifndef TUKLIB_DECLS_END 4586d7f5d3SJohn Marino # ifdef __cplusplus 4686d7f5d3SJohn Marino # define TUKLIB_DECLS_END } 4786d7f5d3SJohn Marino # else 4886d7f5d3SJohn Marino # define TUKLIB_DECLS_END 4986d7f5d3SJohn Marino # endif 5086d7f5d3SJohn Marino #endif 5186d7f5d3SJohn Marino 5286d7f5d3SJohn Marino #if defined(__GNUC__) && defined(__GNUC_MINOR__) 5386d7f5d3SJohn Marino # define TUKLIB_GNUC_REQ(major, minor) \ 5486d7f5d3SJohn Marino ((__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)) \ 5586d7f5d3SJohn Marino || __GNUC__ > (major)) 5686d7f5d3SJohn Marino #else 5786d7f5d3SJohn Marino # define TUKLIB_GNUC_REQ(major, minor) 0 5886d7f5d3SJohn Marino #endif 5986d7f5d3SJohn Marino 6086d7f5d3SJohn Marino #if TUKLIB_GNUC_REQ(2, 5) 6186d7f5d3SJohn Marino # define tuklib_attr_noreturn __attribute__((__noreturn__)) 6286d7f5d3SJohn Marino #else 6386d7f5d3SJohn Marino # define tuklib_attr_noreturn 6486d7f5d3SJohn Marino #endif 6586d7f5d3SJohn Marino 6686d7f5d3SJohn Marino #if (defined(_WIN32) && !defined(__CYGWIN__)) \ 6786d7f5d3SJohn Marino || defined(__OS2__) || defined(__MSDOS__) 6886d7f5d3SJohn Marino # define TUKLIB_DOSLIKE 1 6986d7f5d3SJohn Marino #endif 7086d7f5d3SJohn Marino 7186d7f5d3SJohn Marino #endif 72