From 3f80f51ceb9d1d0e902cd2bb17858a8b2615cd33 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 10 Jan 2007 17:41:25 +0000 Subject: Moved RDFWriter to RAUL. More work on LADSPA->LV2 converter (use RAUL's RDFWriter now). git-svn-id: http://svn.drobilla.net/lad/slv2@246 a436a847-0d15-0410-975c-d299462d15a1 --- configure.ac | 9 ++- utils/Makefile.am | 5 +- utils/ladspa2lv2.c | 145 --------------------------------------- utils/ladspa2lv2.cc | 193 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+), 148 deletions(-) delete mode 100644 utils/ladspa2lv2.c create mode 100644 utils/ladspa2lv2.cc diff --git a/configure.ac b/configure.ac index 9dfe443..c6773a3 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ AC_PREREQ(2.59) AC_INIT([libslv2],[0.0.1],[drobilla@connect.carleton.ca]) AC_CONFIG_SRCDIR([src/plugin.c]) AC_CONFIG_SRCDIR([slv2/plugin.h]) -AC_CONFIG_SRCDIR([utils/ladspa2lv2.c]) +AC_CONFIG_SRCDIR([utils/ladspa2lv2.cc]) AC_CONFIG_SRCDIR([examples/plugins/Amp-swh.lv2/amp.c]) AC_CONFIG_SRCDIR([examples/hosts/test_host.c]) AC_CONFIG_HEADER([config.h]) @@ -27,8 +27,10 @@ AC_ARG_ENABLE(debug, [debug="$enableval"]) if test "$debug" = "yes"; then CFLAGS="-O0 -g -DDEBUG" + CXXFLAGS="-O0 -g -DDEBUG" else CFLAGS="$CFLAGS -DNDEBUG" + CXXFLAGS="$CFLAGS -DNDEBUG" fi # Check for strict flag @@ -38,6 +40,7 @@ AC_ARG_ENABLE(strict, [strict="$enableval"]) if test "$strict" = "yes"; then CFLAGS="$CFLAGS -std=c99 -pedantic -Wall -Wextra -Wconversion -Winit-self" + CXXFLAGS="$CFLAGS -ansi -pedantic -Wall -Wextra -Wconversion -Winit-self" fi # Build utilities? @@ -45,6 +48,10 @@ build_utilities="no" AC_ARG_ENABLE(utilities, [AS_HELP_STRING(--enable-utilities, [Build utilities (no) - EXPERIMENTAL])], [build_utilities="$enableval"]) +if test "$build_utilities" = "yes"; then + AC_PROG_CXX + PKG_CHECK_MODULES(RAUL, raul >= 0.0.0) +fi AM_CONDITIONAL(BUILD_UTILITIES, [test "$build_utilities" = "yes"]) # Bolt on a few specific flags to CXXFLAGS that should always be used diff --git a/utils/Makefile.am b/utils/Makefile.am index 4e4a984..8d23d38 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -2,7 +2,8 @@ if BUILD_UTILITIES bin_PROGRAMS = ladspa2lv2 -ladspa2lv2_LDADD = -ldl @RAPTOR_LIBS@ -ladspa2lv2_SOURCES = ladspa2lv2.c +ladspa2lv2_CXXFLAGS = @RAUL_CFLAGS@ @RAPTOR_CFLAGS@ +ladspa2lv2_LDADD = -ldl @RAUL_LIBS@ @RAPTOR_LIBS@ +ladspa2lv2_SOURCES = ladspa2lv2.cc endif diff --git a/utils/ladspa2lv2.c b/utils/ladspa2lv2.c deleted file mode 100644 index 4cdef50..0000000 --- a/utils/ladspa2lv2.c +++ /dev/null @@ -1,145 +0,0 @@ -/* ladspa2lv2 - * Copyright (C) 2007 Dave Robillard - * - * 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., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include -#include -#include - -#define U(x) ((const unsigned char*)(x)) - - -LADSPA_Descriptor* -load_ladspa_plugin(const char* lib_path, unsigned long index) -{ - void* const handle = dlopen(lib_path, RTLD_LAZY); - if (handle == NULL) - return NULL; - - LADSPA_Descriptor_Function df - = (LADSPA_Descriptor_Function)dlsym(handle, "ladspa_descriptor"); - - if (df == NULL) { - dlclose(handle); - return NULL; - } - - LADSPA_Descriptor* const descriptor = (LADSPA_Descriptor*)df(index); - - return descriptor; -} - - -void -write_resource(raptor_serializer* serializer, - const char* subject_uri, - const char* predicate_uri, - const char* object_uri) -{ - raptor_statement triple; - - triple.subject = (void*)raptor_new_uri(U(subject_uri)); - triple.subject_type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; - - triple.predicate = (void*)raptor_new_uri(U(predicate_uri)); - triple.predicate_type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; - - //if (object.type() == RdfId::RESOURCE) { - triple.object = (void*)raptor_new_uri(U(object_uri)); - triple.object_type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; - /*} else { - assert(object.type() == RdfId::ANONYMOUS); - triple.object = (unsigned char*)(strdup(object.to_string().c_str())); - triple.object_type = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS; - }*/ - - raptor_serialize_statement(serializer, &triple); -} - - -void -write_lv2_turtle(LADSPA_Descriptor* descriptor, const char* uri, const char* filename) -{ - raptor_init(); - raptor_serializer* serializer = raptor_new_serializer("turtle"); - - // Set up namespaces - raptor_serialize_set_namespace(serializer, raptor_new_uri( - U("http://www.w3.org/1999/02/22-rdf-syntax-ns#")), U("rdf")); - raptor_serialize_set_namespace(serializer, raptor_new_uri( - U("http://www.w3.org/2000/01/rdf-schema#")), U("rdfs")); - raptor_serialize_set_namespace(serializer, raptor_new_uri( - U("http://www.w3.org/2001/XMLSchema")), U("xsd")); - raptor_serialize_set_namespace(serializer, raptor_new_uri( - U("http://usefulinc.com/ns/doap#")), U("doap")); - raptor_serialize_set_namespace(serializer, raptor_new_uri( - U("http://xmlns.com/foaf/0.1/")), U("foaf")); - raptor_serialize_set_namespace(serializer, raptor_new_uri( - U("http://lv2plug.in/ontology#")), U("lv2")); - - raptor_serialize_start_to_filename(serializer, filename); - - - // Write out plugin data - - write_resource(serializer, uri, - "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "lv2:Plugin"); - - write_resource(serializer, uri, - "http://usefulinc.com/ns/doap#name", descriptor->Name); - - - - raptor_serialize_end(serializer); - raptor_free_serializer(serializer); - raptor_finish(); -} - - -void -print_usage() -{ - printf("Usage: ladspa2slv2 /path/to/laddspalib.so index lv2_uri\n\n"); -} - - -int -main(int argc, char** argv) -{ - if (argc != 4) { - print_usage(); - return 1; - } - - const char* const lib_path = argv[1]; - const unsigned long index = atol(argv[2]); - const char* const uri = argv[3]; - - - LADSPA_Descriptor* descriptor = load_ladspa_plugin(lib_path, index); - - if (descriptor) { - printf("Loaded %s : %lu\n", lib_path, index); - write_lv2_turtle(descriptor, uri, "ladspaplugin.ttl"); - } else { - printf("Failed to load %s : %lu\n", lib_path, index); - } - - return 0; -} diff --git a/utils/ladspa2lv2.cc b/utils/ladspa2lv2.cc new file mode 100644 index 0000000..3b989a1 --- /dev/null +++ b/utils/ladspa2lv2.cc @@ -0,0 +1,193 @@ +/* ladspa2lv2 + * Copyright (C) 2007 Dave Robillard + * + * 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., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include "raul/RDFWriter.h" + +#define U(x) ((const unsigned char*)(x)) + + +LADSPA_Descriptor* +load_ladspa_plugin(const char* lib_path, unsigned long index) +{ + void* const handle = dlopen(lib_path, RTLD_LAZY); + if (handle == NULL) + return NULL; + + LADSPA_Descriptor_Function df + = (LADSPA_Descriptor_Function)dlsym(handle, "ladspa_descriptor"); + + if (df == NULL) { + dlclose(handle); + return NULL; + } + + LADSPA_Descriptor* const descriptor = (LADSPA_Descriptor*)df(index); + + return descriptor; +} + +#if 0 +void +write_resource(raptor_serializer* serializer, + const char* subject_uri, + const char* predicate_uri, + const char* object_uri) +{ + raptor_statement triple; + + triple.subject = (void*)raptor_new_uri(U(subject_uri)); + triple.subject_type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; + + triple.predicate = (void*)raptor_new_uri(U(predicate_uri)); + triple.predicate_type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; + + //if (object.type() == RdfId::RESOURCE) { + triple.object = (void*)raptor_new_uri(U(object_uri)); + triple.object_type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; + /*} else { + assert(object.type() == RdfId::ANONYMOUS); + triple.object = (unsigned char*)(strdup(object.to_string().c_str())); + triple.object_type = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS; + }*/ + + raptor_serialize_statement(serializer, &triple); +} +#endif + +void +write_lv2_turtle(LADSPA_Descriptor* descriptor, const char* uri, const char* filename) +{ +#if 0 + raptor_init(); + raptor_serializer* serializer = raptor_new_serializer("turtle"); + + // Set up namespaces + raptor_serialize_set_namespace(serializer, raptor_new_uri( + U("http://www.w3.org/1999/02/22-rdf-syntax-ns#")), U("rdf")); + raptor_serialize_set_namespace(serializer, raptor_new_uri( + U("http://www.w3.org/2000/01/rdf-schema#")), U("rdfs")); + raptor_serialize_set_namespace(serializer, raptor_new_uri( + U("http://www.w3.org/2001/XMLSchema")), U("xsd")); + raptor_serialize_set_namespace(serializer, raptor_new_uri( + U("http://usefulinc.com/ns/doap#")), U("doap")); + raptor_serialize_set_namespace(serializer, raptor_new_uri( + U("http://xmlns.com/foaf/0.1/")), U("foaf")); + raptor_serialize_set_namespace(serializer, raptor_new_uri( + U("http://lv2plug.in/ontology#")), U("lv2")); + + raptor_serialize_start_to_filename(serializer, filename); + + + // Write out plugin data + + write_resource(serializer, uri, + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "lv2:Plugin"); + + write_resource(serializer, uri, + "http://usefulinc.com/ns/doap#name", descriptor->Name); + + + + raptor_serialize_end(serializer); + raptor_free_serializer(serializer); + raptor_finish(); +#endif + RDFWriter writer; + + writer.add_prefix("lv2", "http://lv2plug.in/ontology#"); + writer.add_prefix("doap", "http://usefulinc.com/ns/doap#"); + + writer.start_to_filename(filename); + + RdfId plugin_id = RdfId(RdfId::RESOURCE, uri); + + writer.write(plugin_id, + RdfId(RdfId::RESOURCE, "rdf:type"), + RdfId(RdfId::RESOURCE, "lv2:Plugin")); + + writer.write(plugin_id, + RdfId(RdfId::RESOURCE, "doap:name"), + Atom(descriptor->Name)); + + if (LADSPA_IS_HARD_RT_CAPABLE(descriptor->Properties)) + writer.write(plugin_id, + RdfId(RdfId::RESOURCE, "lv2:property"), + RdfId(RdfId::RESOURCE, "lv2:hardRTCapable")); + + for (uint32_t i=0; i < descriptor->PortCount; ++i) { + char index_str[32]; + snprintf(index_str, 32, "%u", i); + + RdfId port_id(RdfId::ANONYMOUS, index_str); + + writer.write(plugin_id, + RdfId(RdfId::RESOURCE, "lv2:port"), + port_id); + + writer.write(port_id, + RdfId(RdfId::RESOURCE, "lv2:index"), + Atom((int32_t)i)); + + writer.write(port_id, + RdfId(RdfId::RESOURCE, "lv2:dataType"), + RdfId(RdfId::RESOURCE, "lv2:float")); + + writer.write(port_id, + RdfId(RdfId::RESOURCE, "lv2:name"), + Atom(descriptor->PortNames[i])); + } + + writer.finish(); +} + + +void +print_usage() +{ + printf("Usage: ladspa2slv2 /path/to/laddspalib.so index lv2_uri\n\n"); +} + + +int +main(int argc, char** argv) +{ + if (argc != 4) { + print_usage(); + return 1; + } + + const char* const lib_path = argv[1]; + const unsigned long index = atol(argv[2]); + const char* const uri = argv[3]; + + + LADSPA_Descriptor* descriptor = load_ladspa_plugin(lib_path, index); + + if (descriptor) { + printf("Loaded %s : %lu\n", lib_path, index); + write_lv2_turtle(descriptor, uri, "ladspaplugin.ttl"); + } else { + printf("Failed to load %s : %lu\n", lib_path, index); + } + + return 0; +} -- cgit v1.2.1