X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilesystem_paths.cc;h=ee5fc97ad760610d064a96651703b3f2c1e70526;hb=a5e8a69dec467cc7d938cc3d92acb218b04486a9;hp=4dfac59bc331a54deda7d8fd924fa004ca1b91ee;hpb=3a56004f65c3d61917e9452a6f54b685748856e1;p=ardour.git diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 4dfac59bc3..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,21 +46,21 @@ 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 + 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 +#else const string config_dir_name = string_compose ("%1%2", X_(PROGRAM_NAME), version); #if defined (__APPLE__) || defined (PLATFORM_WINDOWS) @@ -70,8 +70,8 @@ user_config_directory_name (int version = -1) /* use lower case folder name on Linux */ return downcase (config_dir_name); #endif -#endif -} +#endif +} std::string user_config_directory (int version) @@ -122,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*/ } } @@ -132,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"); @@ -169,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 @@ -188,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; @@ -200,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 @@ -208,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 } @@ -217,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 @@ -294,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)); }