1*86d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 2*86d7f5d3SJohn Marino // 3*86d7f5d3SJohn Marino /// \file tuklib_common.h 4*86d7f5d3SJohn Marino /// \brief Common definitions for tuklib modules 5*86d7f5d3SJohn Marino // 6*86d7f5d3SJohn Marino // Author: Lasse Collin 7*86d7f5d3SJohn Marino // 8*86d7f5d3SJohn Marino // This file has been put into the public domain. 9*86d7f5d3SJohn Marino // You can do whatever you want with this file. 10*86d7f5d3SJohn Marino // 11*86d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 12*86d7f5d3SJohn Marino 13*86d7f5d3SJohn Marino #ifndef TUKLIB_COMMON_H 14*86d7f5d3SJohn Marino #define TUKLIB_COMMON_H 15*86d7f5d3SJohn Marino 16*86d7f5d3SJohn Marino // The config file may be replaced by a package-specific file. 17*86d7f5d3SJohn Marino // It should include at least stddef.h, inttypes.h, and limits.h. 18*86d7f5d3SJohn Marino #include "tuklib_config.h" 19*86d7f5d3SJohn Marino 20*86d7f5d3SJohn Marino // TUKLIB_SYMBOL_PREFIX is prefixed to all symbols exported by 21*86d7f5d3SJohn Marino // the tuklib modules. If you use a tuklib module in a library, 22*86d7f5d3SJohn Marino // you should use TUKLIB_SYMBOL_PREFIX to make sure that there 23*86d7f5d3SJohn Marino // are no symbol conflicts in case someone links your library 24*86d7f5d3SJohn Marino // into application that also uses the same tuklib module. 25*86d7f5d3SJohn Marino #ifndef TUKLIB_SYMBOL_PREFIX 26*86d7f5d3SJohn Marino # define TUKLIB_SYMBOL_PREFIX 27*86d7f5d3SJohn Marino #endif 28*86d7f5d3SJohn Marino 29*86d7f5d3SJohn Marino #define TUKLIB_CAT_X(a, b) a ## b 30*86d7f5d3SJohn Marino #define TUKLIB_CAT(a, b) TUKLIB_CAT_X(a, b) 31*86d7f5d3SJohn Marino 32*86d7f5d3SJohn Marino #ifndef TUKLIB_SYMBOL 33*86d7f5d3SJohn Marino # define TUKLIB_SYMBOL(sym) TUKLIB_CAT(TUKLIB_SYMBOL_PREFIX, sym) 34*86d7f5d3SJohn Marino #endif 35*86d7f5d3SJohn Marino 36*86d7f5d3SJohn Marino #ifndef TUKLIB_DECLS_BEGIN 37*86d7f5d3SJohn Marino # ifdef __cplusplus 38*86d7f5d3SJohn Marino # define TUKLIB_DECLS_BEGIN extern "C" { 39*86d7f5d3SJohn Marino # else 40*86d7f5d3SJohn Marino # define TUKLIB_DECLS_BEGIN 41*86d7f5d3SJohn Marino # endif 42*86d7f5d3SJohn Marino #endif 43*86d7f5d3SJohn Marino 44*86d7f5d3SJohn Marino #ifndef TUKLIB_DECLS_END 45*86d7f5d3SJohn Marino # ifdef __cplusplus 46*86d7f5d3SJohn Marino # define TUKLIB_DECLS_END } 47*86d7f5d3SJohn Marino # else 48*86d7f5d3SJohn Marino # define TUKLIB_DECLS_END 49*86d7f5d3SJohn Marino # endif 50*86d7f5d3SJohn Marino #endif 51*86d7f5d3SJohn Marino 52*86d7f5d3SJohn Marino #if defined(__GNUC__) && defined(__GNUC_MINOR__) 53*86d7f5d3SJohn Marino # define TUKLIB_GNUC_REQ(major, minor) \ 54*86d7f5d3SJohn Marino ((__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)) \ 55*86d7f5d3SJohn Marino || __GNUC__ > (major)) 56*86d7f5d3SJohn Marino #else 57*86d7f5d3SJohn Marino # define TUKLIB_GNUC_REQ(major, minor) 0 58*86d7f5d3SJohn Marino #endif 59*86d7f5d3SJohn Marino 60*86d7f5d3SJohn Marino #if TUKLIB_GNUC_REQ(2, 5) 61*86d7f5d3SJohn Marino # define tuklib_attr_noreturn __attribute__((__noreturn__)) 62*86d7f5d3SJohn Marino #else 63*86d7f5d3SJohn Marino # define tuklib_attr_noreturn 64*86d7f5d3SJohn Marino #endif 65*86d7f5d3SJohn Marino 66*86d7f5d3SJohn Marino #if (defined(_WIN32) && !defined(__CYGWIN__)) \ 67*86d7f5d3SJohn Marino || defined(__OS2__) || defined(__MSDOS__) 68*86d7f5d3SJohn Marino # define TUKLIB_DOSLIKE 1 69*86d7f5d3SJohn Marino #endif 70*86d7f5d3SJohn Marino 71*86d7f5d3SJohn Marino #endif 72