]> git.saurik.com Git - apple/xnu.git/blame - bsd/sys/cdefs.h
xnu-344.21.73.tar.gz
[apple/xnu.git] / bsd / sys / cdefs.h
CommitLineData
1c79356b
A
1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
d7e50217 6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
1c79356b 7 *
d7e50217
A
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * file.
14 *
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
1c79356b
A
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
d7e50217
A
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
1c79356b
A
22 *
23 * @APPLE_LICENSE_HEADER_END@
24 */
25/* Copyright 1995 NeXT Computer, Inc. All rights reserved. */
26/*
27 * Copyright (c) 1991, 1993
28 * The Regents of the University of California. All rights reserved.
29 *
30 * This code is derived from software contributed to Berkeley by
31 * Berkeley Software Design, Inc.
32 *
33 * Redistribution and use in source and binary forms, with or without
34 * modification, are permitted provided that the following conditions
35 * are met:
36 * 1. Redistributions of source code must retain the above copyright
37 * notice, this list of conditions and the following disclaimer.
38 * 2. Redistributions in binary form must reproduce the above copyright
39 * notice, this list of conditions and the following disclaimer in the
40 * documentation and/or other materials provided with the distribution.
41 * 3. All advertising materials mentioning features or use of this software
42 * must display the following acknowledgement:
43 * This product includes software developed by the University of
44 * California, Berkeley and its contributors.
45 * 4. Neither the name of the University nor the names of its contributors
46 * may be used to endorse or promote products derived from this software
47 * without specific prior written permission.
48 *
49 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
50 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
51 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
52 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
53 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
54 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
55 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
56 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
57 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
58 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59 * SUCH DAMAGE.
60 *
61 * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
62 */
63
64#ifndef _CDEFS_H_
65#define _CDEFS_H_
66
67#if defined(__cplusplus)
68#define __BEGIN_DECLS extern "C" {
69#define __END_DECLS }
70#else
71#define __BEGIN_DECLS
72#define __END_DECLS
73#endif
74
75/*
76 * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
77 * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
78 * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
79 * in between its arguments. __CONCAT can also concatenate double-quoted
80 * strings produced by the __STRING macro, but this only works with ANSI C.
81 */
82#if defined(__STDC__) || defined(__cplusplus)
83#define __P(protos) protos /* full-blown ANSI C */
84#define __CONCAT(x,y) x ## y
85#define __STRING(x) #x
86
87#define __const const /* define reserved names to standard */
88#define __signed signed
89#define __volatile volatile
90#if defined(__cplusplus)
91#define __inline inline /* convert to C++ keyword */
92#else
93#ifndef __GNUC__
94#define __inline /* delete GCC keyword */
95#endif /* !__GNUC__ */
96#endif /* !__cplusplus */
97
98#else /* !(__STDC__ || __cplusplus) */
99#define __P(protos) () /* traditional C preprocessor */
100#define __CONCAT(x,y) x/**/y
101#define __STRING(x) "x"
102
103#ifndef __GNUC__
104#define __const /* delete pseudo-ANSI C keywords */
105#define __inline
106#define __signed
107#define __volatile
108#endif /* !__GNUC__ */
109
110/*
111 * In non-ANSI C environments, new programs will want ANSI-only C keywords
112 * deleted from the program and old programs will want them left alone.
113 * When using a compiler other than gcc, programs using the ANSI C keywords
114 * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
115 * When using "gcc -traditional", we assume that this is the intent; if
116 * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
117 */
118#ifndef NO_ANSI_KEYWORDS
119#define const __const /* convert ANSI C keywords */
120#define inline __inline
121#define signed __signed
122#define volatile __volatile
123#endif /* !NO_ANSI_KEYWORDS */
124#endif /* !(__STDC__ || __cplusplus) */
125
126/*
127 * GCC1 and some versions of GCC2 declare dead (non-returning) and
128 * pure (no side effects) functions using "volatile" and "const";
129 * unfortunately, these then cause warnings under "-ansi -pedantic".
130 * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of
131 * these work for GNU C++ (modulo a slight glitch in the C++ grammar
132 * in the distribution version of 2.5.5).
133 */
0b4e3aa0
A
134#if defined(__MWERKS__) && (__MWERKS__ > 0x2400)
135 /* newer Metrowerks compilers support __attribute__() */
136#elif !defined(__GNUC__) || __GNUC__ < 2 || \
1c79356b
A
137 (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
138#define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */
139#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
140#define __dead __volatile
141#define __pure __const
142#endif
143#endif
144
145/* Delete pseudo-keywords wherever they are not available or needed. */
146#ifndef __dead
147#define __dead
148#define __pure
149#endif
150
151#define __IDSTRING(name,string) \
152 static const char name[] __attribute__((__unused__)) = string
153
154#ifndef __COPYRIGHT
155#define __COPYRIGHT(s) __IDSTRING(copyright,s)
156#endif
157
158#ifndef __RCSID
159#define __RCSID(s) __IDSTRING(rcsid,s)
160#endif
161
162#ifndef __SCCSID
163#define __SCCSID(s) __IDSTRING(sccsid,s)
164#endif
165
166#ifndef __PROJECT_VERSION
167#define __PROJECT_VERSION(s) __IDSTRING(project_version,s)
168#endif
169
170#endif /* !_CDEFS_H_ */