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  */
16 module core.sys.posix.config;
17 
18 public import core.stdc.config;
19 
20 version (Posix):
21 extern (C) nothrow @nogc:
22 
23 enum _XOPEN_SOURCE     = 600;
24 enum _POSIX_SOURCE     = true;
25 enum _POSIX_C_SOURCE   = 200112L;
26 
version(CRuntime_Glibc)27 version (CRuntime_Glibc)
28 {
29     // man 7 feature_test_macros
30     // http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
31     enum _GNU_SOURCE         = false;
32     enum _DEFAULT_SOURCE     = false;
33     enum _ATFILE_SOURCE      = false;
34 
35     // _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for _DEFAULT_SOURCE.
36     deprecated("use _DEFAULT_SOURCE")
37     {
38         enum _BSD_SOURCE = false;
39         enum _SVID_SOURCE = false;
40     }
41 
42     enum _FILE_OFFSET_BITS   = 64;
43     // <sys/cdefs.h>
44     enum __REDIRECT          = false;
45 
46     enum _REENTRANT          = true; // set by compiler when linking -pthread
47 
48     // deduced <features.h>
49     enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
50     enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
51     enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
52 
53     enum __USE_XOPEN2K       = _XOPEN_SOURCE >= 600;
54     enum __USE_XOPEN2KXSI    = _XOPEN_SOURCE >= 600;
55     enum __USE_XOPEN2K8      = _XOPEN_SOURCE >= 700;
56     enum __USE_XOPEN2K8XSI   = _XOPEN_SOURCE >= 700;
57 
58     enum __USE_MISC          = _DEFAULT_SOURCE;
59     enum __USE_ATFILE        = _ATFILE_SOURCE;
60     enum __USE_GNU           = _GNU_SOURCE;
61     enum __USE_REENTRANT     = _REENTRANT;
62 
63     version (D_LP64)
64         enum __WORDSIZE = 64;
65     else
66         enum __WORDSIZE = 32;
67 }
version(CRuntime_Musl)68 else version (CRuntime_Musl)
69 {
70     // off_t is always 64 bits on Musl
71     enum _FILE_OFFSET_BITS   = 64;
72 
73     // Not present in Musl sources
74     enum __REDIRECT          = false;
75 
76     // Those three are irrelevant for Musl as it always uses 64 bits off_t
77     enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
78     enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
79     enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
80 
81     version (D_LP64)
82         enum __WORDSIZE = 64;
83     else
84         enum __WORDSIZE = 32;
85 }
version(CRuntime_UClibc)86 else version (CRuntime_UClibc)
87 {
88     enum _GNU_SOURCE         = false;
89     enum _DEFAULT_SOURCE     = false;
90     enum _ATFILE_SOURCE      = false;
91 
92     enum _FILE_OFFSET_BITS   = 64;
93     enum __REDIRECT          = false;
94 
95     enum _REENTRANT          = true;
96 
97     enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
98     enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
99     enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
100 
101     enum __USE_XOPEN2K       = _XOPEN_SOURCE >= 600;
102     enum __USE_XOPEN2KXSI    = _XOPEN_SOURCE >= 600;
103     enum __USE_XOPEN2K8      = _XOPEN_SOURCE >= 700;
104     enum __USE_XOPEN2K8XSI   = _XOPEN_SOURCE >= 700;
105 
106     enum __USE_MISC          = _DEFAULT_SOURCE;
107     enum __USE_ATFILE        = _ATFILE_SOURCE;
108     enum __USE_GNU           = _GNU_SOURCE;
109     enum __USE_REENTRANT     = _REENTRANT;
110 
111     version (D_LP64)
112         enum __WORDSIZE = 64;
113     else
114         enum __WORDSIZE = 32;
115 }
version(CRuntime_Bionic)116 else version (CRuntime_Bionic)
117 {
118     enum _GNU_SOURCE         = false;
119     enum __USE_GNU           = _GNU_SOURCE;
120 
121     version (D_LP64)
122         enum __WORDSIZE = 64;
123     else
124         enum __WORDSIZE = 32;
125 }
version(OpenBSD)126 else version (OpenBSD)
127 {
128     version (Alpha)
129     {
130         enum _ALIGNBYTES = 7;
131         enum _STACKALIGNBYTES = 7;
132         enum _MAX_PAGE_SHIFT = 13;
133     }
134     else version (X86_64)
135     {
136         enum _ALIGNBYTES = c_long.sizeof - 1;
137         enum _STACKALIGNBYTES = 15;
138         enum _MAX_PAGE_SHIFT = 12;
139     }
140     else version (AArch64)
141     {
142         enum _ALIGNBYTES = c_long.sizeof - 1;
143         enum _STACKALIGNBYTES = 15;
144         enum _MAX_PAGE_SHIFT = 12;
145     }
146     else version (ARM)
147     {
148         enum _ALIGNBYTES = 7;
149         enum _STACKALIGNBYTES = 7;
150         enum _MAX_PAGE_SHIFT = 12;
151     }
152     else version (HPPA)
153     {
154         enum _ALIGNBYTES = 7;
155         enum _STACKALIGNBYTES = 7;
156         enum _MAX_PAGE_SHIFT = 12;
157     }
158     else version (X86)
159     {
160         enum _ALIGNBYTES = 3;
161         enum _STACKALIGNBYTES = 15;
162         enum _MAX_PAGE_SHIFT = 12;
163     }
164     else version (PPC)
165     {
166         enum _ALIGNBYTES = 7;
167         enum _STACKALIGNBYTES = 15;
168         enum _MAX_PAGE_SHIFT = 12;
169     }
170     else version (SPARC64)
171     {
172         enum _ALIGNBYTES = 15;
173         enum _STACKALIGNBYTES = 15;
174         enum _MAX_PAGE_SHIFT = 13;
175     }
176     else
177         static assert(false, "Architecture not supported.");
178 }
version(Solaris)179 else version (Solaris)
180 {
181     enum _FILE_OFFSET_BITS = 64;
182     enum __REDIRECT = false;
183 
184     enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64;
185     enum __USE_LARGEFILE = __USE_FILE_OFFSET64 && !__REDIRECT;
186     enum __USE_LARGEFILE64 = __USE_FILE_OFFSET64 && !__REDIRECT;
187 
188     enum __USE_XOPEN2K = _XOPEN_SOURCE >= 600;
189     enum __USE_XOPEN2KXSI = _XOPEN_SOURCE >= 600;
190     enum __USE_XOPEN2K8 = _XOPEN_SOURCE >= 700;
191     enum __USE_XOPEN2K8XSI = _XOPEN_SOURCE >= 700;
192 
193     version (D_LP64)
194         enum __WORDSIZE = 64;
195     else
196         enum __WORDSIZE = 32;
197 }
198