-string Engine::findMothursPath(){
- try {
-
- string envPath = getenv("PATH");
- string mothurPath = "";
-
- //delimiting path char
- char delim;
- #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
- delim = ':';
- #else
- delim = ';';
- #endif
-
- //break apart path variable by ':'
- vector<string> dirs;
- mout->splitAtChar(envPath, dirs, delim);
-
- //get path related to mothur
- for (int i = 0; i < dirs.size(); i++) {
- //to lower so we can find it
- string tempLower = "";
- for (int j = 0; j < dirs[i].length(); j++) { tempLower += tolower(dirs[i][j]); }
-
- //is this mothurs path?
- if (tempLower.find("mothur") != -1) { mothurPath = dirs[i]; break; }
- }
-
- if (mothurPath != "") {
- //add mothur so it looks like what argv would look like
- #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
- mothurPath += "/mothur";
- #else
- mothurPath += "\\mothur";
- #endif
- }else {
- //okay mothur is not in the path, so the folder mothur is in must be in the path
- //lets find out which one
-
- //get path related to mothur
- for (int i = 0; i < dirs.size(); i++) {
-
- //is this mothurs path?
- ifstream in;
- string tempIn = dirs[i];
- #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
- tempIn += "/mothur";
- #else
- tempIn += "\\mothur";
- #endif
- mout->openInputFile(tempIn, in, "");
-
- //if this file exists
- if (in) { in.close(); mothurPath = tempIn; break; }
- }
- }
-
- return mothurPath;
-
- }
- catch(exception& e) {
- mout->errorOut(e, "Engine", "findMothursPath");
- exit(1);
- }
-}