Import sendmail 8.13.4 into a new contrib directory as the first step
[dragonfly.git] / contrib / sendmail-8.13.4 / include / sm / cdefs.h
blob046ea04920e4ef48fb1f56b4c0d0d3ec274f8e03
1 /*
2 * Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers.
3 * All rights reserved.
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
9 * $Id: cdefs.h,v 1.16 2003/12/05 22:45:25 ca Exp $
13 ** libsm C language portability macros
14 ** See libsm/cdefs.html for documentation.
17 #ifndef SM_CDEFS_H
18 # define SM_CDEFS_H
20 # include <sm/config.h>
23 ** BSD and Linux have <sys/cdefs.h> which defines a set of C language
24 ** portability macros that are a defacto standard in the open source
25 ** community.
28 # if SM_CONF_SYS_CDEFS_H
29 # include <sys/cdefs.h>
30 # endif /* SM_CONF_SYS_CDEFS_H */
33 ** Define the standard C language portability macros
34 ** for platforms that lack <sys/cdefs.h>.
37 # if !SM_CONF_SYS_CDEFS_H
38 # if defined(__cplusplus)
39 # define __BEGIN_DECLS extern "C" {
40 # define __END_DECLS };
41 # else /* defined(__cplusplus) */
42 # define __BEGIN_DECLS
43 # define __END_DECLS
44 # endif /* defined(__cplusplus) */
45 # if defined(__STDC__) || defined(__cplusplus)
46 # ifndef __P
47 # define __P(protos) protos
48 # endif /* __P */
49 # define __CONCAT(x,y) x ## y
50 # define __STRING(x) #x
51 # else /* defined(__STDC__) || defined(__cplusplus) */
52 # define __P(protos) ()
53 # define __CONCAT(x,y) x/**/y
54 # define __STRING(x) "x"
55 # define const
56 # define signed
57 # define volatile
58 # endif /* defined(__STDC__) || defined(__cplusplus) */
59 # endif /* !SM_CONF_SYS_CDEFS_H */
62 ** Define SM_DEAD, a macro used to declare functions that do not return
63 ** to their caller.
66 # ifndef SM_DEAD
67 # if __GNUC__ >= 2
68 # if __GNUC__ == 2 && __GNUC_MINOR__ < 5
69 # define SM_DEAD(proto) volatile proto
70 # define SM_DEAD_D volatile
71 # else /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */
72 # define SM_DEAD(proto) proto __attribute__((__noreturn__))
73 # define SM_DEAD_D
74 # endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */
75 # else /* __GNUC__ >= 2 */
76 # define SM_DEAD(proto) proto
77 # define SM_DEAD_D
78 # endif /* __GNUC__ >= 2 */
79 # endif /* SM_DEAD */
82 ** Define SM_UNUSED, a macro used to declare variables that may be unused.
85 # ifndef SM_UNUSED
86 # if __GNUC__ >= 2
87 # if __GNUC__ == 2 && __GNUC_MINOR__ < 7
88 # define SM_UNUSED(decl) decl
89 # else /* __GNUC__ == 2 && __GNUC_MINOR__ < 7 */
90 # define SM_UNUSED(decl) decl __attribute__((__unused__))
91 # endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 7 */
92 # else /* __GNUC__ >= 2 */
93 # define SM_UNUSED(decl) decl
94 # endif /* __GNUC__ >= 2 */
95 # endif /* SM_UNUSED */
98 ** The SM_NONVOLATILE macro is used to declare variables that are not
99 ** volatile, but which must be declared volatile when compiling with
100 ** gcc -O -Wall in order to suppress bogus warning messages.
102 ** Variables that actually are volatile should be declared volatile
103 ** using the "volatile" keyword. If a variable actually is volatile,
104 ** then SM_NONVOLATILE should not be used.
106 ** To compile sendmail with gcc and see all non-bogus warnings,
107 ** you should use
108 ** gcc -O -Wall -DSM_OMIT_BOGUS_WARNINGS ...
109 ** Do not use -DSM_OMIT_BOGUS_WARNINGS when compiling the production
110 ** version of sendmail, because there is a performance hit.
113 # ifdef SM_OMIT_BOGUS_WARNINGS
114 # define SM_NONVOLATILE volatile
115 # else /* SM_OMIT_BOGUS_WARNINGS */
116 # define SM_NONVOLATILE
117 # endif /* SM_OMIT_BOGUS_WARNINGS */
120 ** Turn on format string argument checking.
123 # ifndef SM_CONF_FORMAT_TEST
124 # if __GNUC__ == 2 && __GNUC_MINOR__ >= 7
125 # define SM_CONF_FORMAT_TEST 1
126 # else /* __GNUC__ == 2 && __GNUC_MINOR__ >= 7 */
127 # define SM_CONF_FORMAT_TEST 0
128 # endif /* __GNUC__ == 2 && __GNUC_MINOR__ >= 7 */
129 # endif /* SM_CONF_FORMAT_TEST */
131 # ifndef PRINTFLIKE
132 # if SM_CONF_FORMAT_TEST
133 # define PRINTFLIKE(x,y) __attribute__ ((__format__ (__printf__, x, y)))
134 # else /* SM_CONF_FORMAT_TEST */
135 # define PRINTFLIKE(x,y)
136 # endif /* SM_CONF_FORMAT_TEST */
137 # endif /* ! PRINTFLIKE */
139 # ifndef SCANFLIKE
140 # if SM_CONF_FORMAT_TEST
141 # define SCANFLIKE(x,y) __attribute__ ((__format__ (__scanf__, x, y)))
142 # else /* SM_CONF_FORMAT_TEST */
143 # define SCANFLIKE(x,y)
144 # endif /* SM_CONF_FORMAT_TEST */
145 # endif /* ! SCANFLIKE */
147 #endif /* ! SM_CDEFS_H */