From 1139fc0aa0869485566c0c3ed0c9f2d2ecf00cb4 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 16 Aug 2016 18:39:35 +0200 Subject: lib: Add wrappers for Python This adds SWIG to the build and wraps the Ouroboros library so that it can be called through Python scripts. If either SWIG or Python cannot be found, no bindings are generated. --- include/ouroboros/CMakeLists.txt | 2 ++ include/ouroboros/wrap/CMakeLists.txt | 42 +++++++++++++++++++++++++++++++++ include/ouroboros/wrap/ouroboros.i | 44 +++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 include/ouroboros/wrap/CMakeLists.txt create mode 100644 include/ouroboros/wrap/ouroboros.i diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index eb5297d2..ae922b89 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -13,3 +13,5 @@ set(HEADER_FILES qos.h) install(FILES ${HEADER_FILES} DESTINATION usr/include/ouroboros) + +add_subdirectory(wrap) diff --git a/include/ouroboros/wrap/CMakeLists.txt b/include/ouroboros/wrap/CMakeLists.txt new file mode 100644 index 00000000..39737bbc --- /dev/null +++ b/include/ouroboros/wrap/CMakeLists.txt @@ -0,0 +1,42 @@ +find_package(SWIG) + +if (NOT SWIG_FOUND) + message("-- SWIG not found: Bindings for other languages disabled.") +else () + include(${SWIG_USE_FILE}) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + set(CMAKE_SWIG_FLAGS "") + + find_package(PythonLibs) + if (NOT PYTHONLIBS_FOUND) + message("-- Python not found: Python bindings will not be built.") + else () + include_directories(${PYTHON_INCLUDE_PATH}) + + swig_add_module(ouroboros python ouroboros.i) + swig_link_libraries(ouroboros ${PYTHON_LIBRARIES} ouroboros) + + # Installation directives + if (CMAKE_INSTALL_PREFIX STREQUAL "") + execute_process( + COMMAND python -c "from distutils import sysconfig; print(sysconfig.get_python_lib())" + OUTPUT_VARIABLE PYTHON_MODULE_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE) + else () + execute_process( + COMMAND python -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))" + OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE) + get_filename_component(_ABS_PYTHON_MODULE_PATH + ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE) + file(RELATIVE_PATH PYTHON_MODULE_PATH + ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH}) + endif () + + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_MODULE_ouroboros_REAL_NAME}.so + DESTINATION ${PYTHON_MODULE_PATH}) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ouroboros.py + DESTINATION ${PYTHON_MODULE_PATH}) + endif () +endif () diff --git a/include/ouroboros/wrap/ouroboros.i b/include/ouroboros/wrap/ouroboros.i new file mode 100644 index 00000000..386c21cc --- /dev/null +++ b/include/ouroboros/wrap/ouroboros.i @@ -0,0 +1,44 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * SWIG wrapper file + * + * Sander Vrijders + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +%module ouroboros +%{ +#include "ouroboros/cdap.h" +#include "ouroboros/dev.h" +#include "ouroboros/errno.h" +#include "ouroboros/flow.h" +#include "ouroboros/irm.h" +#include "ouroboros/irm_config.h" +#include "ouroboros/nsm.h" +#include "ouroboros/qos.h" +%} + +typedef int pid_t; + +%include "ouroboros/cdap.h" +%include "ouroboros/dev.h" +%include "ouroboros/errno.h" +%include "ouroboros/flow.h" +%include "ouroboros/irm.h" +%include "ouroboros/irm_config.h" +%include "ouroboros/nsm.h" +%include "ouroboros/qos.h" -- cgit v1.2.3