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)27version (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)68else 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)86else 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)116else 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)126else 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)179else 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