1/**
2 * D header file for POSIX.
3 *
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors:   Sean Kelly,
7              Alex R��nne Petersen
8 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
9 */
10
11/*          Copyright Sean Kelly 2005 - 2009.
12 * Distributed under the Boost Software License, Version 1.0.
13 *    (See accompanying file LICENSE or copy at
14 *          http://www.boost.org/LICENSE_1_0.txt)
15 */
16module core.sys.posix.config;
17
18public import core.stdc.config;
19
20version (Posix):
21extern (C) nothrow @nogc:
22@system:
23
24enum _XOPEN_SOURCE     = 600;
25enum _POSIX_SOURCE     = true;
26enum _POSIX_C_SOURCE   = 200112L;
27
28version (CRuntime_Glibc)
29{
30    // man 7 feature_test_macros
31    // http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
32    enum _GNU_SOURCE         = false;
33    enum _DEFAULT_SOURCE     = false;
34    enum _ATFILE_SOURCE      = false;
35
36    // _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for _DEFAULT_SOURCE.
37    deprecated("use _DEFAULT_SOURCE")
38    {
39        enum _BSD_SOURCE = false;
40        enum _SVID_SOURCE = false;
41    }
42
43    enum _FILE_OFFSET_BITS   = 64;
44    // <sys/cdefs.h>
45    enum __REDIRECT          = false;
46
47    enum _REENTRANT          = true; // set by compiler when linking -pthread
48
49    // deduced <features.h>
50    enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
51    enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
52    enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
53
54    deprecated("use _XOPEN_SOURCE >= 600")
55    {
56        enum __USE_XOPEN2K      = _XOPEN_SOURCE >= 600;
57        enum __USE_XOPEN2KXSI   = _XOPEN_SOURCE >= 600;
58    }
59    deprecated("use _XOPEN_SOURCE >= 700")
60    {
61        enum __USE_XOPEN2K8     = _XOPEN_SOURCE >= 700;
62        enum __USE_XOPEN2K8XSI  = _XOPEN_SOURCE >= 700;
63    }
64
65    deprecated("use _DEFAULT_SOURCE")
66    enum __USE_MISC          = _DEFAULT_SOURCE;
67    deprecated("use _ATFILE_SOURCE")
68    enum __USE_ATFILE        = _ATFILE_SOURCE;
69    deprecated("use _GNU_SOURCE")
70    enum __USE_GNU           = _GNU_SOURCE;
71    deprecated("use _REENTRANT")
72    enum __USE_REENTRANT     = _REENTRANT;
73
74    version (D_LP64)
75        enum __WORDSIZE = 64;
76    else
77        enum __WORDSIZE = 32;
78}
79else version (CRuntime_Musl)
80{
81    enum _GNU_SOURCE         = false;
82    enum _DEFAULT_SOURCE     = false;
83    enum _ATFILE_SOURCE      = false;
84
85    // off_t is always 64 bits on Musl
86    enum _FILE_OFFSET_BITS   = 64;
87
88    // Not present in Musl sources
89    enum __REDIRECT          = false;
90
91    // Those three are irrelevant for Musl as it always uses 64 bits off_t
92    enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
93    enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
94    enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
95
96    version (D_LP64)
97        enum __WORDSIZE = 64;
98    else
99        enum __WORDSIZE = 32;
100}
101else version (CRuntime_UClibc)
102{
103    enum _GNU_SOURCE         = false;
104    enum _DEFAULT_SOURCE     = false;
105    enum _ATFILE_SOURCE      = false;
106
107    enum _FILE_OFFSET_BITS   = 64;
108    enum __REDIRECT          = false;
109
110    enum _REENTRANT          = true;
111
112    enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
113    enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
114    enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
115
116    deprecated("use _XOPEN_SOURCE >= 600")
117    {
118        enum __USE_XOPEN2K      = _XOPEN_SOURCE >= 600;
119        enum __USE_XOPEN2KXSI   = _XOPEN_SOURCE >= 600;
120    }
121    deprecated("use _XOPEN_SOURCE >= 700")
122    {
123        enum __USE_XOPEN2K8     = _XOPEN_SOURCE >= 700;
124        enum __USE_XOPEN2K8XSI  = _XOPEN_SOURCE >= 700;
125    }
126
127    deprecated("use _DEFAULT_SOURCE")
128    enum __USE_MISC          = _DEFAULT_SOURCE;
129    deprecated("use _ATFILE_SOURCE")
130    enum __USE_ATFILE        = _ATFILE_SOURCE;
131    deprecated("use _GNU_SOURCE")
132    enum __USE_GNU           = _GNU_SOURCE;
133    deprecated("use _REENTRANT")
134    enum __USE_REENTRANT     = _REENTRANT;
135
136    version (D_LP64)
137        enum __WORDSIZE = 64;
138    else
139        enum __WORDSIZE = 32;
140}
141else version (CRuntime_Bionic)
142{
143    enum _GNU_SOURCE         = false;
144    enum _DEFAULT_SOURCE     = false;
145    enum _ATFILE_SOURCE      = false;
146
147    enum __USE_FILE_OFFSET64 = false; // see https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md
148    deprecated("use _GNU_SOURCE")
149    enum __USE_GNU           = _GNU_SOURCE;
150
151    version (D_LP64)
152        enum __WORDSIZE = 64;
153    else
154        enum __WORDSIZE = 32;
155}
156else version (OpenBSD)
157{
158    version (Alpha)
159    {
160        enum _ALIGNBYTES = 7;
161        enum _STACKALIGNBYTES = 7;
162        enum _MAX_PAGE_SHIFT = 13;
163    }
164    else version (X86_64)
165    {
166        enum _ALIGNBYTES = c_long.sizeof - 1;
167        enum _STACKALIGNBYTES = 15;
168        enum _MAX_PAGE_SHIFT = 12;
169    }
170    else version (AArch64)
171    {
172        enum _ALIGNBYTES = c_long.sizeof - 1;
173        enum _STACKALIGNBYTES = 15;
174        enum _MAX_PAGE_SHIFT = 12;
175    }
176    else version (ARM)
177    {
178        enum _ALIGNBYTES = 7;
179        enum _STACKALIGNBYTES = 7;
180        enum _MAX_PAGE_SHIFT = 12;
181    }
182    else version (HPPA)
183    {
184        enum _ALIGNBYTES = 7;
185        enum _STACKALIGNBYTES = 7;
186        enum _MAX_PAGE_SHIFT = 12;
187    }
188    else version (X86)
189    {
190        enum _ALIGNBYTES = 3;
191        enum _STACKALIGNBYTES = 15;
192        enum _MAX_PAGE_SHIFT = 12;
193    }
194    else version (PPC)
195    {
196        enum _ALIGNBYTES = 7;
197        enum _STACKALIGNBYTES = 15;
198        enum _MAX_PAGE_SHIFT = 12;
199    }
200    else version (SPARC64)
201    {
202        enum _ALIGNBYTES = 15;
203        enum _STACKALIGNBYTES = 15;
204        enum _MAX_PAGE_SHIFT = 13;
205    }
206    else
207        static assert(false, "Architecture not supported.");
208}
209else version (Solaris)
210{
211    enum _FILE_OFFSET_BITS = 64;
212    enum __REDIRECT = false;
213
214    enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
215    enum __USE_LARGEFILE = __USE_FILE_OFFSET64 && !__REDIRECT;
216    enum __USE_LARGEFILE64 = __USE_FILE_OFFSET64 && !__REDIRECT;
217
218    deprecated("use _XOPEN_SOURCE >= 600")
219    {
220        enum __USE_XOPEN2K      = _XOPEN_SOURCE >= 600;
221        enum __USE_XOPEN2KXSI   = _XOPEN_SOURCE >= 600;
222    }
223    deprecated("use _XOPEN_SOURCE >= 700")
224    {
225        enum __USE_XOPEN2K8     = _XOPEN_SOURCE >= 700;
226        enum __USE_XOPEN2K8XSI  = _XOPEN_SOURCE >= 700;
227    }
228
229    version (D_LP64)
230        enum __WORDSIZE = 64;
231    else
232        enum __WORDSIZE = 32;
233}
234