1 module install; 2 3 import std.stdio; 4 import std.algorithm; 5 import std.range; 6 import std.array : array; 7 import getopt = std.getopt; 8 9 import mage; 10 11 debug { 12 bool progress(in Path src, in Path dest) { 13 writefln(" %s => %s", src, dest); 14 return true; 15 } 16 } 17 else { 18 bool progress(A...)(A a) { return true; } 19 } 20 21 int main(string[] args) { 22 23 string srcStr; 24 string destStr; 25 26 auto getoptResult = getopt.getopt(args, 27 getopt.config.required, 28 "src|s", "The root of the repo.", &srcStr, 29 "dest|d", "The dir to install to.", &destStr 30 ); 31 32 if(getoptResult.helpWanted) { 33 getopt.defaultGetoptPrinter("Install mage to a specified dir.", getoptResult.options); 34 return 1; 35 } 36 37 auto root = Path(srcStr).asNormalizedPath; 38 assert(root.exists, "Source dir does not exist!"); 39 debug writefln("Source: %s", root.resolved()); 40 41 auto install = Path(destStr).asNormalizedPath; 42 if(!install.exists) { 43 install.mkdir(true); 44 } 45 else { 46 assert(install.isDir, "Install target must either not exist or be a directory!"); 47 } 48 debug writefln("Destination: %s", install.resolved()); 49 50 auto thirdParty = root ~ "thirdParty"; 51 auto output = root ~ "output"; 52 auto srcCode = root ~ "code"; 53 auto destImport = install ~ "import"; 54 if(!destImport.exists) { 55 destImport.mkdir(true); 56 } 57 auto destCode = install ~ "code"; 58 if(!destCode.exists) { 59 destCode.mkdir(true); 60 } 61 auto destLib = install; 62 if(!destLib.exists) { 63 destLib.mkdir(true); 64 } 65 66 // Code 67 (srcCode ~ "lib").copyTo!progress(destImport); 68 (srcCode ~ "app").copyTo!progress(destImport); 69 (srcCode ~ "install" ~ "wand.d").copyTo!progress(destCode); 70 71 // Binaries/Output 72 (output ~ "libmage.lib").copyTo!progress(destLib); 73 (output ~ "mage.exe").copyTo!progress(install); 74 75 // Third-party Code 76 (thirdParty ~ "pathlib" ~ "code").copyTo!progress(destImport); 77 78 // Third-Party Binaries/Output 79 (thirdParty ~ "pathlib" ~ "output").copyTo!progress(destLib); 80 81 return 0; 82 }