3
0
Fork 0
forked from mirrors/nixpkgs

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"; 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 = [ buildInputs = [
alsaLib asio autoconf automake bison jackaudio libgig libsndfile 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 have questions on the subject, that are not yet covered by the
FAQ, please contact us. FAQ, please contact us.
''; '';
license = licenses.gpl2; license = licenses.proprietary;
maintainers = [ maintainers.goibhniu ]; 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;
}