X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fporting.cpp;h=39b2c570587d2f083c2c9752935931321b43640d;hb=36af9bb027ed6846227282587e3414ea3d30f6c5;hp=7c7ce48eae3a62265bab4856e867334daeff3f95;hpb=f1bdc6b187836f9741ac0512a0f10414002c647d;p=dragonfireclient.git diff --git a/src/porting.cpp b/src/porting.cpp index 7c7ce48ea..39b2c5705 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -26,6 +26,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "config.h" #include "debug.h" +#include "filesys.h" + +#ifdef __APPLE__ + #include "CoreFoundation/CoreFoundation.h" +#endif namespace porting { @@ -149,10 +154,10 @@ void initializePaths() /* OS X */ - #elif defined(__APPLE__) + #elif defined(__APPLE__) || defined(__FreeBSD__) //TODO: Get path of executable. This assumes working directory is bin/ - dstream<<"WARNING: Relative path not properly supported on OS X" + dstream<<"WARNING: Relative path not properly supported on OS X and FreeBSD" <" + // Use "C:\Documents and Settings\user\Application Data\" len = GetEnvironmentVariable("APPDATA", buf, buflen); assert(len < buflen); - path_userdata = std::string(buf) + "/" + APPNAME; + path_userdata = std::string(buf) + "/" + PROJECT_NAME; /* Linux @@ -204,10 +209,15 @@ void initializePaths() pathRemoveFile(buf, '/'); - path_data = std::string(buf) + "/../share/" + APPNAME; - //path_data = std::string(INSTALL_PREFIX) + "/share/" + APPNAME; + path_data = std::string(buf) + "/../share/" + PROJECT_NAME; + //path_data = std::string(INSTALL_PREFIX) + "/share/" + PROJECT_NAME; + if (!fs::PathExists(path_data)) { + dstream<<"WARNING: data path " << path_data << " not found!"; + path_data = std::string(buf) + "/../data"; + dstream<<" Trying " << path_data << std::endl; + } - path_userdata = std::string(getenv("HOME")) + "/." + APPNAME; + path_userdata = std::string(getenv("HOME")) + "/." + PROJECT_NAME; /* OS X @@ -215,9 +225,31 @@ void initializePaths() #elif defined(__APPLE__) #include - path_userdata = std::string(getenv("HOME")) + "/Library/Application Support/" + APPNAME; - path_data = std::string("minetest-mac.app/Contents/Resources/data/"); + // Code based on + // http://stackoverflow.com/questions/516200/relative-paths-not-working-in-xcode-c + CFBundleRef main_bundle = CFBundleGetMainBundle(); + CFURLRef resources_url = CFBundleCopyResourcesDirectoryURL(main_bundle); + char path[PATH_MAX]; + if(CFURLGetFileSystemRepresentation(resources_url, TRUE, (UInt8 *)path, PATH_MAX)) + { + dstream<<"Bundle resource path: "<