1 /**
2  * The module logicver defines some constant bools for the 
3  * predefined version identifiers. 
4  *
5  * These constants can be used to perform logical tests, 
6  * in a much simpler way than when using nested version() statements.
7  */
8 module iz.logicver;
9 
10 
11 /*
12     
13         DO NOT USE TEMPLATES OR MIXINS TO GENERATE THE VALUES. 
14         
15         this would break code completion in several IDE !!
16 */
17 
18 version(AArch64)            enum verAArch64 = true;
19 else                        enum verAArch64 = false;
20     
21 version(AIX)                enum verAIX = true;
22 else                        enum verAIX = false;
23 
24 version(ARM)                enum verARM = true;
25 else                        enum verARM = false;
26 
27 version(ARM_HardFloat)      enum verARM_HardFloat = true;
28 else                        enum verARM_HardFloat = false;
29 
30 version(ARM_SoftFP)         enum verARM_SoftFP = true;
31 else                        enum verARM_SoftFP = false;
32 
33 version(ARM_SoftFloat)      enum verARM_SoftFloat = true;
34 else                        enum verARM_SoftFloat = false;
35 
36 version(ARM_Thumb)          enum verARM_Thumb = true;
37 else                        enum verARM_Thumb = false;
38 
39 version(Alpha)              enum verAlpha = true;
40 else                        enum verAlpha = false;
41 
42 version(Alpha_HardFloat)    enum verAlpha_HardFloat = true;
43 else                        enum verAlpha_HardFloat = false;       
44 
45 version(Alpha_SoftFloat)    enum verAlpha_SoftFloat = true;
46 else                        enum verAlpha_SoftFloat = false;  
47 
48 version(Android)            enum verAndroid = true;
49 else                        enum verAndroid = false;   
50 
51 version(BSD)                enum verBSD = true;
52 else                        enum verBSD = false;
53 
54 version(BigEndian)          enum verBigEndian = true;
55 else                        enum verBigEndian = false; 
56 
57 version(Cygwin)             enum verCygwin = true;
58 else                        enum verCygwin = false; 
59 
60 version(D_Coverage)         enum verD_Coverage = true;
61 else                        enum verD_Coverage = false; 
62 
63 version(D_Ddoc)             enum verD_D_Ddoc = true;
64 else                        enum verD_D_Ddoc = false;
65 
66 version(D_HardFloat)        enum verD_HardFloat = true;
67 else                        enum verD_HardFloat = false;
68 
69 version(D_InlineAsm_X86)    enum verD_InlineAsm_X86 = true;
70 else                        enum verD_InlineAsm_X86 = false;
71 
72 version(D_InlineAsm_X86_64) enum verD_InlineAsm_X86_64 = true;
73 else                        enum verD_InlineAsm_X86_64 = false;
74 
75 version(D_LP64)             enum verD_LP64 = true;
76 else                        enum verD_LP64 = false;
77 
78 version(D_NoBoundsChecks)   enum verD_NoBoundsChecks = true;
79 else                        enum verD_NoBoundsChecks = false;
80 
81 version(D_PIC)              enum verD_PIC = true;
82 else                        enum verD_PIC = false;
83 
84 version(D_SIMD)             enum verD_SIMD = true;
85 else                        enum verD_SIMD = false;
86 
87 version(D_SoftFloat)        enum verD_SoftFloat = true;
88 else                        enum verD_SoftFloat = false;
89 
90 version(D_Version2)         enum verD_Version2 = true;
91 else                        enum verD_Version2 = false;
92 
93 version(D_X32)              enum verD_X32 = true;
94 else                        enum verD_X32 = false;
95 
96 version(DigitalMars)        enum verDigitalMars = true;
97 else                        enum verDigitalMars = false;
98 
99 version(DragonFlyBSD)       enum verDragonFlyBSD = true;
100 else                        enum verDragonFlyBSD = false;
101 
102 version(FreeBSD)            enum verFreeBSD = true;
103 else                        enum verFreeBSD = false;
104 
105 version(FreeStanding)       enum verFreeFreeStanding = true;
106 else                        enum verFreeFreeStanding = false;
107 
108 version(GNU)                enum verGNU = true;
109 else                        enum verGNU = false;
110 
111 version(HPPA)               enum verHPPA = true;
112 else                        enum verHPPA = false;
113 
114 version(HPPA64)             enum verHPPA64 = true;
115 else                        enum verHPPA64 = false;
116 
117 version(Haiku)              enum verHaiku = true;
118 else                        enum verHaiku = false;
119 
120 version(Hurd)               enum verHurd = true;
121 else                        enum verHurd = false;
122 
123 version(IA64)               enum verIA64 = true;
124 else                        enum verIA64 = false;
125 
126 version(LDC)                enum verLDC = true;
127 else                        enum verLDC = false;
128 
129 version(LittleEndian)       enum verLittleEndian = true;
130 else                        enum verLittleEndian = false;
131 
132 version(MIPS32)             enum verMIPS32 = true;
133 else                        enum verMIPS32 = false;
134 
135 version(MIPS64)             enum verMIPS64 = true;
136 else                        enum verMIPS64 = false;
137 
138 version(MIPS_EABI)          enum verMIPS_EABI = true;
139 else                        enum verMIPS_EABI = false;
140 
141 version(MIPS_HardFloat)     enum verMIPS_HardFloat = true;
142 else                        enum verMIPS_HardFloat = false;
143 
144 version(MIPS_N32)           enum verMIPS_N32 = true;
145 else                        enum verMIPS_N32 = false;
146 
147 version(MIPS_N64)           enum verMIPS_N64 = true;
148 else                        enum verMIPS_N64 = false;
149 
150 version(MIPS_O32)           enum verMIPS_O32 = true;
151 else                        enum verMIPS_O32 = false;
152 
153 version(MIPS_O64)           enum verMIPS_O64 = true;
154 else                        enum verMIPS_O64 = false;
155 
156 version(MIPS_SoftFloat)     enum verMIPS_SoftFloat = true;
157 else                        enum verMIPS_SoftFloat = false;
158 
159 
160 version(NetBSD)             enum verNetBSD = true;
161 else                        enum verNetBSD = false;
162 
163 version(OSX)                enum verOSX = true;
164 else                        enum verOSX = false;
165 
166 version(OpenBSD)            enum verOpenBSD = true;
167 else                        enum verOpenBSD = false;
168 
169 version(PPC)                enum verPPC = true;
170 else                        enum verPPC = false;
171 
172 version(PPC64)              enum verPPC64 = true;
173 else                        enum verPPC64 = false;
174 
175 version(PPC_HardFloat)      enum verPPC_HardFloat = true;
176 else                        enum verPPC_HardFloat = false;
177 
178 version(PPC_SoftFloat)      enum verPPC_SoftFloat = true;
179 else                        enum verPPC_SoftFloat = false;
180 
181 version(Posix)              enum verPosix = true;
182 else                        enum verPosix = false;
183 
184 version(S390)               enum verS390 = true;
185 else                        enum verS390 = false;
186 
187 version(S390X)              enum verS390X = true;
188 else                        enum verS390X = false;
189 
190 version(SDC)                enum verSDC = true;
191 else                        enum verSDC = false;
192 
193 version(SH)                 enum verSH = true;
194 else                        enum verSH = false;
195 
196 version(SH64)               enum verSH64 = true;
197 else                        enum verSH64 = false;
198 
199 version(SPARC)              enum verSPARC = true;
200 else                        enum verSPARC = false;
201 
202 version(SPARC64)            enum verSPARC64 = true;
203 else                        enum verSPARC64 = false;
204 
205 version(SPARC_HardFloat)    enum verSPARC_HardFloat = true;
206 else                        enum verSPARC_HardFloat = false;
207 
208 version(SPARC_SoftFloat)    enum verSPARC_SoftFloat = true;
209 else                        enum verSPARC_SoftFloat = false;
210 
211 version(SPARC_V8Plus)       enum verSPARC_V8Plus = true;
212 else                        enum verSPARC_V8Plus = false;
213 
214 version(SkyOS)              enum verSkyOS = true;
215 else                        enum verSkyOS = false;
216 
217 version(Solaris)            enum verSolaris = true;
218 else                        enum verSolaris = false;
219 
220 version(SysV3)              enum verSysV3 = true;
221 else                        enum verSysV3 = false;
222 
223 version(SysV4)              enum verSysV4 = true;
224 else                        enum verSysV4 = false;
225 
226 version(Win32)              enum verWin32 = true;
227 else                        enum verWin32 = false;
228 
229 version(Win64)              enum verWin64 = true;
230 else                        enum verWin64 = false;
231 
232 version(Windows)            enum verWindows = true;
233 else                        enum verWindows = false;
234 
235 version(X86)                enum verX86 = true;
236 else                        enum verX86 = false;
237 
238 version(X86_64)             enum verX86_64 = true;
239 else                        enum verX86_64 = false;
240 
241 version(all)                enum verAll = true;
242 else                        enum verAll = false;
243 
244 version(assert)             enum verAssert = true;
245 else                        enum verAssert = false;
246 
247 version(linux)              enum verLinux = true;
248 else                        enum verLinux = false;
249 
250 version(none)               enum verNone = true;
251 else                        enum verNone = false;
252 
253 version(unittest)           enum verUnittest = true;
254 else                        enum verUnittest = false;
255 
256 unittest
257 {
258     static if (verD_InlineAsm_X86 && verDigitalMars)
259         uint foo;
260     else
261         ulong foo;
262         
263     version(D_InlineAsm_X86)
264         version(DigitalMars)
265             static assert (is(typeof(foo) == uint)); 
266     version(D_InlineAsm_X86_64)
267         static assert (is(typeof(foo) == ulong));
268         
269         
270     static if (verD_InlineAsm_X86_64 && verDigitalMars)
271         uint bar;
272     else
273         ulong bar;  
274         
275         
276     version(D_InlineAsm_X86_64)
277         version(DigitalMars)
278             static assert (is(typeof(bar) == uint)); 
279     version(D_InlineAsm_X86)
280         static assert (is(typeof(bar) == ulong));              
281 }
282