diff --git a/Externals/WiiUseSrc/Src/SConscript b/Externals/WiiUseSrc/Src/SConscript index b0565f484f..02cb68b2d0 100644 --- a/Externals/WiiUseSrc/Src/SConscript +++ b/Externals/WiiUseSrc/Src/SConscript @@ -33,6 +33,9 @@ libs = [ 'm', ] -env_wiiuse.SharedLibrary(env['libs_dir']+"wiiuse", files, LIBS=libs) +if sys.platform == 'darwin': + env_wiiuse.StaticLibrary(env['libs_dir']+"wiiuse", files, LIBS=libs) +else: + env_wiiuse.SharedLibrary(env['libs_dir']+"wiiuse", files, LIBS=libs) env['HAVE_WIIUSE'] = 1 diff --git a/Source/Core/Common/Src/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp index e649dfaaf9..e75ec1ee0c 100644 --- a/Source/Core/Common/Src/FileUtil.cpp +++ b/Source/Core/Common/Src/FileUtil.cpp @@ -32,6 +32,15 @@ #include #endif +#if defined(__APPLE__) + +#include +#include +#include +#include + +#endif + #include #include @@ -287,6 +296,54 @@ std::string GetUserDirectory() return std::string(path); } + +//osx specific functions +#if defined(__APPLE__) + +std::string GetBundleDirectory() +{ + + // Plugin path will be Dolphin.app/Contents/PlugIns + CFURLRef BundleRef; + char AppBundlePath[MAXPATHLEN]; + + // Get the main bundle for the app + BundleRef = CFBundleCopyBundleURL(CFBundleGetMainBundle()); + + CFStringRef BundlePath = CFURLCopyFileSystemPath(BundleRef, kCFURLPOSIXPathStyle); + CFStringGetFileSystemRepresentation(BundlePath, AppBundlePath, sizeof(AppBundlePath)); + + CFRelease(BundleRef); + CFRelease(BundlePath); + + return AppBundlePath; + + +} +std::string GetPluginsDirectory() +{ + + CFURLRef PluginDirRef; + char PluginPath[MAXPATHLEN]; + + PluginDirRef = CFBundleCopyBuiltInPlugInsURL(CFBundleGetMainBundle()); + + CFStringRef PluginDirPath = CFURLCopyFileSystemPath(PluginDirRef, kCFURLPOSIXPathStyle); + CFStringGetFileSystemRepresentation(PluginDirPath, PluginPath, sizeof(PluginPath)); + + CFRelease(PluginDirRef); + CFRelease(PluginDirPath); + + std::string PluginsDir = GetBundleDirectory(); + PluginsDir += DIR_SEP; + PluginsDir += PluginPath; + + return PluginsDir; + +} + + +#endif u64 GetSize(const char *filename) { if (!Exists(filename)) diff --git a/Source/Core/Common/Src/FileUtil.h b/Source/Core/Common/Src/FileUtil.h index 5befbb7b46..f88d46808f 100644 --- a/Source/Core/Common/Src/FileUtil.h +++ b/Source/Core/Common/Src/FileUtil.h @@ -55,6 +55,10 @@ bool DeleteDirRecursively(const std::string& _Directory); void GetCurrentDirectory(std::string& _rDirectory); bool SetCurrentDirectory(const std::string& _rDirectory); +#if defined(__APPLE__) +std::string GetPluginsDirectory(); +#endif + } // namespace #endif diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index 4a966dd863..8f63c08f26 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -20,14 +20,10 @@ #include "Common.h" #include "IniFile.h" #include "ConfigManager.h" -#ifdef __APPLE__ -#include -#include -#include -#include +#if defined(__APPLE__) +#include "FileUtil.h" #endif - SConfig SConfig::m_Instance; @@ -123,26 +119,8 @@ void SConfig::LoadSettings() { IniFile ini; ini.Load(CONFIG_FILE); -#ifdef __APPLE__ - // Plugin path will be Dolphin.app/Contents/PlugIns - CFURLRef BundleRef, PluginDirRef; - // Get the main bundle for the app - BundleRef = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - PluginDirRef = CFBundleCopyBuiltInPlugInsURL(CFBundleGetMainBundle()); - CFStringRef BundlePath = CFURLCopyFileSystemPath(BundleRef, kCFURLPOSIXPathStyle); - CFStringRef PluginDirPath = CFURLCopyFileSystemPath(PluginDirRef, kCFURLPOSIXPathStyle); - char AppBundlePath[MAXPATHLEN], PluginPath[MAXPATHLEN]; - CFStringGetFileSystemRepresentation(BundlePath, AppBundlePath, sizeof(AppBundlePath)); - CFStringGetFileSystemRepresentation(PluginDirPath, PluginPath, sizeof(PluginPath)); -// printf("bundle path = %s %s\n", AppBundlePath, PluginPath); - CFRelease(BundleRef); - CFRelease(BundlePath); - CFRelease(PluginDirRef); - CFRelease(PluginDirPath); - std::string PluginsDir = AppBundlePath; - PluginsDir += DIR_SEP; - PluginsDir += PluginPath; - PluginsDir += DIR_SEP; +#if defined(__APPLE__) + std::string PluginsDir = File::GetPluginsDirectory(); m_DefaultGFXPlugin = PluginsDir + DEFAULT_GFX_PLUGIN; m_DefaultDSPPlugin = PluginsDir + DEFAULT_DSP_PLUGIN; diff --git a/Source/Core/Core/Src/PluginManager.cpp b/Source/Core/Core/Src/PluginManager.cpp index 846cec1fc7..d852c0eadc 100644 --- a/Source/Core/Core/Src/PluginManager.cpp +++ b/Source/Core/Core/Src/PluginManager.cpp @@ -365,7 +365,12 @@ void CPluginManager::ScanForPlugins() m_PluginInfos.clear(); // Get plugins dir CFileSearch::XStringVector Directories; - Directories.push_back(std::string(PLUGINS_DIR)); + + #if defined(__APPLE__) + Directories.push_back(File::GetPluginsDirectory()); + #else + Directories.push_back(std::string(PLUGINS_DIR)); + #endif CFileSearch::XStringVector Extensions; Extensions.push_back("*" PLUGIN_SUFFIX);