import std.conv; import std.stdio; import std.array : split; import std.string : strip; import extra; auto getMenu () { auto foods = import ("food.txt").strip.split ("\n"); return foods; } auto getPeople () { return import ("people.txt").strip.split ("\n"); } // Put these in templates to prevent the compiler from failing to parse them // since frontend version 2.111 template VersionInt (int v) { mixin(`version(` ~ v.to!string ~ `) enum VersionInt = true; else enum VersionInt = false;`); } template DebugInt (int v) { import std.conv; mixin(`debug(` ~ v.to!string ~ `) enum DebugInt = true; else enum DebugInt = false;`); } void main (string[] args) { import std.array : join; import core.stdc.stdlib : exit; immutable request = args[1]; if (request == "menu") { version (No_Menu) { } else { writeln ("On the menu: ", getMenu.join (", ")); exit (0); } } version (With_People) { if (request == "people") { writeln ("People: ", getPeople.join (", ")); // only exit successfully if the second module also had its module version set. // this checks for issue https://github.com/mesonbuild/meson/issues/3337 if (secondModulePeopleVersionSet ()) exit (0); exit (1); } } version (With_VersionInteger) static if (VersionInt!3) exit(0); version (With_Debug) debug exit(0); version (With_DebugInteger) static if (DebugInt!(3)) exit(0); version (With_DebugIdentifier) debug(DebugIdentifier) exit(0); version (With_DebugAll) { int dbg = 0; debug dbg++; static if (DebugInt!2) dbg++; static if (DebugInt!3) dbg++; static if (DebugInt!4) dbg++; debug(DebugIdentifier) dbg++; if (dbg == 5) exit(0); } // we fail here exit (1); } unittest { writeln ("TEST"); import core.stdc.stdlib : exit; writeln(getMenu); assert (getMenu () == ["Spam", "Eggs", "Spam", "Baked Beans", "Spam", "Spam"]); exit (0); }