// SemiTwist D Tools: Library // Written in the D programming language. module semitwist.util.os; import semitwist.util.all; private string genOSParam(string name, string[] values) { assert(values.length == OS_length, "Wrong number of OSes provided for OS param '"~name~"'"); string str = ""; foreach(int i, string value; values) { string osStr = enumOSToString(cast(OS)i); str ~= "enum string "~name~"_"~osStr~" = "~escapeDDQS!string(value)~";\n"~ "static if(os == OS."~osStr~")\n"~ " enum string "~name~" = "~name~"_"~osStr~";\n"; } return str; } mixin(genEnum("OS", ["Windows"[], "Linux", "BSD", "OSX"])); version(Windows) enum OS os = OS.Windows; version(linux) enum OS os = OS.Linux; version(freebsd) enum OS os = OS.BSD; version(OSX) enum OS os = OS.OSX; mixin(genOSParam("objExt", [ ".obj" [], ".o", ".o", ".o" ])); mixin(genOSParam("libExt", [ ".lib" [], ".a", ".a", ".a" ])); mixin(genOSParam("exeExt", [ ".exe" [], "", "", "" ])); mixin(genOSParam("dirSep", [ "\\" [], "/", "/", "/" ])); mixin(genOSParam("nlStr", [ "\r\n" [], "\n", "\n", "\n" ])); enum nlStr_Mac9 = "\r"; mixin(genOSParam("selfExeLink", [ ""[], "/proc/self/exe", "/proc/curproc/file", "/proc/curproc/file" ]));