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