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
This commit is contained in:
Paul Davis 2012-05-18 17:24:06 +00:00
parent 433b6651ee
commit 813c5f0af9
33 changed files with 181 additions and 246 deletions

View file

@ -17,10 +17,11 @@
*/
#include <cstdlib>
#include <iostream>
#include "pbd/error.h"
#include "pbd/compose.h"
#include "pbd/filesystem_paths.h"
#include "pbd/strsplit.h"
#include <glibmm/miscutils.h>
#include <glibmm/fileutils.h>
@ -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;
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<string> ss;
split (s, ss, ':');
for (std::vector<string>::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 search_path;
}
SearchPath
system_config_search_path ()
ardour_data_search_path ()
{
SearchPath config_path(system_config_directories());
static bool have_path = false;
static SearchPath search_path;
config_path.add_subdirectory_to_paths("ardour3");
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<string> ss;
split (s, ss, ':');
for (std::vector<string>::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 config_path;
}
SearchPath
system_data_search_path ()
{
SearchPath data_path(system_data_directories());
data_path.add_subdirectory_to_paths("ardour3");
return data_path;
return search_path;
}
} // namespace ARDOUR