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