X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fsearch_path.cc;h=fe2087f6b151488c6ab3c68a01a4a996ff47bb78;hb=c046b7c9d36d54600907565271a8ea2ceb004300;hp=146fd7eaf08b6d811a91c3f6e99ef7b75a0dc658;hpb=bc60785ea56c7ad50180ef3bd18d32c3f12f6b0a;p=ardour.git diff --git a/libs/pbd/search_path.cc b/libs/pbd/search_path.cc index 146fd7eaf0..fe2087f6b1 100644 --- a/libs/pbd/search_path.cc +++ b/libs/pbd/search_path.cc @@ -17,75 +17,62 @@ */ -#include -#include -#include +#include -namespace { +#include +#include -#ifdef WIN32 -const char * const path_delimiter = ";"; -#else -const char * const path_delimiter = ":"; -#endif +#include "pbd/tokenizer.h" +#include "pbd/search_path.h" +#include "pbd/error.h" -} +using namespace std; namespace PBD { -SearchPath::SearchPath () +Searchpath::Searchpath () { } -SearchPath::SearchPath (const string& path) +Searchpath::Searchpath (const string& path) { - vector tmp; - - if(!tokenize ( path, string(path_delimiter), std::back_inserter (tmp))) - { - // log warning(info perhaps?) that the path is empty - warning << "SearchPath contains no tokens" << endmsg; + vector tmp; + if (tokenize (path, string(G_SEARCHPATH_SEPARATOR_S), std::back_inserter (tmp))) { + add_directories (tmp); } - - add_directories (tmp); } -SearchPath::SearchPath (const vector& paths) +Searchpath::Searchpath (const vector& paths) { add_directories (paths); } -SearchPath::SearchPath (const SearchPath& other) - : m_dirs(other.m_dirs) -{ - -} - void -SearchPath::add_directory (const sys::path& directory_path) +Searchpath::add_directory (const std::string& directory_path) { - // test for existance and warn etc? - m_dirs.push_back(directory_path); + if (!directory_path.empty()) { + push_back(directory_path); + } } void -SearchPath::add_directories (const vector& paths) +Searchpath::add_directories (const vector& paths) { - for(vector::const_iterator i = paths.begin(); i != paths.end(); ++i) { + for(vector::const_iterator i = paths.begin(); i != paths.end(); ++i) { add_directory (*i); } } const string -SearchPath::get_string () const +Searchpath::to_string () const { string path; - for (vector::const_iterator i = m_dirs.begin(); i != m_dirs.end(); ++i) { - path += (*i).to_string(); - path += path_delimiter; + for (vector::const_iterator i = begin(); i != end(); ++i) { + path += *i; + path += G_SEARCHPATH_SEPARATOR; } path = path.substr (0, path.length() - 1); // drop final separator @@ -93,59 +80,67 @@ SearchPath::get_string () const return path; } -SearchPath& -SearchPath::operator= (const SearchPath& path) +Searchpath& +Searchpath::operator+= (const Searchpath& spath) { - m_dirs = path.m_dirs; + insert(end(), spath.begin(), spath.end()); return *this; } -SearchPath& -SearchPath::operator+= (const SearchPath& spath) -{ - m_dirs.insert(m_dirs.end(), spath.m_dirs.begin(), spath.m_dirs.end()); - return *this; -} - -SearchPath& -SearchPath::operator+= (const sys::path& directory_path) +Searchpath& +Searchpath::operator+= (const std::string& directory_path) { add_directory (directory_path); return *this; } -SearchPath& -SearchPath::operator+ (const sys::path& directory_path) +Searchpath& +Searchpath::operator+ (const std::string& directory_path) { add_directory (directory_path); return *this; } -SearchPath& -SearchPath::operator+ (const SearchPath& spath) +Searchpath& +Searchpath::operator+ (const Searchpath& spath) { - // concatenate paths into new SearchPath - m_dirs.insert(m_dirs.end(), spath.m_dirs.begin(), spath.m_dirs.end()); + // concatenate paths into new Searchpath + insert(end(), spath.begin(), spath.end()); return *this; } -SearchPath& -SearchPath::add_subdirectory_to_paths (const string& subdir) +Searchpath& +Searchpath::add_subdirectory_to_paths (const string& subdir) { - for (vector::iterator i = m_dirs.begin(); i != m_dirs.end(); ++i) - { + for (vector::iterator i = begin(); i != end(); ++i) { // should these new paths just be added to the end of // the search path rather than replace? - *i /= subdir; + *i = Glib::build_filename (*i, subdir); } return *this; } - -SearchPath& -SearchPath::operator/= (const string& subdir) + +/* This is not part of the Searchpath object, but is closely related to the + * whole idea, and we put it here for convenience. + */ + +void +export_search_path (const string& base_dir, const char* varname, const char* dir) { - return add_subdirectory_to_paths (subdir); + string path; + const char * cstr = g_getenv (varname); + + if (cstr) { + path = cstr; + path += ':'; + } else { + path = ""; + } + path += base_dir; + path += dir; + + g_setenv (varname, path.c_str(), 1); } } // namespace PBD