From d71e4e5dc287f958d7d4b4783616350b621926e6 Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Wed, 11 Jun 2014 13:54:19 +0100 Subject: [PATCH] cmake: update swig support * Bumped required CMake Version Signed-off-by: Thomas Ingleby --- CMakeLists.txt | 7 ++- src/CMakeLists.txt | 104 ++++++++++++++++++++++++++++++++++++++++++++ src/package.json.in | 8 ++++ src/pkgconfig.in | 11 +++++ 4 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 src/package.json.in create mode 100644 src/pkgconfig.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 08316df8..84273459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 2.8) +cmake_minimum_required (VERSION 2.8.11) project (upm) find_package (SWIG) @@ -39,12 +39,15 @@ endif() set (upm_VERSION_MAJOR ${VERSION_MAJOR}) set (upm_VERSION_MINOR ${VERSION_MINOR}) set (upm_VERSION_PATCH ${VERSION_PATCH}) -set (upm_VERSION_STRING ${maa_VERSION_MAJOR}.${maa_VERSION_MINOR}.${maa_VERSION_PATCH}) +set (upm_VERSION_STRING ${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH}) set (CMAKE_SWIG_FLAGS "") option (IPK "Generate IPK using CPack" OFF) option (BUILDDOC "Build all doc." OFF) +option (BUILDSWIG "Build swig modules." ON) +option (BUILDSWIGPYTHON "Build swig python modules." ON) +option (BUILDSWIGNODE "Build swig node modules." ON) if (BUILDDOC) # add a target to generate API documentation with Doxygen diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 25e6989f..28aa5bd6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,110 @@ macro(subdirlist result curdir) endforeach() set(${result} ${dirlist}) endmacro() + +macro (upm_CREATE_INSTALL_PKGCONFIG generated_file install_location) + configure_file (${PROJECT_SOURCE_DIR}/src/pkgconfig.in + ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY) + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location}) +endmacro (upm_CREATE_INSTALL_PKGCONFIG) + +macro(upm_SWIG_PYTHON) + if(BUILDSWIGPYTHON) + set (CMAKE_C_FLAGS -DSWIGPYTHON=${SWIG_FOUND}) + set_source_files_properties (pyupm_${libname}.i PROPERTIES CPLUSPLUS ON) + swig_add_module (pyupm_${libname} python pyupm_${libname}.i ${libname}.cxx) + swig_link_libraries (pyupm_${libname} ${PYTHON_LIBRARIES} ${MAA_LIBRARIES}) + target_include_directories ( ${SWIG_MODULE_pyupm_${libname}_REAL_NAME} + PUBLIC + "${PYTHON_INCLUDE_PATH}" + "${PYTHON_INCLUDE_DIRS}" + ) + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/_pyupm_${libname}.so + ${CMAKE_CURRENT_BINARY_DIR}/pyupm_${libname}.py + DESTINATION lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages/ + COMPONENT ${libname}) + endif() +endmacro() + +macro(upm_SWIG_NODE) + if(BUILDSWIGNODE) + set (CMAKE_CXX_FLAGS -DBUILDING_NODE_EXTENSION) + set_source_files_properties (jsupm_${libname}.i PROPERTIES CPLUSPLUS ON) + set_source_files_properties (jsupm_${libname}.i PROPERTIES SWIG_FLAGS "-node") + swig_add_module (jsupm_${libname} javascript jsupm_${libname}.i ${libname}.cxx) + swig_link_libraries (jsupm_${libname} ${MAA_LIBRARIES} ${NODE_LIBRARIES}) + target_include_directories ( ${SWIG_MODULE_jsupm_${libname}_REAL_NAME} + PUBLIC + "${NODE_INCLUDE_DIRS}" + ) + set_target_properties (jsupm_${libname} PROPERTIES + PREFIX "" + SUFFIX ".node" + ) + createpackagejson(${libname}) + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/jsupm_${libname}.node + DESTINATION lib/node_modules/jsupm_${libname} COMPONENT ${libname}) + endif() +endmacro() + +macro(upm_doxygen) + if (DOXYGEN_FOUND) + set (CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND}) + add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../doxy2swig.py -n + ${CMAKE_BINARY_DIR}/xml/${libname}_8h.xml + ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i + DEPENDS ${CMAKE_BINARY_DIR}/xml/${libname}_8h.xml + ) + add_custom_target (${libname}doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i) + add_dependencies (${libname}doc_i doc) + add_dependencies (${SWIG_MODULE_pyupm_${libname}_REAL_NAME} ${libname}doc_i) + endif () +endmacro() + +if (SWIG_FOUND) + if(BUILDSWIGPYTHON) + find_package (PythonLibs) + string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING}) + list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR) + list (GET PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR) + endif(BUILDSWIGPYTHON) + if(BUILDSWIGNODE) + find_path (NODE_ROOT_DIR "node/node.h") + set (NODE_INCLUDE_DIRS + ${NODE_ROOT_DIR}/src + ${NODE_ROOT_DIR}/node + ${NODE_ROOT_DIR}/deps/v8/include + ${NODE_ROOT_DIR}/deps/uv/include + ) + macro(createpackagejson) + configure_file (${PROJECT_SOURCE_DIR}/src/package.json.in ${CMAKE_CURRENT_BINARY_DIR}/package.json @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/package.json + DESTINATION lib/node_modules/jsupm_${libname} COMPONENT ${libname}) + endmacro() + + endif(BUILDSWIGNODE) +endif() + +macro(upm_module_init) + include_directories (${MAA_INCLUDE_DIR} .) + target_link_libraries (${libname} ${MAA_LIBRARIES}) + set_target_properties(${libname} PROPERTIES PREFIX "libupm-") + upm_create_install_pkgconfig (upm-${libname}.pc lib${LIB_SUFFIX}/pkgconfig) + if (SWIG_FOUND) + upm_swig_python() + upm_swig_node() + upm_doxygen() + endif() + install (TARGETS ${libname} DESTINATION lib COMPONENT ${libname}) + install (FILES ${libname}.h DESTINATION include/upm COMPONENT ${libname}) + + if (IPK) + cpack_add_component (${libname} DISPLAY_NAME ${libname} REQUIRED INSTALL_TYPES all) + set(CPACK_COMPONENT_${libname}_DESCRIPTION "${libdescription}") + endif() +endmacro(upm_module_init) + subdirlist(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR}) foreach(subdir ${SUBDIRS}) add_subdirectory(${subdir}) diff --git a/src/package.json.in b/src/package.json.in new file mode 100644 index 00000000..1bbb07c3 --- /dev/null +++ b/src/package.json.in @@ -0,0 +1,8 @@ +{ + "name" : "jsupm_@libname@", + "main" : "./jsupm_@libname@.node", + "engines": { + "node": ">= 1.0.x" + }, + "license": "MIT" +} diff --git a/src/pkgconfig.in b/src/pkgconfig.in new file mode 100644 index 00000000..e542f366 --- /dev/null +++ b/src/pkgconfig.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: upm-@libname@ +Description: upm lib @libname@ +Version: @upm_VERSION_STRING@ + +Libs: -L${libdir} -lupm-@libname@ +Cflags: -I${includedir}/upm