Linux global build. At least the basic footwork is done here.

Basic usage:  "sudo scons install=global install"
Hopefully this doesn't break builds on Macs.  I have tested this on linux and windows.


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4994 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Glenn Rice
2010-02-02 21:56:29 +00:00
parent a090876bbd
commit feba09f7a3
79 changed files with 652 additions and 403 deletions
+78 -39
View File
@@ -110,6 +110,13 @@ vars.AddVariables(
BoolVariable('wxgl', 'Set For Building with WX GL libs (WIP)', False),
BoolVariable('opencl', 'Build with OpenCL', False),
BoolVariable('nojit', 'Remove entire jit cores', False),
PathVariable('userdir', 'Set the name of the user data directory in home', '.dolphin-emu', PathVariable.PathAccept),
EnumVariable('install', 'Choose a local or global installation', 'local',
allowed_values = ('local', 'global'),
ignorecase = 2
),
PathVariable('prefix', 'Installation prefix (only used for a global build)', '/usr', PathVariable.PathAccept),
PathVariable('destdir', 'Temporary install location (for package building)', None, PathVariable.PathAccept),
EnumVariable('flavor', 'Choose a build flavor', 'release',
allowed_values = ('release', 'devel', 'debug', 'fastlog', 'prof'),
ignorecase = 2
@@ -225,6 +232,56 @@ env['build_dir'] = os.path.join(basedir, 'Build', platform.system() + '-' + plat
VariantDir(env['build_dir'], '.', duplicate=0)
# Where do we run from
env['base_dir'] = os.getcwd()+ '/'
# install paths
extra=''
if flavour == 'debug':
extra = '-debug'
elif flavour == 'prof':
extra = '-prof'
# TODO: support global install
if (ARGUMENTS.get('install') == 'global'):
env['prefix'] = os.path.join(env['prefix'] + os.sep)
else:
env['prefix'] = os.path.join(env['base_dir'] + 'Binary', platform.system() + '-' + platform.machine() + extra +os.sep)
#TODO add lib
if (ARGUMENTS.get('install') == 'global'):
env['plugin_dir'] = env['prefix'] + 'lib/dolphin-emu/'
else:
if sys.platform == 'darwin':
env['plugin_dir'] = env['prefix'] + 'Dolphin.app/Contents/PlugIns/'
else:
env['plugin_dir'] = env['prefix'] + 'Plugins/'
#TODO add bin
if (ARGUMENTS.get('install') == 'global'):
env['binary_dir'] = env['prefix'] + 'bin/'
else:
env['binary_dir'] = env['prefix']
#TODO add bin
if (ARGUMENTS.get('install') == 'global'):
env['libs_dir'] = env['prefix'] + 'lib/'
else:
env['libs_dir'] = env['prefix'] + 'Libs/'
#TODO where should this go?
if (ARGUMENTS.get('install') == 'global'):
env['data_dir'] = env['prefix'] + "share/dolphin-emu/"
else:
if sys.platform == 'darwin':
env['data_dir'] = env['prefix'] + 'Dolphin.app/Contents/'
else:
env['data_dir'] = env['prefix']
env['RPATH'].append(env['libs_dir'])
# static libs goes here
env['local_libs'] = env['build_dir'] + os.sep + 'libs' + os.sep
env['LIBPATH'].append(env['local_libs'])
env['LIBPATH'].append(env['libs_dir'])
conf = env.Configure(custom_tests = tests,
config_h="Source/Core/Common/Src/Config.h")
@@ -326,6 +383,10 @@ conf.Define('HAVE_X11', env['HAVE_X11'])
conf.Define('HAVE_COCOA', env['HAVE_COCOA'])
conf.Define('HAVE_PORTAUDIO', env['HAVE_PORTAUDIO'])
conf.Define('HAVE_SFML', env['HAVE_SFML'])
conf.Define('USER_DIR', "\"" + env['userdir'] + "\"")
if (ARGUMENTS.get('install') == 'global'):
conf.Define('DATA_DIR', "\"" + env['data_dir'] + "\"")
conf.Define('LIBS_DIR', "\"" + env['libs_dir'] + "\"")
# lua
env['LUA_USE_MACOSX'] = 0
@@ -376,48 +437,22 @@ else:
# add methods from utils to env
env.AddMethod(utils.filterWarnings)
# Where do we run from
env['base_dir'] = os.getcwd()+ '/'
# install paths
extra=''
if flavour == 'debug':
extra = '-debug'
elif flavour == 'prof':
extra = '-prof'
# TODO: support global install
env['prefix'] = os.path.join(env['base_dir'] + 'Binary', platform.system() + '-' + platform.machine() + extra +os.sep)
#TODO add lib
if sys.platform == 'darwin':
env['plugin_dir'] = env['prefix'] + 'Dolphin.app/Contents/PlugIns/'
else:
env['plugin_dir'] = env['prefix'] + 'Plugins/'
#TODO add bin
env['binary_dir'] = env['prefix']
#TODO add bin
env['libs_dir'] = env['prefix'] + 'Libs/'
#TODO where should this go?
if sys.platform == 'darwin':
env['data_dir'] = env['prefix'] + 'Dolphin.app/Contents/'
else:
env['data_dir'] = env['prefix']
env['RPATH'].append(env['libs_dir'])
# static libs goes here
env['local_libs'] = env['build_dir'] + os.sep + 'libs' + os.sep
env['LIBPATH'].append(env['local_libs'])
env['LIBPATH'].append(env['libs_dir'])
rev = utils.GenerateRevFile(env['flavor'],
"Source/Core/Common/Src/svnrev_template.h",
"Source/Core/Common/Src/svnrev.h")
# print a nice progress indication when not compiling
Progress(['-\r', '\\\r', '|\r', '/\r'], interval = 5)
# Setup destdir for package building
# Warning: The program will not run from this location. It is assumed the
# package will later install it to the prefix as it was defined before this.
if env.has_key('destdir'):
env['prefix'] = env['destdir'] + env['prefix']
env['plugin_dir'] = env['destdir'] + env['plugin_dir']
env['binary_dir'] = env['destdir'] + env['binary_dir']
env['libs_dir'] = env['destdir'] + env['libs_dir']
env['data_dir'] = env['destdir'] + env['data_dir']
# die on unknown variables
unknown = vars.UnknownVariables()
if unknown:
@@ -437,12 +472,16 @@ for subdir in dirs:
)
# Data install
env.Install(env['data_dir'], 'Data/Sys')
env.Install(env['data_dir'], 'Data/User')
if sys.platform == 'darwin':
env.Install(env['data_dir'], 'Data/Sys')
env.Install(env['data_dir'], 'Data/User')
env.Install(env['binary_dir'] + 'Dolphin.app/Contents/Resources/',
'Source/Core/DolphinWX/resources/Dolphin.icns')
else:
env.InstallAs(env['data_dir'] + 'sys', 'Data/Sys')
env.InstallAs(env['data_dir'] + 'user', 'Data/User')
env.Alias('install', env['prefix'])
if env['bundle']:
# Make tar ball (TODO put inside normal dir)
+88 -98
View File
@@ -18,6 +18,10 @@
#ifndef _COMMON_PATHS_H_
#define _COMMON_PATHS_H_
#ifdef __linux__
#include "Config.h"
#endif
// Library suffix/prefix
#ifdef _WIN32
#define PLUGIN_PREFIX ""
@@ -34,18 +38,25 @@
#define DIR_SEP "/"
#define DIR_SEP_CHR '/'
#if defined __APPLE__
// Location of the plugins
#ifdef LIBS_DIR
#define PLUGINS_DIR LIBS_DIR "dolphin-emu"
#elif defined __APPLE__
#define PLUGINS_DIR "Contents/PlugIns"
#define SYSDATA_DIR "Contents/Sys"
#else
#define PLUGINS_DIR "Plugins"
#define SYSDATA_DIR "Sys"
#endif
#define ROOT_DIR "."
#define USERDATA_DIR "User"
// Where data directory is
#ifdef _WIN32
// The user data dir
#define ROOT_DIR "."
#ifdef __linux__
#define USERDATA_DIR "user"
#else
#define USERDATA_DIR "User"
#endif
#ifdef USER_DIR
#define DOLPHIN_DATA_DIR USER_DIR
#elif defined _WIN32
#define DOLPHIN_DATA_DIR "Dolphin"
#elif defined __APPLE__
#define DOLPHIN_DATA_DIR "Library/Application Support/Dolphin"
@@ -53,119 +64,101 @@
#define DOLPHIN_DATA_DIR ".dolphin"
#endif
// Shared data dirs (Sys and shared User for linux)
#ifdef DATA_DIR
#define SYSDATA_DIR DATA_DIR "Sys"
#define SHARED_USER_DIR DATA_DIR USERDATA_DIR DIR_SEP
#elif defined __APPLE__
#define SYSDATA_DIR "Contents/Sys"
#elif defined __linux__
#define SYSDATA_DIR "sys"
#define SHARED_USER_DIR ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP
#else
#define SYSDATA_DIR "Sys"
#endif
// Dirs in both User and Sys
#define EUR_DIR "EUR"
#define USA_DIR "USA"
#define JAP_DIR "JAP"
// Dirs in User
#define GC_USER_DIR "GC"
#define WII_USER_DIR "Wii"
#define WII_SYSCONF_DIR "shared2/sys"
#define CONFIG_DIR "Config"
#define GAMECONFIG_DIR "GameConfig"
#define MAPS_DIR "Maps"
#define CACHE_DIR "Cache"
#define SHADERCACHE_DIR "ShaderCache"
#define STATESAVES_DIR "StateSaves"
#define SCREENSHOTS_DIR "ScreenShots"
#define DUMP_DIR "Dump"
#define DUMP_TEXTURES_DIR "Textures"
#define LOAD_DIR "Load"
#define HIRES_TEXTURES_DIR "Textures"
#define DUMP_FRAMES_DIR "Frames"
#define DUMP_DSP_DIR "DSP"
#define LOGS_DIR "Logs"
#define MAIL_LOGS_DIR "Mail"
// Dirs in Sys
#define GC_SYS_DIR "GC"
#define WII_SYS_DIR "Wii"
// Subdirs in the User dir returned by GetUserPath(D_USER_IDX)
#define GC_USER_DIR "GC"
#define WII_USER_DIR "Wii"
#define CONFIG_DIR "Config"
#define GAMECONFIG_DIR "GameConfig"
#define MAPS_DIR "Maps"
#define CACHE_DIR "Cache"
#define SHADERCACHE_DIR "ShaderCache"
#define STATESAVES_DIR "StateSaves"
#define SCREENSHOTS_DIR "ScreenShots"
#define LOAD_DIR "Load"
#define HIRES_TEXTURES_DIR LOAD_DIR DIR_SEP "Textures"
#define DUMP_DIR "Dump"
#define DUMP_TEXTURES_DIR DUMP_DIR DIR_SEP "Textures"
#define DUMP_FRAMES_DIR DUMP_DIR DIR_SEP "Frames"
#define DUMP_DSP_DIR DUMP_DIR DIR_SEP "DSP"
#define LOGS_DIR "Logs"
#define MAIL_LOGS_DIR LOGS_DIR DIR_SEP "Mail"
#define SHADERS_DIR "Shaders"
#define WII_SYSCONF_DIR WII_USER_DIR DIR_SEP "shared2" DIR_SEP "sys"
#define WII_MENU_DIR WII_USER_DIR DIR_SEP "title" DIR_SEP "00000001" DIR_SEP "00000002" DIR_SEP "content"
// Filenames
#define DOLPHIN_CONFIG "Dolphin.ini"
#define DEBUGGER_CONFIG "Debugger.ini"
#define LOGGER_CONFIG "Logger.ini"
#define TOTALDB "totaldb.dsy"
#define MAIN_LOG "dolphin.log"
// Files in the directory returned by GetUserPath(D_CONFIG_IDX)
#define DOLPHIN_CONFIG "Dolphin.ini"
#define DEBUGGER_CONFIG "Debugger.ini"
#define LOGGER_CONFIG "Logger.ini"
// Files in the directory returned by GetUserPath(D_LOGS_IDX)
#define MAIN_LOG "dolphin.log"
// Files in the directory returned by GetUserPath(D_WIISYSCONF_IDX)
#define WII_SYSCONF "SYSCONF"
// Files in the directory returned by GetUserPath(D_DUMP_IDX)
#define RAM_DUMP "ram.raw"
#define ARAM_DUMP "aram.raw"
// Plugin files
#define DEFAULT_GFX_PLUGIN PLUGIN_PREFIX "Plugin_VideoOGL" PLUGIN_SUFFIX
#define DEFAULT_DSP_PLUGIN PLUGIN_PREFIX "Plugin_DSP_HLE" PLUGIN_SUFFIX
#define DEFAULT_PAD_PLUGIN PLUGIN_PREFIX "Plugin_GCPad" PLUGIN_SUFFIX
#define DEFAULT_WIIMOTE_PLUGIN PLUGIN_PREFIX "Plugin_Wiimote" PLUGIN_SUFFIX
#define FONT_ANSI "font_ansi.bin"
#define FONT_SJIS "font_sjis.bin"
// Sys files
#define TOTALDB "totaldb.dsy"
#define DSP_IROM "dsp_rom.bin"
#define DSP_COEF "dsp_coef.bin"
#define FONT_ANSI "font_ansi.bin"
#define FONT_SJIS "font_sjis.bin"
#define GC_IPL "IPL.bin"
#define GC_SRAM "SRAM.raw"
#define GC_MEMCARDA "MemoryCardA"
#define GC_MEMCARDB "MemoryCardB"
#define DSP_IROM "dsp_rom.bin"
#define DSP_COEF "dsp_coef.bin"
#define GC_IPL "IPL.bin"
#define GC_SRAM "SRAM.raw"
#define GC_MEMCARDA "MemoryCardA"
#define GC_MEMCARDB "MemoryCardB"
#define WII_EUR_SETTING "setting-eur.txt"
#define WII_USA_SETTING "setting-usa.txt"
#define WII_JAP_SETTING "setting-jpn.txt"
#define WII_SYSCONF "SYSCONF"
#define RAM_DUMP "ram.raw"
#define ARAM_DUMP "aram.raw"
// Subdirs in Sys
#define GC_SYS_DIR "GC"
#define WII_SYS_DIR "Wii"
// Shorts - dirs
// User dirs
#define FULL_USERDATA_DIR ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP
#define T_FULLUSERDATA_DIR _T(ROOT_DIR) _T(DIR_SEP) _T(USERDATA_DIR) _T(DIR_SEP)
#define FULL_GC_USER_DIR FULL_USERDATA_DIR GC_USER_DIR DIR_SEP
#define T_FULL_GC_USER_DIR T_FULLUSERDATA_DIR _T(GC_USER_DIR) _T(DIR_SEP)
#define FULL_WII_USER_DIR FULL_USERDATA_DIR WII_USER_DIR DIR_SEP
#define FULL_WII_ROOT_DIR FULL_USERDATA_DIR WII_USER_DIR // This is the "root" for Wii fs, so that it may be used with created devices
#define FULL_GAMECONFIG_DIR FULL_USERDATA_DIR GAMECONFIG_DIR DIR_SEP
#define T_FULL_GAMECONFIG_DIR T_FULLUSERDATA_DIR _T(GAMECONFIG_DIR) _T(DIR_SEP)
#define FULL_CONFIG_DIR FULL_USERDATA_DIR CONFIG_DIR DIR_SEP
#define FULL_CACHE_DIR FULL_USERDATA_DIR CACHE_DIR DIR_SEP
#define FULL_SHADERCACHE_DIR FULL_USERDATA_DIR SHADERCACHE_DIR DIR_SEP
#define FULL_STATESAVES_DIR FULL_USERDATA_DIR STATESAVES_DIR DIR_SEP
#define FULL_SCREENSHOTS_DIR FULL_USERDATA_DIR SCREENSHOTS_DIR DIR_SEP
#define FULL_FRAMES_DIR FULL_USERDATA_DIR DUMP_DIR DIR_SEP DUMP_FRAMES_DIR
#define FULL_DUMP_DIR FULL_USERDATA_DIR DUMP_DIR DIR_SEP
#define FULL_DUMP_TEXTURES_DIR FULL_USERDATA_DIR DUMP_DIR DIR_SEP DUMP_TEXTURES_DIR DIR_SEP
#define FULL_HIRES_TEXTURES_DIR FULL_USERDATA_DIR LOAD_DIR DIR_SEP HIRES_TEXTURES_DIR DIR_SEP
#define FULL_DSP_DUMP_DIR FULL_USERDATA_DIR DUMP_DIR DIR_SEP DUMP_DSP_DIR DIR_SEP
#define FULL_LOGS_DIR FULL_USERDATA_DIR LOGS_DIR DIR_SEP
#define FULL_MAIL_LOGS_DIR FULL_LOGS_DIR MAIL_LOGS_DIR DIR_SEP
#define FULL_MAPS_DIR FULL_USERDATA_DIR MAPS_DIR DIR_SEP
#define FULL_WII_SYSCONF_DIR FULL_WII_USER_DIR WII_SYSCONF_DIR DIR_SEP
// Sys dirs
// Full Sys dirs
#define FULL_SYSDATA_DIR ROOT_DIR DIR_SEP SYSDATA_DIR DIR_SEP
#define FULL_GC_SYS_DIR FULL_SYSDATA_DIR GC_SYS_DIR DIR_SEP
//#define GC_SYS_EUR_DIR FULL_GC_SYS_DIR EUR_DIR
//#define GC_SYS_USA_DIR FULL_GC_SYS_DIR USA_DIR
//#define GC_SYS_JAP_DIR FULL_GC_SYS_DIR JAP_DIR
#define FULL_GC_SYS_DIR FULL_SYSDATA_DIR GC_SYS_DIR DIR_SEP
//#define GC_SYS_EUR_DIR FULL_GC_SYS_DIR EUR_DIR
//#define GC_SYS_USA_DIR FULL_GC_SYS_DIR USA_DIR
//#define GC_SYS_JAP_DIR FULL_GC_SYS_DIR JAP_DIR
#define FULL_WII_SYS_DIR FULL_SYSDATA_DIR WII_SYS_DIR DIR_SEP
// Shorts - files
// User files
#define CONFIG_FILE FULL_CONFIG_DIR DOLPHIN_CONFIG
#define DEBUGGER_CONFIG_FILE FULL_CONFIG_DIR DEBUGGER_CONFIG
#define LOGGER_CONFIG_FILE FULL_CONFIG_DIR LOGGER_CONFIG
// Sys files with full path
#define TOTALDB_FILE FULL_SYSDATA_DIR TOTALDB
#define TOTALDB_FILE FULL_SYSDATA_DIR TOTALDB
#define MAINRAM_DUMP_FILE FULL_DUMP_DIR RAM_DUMP
#define ARAM_DUMP_FILE FULL_DUMP_DIR ARAM_DUMP
#define GC_SRAM_FILE FULL_USERDATA_DIR GC_USER_DIR DIR_SEP GC_SRAM
#define MAIN_LOG_FILE FULL_LOGS_DIR MAIN_LOG
// Sys files
#define FONT_ANSI_FILE FULL_GC_SYS_DIR FONT_ANSI
#define FONT_SJIS_FILE FULL_GC_SYS_DIR FONT_SJIS
@@ -175,8 +168,5 @@
#define WII_EUR_SETTING_FILE FULL_WII_SYS_DIR WII_EUR_SETTING
#define WII_USA_SETTING_FILE FULL_WII_SYS_DIR WII_USA_SETTING
#define WII_JAP_SETTING_FILE FULL_WII_SYS_DIR WII_JAP_SETTING
#define WII_SYSCONF_FILE FULL_WII_SYSCONF_DIR WII_SYSCONF
#define FULL_WII_MENU_DIR FULL_WII_USER_DIR "title" DIR_SEP "00000001" DIR_SEP "00000002" DIR_SEP "content"
#endif // _COMMON_PATHS_H_
+172 -38
View File
@@ -487,6 +487,41 @@ bool DeleteDirRecursively(const char *directory)
return true;
}
#ifdef __linux__
//Create directory and copy contents (does not overwrite existing files)
void CopyDir(const char *source_path, const char *dest_path)
{
if (!File::Exists(source_path))
return;
if (!File::Exists(dest_path)) File::CreateFullPath(dest_path);
char *virtualName;
struct dirent dirent, *result = NULL;
DIR *dirp = opendir(source_path);
if (!dirp)
return;
while (!readdir_r(dirp, &dirent, &result) && result) {
virtualName = result->d_name;
// check for "." and ".."
if (((virtualName[0] == '.') && (virtualName[1] == '\0')) ||
((virtualName[0] == '.') && (virtualName[1] == '.') &&
(virtualName[2] == '\0')))
continue;
char source[300], dest[300];
sprintf(source, "%s%s", source_path, virtualName);
sprintf(dest, "%s%s", dest_path, virtualName);
if (IsDirectory(source)) {
sprintf(source, "%s/", source);
sprintf(dest, "%s/", dest);
if (!File::Exists(dest)) File::CreateFullPath(dest);
CopyDir(source, dest);
} else
if (!File::Exists(dest)) File::Copy(source, dest);
}
closedir(dirp);
}
#endif
// Returns the current directory
std::string GetCurrentDir()
{
@@ -510,28 +545,6 @@ bool SetCurrentDir(const char *_rDirectory)
}
#if defined(__APPLE__)
//get the full config dir
const char *GetConfigDirectory()
{
static char path[MAX_PATH] = {0};
if (strlen(path) > 0)
return path;
snprintf(path, sizeof(path), "%s" DIR_SEP CONFIG_FILE, GetUserDirectory());
return path;
}
//get the full SYSCONF dir
const char *GetSysConfDirectory()
{
static char path[MAX_PATH] = {0};
if (strlen(path) > 0)
return path;
snprintf(path, sizeof(path), "%s" DIR_SEP WII_SYSCONF_FILE, GetUserDirectory());
return path;
}
std::string GetBundleDirectory()
{
// Plugin path will be Dolphin.app/Contents/PlugIns
@@ -599,28 +612,149 @@ std::string GetSysDirectory()
return sysDir;
}
// Returns a pointer to a string with a Dolphin data dir in the user's home
// Returns a pointer to a string with a Dolphin data dir or file in the user's home
// directory. To be used in "multi-user" mode (that is, installed).
const char *GetUserDirectory()
const char *GetUserPath(int DirIDX)
{
// Make sure we only need to do it once
static char path[MAX_PATH] = {0};
if (strlen(path) > 0)
return path;
static char UserDir[MAX_PATH] = {0};
static char GCUserDir[MAX_PATH] = {0};
static char WiiUserDir[MAX_PATH] = {0};
static char ConfigDir[MAX_PATH] = {0};
static char GameConfigDir[MAX_PATH] = {0};
static char MapsDir[MAX_PATH] = {0};
static char CacheDir[MAX_PATH] = {0};
static char ShaderCacheDir[MAX_PATH] = {0};
static char ShadersDir[MAX_PATH] = {0};
static char StateSavesDir[MAX_PATH] = {0};
static char ScreenShotsDir[MAX_PATH] = {0};
static char HiresTexturesDir[MAX_PATH] = {0};
static char DumpDir[MAX_PATH] = {0};
static char DumpFramesDir[MAX_PATH] = {0};
static char DumpTexturesDir[MAX_PATH] = {0};
static char DumpDSPDir[MAX_PATH] = {0};
static char LogsDir[MAX_PATH] = {0};
static char MailLogsDir[MAX_PATH] = {0};
static char WiiSYSCONFDir[MAX_PATH] = {0};
static char WiiMenuDir[MAX_PATH] = {0};
static char DolphinConfig[MAX_PATH] = {0};
static char DebuggerConfig[MAX_PATH] = {0};
static char LoggerConfig[MAX_PATH] = {0};
static char MainLog[MAX_PATH] = {0};
static char WiiSYSCONF[MAX_PATH] = {0};
static char RamDump[MAX_PATH] = {0};
static char ARamDump[MAX_PATH] = {0};
static char GCSRam[MAX_PATH] = {0};
#ifdef WIN32
char homedir[MAX_PATH];
if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path)))
return NULL;
// Set up all paths and files on the first run
if (strlen(UserDir) == 0)
{
#ifdef _WIN32
// Keep the directory setup the way it was on windows
snprintf(UserDir, sizeof(UserDir), ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP);
//char homedir[MAX_PATH];
//if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path)))
// return NULL;
#else
char *homedir = getenv("HOME");
if (!homedir)
return NULL;
if (File::Exists(ROOT_DIR DIR_SEP USERDATA_DIR))
snprintf(UserDir, sizeof(UserDir), ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP);
else
{
char *homedir = getenv("HOME");
if (homedir)
snprintf(UserDir, sizeof(UserDir), "%s" DIR_SEP DOLPHIN_DATA_DIR DIR_SEP, homedir);
}
#endif
INFO_LOG(COMMON, "GetUserPath: Setting user directory to %s:", UserDir);
snprintf(path, sizeof(path), "%s" DIR_SEP DOLPHIN_DATA_DIR, homedir);
INFO_LOG(COMMON, "GetUserDirectory: Setting to %s:", path);
return path;
snprintf(GCUserDir, sizeof(GCUserDir), "%s" GC_USER_DIR DIR_SEP, UserDir);
snprintf(WiiUserDir, sizeof(WiiUserDir), "%s" WII_USER_DIR DIR_SEP, UserDir);
snprintf(ConfigDir, sizeof(ConfigDir), "%s" CONFIG_DIR DIR_SEP, UserDir);
snprintf(GameConfigDir, sizeof(GameConfigDir), "%s" GAMECONFIG_DIR DIR_SEP, UserDir);
snprintf(MapsDir, sizeof(MapsDir), "%s" MAPS_DIR DIR_SEP, UserDir);
snprintf(CacheDir, sizeof(CacheDir), "%s" CACHE_DIR DIR_SEP, UserDir);
snprintf(ShaderCacheDir, sizeof(ShaderCacheDir), "%s" SHADERCACHE_DIR DIR_SEP, UserDir);
snprintf(ShadersDir, sizeof(ShadersDir), "%s" SHADERS_DIR DIR_SEP, UserDir);
snprintf(StateSavesDir, sizeof(StateSavesDir), "%s" STATESAVES_DIR DIR_SEP, UserDir);
snprintf(ScreenShotsDir, sizeof(ScreenShotsDir), "%s" SCREENSHOTS_DIR DIR_SEP, UserDir);
snprintf(HiresTexturesDir, sizeof(HiresTexturesDir), "%s" HIRES_TEXTURES_DIR DIR_SEP, UserDir);
snprintf(DumpDir, sizeof(DumpDir), "%s" DUMP_DIR DIR_SEP, UserDir);
snprintf(DumpFramesDir, sizeof(DumpFramesDir), "%s" DUMP_FRAMES_DIR DIR_SEP, UserDir);
snprintf(DumpTexturesDir, sizeof(DumpTexturesDir), "%s" DUMP_TEXTURES_DIR DIR_SEP, UserDir);
snprintf(DumpDSPDir, sizeof(DumpDSPDir), "%s" DUMP_DSP_DIR DIR_SEP, UserDir);
snprintf(LogsDir, sizeof(LogsDir), "%s" LOGS_DIR DIR_SEP, UserDir);
snprintf(MailLogsDir, sizeof(MailLogsDir), "%s" MAIL_LOGS_DIR DIR_SEP, UserDir);
snprintf(WiiSYSCONFDir, sizeof(WiiSYSCONFDir), "%s" WII_SYSCONF_DIR DIR_SEP, UserDir);
snprintf(WiiMenuDir, sizeof(WiiMenuDir), "%s" WII_MENU_DIR DIR_SEP, UserDir);
snprintf(DolphinConfig, sizeof(DolphinConfig), "%s" DOLPHIN_CONFIG, ConfigDir);
snprintf(DebuggerConfig, sizeof(DebuggerConfig), "%s" DEBUGGER_CONFIG, ConfigDir);
snprintf(LoggerConfig, sizeof(LoggerConfig), "%s" LOGGER_CONFIG, ConfigDir);
snprintf(MainLog, sizeof(MainLog), "%s" MAIN_LOG, LogsDir);
snprintf(WiiSYSCONF, sizeof(WiiSYSCONF), "%s" WII_SYSCONF, WiiSYSCONFDir);
snprintf(RamDump, sizeof(RamDump), "%s" RAM_DUMP, DumpDir);
snprintf(ARamDump, sizeof(ARamDump), "%s" ARAM_DUMP, DumpDir);
snprintf(GCSRam, sizeof(GCSRam), "%s" GC_SRAM, GCUserDir);
}
switch (DirIDX)
{
case D_USER_IDX:
return UserDir;
case D_GCUSER_IDX:
return GCUserDir;
case D_WIIUSER_IDX:
return WiiUserDir;
case D_CONFIG_IDX:
return ConfigDir;
case D_GAMECONFIG_IDX:
return GameConfigDir;
case D_MAPS_IDX:
return MapsDir;
case D_CACHE_IDX:
return CacheDir;
case D_SHADERCACHE_IDX:
return ShaderCacheDir;
case D_SHADERS_IDX:
return ShadersDir;
case D_STATESAVES_IDX:
return StateSavesDir;
case D_SCREENSHOTS_IDX:
return ScreenShotsDir;
case D_HIRESTEXTURES_IDX:
return HiresTexturesDir;
case D_DUMP_IDX:
return DumpDir;
case D_DUMPFRAMES_IDX:
return DumpFramesDir;
case D_DUMPTEXTURES_IDX:
return DumpTexturesDir;
case D_DUMPDSP_IDX:
return DumpDSPDir;
case D_LOGS_IDX:
return LogsDir;
case D_MAILLOGS_IDX:
return MailLogsDir;
case D_WIISYSCONF_IDX:
return WiiSYSCONFDir;
case D_WIIMENU_IDX:
return WiiMenuDir;
case F_DOLPHINCONFIG_IDX:
return DolphinConfig;
case F_DEBUGGERCONFIG_IDX:
return DebuggerConfig;
case F_LOGGERCONFIG_IDX:
return LoggerConfig;
case F_MAINLOG_IDX:
return MainLog;
case F_WIISYSCONF_IDX:
return WiiSYSCONF;
case F_RAMDUMP_IDX:
return RamDump;
case F_ARAMDUMP_IDX:
return ARamDump;
case F_GCSRAM_IDX:
return GCSRam;
default:
return NULL;
}
}
bool WriteStringToFile(bool text_file, const std::string &str, const char *filename)
+36 -6
View File
@@ -24,6 +24,38 @@
#include "Common.h"
// User directory indices for GetUserPath
enum {
D_USER_IDX,
D_GCUSER_IDX,
D_WIIUSER_IDX,
D_CONFIG_IDX,
D_GAMECONFIG_IDX,
D_MAPS_IDX,
D_CACHE_IDX,
D_SHADERCACHE_IDX,
D_SHADERS_IDX,
D_STATESAVES_IDX,
D_SCREENSHOTS_IDX,
D_HIRESTEXTURES_IDX,
D_DUMP_IDX,
D_DUMPFRAMES_IDX,
D_DUMPTEXTURES_IDX,
D_DUMPDSP_IDX,
D_LOGS_IDX,
D_MAILLOGS_IDX,
D_WIISYSCONF_IDX,
D_WIIMENU_IDX,
F_DOLPHINCONFIG_IDX,
F_DEBUGGERCONFIG_IDX,
F_LOGGERCONFIG_IDX,
F_MAINLOG_IDX,
F_WIISYSCONF_IDX,
F_RAMDUMP_IDX,
F_ARAMDUMP_IDX,
F_GCSRAM_IDX,
};
namespace File
{
@@ -78,13 +110,15 @@ bool DeleteDirRecursively(const char *directory);
// Returns the current directory
std::string GetCurrentDir();
//Create directory and copy contents (does not overwrite existing files)
void CopyDir(const char *source_path, const char *dest_path);
// Set the current directory to given directory
bool SetCurrentDir(const char *directory);
// Returns a pointer to a string with a Dolphin data dir in the user's home
// directory. To be used in "multi-user" mode (that is, installed).
const char *GetUserDirectory();
const char *GetUserPath(int DirIDX);
// Returns the path to where the plugins are
std::string GetPluginsDirectory();
@@ -93,10 +127,6 @@ std::string GetPluginsDirectory();
std::string GetSysDirectory();
#ifdef __APPLE__
const char *GetConfigDirectory();
const char *GetSysConfDirectory();
std::string GetBundleDirectory();
#endif
+6 -1
View File
@@ -19,6 +19,7 @@
#include "ConsoleListener.h"
#include "Timer.h"
#include "Thread.h"
#include "FileUtil.h"
void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
const char *file, int line, const char* fmt, ...)
@@ -79,7 +80,7 @@ LogManager::LogManager() {
m_Log[LogTypes::MEMCARD_MANAGER] = new LogContainer("MemCard Manger", "MemCard Manger");
m_Log[LogTypes::NETPLAY] = new LogContainer("NETPLAY", "Netplay");
m_fileLog = new FileLogListener(MAIN_LOG_FILE);
m_fileLog = new FileLogListener(File::GetUserPath(F_MAINLOG_IDX));
m_consoleLog = new ConsoleListener();
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
@@ -176,6 +177,10 @@ FileLogListener::FileLogListener(const char *filename) {
setEnable(true);
}
void FileLogListener::Reload() {
m_logfile = fopen(m_filename, "a+");
}
FileLogListener::~FileLogListener() {
free(m_filename);
fclose(m_logfile);
+2
View File
@@ -42,6 +42,8 @@ public:
FileLogListener(const char *filename);
~FileLogListener();
void Reload();
void Log(LogTypes::LOG_LEVELS, const char *msg);
bool isValid() {
+9 -5
View File
@@ -21,13 +21,17 @@
SysConf::SysConf()
: m_IsValid(false)
{
#if defined(__APPLE__)
if (LoadFromFile(File::GetSysConfDirectory()))
#else
if (LoadFromFile(WII_SYSCONF_FILE))
#endif
if (LoadFromFile(File::GetUserPath(F_WIISYSCONF_IDX)))
m_IsValid = true;
}
void SysConf::Reload()
{
if (m_IsValid)
return;
if (LoadFromFile(File::GetUserPath(F_WIISYSCONF_IDX)))
m_IsValid = true;
}
SysConf::~SysConf()
{
+2
View File
@@ -71,6 +71,8 @@ public:
bool IsValid() { return m_IsValid; }
void Reload();
template<class T>
T GetData(const char* sectionName)
{
+2 -2
View File
@@ -94,7 +94,7 @@ std::string CBoot::GenerateMapFilename()
u64 TitleID = Loader.GetTitleID();
char tmpBuffer[32];
sprintf(tmpBuffer, "%08x_%08x", (u32)(TitleID >> 32) & 0xFFFFFFFF , (u32)TitleID & 0xFFFFFFFF );
return FULL_MAPS_DIR + std::string(tmpBuffer) + ".map";
return std::string(File::GetUserPath(D_MAPS_IDX)) + std::string(tmpBuffer) + ".map";
}
}
break;
@@ -103,7 +103,7 @@ std::string CBoot::GenerateMapFilename()
case SCoreStartupParameter::BOOT_DOL:
return _StartupPara.m_strFilename.substr(0, _StartupPara.m_strFilename.size()-4) + ".map";
default:
return FULL_MAPS_DIR + _StartupPara.GetUniqueID() + ".map";
return std::string(File::GetUserPath(D_MAPS_IDX)) + _StartupPara.GetUniqueID() + ".map";
}
return std::string("unknown map");
+4 -4
View File
@@ -46,7 +46,7 @@ bool CBoot::Boot_WiiWAD(const char* _pFilename)
char Path[260+1];
u64 TitleID = ContentLoader.GetTitleID();
char* pTitleID = (char*)&TitleID;
sprintf(Path, FULL_WII_USER_DIR "title//%02x%02x%02x%02x/%02x%02x%02x%02x/data/nocopy/",
sprintf(Path, "%stitle/%02x%02x%02x%02x/%02x%02x%02x%02x/data/nocopy/", File::GetUserPath(D_WIIUSER_IDX),
(u8)pTitleID[7], (u8)pTitleID[6], (u8)pTitleID[5], (u8)pTitleID[4],
(u8)pTitleID[3], (u8)pTitleID[2], (u8)pTitleID[1], (u8)pTitleID[0]);
File::CreateFullPath(Path);
@@ -99,7 +99,7 @@ bool CBoot::Install_WiiWAD(const char* _pFilename)
//copy WAD's tmd header and contents to content directory
char ContentPath[260+1];
sprintf(ContentPath, FULL_WII_USER_DIR "title/%08x/%08x/content/", TitleID_HI, TitleID_LO);
sprintf(ContentPath, "%stitle/%08x/%08x/content/", File::GetUserPath(D_WIIUSER_IDX), TitleID_HI, TitleID_LO);
File::CreateFullPath(ContentPath);
std::string TMDFileName(ContentPath);
@@ -137,11 +137,11 @@ bool CBoot::Install_WiiWAD(const char* _pFilename)
//Extract and copy WAD's ticket to ticket directory
char TicketPath[260+1];
sprintf(TicketPath, FULL_WII_USER_DIR "ticket/%08x/", TitleID_HI);
sprintf(TicketPath, "%sticket/%08x/", File::GetUserPath(D_WIIUSER_IDX), TitleID_HI);
File::CreateFullPath(TicketPath);
char TicketFileName[260+1];
sprintf(TicketFileName, FULL_WII_USER_DIR "ticket/%08x/%08x.tik", TitleID_HI, TitleID_LO);
sprintf(TicketFileName, "%sticket/%08x/%08x.tik", File::GetUserPath(D_WIIUSER_IDX), TitleID_HI, TitleID_LO);
FILE* pTicketFile = fopen(TicketFileName, "wb");
if (pTicketFile == NULL) {
+7 -18
View File
@@ -44,13 +44,9 @@ SConfig::~SConfig()
void SConfig::SaveSettings()
{
NOTICE_LOG(BOOT, "Saving Settings to %s", CONFIG_FILE);
NOTICE_LOG(BOOT, "Saving Settings to %s", File::GetUserPath(F_DOLPHINCONFIG_IDX));
IniFile ini;
#if defined(__APPLE__)
ini.Load(File::GetConfigDirectory()); // yes we must load first to not kill unknown stuff
#else
ini.Load(CONFIG_FILE); // yes we must load first to not kill unknown stuff
#endif
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); // yes we must load first to not kill unknown stuff
// General
{
@@ -139,11 +135,7 @@ void SConfig::SaveSettings()
ini.Set("Core", "WiiMotePlugin",m_LocalCoreStartupParameter.m_strWiimotePlugin[0]);
}
#if defined(__APPLE__)
ini.Save(File::GetConfigDirectory());
#else
ini.Save(CONFIG_FILE);
#endif
ini.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX));
m_SYSCONF->Save();
}
@@ -151,13 +143,10 @@ void SConfig::SaveSettings()
void SConfig::LoadSettings()
{
INFO_LOG(BOOT, "Loading Settings from %s", CONFIG_FILE);
INFO_LOG(BOOT, "Loading Settings from %s", File::GetUserPath(F_DOLPHINCONFIG_IDX));
IniFile ini;
#if defined(__APPLE__)
ini.Load(File::GetConfigDirectory());
#else
ini.Load(CONFIG_FILE);
#endif
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
std::string PluginsDir = File::GetPluginsDirectory();
// Hard coded default
@@ -267,6 +256,6 @@ void SConfig::LoadSettings()
void SConfig::LoadSettingsHLE()
{
IniFile ini;
ini.Load(FULL_CONFIG_DIR "DSP.ini");
ini.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "DSP.ini").c_str());
ini.Get("Config", "EnableRE0AudioFix", &m_EnableRE0Fix, false); // RE0 Hack
}
+2 -2
View File
@@ -530,11 +530,11 @@ static inline std::string GenerateScreenshotName()
int index = 1;
std::string tempname, name;
std::string gameId = GetStartupParameter().GetUniqueID();
tempname = FULL_SCREENSHOTS_DIR + gameId + DIR_SEP_CHR;
tempname = std::string(File::GetUserPath(D_SCREENSHOTS_IDX)) + gameId + DIR_SEP_CHR;
if (!File::CreateFullPath(tempname.c_str())) {
//fallback to old-style screenshots, without folder.
tempname = FULL_SCREENSHOTS_DIR;
tempname = std::string(File::GetUserPath(D_SCREENSHOTS_IDX));
}
//append gameId, tempname only contains the folder here.
tempname += gameId;
+2 -2
View File
@@ -230,7 +230,7 @@ bool SCoreStartupParameter::AutoSetup(EBootBS2 _BootBS2)
// Setup paths
CheckMemcardPath(SConfig::GetInstance().m_strMemoryCardA, Region, true);
CheckMemcardPath(SConfig::GetInstance().m_strMemoryCardB, Region, false);
m_strSRAM = GC_SRAM_FILE;
m_strSRAM = File::GetUserPath(F_GCSRAM_IDX);
if (!bWii)
{
m_strBootROM = File::GetSysDirectory() + GC_SYS_DIR + DIR_SEP + Region + DIR_SEP GC_IPL;
@@ -259,7 +259,7 @@ void SCoreStartupParameter::CheckMemcardPath(std::string& memcardPath, std::stri
{
// Use default memcard path if there is no user defined name
std::string defaultFilename = isSlotA ? GC_MEMCARDA : GC_MEMCARDB;
memcardPath = FULL_GC_USER_DIR + defaultFilename + ext;
memcardPath = std::string(File::GetUserPath(D_GCUSER_IDX)) + defaultFilename + ext;
}
else
{
+1 -1
View File
@@ -193,7 +193,7 @@ void CopySettingsFile(std::string& DeviceName)
else
Source += "setting-eur.txt";
std::string Target = FULL_WII_ROOT_DIR + DeviceName;
std::string Target = std::string(File::GetUserPath(D_WIIUSER_IDX)) + DeviceName;
// Check if the target dir exists, otherwise create it
std::string TargetDir = Target.substr(0, Target.find_last_of(DIR_SEP));
@@ -30,7 +30,7 @@ std::string HLE_IPC_BuildFilename(const char* _pFilename, int _size)
char Buffer[128];
memcpy(Buffer, _pFilename, _size);
std::string Filename(FULL_WII_ROOT_DIR);
std::string Filename = std::string(File::GetUserPath(D_WIIUSER_IDX));
if (Buffer[1] == '0')
Filename += std::string("/title"); // this looks and feel like a hack...
@@ -289,4 +289,4 @@ void CWII_IPC_HLE_Device_FileIO::DoState(PointerWrap &p)
fseek(m_pFileHandle, m_Seek, SEEK_SET);
}
}
}
}
@@ -764,7 +764,7 @@ bool CWII_IPC_HLE_Device_es::IsValid(u64 _TitleID) const
std::string CWII_IPC_HLE_Device_es::CreateTicketFileName(u64 _TitleID) const
{
char TicketFilename[1024];
sprintf(TicketFilename, "%sticket/%08x/%08x.tik", FULL_WII_USER_DIR, (u32)(_TitleID >> 32), (u32)_TitleID);
sprintf(TicketFilename, "%sticket/%08x/%08x.tik", File::GetUserPath(D_WIIUSER_IDX), (u32)(_TitleID >> 32), (u32)_TitleID);
return TicketFilename;
}
@@ -772,7 +772,7 @@ std::string CWII_IPC_HLE_Device_es::CreateTicketFileName(u64 _TitleID) const
std::string CWII_IPC_HLE_Device_es::CreateTitleContentPath(u64 _TitleID) const
{
char TicketFilename[1024];
sprintf(TicketFilename, "%stitle/%08x/%08x/content", FULL_WII_USER_DIR, (u32)(_TitleID >> 32), (u32)_TitleID);
sprintf(TicketFilename, "%stitle/%08x/%08x/content", File::GetUserPath(D_WIIUSER_IDX), (u32)(_TitleID >> 32), (u32)_TitleID);
return TicketFilename;
}
@@ -780,10 +780,11 @@ std::string CWII_IPC_HLE_Device_es::CreateTitleContentPath(u64 _TitleID) const
void CWII_IPC_HLE_Device_es::FindValidTitleIDs()
{
m_TitleIDs.clear();
char TitlePath[1024];
std::string TitlePath(FULL_WII_USER_DIR + std::string("title"));
sprintf(TitlePath, "%stitle", File::GetUserPath(D_WIIUSER_IDX));
File::FSTEntry ParentEntry;
u32 NumEntries = ScanDirectoryTree(TitlePath.c_str(), ParentEntry);
u32 NumEntries = ScanDirectoryTree(TitlePath, ParentEntry);
for(std::vector<File::FSTEntry>::iterator Level1 = ParentEntry.children.begin(); Level1 != ParentEntry.children.end(); ++Level1)
{
if (Level1->isDirectory)
@@ -41,10 +41,10 @@ bool CWII_IPC_HLE_Device_fs::Open(u32 _CommandAddress, u32 _Mode)
{
// clear tmp folder
{
//std::string WiiTempFolder = File::GetUserDirectory() + FULL_WII_USER_DIR + std::string("tmp");
std::string WiiTempFolder = FULL_WII_USER_DIR + std::string("tmp");
File::DeleteDirRecursively(WiiTempFolder.c_str());
File::CreateDir(WiiTempFolder.c_str());
char Path[260];
snprintf(Path, sizeof(Path), "%stmp", File::GetUserPath(D_WIIUSER_IDX));
File::DeleteDirRecursively(Path);
File::CreateDir(Path);
}
// create home directory
@@ -61,7 +61,7 @@ bool CWII_IPC_HLE_Device_fs::Open(u32 _CommandAddress, u32 _Mode)
if (GameID == 0) GameID = 0xF00DBEEF;
if (TitleID == 0) TitleID = 0x00010000;
sprintf(Path, FULL_WII_USER_DIR "title/%08x/%08x/data/nocopy/", TitleID, GameID);
snprintf(Path, sizeof(Path), "%stitle/%08x/%08x/data/nocopy/", File::GetUserPath(D_WIIUSER_IDX), TitleID, GameID);
File::CreateFullPath(Path);
}
@@ -47,7 +47,8 @@ bool CWII_IPC_HLE_Device_sdio_slot0::Open(u32 _CommandAddress, u32 _Mode)
{
INFO_LOG(WII_IPC_SD, "Open");
char filename[16] = "sd.raw";
char filename[300];
sprintf(filename, "%ssd.raw", File::GetUserPath(D_WIIUSER_IDX));
m_Card = fopen(filename, "r+b");
if(!m_Card)
{
@@ -19,6 +19,7 @@
#include "../Core.h" // Local core functions
#include "WII_IPC_HLE_Device_usb.h"
#include "WII_IPC_HLE_Device_usb_kbd.h"
#include "FileUtil.h"
#ifdef _WIN32
#include <windows.h>
@@ -35,7 +36,7 @@ bool CWII_IPC_HLE_Device_usb_kbd::Open(u32 _CommandAddress, u32 _Mode)
{
INFO_LOG(WII_IPC_STM, "CWII_IPC_HLE_Device_usb_kbd: Open");
IniFile ini;
ini.Load(CONFIG_FILE);
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
ini.Get("USB Keyboard", "Layout", &m_KeyboardLayout, KBD_LAYOUT_QWERTY);
for(int i = 0; i < 256; i++)
+1 -1
View File
@@ -2745,7 +2745,7 @@ DEFINE_LUA_FUNCTION(emulua_loadrom, "filename")
// Load game specific settings
IniFile game_ini;
std::string unique_id = StartUp.GetUniqueID();
StartUp.m_strGameIni = FULL_GAMECONFIG_DIR + unique_id + ".ini";
StartUp.m_strGameIni = std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + unique_id + ".ini";
if (unique_id.size() == 6 && game_ini.Load(StartUp.m_strGameIni.c_str()))
{
// General settings

Some files were not shown because too many files have changed in this diff Show More