Patch linuxsampler so that it can load SFZ state when used as an LV2 plugin: http://tracker.ardour.org/view.php?id=4462

This commit is contained in:
Cillian de Róiste 2012-08-27 23:48:44 +02:00
parent 0f1326cde9
commit 0a6c7e432b
2 changed files with 57 additions and 3 deletions

View File

@ -11,9 +11,12 @@ stdenv.mkDerivation rec {
sha256 = "0zsrvs9dwwhjx733m45vfi11yjkqv33z8qxn2i9qriq5zs1f0kd7";
};
patchPhase = "sed -e 's/which/type -P/g' -i scripts/generate_parser.sh";
patches = ./linuxsampler_lv2_sfz_fix.diff;
preConfigure = "make -f Makefile.cvs";
preConfigure = ''
sed -e 's/which/type -P/g' -i scripts/generate_parser.sh
make -f Makefile.cvs
'';
buildInputs = [
alsaLib asio autoconf automake bison jackaudio libgig libsndfile
@ -34,7 +37,8 @@ stdenv.mkDerivation rec {
have questions on the subject, that are not yet covered by the
FAQ, please contact us.
'';
license = licenses.gpl2;
license = licenses.proprietary;
maintainers = [ maintainers.goibhniu ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,50 @@
Index: linuxsampler-r2359/src/hostplugins/lv2/PluginLv2.cpp
===================================================================
--- linuxsampler-r2359/src/hostplugins/lv2/PluginLv2.cpp (revision 2359)
+++ linuxsampler-r2359/src/hostplugins/lv2/PluginLv2.cpp (working copy)
@@ -18,6 +18,8 @@
* MA 02110-1301 USA *
***************************************************************************/
+#define _BSD_SOURCE 1 /* for realpath() */
+
#include <algorithm>
#include <cassert>
#include <cstdio>
@@ -118,6 +120,23 @@
dmsg(2, ("linuxsampler: Deactivate\n"));
}
+ static String RealPath(const String& path)
+ {
+ String out = path;
+ char* cpath = NULL;
+#ifdef _WIN32
+ cpath = (char*)malloc(MAX_PATH);
+ GetFullPathName(path.c_str(), MAX_PATH, cpath, NULL);
+#else
+ cpath = realpath(path.c_str(), NULL);
+#endif
+ if (cpath) {
+ out = cpath;
+ free(cpath);
+ }
+ return out;
+ }
+
String PluginLv2::PathToState(const String& path) {
if (MapPath) {
char* cstr = MapPath->abstract_path(MapPath->handle, path.c_str());
@@ -131,9 +150,10 @@
String PluginLv2::PathFromState(const String& path) {
if (MapPath) {
char* cstr = MapPath->absolute_path(MapPath->handle, path.c_str());
- const String abstract_path(cstr);
+ // Resolve symbolic links so SFZ sample paths load correctly
+ const String absolute_path(RealPath(cstr));
free(cstr);
- return abstract_path;
+ return absolute_path;
}
return path;
}