removed the following environment variables:

ARDOUR_GLADE_PATH
	ARDOUR_RC
	ARDOUR_UI
	ARDOUR_UI_RC
	ARDOUR_BINDINGS
	ARDOUR_COLORS

They have been replaced with just one environment
variable called ARDOUR_PATH which can contain a number
of colon separated paths that are used to find various
configuration and data files. Files located in
ARDOUR_PATH have priority over files in ~/.ardour/ and
in the system path.

Moved two member functions of the Configuration class
into globals.cc as they should of been static and I'm
trying to keep the non-portable code together when it
makes sense.


git-svn-id: svn://localhost/trunk/ardour2@380 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Tim Mayberry
2006-03-12 16:19:03 +00:00
parent 670641c3df
commit a8640ec0af
16 changed files with 97 additions and 156 deletions

View File

@@ -47,6 +47,11 @@ namespace ARDOUR {
int init (AudioEngine&, bool with_vst, bool try_optimization, void (*sighandler)(int,siginfo_t*,void*) = 0);
int cleanup ();
std::string get_user_ardour_path ();
std::string get_system_ardour_path ();
std::string find_config_file (std::string name);
std::string find_data_file (std::string name, std::string subdir = "" );

View File

@@ -161,9 +161,6 @@ class Configuration : public Stateful
bool get_timecode_source_is_synced ();
void set_timecode_source_is_synced (bool);
std::string get_user_ardour_path ();
std::string get_system_ardour_path ();
gain_t get_quieten_at_speed ();
void set_quieten_at_speed (gain_t);

View File

@@ -49,11 +49,11 @@ AudioLibrary::AudioLibrary ()
{
// sfdb_paths.push_back("/Users/taybin/sounds");
src = "file:" + Config->get_user_ardour_path() + "sfdb";
src = "file:" + get_user_ardour_path() + "sfdb";
// workaround for possible bug in raptor that crashes when saving to a
// non-existant file.
touch_file(Config->get_user_ardour_path() + "sfdb");
touch_file(get_user_ardour_path() + "sfdb");
lrdf_read_file(src.c_str());

View File

@@ -59,24 +59,12 @@ Configuration::~Configuration ()
string
Configuration::get_user_path()
{
char *envvar;
if ((envvar = getenv ("ARDOUR_RC")) != 0) {
return envvar;
}
return find_config_file ("ardour.rc");
}
string
Configuration::get_system_path()
{
char* envvar;
if ((envvar = getenv ("ARDOUR_SYSTEM_RC")) != 0) {
return envvar;
}
return find_config_file ("ardour_system.rc");
}
@@ -92,9 +80,7 @@ Configuration::load_state ()
if (rcfile.length()) {
XMLTree tree;
cerr << "Loading system configuration file " << rcfile << endl;
if (!tree.read (rcfile.c_str())) {
error << string_compose(_("Ardour: cannot read system configuration file \"%1\""), rcfile) << endmsg;
return -1;
@@ -117,9 +103,7 @@ Configuration::load_state ()
if (rcfile.length()) {
XMLTree tree;
cerr << "Loading user configuration file " << rcfile << endl;
if (!tree.read (rcfile)) {
error << string_compose(_("Ardour: cannot read configuration file \"%1\""), rcfile) << endmsg;
return -1;
@@ -140,28 +124,12 @@ Configuration::save_state()
{
XMLTree tree;
string rcfile;
char *envvar;
/* Note: this only writes the per-user file, and therefore
only saves variables marked as user-set or modified
*/
if ((envvar = getenv ("ARDOUR_RC")) != 0) {
if (strlen (envvar) == 0) {
return -1;
}
rcfile = envvar;
} else {
if ((envvar = getenv ("HOME")) == 0) {
return -1;
}
if (strlen (envvar) == 0) {
return -1;
}
rcfile = envvar;
rcfile += "/.ardour/ardour.rc";
}
rcfile = find_config_file("ardour.rc");
if (rcfile.length()) {
tree.set_root (&state (true));
@@ -1054,41 +1022,6 @@ Configuration::set_auto_xfade (bool yn)
}
}
string
Configuration::get_user_ardour_path ()
{
string path;
char* envvar;
if ((envvar = getenv ("HOME")) == 0 || strlen (envvar) == 0) {
return "/";
}
path = envvar;
path += "/.ardour/";
return path;
}
string
Configuration::get_system_ardour_path ()
{
string path;
char* envvar;
if ((envvar = getenv ("ARDOUR_DATA_PATH")) != 0) {
path += envvar;
if (path[path.length()-1] != ':') {
path += ':';
}
}
path += DATA_DIR;
path += "/ardour/";
return path;
}
bool
Configuration::get_no_new_session_dialog()
{

View File

@@ -32,6 +32,7 @@
#include <lrdf.h>
#include <pbd/error.h>
#include <pbd/strsplit.h>
#include <midi++/port.h>
#include <midi++/port_request.h>
@@ -298,37 +299,72 @@ ARDOUR::new_change ()
return c;
}
string
ARDOUR::get_user_ardour_path ()
{
string path;
char* envvar;
if ((envvar = getenv ("HOME")) == 0 || strlen (envvar) == 0) {
return "/";
}
path = envvar;
path += "/.ardour/";
return path;
}
string
ARDOUR::get_system_ardour_path ()
{
string path;
path += DATA_DIR;
path += "/ardour/";
return path;
}
static string
find_file (string name, string dir, string subdir = "")
{
string path;
char* envvar = getenv("ARDOUR_PATH");
/* stop A: ~/.ardour/... */
/* stop A: any directory in ARDOUR_PATH */
if (envvar != 0) {
path = getenv ("HOME");
if (path.length()) {
vector<string> split_path;
split (envvar, split_path, ':');
path += "/.ardour/";
/* try to ensure that the directory exists.
failure doesn't mean much here.
*/
mkdir (path.c_str(), 0755);
if (subdir.length()) {
path += subdir + "/";
}
path += name;
if (access (path.c_str(), R_OK) == 0) {
return path;
for (vector<string>::iterator i = split_path.begin(); i != split_path.end(); ++i) {
path = *i;
path += "/" + name;
if (access (path.c_str(), R_OK) == 0) {
cerr << "Using file " << path << " found in ARDOUR_PATH." << endl;
return path;
}
}
}
/* stop B: dir/... */
/* stop B: ~/.ardour/ */
path = get_user_ardour_path();
if (subdir.length()) {
path += subdir + "/";
}
path += name;
if (access (path.c_str(), R_OK) == 0) {
return path;
}
/* C: dir/... */
path = dir;
path += "/ardour/";

View File

@@ -34,7 +34,7 @@ using namespace ARDOUR;
int
ARDOUR::read_recent_sessions (RecentSessions& rs)
{
string path = Config->get_user_ardour_path();
string path = get_user_ardour_path();
path += "/recent";
ifstream recent (path.c_str());
@@ -82,7 +82,7 @@ ARDOUR::read_recent_sessions (RecentSessions& rs)
int
ARDOUR::write_recent_sessions (RecentSessions& rs)
{
string path = Config->get_user_ardour_path();
string path = get_user_ardour_path();
path += "/recent";
ofstream recent (path.c_str());

View File

@@ -3409,7 +3409,7 @@ void
Session::add_instant_xml (XMLNode& node, const std::string& dir)
{
Stateful::add_instant_xml (node, dir);
Config->add_instant_xml (node, Config->get_user_ardour_path());
Config->add_instant_xml (node, get_user_ardour_path());
}
int

View File

@@ -2241,7 +2241,7 @@ Session::automation_dir () const
string
Session::template_dir ()
{
string path = Config->get_user_ardour_path();
string path = get_user_ardour_path();
path += "templates/";
return path;
@@ -2252,11 +2252,11 @@ Session::template_path ()
{
string path;
path += Config->get_user_ardour_path();
path += get_user_ardour_path();
if (path[path.length()-1] != ':') {
path += ':';
}
path += Config->get_system_ardour_path();
path += get_system_ardour_path();
vector<string> split_path;
@@ -2654,7 +2654,7 @@ Session::get_template_list (list<string> &template_names)
int
Session::read_favorite_dirs (FavoriteDirs & favs)
{
string path = Config->get_user_ardour_path();
string path = get_user_ardour_path();
path += "/favorite_dirs";
ifstream fav (path.c_str());
@@ -2689,7 +2689,7 @@ Session::read_favorite_dirs (FavoriteDirs & favs)
int
Session::write_favorite_dirs (FavoriteDirs & favs)
{
string path = Config->get_user_ardour_path();
string path = get_user_ardour_path();
path += "/favorite_dirs";
ofstream fav (path.c_str());