fix plugin dir on osx

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2443 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
tmator 2009-02-26 07:24:50 +00:00
parent 491e24792a
commit 0b8f7439cb
5 changed files with 75 additions and 28 deletions

View File

@ -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

View File

@ -32,6 +32,15 @@
#include <stdlib.h>
#endif
#if defined(__APPLE__)
#include <CoreFoundation/CFString.h>
#include <CoreFoundation/CFUrl.h>
#include <CoreFoundation/CFBundle.h>
#include <sys/param.h>
#endif
#include <fstream>
#include <sys/stat.h>
@ -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))

View File

@ -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

View File

@ -20,14 +20,10 @@
#include "Common.h"
#include "IniFile.h"
#include "ConfigManager.h"
#ifdef __APPLE__
#include <CoreFoundation/CFString.h>
#include <CoreFoundation/CFUrl.h>
#include <CoreFoundation/CFBundle.h>
#include <sys/param.h>
#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;

View File

@ -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);