1 module dlangide.workspace.projectsettings; 2 3 import dlangui.core.settings; 4 import dlangui.core.i18n; 5 6 import dlangide.workspace.idesettings; 7 8 import std.string; 9 import std.array; 10 import std.algorithm : equal; 11 12 const AVAILABLE_TOOLCHAINS = ["default", "dmd", "ldc", "gdc"]; 13 const AVAILABLE_ARCH = ["default", "x86", "x86_64", "arm", "arm64"]; 14 15 /// local settings for project (not supposed to put under source control) 16 class ProjectSettings : SettingsFile { 17 18 this(string filename) { 19 super(filename); 20 } 21 22 /// override to do something after loading - e.g. set defaults 23 override void afterLoad() { 24 } 25 26 override void updateDefaults() { 27 Setting build = buildSettings(); 28 build.setStringDef("toolchain", "default"); 29 build.setStringDef("arch", "default"); 30 build.setBooleanDef("verbose", false); 31 build.setStringDef("dub_additional_params", ""); 32 Setting dbg = debugSettings(); 33 dbg.setBooleanDef("external_console", true); 34 } 35 36 @property Setting buildSettings() { 37 Setting res = _setting.objectByPath("build", true); 38 return res; 39 } 40 41 @property Setting debugSettings() { 42 Setting res = _setting.objectByPath("debug", true); 43 return res; 44 } 45 46 @property bool buildVerbose() { 47 return buildSettings.getBoolean("verbose", false); 48 } 49 50 string getToolchain(IDESettings idesettings) { 51 string cfg = buildSettings.getString("toolchain"); 52 return idesettings.getToolchainCompilerExecutable(cfg); 53 } 54 55 string getDubAdditionalParams(IDESettings idesettings) { 56 string cfg = buildSettings.getString("toolchain"); 57 string globalparams = idesettings.dubAdditionalParams; 58 string globaltoolchainparams = idesettings.getToolchainAdditionalDubParams(cfg); 59 string projectparams = buildSettings.getString("dub_additional_params", ""); 60 string verbosity = buildVerbose ? "-v" : null; 61 return joinParams(globalparams, globaltoolchainparams, projectparams, verbosity); 62 } 63 64 string getArch(IDESettings idesettings) { 65 string cfg = buildSettings.getString("arch"); 66 if (cfg.equal("default")) 67 return null; 68 return cfg; 69 } 70 } 71 72 /// join parameter lists separating with space 73 string joinParams(string[] params...) pure { 74 char[] res; 75 foreach(param; params) { 76 string s = param.strip; 77 if (!s.empty) { 78 if (!res.empty) 79 res ~= " "; 80 res ~= s; 81 } 82 } 83 if (res.empty) 84 return null; 85 return res.dup; 86 }