1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

VCMIDirs: add hack to run from single directory on Mac and Linux

Also change working directory to where binary is on all platforms except Android
This commit is contained in:
Arseniy Shestakov 2017-08-13 17:20:57 +03:00
parent 40af43c46e
commit fee999300e
3 changed files with 22 additions and 7 deletions

View File

@ -232,11 +232,10 @@ int main(int argc, char * argv[])
// boost will crash without this
setenv("LANG", "C", 1);
#endif
#ifdef VCMI_APPLE
#ifndef VCMI_ANDROID
// Correct working dir executable folder (not bundle folder) so we can use executable relative paths
std::string executablePath = argv[0];
std::string workDir = executablePath.substr(0, executablePath.rfind('/'));
chdir(workDir.c_str());
boost::filesystem::current_path(boost::filesystem::system_complete(argv[0]).parent_path());
#endif
std::cout << "Starting... " << std::endl;
po::options_description opts("Allowed options");

View File

@ -452,7 +452,17 @@ bfs::path VCMIDirsOSX::userConfigPath() const { return userDataPath() / "config"
std::vector<bfs::path> VCMIDirsOSX::dataPaths() const
{
return std::vector<bfs::path>(1, "../Resources/Data");
std::vector<bfs::path> ret;
//FIXME: need some proper codepath for detecting running from build output directory
if(bfs::exists("config") && bfs::exists("Mods") && bfs::exists("vcmiserver"))
{
ret.push_back(".");
}
else
{
ret.push_back("../Resources/Data");
}
return ret;
}
bfs::path VCMIDirsOSX::libraryPath() const { return "."; }
@ -521,7 +531,13 @@ std::vector<bfs::path> VCMIDirsXDG::dataPaths() const
const char* tempResult;
ret.push_back(M_DATA_DIR);
if ((tempResult = getenv("XDG_DATA_DIRS")) != nullptr)
//FIXME: need some proper codepath for detecting running from build output directory
if(bfs::exists("config") && bfs::exists("Mods") && bfs::exists("vcmiserver"))
{
//For now we'll disable usage of system directories when VCMI running from bin directory
ret.push_back(".");
}
else if((tempResult = getenv("XDG_DATA_DIRS")) != nullptr)
{
std::string dataDirsEnv = tempResult;
std::vector<std::string> dataDirs;

View File

@ -609,7 +609,7 @@ void handleLinuxSignal(int sig)
int main(int argc, char * argv[])
{
#ifdef VCMI_APPLE
#ifndef VCMI_WINDOWS
// Correct working dir executable folder (not bundle folder) so we can use executable relative paths
std::string executablePath = argv[0];
std::string workDir = executablePath.substr(0, executablePath.rfind('/'));