xref: /dflybsd-src/contrib/xz/src/common/tuklib_common.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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