From 813c5f0af9d1dac32b156ef3c72b890a7cf9eab5 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 18 May 2012 17:24:06 +0000 Subject: major rationalization of use of search paths. ardour now has just 4 functions used to define how external resources are located: ardour_config_search_path() (for system or user specific configuration data), ardour_data_search_path() (for machine, user and system independent data), ardour_dll_directory() (base directory where shared libraries are found) and user_config_directory(). These are now used throughout the code. the config, data and dll paths/directories can be overridden by environment variables. the user config dir is added as the first element of the first two search paths, and use selectively when searching for a few other things. This commit re-enabes ./waf install, and it is believed that it works fully at this point (more testing likely required) git-svn-id: svn://localhost/ardour2/branches/3.0@12326 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/filesystem_paths.cc | 79 +++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 22 deletions(-) (limited to 'libs/ardour/filesystem_paths.cc') diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 2d14494764..bc84243c84 100644 --- a/libs/ardour/filesystem_paths.cc +++ b/libs/ardour/filesystem_paths.cc @@ -17,10 +17,11 @@ */ #include +#include #include "pbd/error.h" #include "pbd/compose.h" -#include "pbd/filesystem_paths.h" +#include "pbd/strsplit.h" #include #include @@ -90,38 +91,72 @@ user_config_directory () } sys::path -ardour_module_directory () +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_CONFIG_PATH not set in environment - exiting\n"); + ::exit (1); + } + return sys::path (s); } SearchPath -ardour_search_path () +ardour_config_search_path () { - SearchPath spath_env(Glib::getenv("ARDOUR_PATH")); - return spath_env; -} - -SearchPath -system_config_search_path () -{ - SearchPath config_path(system_config_directories()); - - config_path.add_subdirectory_to_paths("ardour3"); + static bool have_path = false; + static SearchPath search_path; + + if (!have_path) { + SearchPath sp (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); + } + + std::vector ss; + split (s, ss, ':'); + for (std::vector::iterator i = ss.begin(); i != ss.end(); ++i) { + sp += sys::path (*i); + } + + search_path = sp; + have_path = true; + std::cerr << "CONFIG PATH: " << search_path.to_string() << std::endl; + } - return config_path; + return search_path; } SearchPath -system_data_search_path () +ardour_data_search_path () { - SearchPath data_path(system_data_directories()); - - data_path.add_subdirectory_to_paths("ardour3"); + static bool have_path = false; + static SearchPath search_path; + + if (!have_path) { + SearchPath sp (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); + } + + std::vector ss; + split (s, ss, ':'); + for (std::vector::iterator i = ss.begin(); i != ss.end(); ++i) { + sp += sys::path (*i); + } + + search_path = sp; + have_path = true; + std::cerr << "DATA PATH: " << search_path.to_string() << std::endl; + } - return data_path; + return search_path; } } // namespace ARDOUR -- cgit v1.2.3