summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt5
-rw-r--r--cmake/Modules/FindThrift.cmake48
-rw-r--r--config.h.in6
-rw-r--r--gnuradio-runtime/include/gnuradio/CMakeLists.txt11
-rw-r--r--gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h22
-rw-r--r--gnuradio-runtime/include/gnuradio/rpcserver_selector.h11
-rw-r--r--gnuradio-runtime/lib/controlport/CMakeLists.txt39
-rw-r--r--gnuradio-runtime/lib/controlport/rpcserver_selector.cc8
-rw-r--r--gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc4
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt24
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py3
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py4
12 files changed, 145 insertions, 40 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0d0a5000d5..bfc0accba3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -407,6 +407,11 @@ add_subdirectory(gr-zeromq)
if(ENABLE_GR_CTRLPORT)
set(GR_CTRLPORT True)
add_definitions(-DGR_CTRLPORT)
+
+ if(THRIFT_FOUND)
+ set(GR_RPCSERVER_ENABLED True)
+ set(GR_RPCSERVER_THRIFT True)
+ endif(THRIFT_FOUND)
endif(ENABLE_GR_CTRLPORT)
# Install our Cmake modules into $prefix/lib/cmake/gnuradio
diff --git a/cmake/Modules/FindThrift.cmake b/cmake/Modules/FindThrift.cmake
new file mode 100644
index 0000000000..017e941eeb
--- /dev/null
+++ b/cmake/Modules/FindThrift.cmake
@@ -0,0 +1,48 @@
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_THRIFT thrift>=0.9.2)
+
+FIND_PATH(THRIFT_INCLUDE_DIRS
+ NAMES thrift/Thrift.h
+ HINTS ${PC_THRIFT_INCLUDE_DIR}
+ ${CMAKE_INSTALL_PREFIX}/include
+ PATHS
+ /usr/local/include
+ /usr/include
+)
+
+FIND_LIBRARY(THRIFT_LIBRARIES
+ NAMES thrift
+ HINTS ${PC_THRIFT_LIBDIR}
+ ${CMAKE_INSTALL_PREFIX}/lib
+ ${CMAKE_INSTALL_PREFIX}/lib64
+ PATHS
+ ${THRIFT_INCLUDE_DIRS}/../lib
+ /usr/local/lib
+ /usr/lib
+)
+
+if(THRIFT_INCLUDE_DIRS AND THRIFT_LIBRARIES)
+ set(THRIFT_FOUND TRUE CACHE BOOL "If Thift has been found")
+endif(THRIFT_INCLUDE_DIRS AND THRIFT_LIBRARIES)
+
+
+# Get the thrift binary to build our files during cmake
+FIND_PROGRAM(THRIFT_BIN thrift)
+
+# Check that Thrift for Python is available
+include(GrPython)
+GR_PYTHON_CHECK_MODULE("Thrift" thrift "1" PYTHON_THRIFT_FOUND)
+
+if(NOT PYTHON_THRIFT_FOUND)
+ unset(THRIFT_FOUND)
+endif(NOT PYTHON_THRIFT_FOUND)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(THRIFT DEFAULT_MSG
+ THRIFT_LIBRARIES THRIFT_INCLUDE_DIRS
+ THRIFT_BIN PYTHON_THRIFT_FOUND THRIFT_FOUND
+)
+MARK_AS_ADVANCED(
+ THRIFT_LIBRARIES THRIFT_INCLUDE_DIRS
+ THRIFT_BIN PYTHON_THRIFT_FOUND THRIFT_FOUND
+)
diff --git a/config.h.in b/config.h.in
index 82751a3cf7..ad6e3d022c 100644
--- a/config.h.in
+++ b/config.h.in
@@ -30,6 +30,12 @@
#ifndef GR_CTRLPORT
#cmakedefine GR_CTRLPORT
#endif
+#ifndef GR_RPCSERVER_ENABLED
+#cmakedefine GR_RPCSERVER_ENABLED
+#endif
+#ifndef GR_RPCSERVER_THRIFT
+#cmakedefine GR_RPCSERVER_THRIFT
+#endif
#ifndef ENABLE_GR_LOG
#cmakedefine ENABLE_GR_LOG
#endif
diff --git a/gnuradio-runtime/include/gnuradio/CMakeLists.txt b/gnuradio-runtime/include/gnuradio/CMakeLists.txt
index 02b80ccb5c..472f91847b 100644
--- a/gnuradio-runtime/include/gnuradio/CMakeLists.txt
+++ b/gnuradio-runtime/include/gnuradio/CMakeLists.txt
@@ -80,14 +80,21 @@ install(FILES
rpcserver_base.h
rpcserver_booter_aggregator.h
rpcserver_booter_base.h
- rpcserver_booter_thrift.h
rpcserver_selector.h
+ ${CMAKE_CURRENT_BINARY_DIR}/logger.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio
+ COMPONENT "runtime_devel"
+)
+
+if(THRIFT_FOUND)
+install(FILES
+ rpcserver_booter_thrift.h
thrift_application_base.h
thrift_server_template.h
- ${CMAKE_CURRENT_BINARY_DIR}/logger.h
DESTINATION ${GR_INCLUDE_DIR}/gnuradio
COMPONENT "runtime_devel"
)
+endif(THRIFT_FOUND)
##########################################################################
# Configure logger
diff --git a/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h b/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h
index 0999dea747..f82f5ed0aa 100644
--- a/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h
+++ b/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h
@@ -672,7 +672,7 @@ struct rpcbasic_register_set : public rpcbasic_base
d_minpriv = minpriv_;
d_display = display_;
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::configureCallback_t
extractor(new rpcbasic_extractor<T,Tto>(d_object, function),
minpriv_, std::string(units_),
@@ -726,7 +726,7 @@ struct rpcbasic_register_set : public rpcbasic_base
d_minpriv = minpriv_;
d_display = display_;
d_object = obj;
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::configureCallback_t
extractor(new rpcbasic_extractor<T,Tto>(d_object, function),
minpriv_, std::string(units_),
@@ -741,7 +741,7 @@ struct rpcbasic_register_set : public rpcbasic_base
~rpcbasic_register_set()
{
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
rpcmanager::get()->i()->unregisterConfigureCallback(d_id);
#endif
}
@@ -830,7 +830,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base
d_desc = desc_;
d_minpriv = minpriv_;
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::configureCallback_t
extractor(new rpcbasic_extractor<T,void>(d_object, function),
minpriv_, std::string(desc_));
@@ -870,7 +870,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base
d_desc = desc_;
d_minpriv = minpriv_;
d_object = obj;
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::configureCallback_t
extractor(new rpcbasic_extractor<T,void>(d_object, function),
minpriv_, std::string(desc_));
@@ -884,7 +884,7 @@ struct rpcbasic_register_trigger : public rpcbasic_base
~rpcbasic_register_trigger()
{
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
rpcmanager::get()->i()->unregisterConfigureCallback(d_id);
#endif
}
@@ -988,7 +988,7 @@ public:
d_minpriv = minpriv_;
d_display = display_;
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::queryCallback_t
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function),
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1022,7 +1022,7 @@ public:
d_minpriv = minpriv_;
d_display = display_;
d_object = dynamic_cast<T*>(global_block_registry.block_lookup(pmt::intern(block_alias)).get());
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::queryCallback_t
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function),
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1076,7 +1076,7 @@ public:
d_minpriv = minpriv_;
d_display = display_;
d_object = obj;
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::queryCallback_t
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, function),
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1111,7 +1111,7 @@ public:
d_minpriv = minpriv_;
d_display = display_;
d_object = obj;
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
callbackregister_base::queryCallback_t
inserter(new rpcbasic_inserter<T,Tfrom>(d_object, (Tfrom (T::*)())function),
minpriv_, std::string(units_), display_, std::string(desc_), min, max, def);
@@ -1125,7 +1125,7 @@ public:
~rpcbasic_register_get()
{
-#ifdef RPCSERVER_ENABLED
+#ifdef GR_RPCSERVER_ENABLED
rpcmanager::get()->i()->unregisterQueryCallback(d_id);
#endif
}
diff --git a/gnuradio-runtime/include/gnuradio/rpcserver_selector.h b/gnuradio-runtime/include/gnuradio/rpcserver_selector.h
index 1011911575..31ab6cea0b 100644
--- a/gnuradio-runtime/include/gnuradio/rpcserver_selector.h
+++ b/gnuradio-runtime/include/gnuradio/rpcserver_selector.h
@@ -23,11 +23,12 @@
#ifndef RPCSERVER_SELECTOR
#define RPCSERVER_SELECTOR
-#define RPCSERVER_ENABLED
+#include <gnuradio/config.h>
-//#define RPCSERVER_ICE
-#define RPCSERVER_THRIFT
-//#define RPCSERVER_ERLANG
-//#define RPCSERVER_XMLRPC
+//#define GR_RPCSERVER_ENABLED
+//#define GR_RPCSERVER_ICE
+//#define GR_RPCSERVER_THRIFT
+//#define GR_RPCSERVER_ERLANG
+//#define GR_RPCSERVER_XMLRPC
#endif
diff --git a/gnuradio-runtime/lib/controlport/CMakeLists.txt b/gnuradio-runtime/lib/controlport/CMakeLists.txt
index 65d5ebf846..72d032121b 100644
--- a/gnuradio-runtime/lib/controlport/CMakeLists.txt
+++ b/gnuradio-runtime/lib/controlport/CMakeLists.txt
@@ -31,10 +31,29 @@ list(APPEND gnuradio_ctrlport_sources
${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_selector.cc
)
-# FIXME: create actual cmake test to find and enable Thrift
-set(ENABLE_THRIFT "True")
-if(ENABLE_THRIFT)
+OPTION(ENABLE_CTRLPORT_THRIFT "Enable ControlPort Thrift support" ON)
+
+if(ENABLE_CTRLPORT_THRIFT)
+
+# Look if Thrift is installed and use it as a ControlPort backend.
+FIND_PACKAGE(Thrift)
+
+if(THRIFT_FOUND)
+
+# Indicate thrift as an installed backend in the cmake summary.
+message(STATUS "Found and enabling Thrift backend to ControlPort")
+GR_APPEND_SUBCOMPONENT("thrift")
+
+# Run Thrrift To compile C++ and Python files
+message(STATUS "Running thrift to build C++ bindings")
+EXECUTE_PROCESS(
+ COMMAND ${THRIFT_BIN} --gen cpp -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/thrift/gnuradio.thrift
+ OUTPUT_VARIABLE THRIFT_CPP_OUTPUT
+ ERROR_VARIABLE THRIFT_CPP_ERROR
+ )
+
+
list(APPEND gnuradio_ctrlport_sources
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcserver_thrift.cc
${CMAKE_CURRENT_SOURCE_DIR}/thrift/rpcpmtconverters_thrift.cc
@@ -43,14 +62,19 @@ list(APPEND gnuradio_ctrlport_sources
)
# add files built by compiling gnuradio.thrift
-# FIXME: Add cmake execute_process to do this for cpp and py
list(APPEND gnuradio_ctrlport_sources
${CMAKE_CURRENT_BINARY_DIR}/gnuradio_types.cpp
${CMAKE_CURRENT_BINARY_DIR}/gnuradio_constants.cpp
${CMAKE_CURRENT_BINARY_DIR}/ControlPort.cpp
)
-endif(ENABLE_THRIFT)
+# Add required libraries here
+list(APPEND gnuradio_runtime_libs
+ ${THRIFT_LIBRARIES}
+)
+
+endif(THRIFT_FOUND)
+endif(ENABLE_CTRLPORT_THRIFT)
########################################################################
# Add controlport stuff to gnuradio-runtime
@@ -58,9 +82,4 @@ endif(ENABLE_THRIFT)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
-# Add any required libraries here
-list(APPEND gnuradio_runtime_libs
- thrift
-)
-
endif(ENABLE_GR_CTRLPORT)
diff --git a/gnuradio-runtime/lib/controlport/rpcserver_selector.cc b/gnuradio-runtime/lib/controlport/rpcserver_selector.cc
index 199610169f..57b42ca4b6 100644
--- a/gnuradio-runtime/lib/controlport/rpcserver_selector.cc
+++ b/gnuradio-runtime/lib/controlport/rpcserver_selector.cc
@@ -26,19 +26,19 @@
bool rpcmanager::make_aggregator(false);
-#ifdef RPCSERVER_ICE
+#ifdef GR_RPCSERVER_ICE
#error TODO ICE
#endif
-#ifdef RPCSERVER_THRIFT
+#ifdef GR_RPCSERVER_THRIFT
#include <gnuradio/rpcserver_booter_thrift.h>
rpcmanager::rpcserver_booter_register_helper<rpcserver_booter_thrift> boot_thrift;
#endif
-#ifdef RPCSERVER_ERLANG
+#ifdef GR_RPCSERVER_ERLANG
#error TODO ERLANG
#endif
-#ifdef RPCSERVER_XMLRPC
+#ifdef GR_RPCSERVER_XMLRPC
#error TODO XMLRPC
#endif
diff --git a/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc b/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc
index 9839e036bf..5dbfb8d088 100644
--- a/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc
+++ b/gnuradio-runtime/lib/controlport/thrift/rpcserver_thrift.cc
@@ -49,7 +49,6 @@ void
rpcserver_thrift::registerConfigureCallback(const std::string &id, const configureCallback_t callback)
{
{
- std::cerr << "thrift::registerConfigureCallback: " << id << std::endl;
ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(id));
if(iter != d_setcallbackmap.end()) {
std::stringstream s;
@@ -68,7 +67,6 @@ rpcserver_thrift::registerConfigureCallback(const std::string &id, const configu
void
rpcserver_thrift::unregisterConfigureCallback(const std::string &id)
{
- //std::cerr << "thrift::unregisterConfigureCallback: " << id << std::endl;
ConfigureCallbackMap_t::iterator iter(d_setcallbackmap.find(id));
if(iter == d_setcallbackmap.end()) {
std::stringstream s;
@@ -88,7 +86,6 @@ rpcserver_thrift::registerQueryCallback(const std::string &id,
const queryCallback_t callback)
{
{
- std::cerr << "thrift::registerQueryCallback: " << id << std::endl;
QueryCallbackMap_t::const_iterator iter(d_getcallbackmap.find(id));
if(iter != d_getcallbackmap.end()) {
std::stringstream s;
@@ -107,7 +104,6 @@ rpcserver_thrift::registerQueryCallback(const std::string &id,
void
rpcserver_thrift::unregisterQueryCallback(const std::string &id)
{
- //std::cerr << "thrift::unregisterQueryCallback: " << id << std::endl;
QueryCallbackMap_t::iterator iter(d_getcallbackmap.find(id));
if(iter == d_getcallbackmap.end()) {
std::stringstream s;
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt b/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt
index d208763a90..69a61076dc 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/CMakeLists.txt
@@ -20,6 +20,16 @@
########################################################################
include(GrPython)
+if(THRIFT_FOUND)
+
+EXECUTE_PROCESS(
+ COMMAND ${THRIFT_BIN} --gen py -out ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
+ OUTPUT_VARIABLE THRIFT_PY_OUTPUT
+ ERROR_VARIABLE THRIFT_PY_ERROR
+ )
+
+endif(THRIFT_FOUND)
+
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/icon.png
@@ -44,3 +54,17 @@ GR_PYTHON_INSTALL(
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
COMPONENT "runtime_python"
)
+
+# Install the files compiled from gnuradio.thrift
+GR_PYTHON_INSTALL(
+ FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/__init__.py
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/constants.py
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort.py
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ControlPort-remote
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver.py
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/StreamReceiver-remote
+ ${CMAKE_CURRENT_BINARY_DIR}/GNURadio/ttypes.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/ctrlport/GNURadio
+ COMPONENT "runtime_python"
+)
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
index 5d75197966..661705d613 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
@@ -23,8 +23,7 @@
from gnuradio import gr
from gnuradio import blocks
from gnuradio import filter
-#from gnuradio.ctrlport import GNURadio
-from gnuradio.ControlPort import GNURadio
+from gnuradio.ctrlport import GNURadio
import sys, time, struct
try:
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py b/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py
index 6e6faec4c8..eca49dca76 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/ThriftRadioClient.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -25,7 +25,7 @@ from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
#from ControlPort.GNURadio import ControlPort
-from gnuradio.ControlPort.GNURadio import ControlPort
+from gnuradio.ctrlport.GNURadio import ControlPort
import sys
class ThriftRadioClient: