Mac Build - Fix bundle directory location

actorid
Ardekantur 15 years ago
parent 3bb9d06e58
commit 9c6fcc7be5

@ -56,7 +56,12 @@ void OMW::Engine::addResourcesDirectory (const boost::filesystem::path& path)
void OMW::Engine::setDataDir (const boost::filesystem::path& dataDir)
{
mDataDir = boost::filesystem::system_complete (dataDir);
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
mDataDir = boost::filesystem::system_complete (macBundlePath() + "/Contents/MacOS/" + dataDir.directory_string());
#else
mDataDir = boost::filesystem::system_complete (dataDir);
#endif
}
// Set start cell name (only interiors for now)
@ -85,14 +90,21 @@ void OMW::Engine::go()
assert (!mMaster.empty());
std::cout << "Hello, fellow traveler!\n";
std::cout << "Your data directory for today is: " << mDataDir << "\n";
std::cout << "Initializing OGRE\n";
std::string plugin_cfg_location = "plugins.cfg";
std::string ogre_cfg_location = "ogre.cfg";
const char* plugCfg = "plugins.cfg";
#ifdef OGRE_PLATFORM == OGRE_PLATFORM_APPLE
std::cout << "[Apple]" << std::endl;
plugin_cfg_location = macBundlePath() + "/Contents/MacOS/" + plugin_cfg_location;
ogre_cfg_location = macBundlePath() + "/Contents/MacOS/" + ogre_cfg_location;
#endif
mOgre.configure(!isFile("ogre.cfg"), plugCfg, false);
mOgre.configure(!isFile(ogre_cfg_location.c_str()), plugin_cfg_location.c_str(), false);
addResourcesDirectory (mDataDir / "Meshes");
addResourcesDirectory (mDataDir / "Textures");

@ -5,6 +5,7 @@
#include <boost/program_options.hpp>
#include "tools/fileops.hpp"
#include "engine.hpp"
using namespace std;
@ -30,18 +31,18 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine)
boost::program_options::variables_map variables;
std::ifstream configFile ("openmw.cfg");
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
std::string configFilePath(macBundlePath() + "/Contents/MacOS/openmw.cfg");
std::ifstream configFile (configFilePath.c_str());
#else
std::ifstream configFile ("openmw.cfg");
#endif
boost::program_options::parsed_options valid_opts =
boost::program_options::command_line_parser(argc, argv).options(desc).allow_unregistered().run();
boost::program_options::store(valid_opts, variables);
boost::program_options::notify(variables);
/*
boost::program_options::store (
boost::program_options::parse_command_line (argc, argv, desc), variables);
boost::program_options::notify (variables);
*/
if (configFile.is_open())
boost::program_options::store (

@ -1,8 +1,34 @@
#include "fileops.hpp"
#include <boost/filesystem.hpp>
#include <string>
bool isFile(const char *name)
{
boost::filesystem::path cfg_file_path(name);
return boost::filesystem::exists(cfg_file_path);
}
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
#include <CoreFoundation/CoreFoundation.h>
std::string macBundlePath()
{
char path[1024];
CFBundleRef mainBundle = CFBundleGetMainBundle();
assert(mainBundle);
CFURLRef mainBundleURL = CFBundleCopyBundleURL(mainBundle);
assert(mainBundleURL);
CFStringRef cfStringRef = CFURLCopyFileSystemPath(mainBundleURL, kCFURLPOSIXPathStyle);
assert(cfStringRef);
CFStringGetCString(cfStringRef, path, 1024, kCFStringEncodingASCII);
CFRelease(mainBundleURL);
CFRelease(cfStringRef);
return std::string(path);
}
#endif

@ -1,7 +1,13 @@
#ifndef __FILEOPS_H_
#define __FILEOPS_H_
#include <string>
/// Check if a given path is an existing file (not a directory)
bool isFile(const char *name);
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
std::string macBundlePath();
#endif
#endif

Loading…
Cancel
Save