X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilesystem_paths.cc;h=bea0e330b9090ece99f0ce037e4e3b1bb63ab9cc;hb=bc4fe5e56a448259606ed5234b1d1ed958f5e2e2;hp=11ddc885025d79010c36003eb4aa2883b9580d23;hpb=4306fc7aeea2855f3a70c50a1641a7664bd04054;p=ardour.git diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 11ddc88502..bea0e330b9 100644 --- a/libs/ardour/filesystem_paths.cc +++ b/libs/ardour/filesystem_paths.cc @@ -17,10 +17,10 @@ */ #include +#include #include "pbd/error.h" #include "pbd/compose.h" -#include "pbd/filesystem_paths.h" #include #include @@ -30,23 +30,21 @@ #include "i18n.h" -#define WITH_STATIC_PATHS 1 - using namespace PBD; namespace ARDOUR { using std::string; -sys::path +std::string user_config_directory () { - sys::path p; + static std::string p; -#ifdef __APPLE__ - p = Glib::get_home_dir(); - p /= "Library/Preferences"; + if (!p.empty()) return p; +#ifdef __APPLE__ + p = Glib::build_filename (Glib::get_home_dir(), "Library/Preferences"); #else const char* c = 0; @@ -59,79 +57,84 @@ 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); - std::string ps (p.to_string()); - - if (!Glib::file_test (ps, Glib::FILE_TEST_EXISTS)) { - if (g_mkdir_with_parents (ps.c_str(), 0755)) { + 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"), - ps) << endmsg; + p) << endmsg; exit (1); } - } else if (!Glib::file_test (ps, Glib::FILE_TEST_IS_DIR)) { + } 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"), - ps) << endmsg; + 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; -} + static std::string s; -SearchPath -ardour_search_path () -{ - SearchPath spath_env(Glib::getenv("ARDOUR_PATH")); - return spath_env; + if (s.empty()) { + s = Glib::getenv("ARDOUR_DLL_PATH"); + std::cerr << _("ARDOUR_DLL_PATH not set in environment - exiting\n"); + ::exit (1); + } + + return s; } SearchPath -system_config_search_path () +ardour_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