| @@ -46,6 +46,10 @@ void Init(int argc, char *argv[], | |||
| { | |||
| using namespace std; | |||
| Log::Debug("project dir: “%s”\n", projectdir.C()); | |||
| Log::Debug("solution dir: “%s”\n", solutiondir.C()); | |||
| Log::Debug("source subdir: “%s”\n", sourcesubdir.C()); | |||
| /* | |||
| * Retrieve binary directory, defaulting to no directory on Android | |||
| * and emscripten, and the current directory on other platforms. | |||
| @@ -79,46 +83,45 @@ void Init(int argc, char *argv[], | |||
| } | |||
| #endif | |||
| bool got_rootdir = false; | |||
| /* | |||
| * Find the common prefix between project dir and solution dir. | |||
| * If project dir and solution dir are set, add them to data; also | |||
| * add current directory in case we were launched from another place. | |||
| */ | |||
| bool got_rootdir = false; | |||
| for (int i = 0; ; i++) | |||
| if (!got_rootdir && projectdir.Count() && solutiondir.Count()) | |||
| { | |||
| #if _WIN32 | |||
| using std::toupper; | |||
| bool mismatch = toupper(projectdir[i]) != toupper(solutiondir[i]); | |||
| #else | |||
| bool mismatch = projectdir[i] != solutiondir[i]; | |||
| #endif | |||
| if (mismatch || projectdir[i] == '\0') | |||
| { | |||
| /* FIXME: at this point we should check whether the binary | |||
| * was launched from this subdirectory; from now we just | |||
| * assume it was. */ | |||
| if (i) | |||
| { | |||
| String rootdir = solutiondir; | |||
| if (rootdir.Last() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| rootdir += "../../src/"; /* FIXME: use SEPARATOR? */ | |||
| AddDataDir(rootdir); | |||
| rootdir = projectdir; | |||
| if (rootdir.Last() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| AddDataDir(rootdir); | |||
| got_rootdir = true; | |||
| } | |||
| break; | |||
| } | |||
| /* This data dir is for standalone executables */ | |||
| String rootdir = binarydir; | |||
| if (rootdir.Count() && rootdir.Last() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| AddDataDir(rootdir); | |||
| /* This data dir is for engine stuff */ | |||
| rootdir = solutiondir; | |||
| if (rootdir.Count() && rootdir.Last() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| rootdir += "../../src/"; /* FIXME: use SEPARATOR? */ | |||
| AddDataDir(rootdir); | |||
| /* This data dir is for project-specific stuff */ | |||
| rootdir = projectdir; | |||
| if (rootdir.Count() && rootdir.Last() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| AddDataDir(rootdir); | |||
| got_rootdir = true; | |||
| } | |||
| /* If no rootdir found, use the executable location */ | |||
| /* | |||
| * If no project dir, use the executable location as the starting point | |||
| * to guess the data dir. | |||
| */ | |||
| if (!got_rootdir) | |||
| { | |||
| /* First climb back the hierarchy to get to the engine root and | |||
| * add a data dir for engine stuff. */ | |||
| String rootdir = binarydir; | |||
| if (rootdir.Count() && rootdir.Last() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| @@ -132,6 +135,7 @@ void Init(int argc, char *argv[], | |||
| rootdir += "src/"; | |||
| AddDataDir(rootdir); | |||
| /* This data dir is for project-specific stuff */ | |||
| rootdir = binarydir; | |||
| AddDataDir(rootdir); | |||