xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/src/std/system.d (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
1*627f7eb2Smrg // Written in the D programming language.
2*627f7eb2Smrg 
3*627f7eb2Smrg /**
4*627f7eb2Smrg  * Information about the target operating system, environment, and CPU.
5*627f7eb2Smrg  *
6*627f7eb2Smrg  *  Copyright: Copyright Digital Mars 2000 - 2011
7*627f7eb2Smrg  *  License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
8*627f7eb2Smrg  *  Authors:   $(HTTP digitalmars.com, Walter Bright) and Jonathan M Davis
9*627f7eb2Smrg  *  Source:    $(PHOBOSSRC std/_system.d)
10*627f7eb2Smrg  */
11*627f7eb2Smrg module std.system;
12*627f7eb2Smrg 
13*627f7eb2Smrg immutable
14*627f7eb2Smrg {
15*627f7eb2Smrg     /++
16*627f7eb2Smrg         Operating system.
17*627f7eb2Smrg 
18*627f7eb2Smrg         Note:
19*627f7eb2Smrg             This is for cases where you need a value representing the OS at
20*627f7eb2Smrg             runtime. If you're doing something which should compile differently
21*627f7eb2Smrg             on different OSes, then please use $(D version (Windows)),
22*627f7eb2Smrg             $(D version (linux)), etc.
23*627f7eb2Smrg 
24*627f7eb2Smrg         See_Also:
25*627f7eb2Smrg             $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
26*627f7eb2Smrg       +/
27*627f7eb2Smrg     enum OS
28*627f7eb2Smrg     {
29*627f7eb2Smrg         win32 = 1, /// Microsoft 32 bit Windows systems
30*627f7eb2Smrg         win64,     /// Microsoft 64 bit Windows systems
31*627f7eb2Smrg         linux,     /// All Linux Systems, except for Android
32*627f7eb2Smrg         osx,       /// Mac OS X
33*627f7eb2Smrg         freeBSD,   /// FreeBSD
34*627f7eb2Smrg         netBSD,    /// NetBSD
35*627f7eb2Smrg         dragonFlyBSD, /// DragonFlyBSD
36*627f7eb2Smrg         solaris,   /// Solaris
37*627f7eb2Smrg         android,   /// Android
38*627f7eb2Smrg         otherPosix /// Other Posix Systems
39*627f7eb2Smrg     }
40*627f7eb2Smrg 
41*627f7eb2Smrg     /// The OS that the program was compiled for.
42*627f7eb2Smrg     version (Win32)        OS os = OS.win32;
43*627f7eb2Smrg     else version (Win64)   OS os = OS.win64;
44*627f7eb2Smrg     else version (Android) OS os = OS.android;
45*627f7eb2Smrg     else version (linux)   OS os = OS.linux;
46*627f7eb2Smrg     else version (OSX)     OS os = OS.osx;
47*627f7eb2Smrg     else version (FreeBSD) OS os = OS.freeBSD;
48*627f7eb2Smrg     else version (NetBSD)  OS os = OS.netBSD;
49*627f7eb2Smrg     else version (DragonFlyBSD) OS os = OS.dragonFlyBSD;
50*627f7eb2Smrg     else version (Posix)   OS os = OS.otherPosix;
51*627f7eb2Smrg     else static assert(0, "Unknown OS.");
52*627f7eb2Smrg 
53*627f7eb2Smrg     /++
54*627f7eb2Smrg         Byte order endianness.
55*627f7eb2Smrg 
56*627f7eb2Smrg         Note:
57*627f7eb2Smrg             This is intended for cases where you need to deal with endianness at
58*627f7eb2Smrg             runtime. If you're doing something which should compile differently
59*627f7eb2Smrg             depending on whether you're compiling on a big endian or little
60*627f7eb2Smrg             endian machine, then please use $(D version (BigEndian)) and
61*627f7eb2Smrg             $(D version (LittleEndian)).
62*627f7eb2Smrg 
63*627f7eb2Smrg         See_Also:
64*627f7eb2Smrg             $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
65*627f7eb2Smrg       +/
66*627f7eb2Smrg     enum Endian
67*627f7eb2Smrg     {
68*627f7eb2Smrg         bigEndian,   /// Big endian byte order
69*627f7eb2Smrg         littleEndian /// Little endian byte order
70*627f7eb2Smrg     }
71*627f7eb2Smrg 
72*627f7eb2Smrg     /// The endianness that the program was compiled for.
73*627f7eb2Smrg     version (LittleEndian) Endian endian = Endian.littleEndian;
74*627f7eb2Smrg     else                  Endian endian = Endian.bigEndian;
75*627f7eb2Smrg }
76*627f7eb2Smrg 
77