commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 07/50: controlport: Addes a FindThrift cmak


From: git
Subject: [Commit-gnuradio] [gnuradio] 07/50: controlport: Addes a FindThrift cmake module to find the Thrift headers, libraries, and Python files.
Date: Wed, 15 Apr 2015 21:07:51 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch master
in repository gnuradio.

commit 1875c3381bc4e2d2468f9dfe44557cd2a94d5e1c
Author: Tom Rondeau <address@hidden>
Date:   Fri Feb 20 17:14:03 2015 -0500

    controlport: Addes a FindThrift cmake module to find the Thrift headers, 
libraries, and Python files.
    
    Also adds a ENABLE_CTRLPORT_THRIFT option to cmake so we can turn off 
Thrift even if it's found installed on the system. We will do this for any 
backend to provide maximum control over what is used and not used.
    
    This changes how the RPC selector mechanism works; we now set the available 
RPCs in the config.h file instead of just by hand in the rpcserver_selector.h 
code.
    
    Finally, cmake displays the backend as a submodule of gr-ctrlport when 
summarizing what is being built for GNU Radio so we know which backends are or 
are not being used.
---
 CMakeLists.txt                                     |  5 +++
 cmake/Modules/FindThrift.cmake                     | 48 ++++++++++++++++++++++
 config.h.in                                        |  6 +++
 gnuradio-runtime/include/gnuradio/CMakeLists.txt   | 11 ++++-
 .../include/gnuradio/rpcregisterhelpers.h          | 22 +++++-----
 .../include/gnuradio/rpcserver_selector.h          | 11 ++---
 gnuradio-runtime/lib/controlport/CMakeLists.txt    | 39 +++++++++++++-----
 .../lib/controlport/rpcserver_selector.cc          |  8 ++--
 .../lib/controlport/thrift/rpcserver_thrift.cc     |  4 --
 .../python/gnuradio/ctrlport/CMakeLists.txt        | 24 +++++++++++
 .../python/gnuradio/ctrlport/GrDataPlotter.py      |  3 +-
 .../python/gnuradio/ctrlport/ThriftRadioClient.py  |  4 +-
 12 files changed, 145 insertions(+), 40 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0d0a500..bfc0acc 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 0000000..017e941
--- /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 82751a3..ad6e3d0 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 02b80cc..472f918 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 0999dea..f82f5ed 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 1011911..31ab6ce 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 65d5ebf..72d0321 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 1996101..57b42ca 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 9839e03..5dbfb8d 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 d208763..69a6107 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 5d75197..661705d 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 6e6faec..eca49dc 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:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]