changeset 2:4d6e60a7c80e

Some JSON fixes and a quick test program
author Chris Cannam
date Tue, 23 Aug 2016 12:04:49 +0100
parents 7cfe736fd974
children 6a792d8838c9
files Makefile.example VamPipePluginLibrary.cpp quick-test.cpp
diffstat 3 files changed, 73 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.example	Tue Aug 23 11:17:01 2016 +0100
+++ b/Makefile.example	Tue Aug 23 12:04:49 2016 +0100
@@ -1,19 +1,42 @@
 
-example.so:	example.cpp VamPipeAdapter.h VamPipePluginLibrary.h VamPipePluginLibrary.cpp
-		c++ -std=c++11 -fPIC \
-		-I../vamp-plugin-sdk -I.. -I../json \
-		-Wall -Wextra -g \
-		-shared -Wl,-Bsymbolic -Wl,-soname=example.so -Wl,-z,defs -Wl,--version-script=vampipe.map \
-		example.cpp \
-		VamPipePluginLibrary.cpp \
+ADAPTER_HEADERS	:= VamPipeAdapter.h VamPipePluginLibrary.h 
+ADAPTER_SOURCES	:= VamPipePluginLibrary.cpp
+
+PLUGIN_SOURCES	:= \
 		../vamp-plugin-sdk/examples/ZeroCrossing.cpp \
 		../vamp-plugin-sdk/examples/SpectralCentroid.cpp \
 		../vamp-plugin-sdk/examples/PercussionOnsetDetector.cpp \
 		../vamp-plugin-sdk/examples/FixedTempoEstimator.cpp \
 		../vamp-plugin-sdk/examples/AmplitudeFollower.cpp \
-		../vamp-plugin-sdk/examples/PowerSpectrum.cpp \
-		../json/json11/json11.cpp \
+		../vamp-plugin-sdk/examples/PowerSpectrum.cpp
+
+OTHER_SOURCES	:= \
+		../json/json11/json11.cpp
+
+SDK_LIBS	:= \
 		../vamp-plugin-sdk/libvamp-hostsdk.a \
-		../vamp-plugin-sdk/libvamp-sdk.a \
-		-o example.so
+		../vamp-plugin-sdk/libvamp-sdk.a
 
+EXAMPLE_EXT	:= .so
+EXAMPLE		:= example$(EXAMPLE_EXT)
+EXAMPLE_SOURCE	:= example.cpp
+EXAMPLE_SOURCES	:= $(EXAMPLE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(OTHER_SOURCES)
+EXAMPLE_LDFLAGS	:= -shared -Wl,-Bsymbolic -Wl,-soname=example.so -Wl,-z,defs -Wl,--version-script=vampipe.map
+
+TEST		:= quick-test
+TEST_SOURCE	:= quick-test.cpp
+TEST_LDFLAGS	:= -ldl
+
+CXXFLAGS	:= -std=c++11 -fPIC -Wall -Wextra -g
+INCPATH		:= -I../vamp-plugin-sdk -I.. -I../json
+
+all:		$(EXAMPLE) $(TEST)
+		./$(TEST)
+
+$(EXAMPLE):	$(EXAMPLE_SOURCES) $(ADAPTER_HEADERS) $(SDK_LIBS)
+		$(CXX) $(CXXFLAGS) $(INCPATH) -o $(EXAMPLE) \
+		       $(EXAMPLE_SOURCES) $(SDK_LIBS) $(EXAMPLE_LDFLAGS)
+
+$(TEST):	$(TEST_SOURCE)
+		$(CXX) $(CXXFLAGS) -o $(TEST) $(TEST_SOURCE) $(TEST_LDFLAGS)
+
--- a/VamPipePluginLibrary.cpp	Tue Aug 23 11:17:01 2016 +0100
+++ b/VamPipePluginLibrary.cpp	Tue Aug 23 12:04:49 2016 +0100
@@ -58,7 +58,7 @@
     if (!j["type"].is_string()) {
 	throw VampJson::Failure("string expected for type field");
     }
-    if (!j["content"].is_object()) {
+    if (!j["content"].is_null() && !j["content"].is_object()) {
 	throw VampJson::Failure("object expected for content field");
     }
     return j;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quick-test.cpp	Tue Aug 23 12:04:49 2016 +0100
@@ -0,0 +1,38 @@
+
+#include <iostream>
+#include <dlfcn.h>
+
+using namespace std;
+
+int main(int argc, char **argv)
+{
+    string example = "./example.so";
+    
+    void *lib = dlopen(example.c_str(), RTLD_LAZY | RTLD_LOCAL);
+    if (!lib) {
+	cerr << "failed to open " + example + ": " << dlerror() << endl;
+	return 1;
+    }
+
+    typedef const char *(*RequestFn)(const char *);
+    RequestFn reqFn = (RequestFn)dlsym(lib, "vampipeRequestJson");
+    if (!reqFn) {
+	cerr << "failed to find request function in " +
+	    example + ": " << dlerror() << endl;
+	return 1;
+    }
+    
+    typedef void (*FreeFn)(const char *);
+    FreeFn freeFn = (FreeFn)dlsym(lib, "vampipeFreeJson");
+    if (!freeFn) {
+	cerr << "failed to find free function in " +
+	    example + ": " << dlerror() << endl;
+	return 1;
+    }
+
+    string listRequest = "{\"type\": \"list\"}";
+    const char *listResponse = reqFn(listRequest.c_str());
+    cout << listResponse << endl;
+    freeFn(listResponse);
+}
+