X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilesystem_paths.cc;h=73bfaff137f726c0b9854d9516d552ebf8d7e958;hb=06cc5e5240cc2bfeb4e22c742a5705566bd11dbe;hp=5dc5e4dbdef823bb31cf4fc796e5a6a4d37801ec;hpb=a473d630eb165272992e90f8d854b1d66ec0be63;p=ardour.git diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 5dc5e4dbde..73bfaff137 100644 --- a/libs/ardour/filesystem_paths.cc +++ b/libs/ardour/filesystem_paths.cc @@ -17,16 +17,18 @@ */ #include +#include #include "pbd/error.h" -#include "pbd/filesystem_paths.h" +#include "pbd/compose.h" #include +#include #include "ardour/directory_names.h" #include "ardour/filesystem_paths.h" -#define WITH_STATIC_PATHS 1 +#include "i18n.h" using namespace PBD; @@ -34,11 +36,17 @@ namespace ARDOUR { using std::string; -sys::path +std::string user_config_directory () { + static std::string p; + + if (!p.empty()) return p; + +#ifdef __APPLE__ + p = Glib::build_filename (Glib::get_home_dir(), "Library/Preferences"); +#else const char* c = 0; - sys::path p; /* adopt freedesktop standards, and put .ardour3 into $XDG_CONFIG_HOME or ~/.config */ @@ -49,64 +57,81 @@ user_config_directory () const string home_dir = Glib::get_home_dir(); if (home_dir.empty ()) { - const string error_msg = "Unable to determine home directory"; - - // log the error - error << error_msg << endmsg; - - throw sys::filesystem_error(error_msg); + error << "Unable to determine home directory" << endmsg; + exit (1); } p = home_dir; - p /= ".config"; + p = Glib::build_filename (p, ".config"); } +#endif - p /= user_config_dir_name; + p = Glib::build_filename (p, user_config_dir_name); + + if (!Glib::file_test (p, Glib::FILE_TEST_EXISTS)) { + if (g_mkdir_with_parents (p.c_str(), 0755)) { + error << string_compose (_("Cannot create Configuration directory %1 - cannot run"), + p) << endmsg; + 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"), + p) << endmsg; + exit (1); + } return p; } -sys::path -ardour_module_directory () +std::string +ardour_dll_directory () { - sys::path module_directory(MODULE_DIR); - module_directory /= "ardour3"; - return module_directory; + std::string s = Glib::getenv("ARDOUR_DLL_PATH"); + if (s.empty()) { + std::cerr << _("ARDOUR_DLL_PATH not set in environment - exiting\n"); + ::exit (1); + } + return s; } SearchPath -ardour_search_path () +ardour_config_search_path () { - SearchPath spath_env(Glib::getenv("ARDOUR_PATH")); - return spath_env; -} - -SearchPath -system_config_search_path () -{ -#ifdef WITH_STATIC_PATHS - SearchPath config_path(string(CONFIG_DIR)); -#else - SearchPath config_path(system_config_directories()); -#endif - - config_path.add_subdirectory_to_paths("ardour3"); + static SearchPath search_path; + + if (search_path.empty()) { + search_path += user_config_directory(); + + std::string s = Glib::getenv("ARDOUR_CONFIG_PATH"); + if (s.empty()) { + std::cerr << _("ARDOUR_CONFIG_PATH not set in environment - exiting\n"); + ::exit (1); + } + + search_path += SearchPath (s); + } - return config_path; + return search_path; } SearchPath -system_data_search_path () +ardour_data_search_path () { -#ifdef WITH_STATIC_PATHS - SearchPath data_path(string(DATA_DIR)); -#else - SearchPath data_path(system_data_directories()); -#endif - - data_path.add_subdirectory_to_paths("ardour3"); + static SearchPath search_path; + + if (search_path.empty()) { + search_path += user_config_directory(); + + std::string s = Glib::getenv("ARDOUR_DATA_PATH"); + if (s.empty()) { + std::cerr << _("ARDOUR_DATA_PATH not set in environment - exiting\n"); + ::exit (1); + } + + search_path += SearchPath (s); + } - return data_path; + return search_path; } } // namespace ARDOUR