On 07/10/2013 02:07 AM, H. S. Teoh wrote: > Comments / flames / pull requests welcome. ;-)
string findGDC(string argv0) { // FIXME: this does not work 100% of the time. auto c = match(baseName(argv0), `^(.*-)?g?dmd(-.*)?$`).captures; auto targetPrefix = c[1]; auto gdcDir = absolutePath(dirName(argv0)); return buildNormalizedPath(gdcDir, targetPrefix ~ "gdc" ~ c[2]); } The "obvious" solution is to have a gdmd.conf file which specifies what gdc executable to use and where to find it. This should get round problems such as gdc being installed in /opt/gdc/bin and gdmd being in /usr/local/bin. The default would be to select the gdc used to actually build gdmd, with an option to configure for alternative locations. findGDC() should probably prioritize in this order: * If there's a gdmd.conf, use the gdcDir specified. There probably needs to be a search priority of where to find the .conf file. * If not, use which gdc to identify what gdc to call (and possibly display a warning that there's no gdmd.conf?) On a related note, can you clarify what the issues are with findScriptPath ... ? string findScriptPath(string argv0) { // FIXME: this is not 100% reliable; we need equivalent functionality to // Perl's FindBin. return absolutePath(dirName(argv0)); }