diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2007-06-27 12:12:18 +0000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2007-06-27 12:12:18 +0000 |
commit | 0abcfb16ba203be43fcb2d2cd0b740da85679e7a (patch) | |
tree | a3960e9ff490dab3ff5a239acc561ae21ab23a64 /libs/ardour/control_protocol_manager.cc | |
parent | 1b77a3535304c25a49686886054db148442b1032 (diff) |
Replace code for finding ControlProtocols/Surface plugins with a portable equivalent.
Remove Session::control_protocol_path and the supporting non-portable
Session::suffixed_search_path from Session.
Add ARDOUR::control_protocol_search_path which is used in place of
Session::control_protocol_path
Replace ARDOUR::get_system_module_path with ARDOUR::system_module_directory which
is used by ARDOUR::control_protocol_search_path
Export ARDOUR_SURFACES_PATH in gtk2_ardour/ardev_common.sh which is returned
by ARDOUR::control_protocol_search_path if defined. This means the control surfaces
in the libs/surfaces/* directories can now be used without installing them.
Add pbd/file_utils.h/cc containing functions for finding files matching a certain
pattern
Update documentation in SearchPath and add another constructor that takes
a sys::path
git-svn-id: svn://localhost/ardour2/trunk@2049 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/control_protocol_manager.cc')
-rw-r--r-- | libs/ardour/control_protocol_manager.cc | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index 00c05b2800..84791ab2c7 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -20,13 +20,14 @@ #include <dlfcn.h> #include <pbd/compose.h> +#include <pbd/file_utils.h> #include <pbd/error.h> -#include <pbd/pathscanner.h> #include <control_protocol/control_protocol.h> #include <ardour/session.h> #include <ardour/control_protocol_manager.h> +#include <ardour/control_protocol_search_path.h> using namespace ARDOUR; using namespace std; @@ -168,15 +169,6 @@ ControlProtocolManager::teardown (ControlProtocolInfo& cpi) return 0; } -static bool protocol_filter (const string& str, void *arg) -{ - /* Not a dotfile, has a prefix before a period, suffix is "so", or "dylib" */ - - return str[0] != '.' - && ((str.length() > 3 && str.find (".so") == (str.length() - 3)) - || (str.length() > 6 && str.find (".dylib") == (str.length() - 6))); -} - void ControlProtocolManager::load_mandatory_protocols () { @@ -193,21 +185,24 @@ ControlProtocolManager::load_mandatory_protocols () } void -ControlProtocolManager::discover_control_protocols (string path) +ControlProtocolManager::discover_control_protocols () { - vector<string *> *found; - PathScanner scanner; + vector<sys::path> cp_modules; - info << string_compose (_("looking for control protocols in %1"), path) << endmsg; + Glib::PatternSpec so_extension_pattern("*.so"); + Glib::PatternSpec dylib_extension_pattern("*.dylib"); - found = scanner (path, protocol_filter, 0, false, true); + find_matching_files_in_search_path (control_protocol_search_path (), + so_extension_pattern, cp_modules); - for (vector<string*>::iterator i = found->begin(); i != found->end(); ++i) { - control_protocol_discover (**i); - delete *i; - } + find_matching_files_in_search_path (control_protocol_search_path (), + dylib_extension_pattern, cp_modules); + + info << string_compose (_("looking for control protocols in %1"), control_protocol_search_path().get_string()) << endmsg; - delete found; + for (vector<sys::path>::iterator i = cp_modules.begin(); i != cp_modules.end(); ++i) { + control_protocol_discover ((*i).to_string()); + } } int |