summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorben <ben@harrisonconsoles.com>2013-07-10 07:31:25 -0500
committerben <ben@harrisonconsoles.com>2013-07-10 07:31:25 -0500
commit04eaf7b418c674d5babb4ecfe1312059daf899d4 (patch)
tree621bb0a1c9be43aa124726f65460794ca8084170 /libs
parent07be5beee7941a193fd55b584e72dbd9c8bea6fb (diff)
add lib/LV2 path akin to lib/surfaces, to allow bundling of LV2 plugins in an ardour release. My first attempt to push...
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/lv2_bundled_search_path.h35
-rw-r--r--libs/ardour/lv2_bundled_search_path.cc41
-rw-r--r--libs/ardour/lv2_plugin.cc29
-rw-r--r--libs/ardour/wscript1
4 files changed, 106 insertions, 0 deletions
diff --git a/libs/ardour/ardour/lv2_bundled_search_path.h b/libs/ardour/ardour/lv2_bundled_search_path.h
new file mode 100644
index 0000000000..f5780c5e0e
--- /dev/null
+++ b/libs/ardour/ardour/lv2_bundled_search_path.h
@@ -0,0 +1,35 @@
+/*
+ Copyright (C) 2013 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef ARDOUR_LV2_BUNDLED_SEARCH_PATH_INCLUDED
+#define ARDOUR_LV2_BUNDLED_SEARCH_PATH_INCLUDED
+
+#include "pbd/search_path.h"
+
+namespace ARDOUR {
+
+ /**
+ * return a SearchPath containing directories in which to look for
+ * lv2 plugins.
+ */
+ PBD::SearchPath lv2_bundled_search_path ();
+
+} // namespace ARDOUR
+
+#endif
diff --git a/libs/ardour/lv2_bundled_search_path.cc b/libs/ardour/lv2_bundled_search_path.cc
new file mode 100644
index 0000000000..d8cd1c1075
--- /dev/null
+++ b/libs/ardour/lv2_bundled_search_path.cc
@@ -0,0 +1,41 @@
+/*
+ Copyright (C) 2013 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <iostream>
+
+#include <glibmm/miscutils.h>
+
+#include "ardour/lv2_bundled_search_path.h"
+#include "ardour/directory_names.h"
+#include "ardour/filesystem_paths.h"
+
+using namespace PBD;
+
+namespace ARDOUR {
+
+SearchPath
+lv2_bundled_search_path ()
+{
+ SearchPath spath( ardour_dll_directory () );
+ spath.add_subdirectory_to_paths ("LV2");
+
+ return spath;
+}
+
+} // namespace ARDOUR
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 23837de043..d49f8412b7 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -31,6 +31,7 @@
#include <boost/utility.hpp>
+#include "pbd/pathscanner.h"
#include "pbd/compose.h"
#include "pbd/error.h"
#include "pbd/xml++.h"
@@ -46,6 +47,7 @@
#include "ardour/types.h"
#include "ardour/utils.h"
#include "ardour/worker.h"
+#include "ardour/lv2_bundled_search_path.h"
#include "i18n.h"
#include <locale.h>
@@ -1891,10 +1893,37 @@ LV2Plugin::Impl::designated_input (const char* uri, void** bufptrs[], void** buf
return port;
}
+static bool lv2_filter (const string& str, void *arg)
+{
+ /* Not a dotfile, has a prefix before a period, suffix is "lv2" */
+
+ return str[0] != '.' && (str.length() > 3 && str.find (".lv2") == (str.length() - 4));
+}
+
+
LV2World::LV2World()
: world(lilv_world_new())
{
lilv_world_load_all(world);
+
+ cout << "Scanning folders for bundled LV2s: " << ARDOUR::lv2_bundled_search_path().to_string() << endl;
+ PathScanner scanner;
+ vector<string *> *plugin_objects = scanner (ARDOUR::lv2_bundled_search_path().to_string(), lv2_filter, 0, true, true);
+ if (plugin_objects) {
+ for ( vector<string *>::iterator x = plugin_objects->begin(); x != plugin_objects->end (); ++x) {
+#ifdef WINDOWS
+ string uri = "file:///" + **x + "/";
+#else
+ string uri = "file://" + **x + "/";
+#endif
+ LilvNode *node = lilv_new_uri(world, uri.c_str());
+ lilv_world_load_bundle(world, node);
+ lilv_node_free(node);
+ }
+ }
+ delete (plugin_objects);
+
+
atom_AtomPort = lilv_new_uri(world, LV2_ATOM__AtomPort);
atom_Chunk = lilv_new_uri(world, LV2_ATOM__Chunk);
atom_Sequence = lilv_new_uri(world, LV2_ATOM__Sequence);
diff --git a/libs/ardour/wscript b/libs/ardour/wscript
index 9fe47de5ee..5bb924397a 100644
--- a/libs/ardour/wscript
+++ b/libs/ardour/wscript
@@ -103,6 +103,7 @@ libardour_sources = [
'location.cc',
'location_importer.cc',
'ltc_slave.cc',
+ 'lv2_bundled_search_path.cc',
'meter.cc',
'midi_automation_list_binder.cc',
'midi_buffer.cc',