X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilesystem_paths.cc;h=ee5fc97ad760610d064a96651703b3f2c1e70526;hb=f80958e168e459f617a860a4aa12e6fc6766c8be;hp=231bc84a3c2e2dee1e8bbcf85688550ae8a85b20;hpb=207ac16731baec44c939d85f25c8965d925d7983;p=ardour.git diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 231bc84a3c..ee5fc97ad7 100644 --- a/libs/ardour/filesystem_paths.cc +++ b/libs/ardour/filesystem_paths.cc @@ -20,8 +20,8 @@ #include #include "pbd/compose.h" -#include "pbd/convert.h" #include "pbd/error.h" +#include "pbd/string_convert.h" #include #include @@ -29,7 +29,7 @@ #include "ardour/directory_names.h" #include "ardour/filesystem_paths.h" -#include "i18n.h" +#include "pbd/i18n.h" #ifdef PLATFORM_WINDOWS #include "shlobj.h" @@ -46,17 +46,32 @@ static std::string user_config_directory_name (int version = -1) { if (version < 0) { - version = atoi (X_(PROGRAM_VERSION)); + version = string_to(X_(PROGRAM_VERSION)); } + /* ARDOUR::Profile may not be available when this is + called, so rely on build-time detection of the + product name etc. + */ + +#ifdef USE_TRACKS_CODE_FEATURES + /* Tracks does not use versioned configuration folders, which may or + may not be problematic in the future. + */ + return X_(PROGRAM_NAME); + +#else const string config_dir_name = string_compose ("%1%2", X_(PROGRAM_NAME), version); #if defined (__APPLE__) || defined (PLATFORM_WINDOWS) + /* Use mixed-case folder name on OS X and Windows */ return config_dir_name; #else + /* use lower case folder name on Linux */ return downcase (config_dir_name); #endif -} +#endif +} std::string user_config_directory (int version) @@ -107,9 +122,9 @@ user_config_directory (int version) exit (1); } } else if (!Glib::file_test (p, Glib::FILE_TEST_IS_DIR)) { - error << string_compose (_("Configuration directory %1 already exists and is not a directory/folder - cannot run"), + fatal << string_compose (_("Configuration directory %1 already exists and is not a directory/folder - cannot run"), p) << endmsg; - exit (1); + abort(); /*NOTREACHED*/ } } @@ -117,11 +132,9 @@ user_config_directory (int version) } std::string -user_cache_directory () +user_cache_directory (std::string cachename) { - static std::string p; - - if (!p.empty()) return p; + std::string p; #ifdef __APPLE__ p = Glib::build_filename (Glib::get_home_dir(), "Library/Caches"); @@ -154,7 +167,11 @@ user_cache_directory () } #endif // end not __APPLE__ - p = Glib::build_filename (p, user_config_directory_name ()); + if (cachename.empty ()) { + p = Glib::build_filename (p, user_config_directory_name ()); + } else { + p = Glib::build_filename (p, cachename); + } #ifdef PLATFORM_WINDOWS /* On Windows Glib::get_user_data_dir is the folder to use for local @@ -173,9 +190,9 @@ user_cache_directory () exit (1); } } else if (!Glib::file_test (p, Glib::FILE_TEST_IS_DIR)) { - error << string_compose (_("Cache directory %1 already exists and is not a directory/folder - cannot run"), + fatal << string_compose (_("Cache directory %1 already exists and is not a directory/folder - cannot run"), p) << endmsg; - exit (1); + abort(); /*NOTREACHED*/ } return p; @@ -185,7 +202,7 @@ std::string ardour_dll_directory () { #ifdef PLATFORM_WINDOWS - std::string dll_dir_path(g_win32_get_package_installation_directory_of_module(NULL)); + std::string dll_dir_path(windows_package_directory_path()); dll_dir_path = Glib::build_filename (dll_dir_path, "lib"); return Glib::build_filename (dll_dir_path, LIBARDOUR); #else @@ -193,7 +210,7 @@ ardour_dll_directory () if (s.empty()) { std::cerr << _("ARDOUR_DLL_PATH not set in environment - exiting\n"); ::exit (1); - } + } return s; #endif } @@ -202,10 +219,27 @@ ardour_dll_directory () Searchpath windows_search_path () { - std::string dll_dir_path(g_win32_get_package_installation_directory_of_module(NULL)); + std::string dll_dir_path(windows_package_directory_path()); dll_dir_path = Glib::build_filename (dll_dir_path, "share"); return Glib::build_filename (dll_dir_path, LIBARDOUR); } + +std::string +windows_package_directory_path () +{ + char* package_dir = + g_win32_get_package_installation_directory_of_module (NULL); + + if (package_dir == NULL) { + fatal << string_compose (_("Cannot determine %1 package directory"), + PROGRAM_NAME) << endmsg; + abort(); /*NOTREACHED*/ + } + + std::string package_dir_path(package_dir); + g_free(package_dir); + return package_dir_path; +} #endif Searchpath @@ -279,7 +313,7 @@ been_here_before_path (int version) version = atoi (PROGRAM_VERSION); } - return Glib::build_filename (user_config_directory (version), string (".a") + to_string (version, std::dec)); + return Glib::build_filename (user_config_directory (version), string (".a") + to_string (version)); }