cmake: update swig support
[contrib/upm.git] / src / CMakeLists.txt
index 51edb87..28aa5bd 100644 (file)
@@ -1,9 +1,118 @@
-add_subdirectory (hmc5883l)
-add_subdirectory (grove)
-add_subdirectory (lcd)
-add_subdirectory (buzzer)
-add_subdirectory (ledbar)
-add_subdirectory (4digitdisplay)
-add_subdirectory (nrf24l01)
-add_subdirectory (servo)
-add_subdirectory (hcsr04)
+macro(subdirlist result curdir)
+  file(GLOB children RELATIVE ${curdir} ${curdir}/*)
+  set(dirlist "")
+  foreach(child ${children})
+      if(IS_DIRECTORY ${curdir}/${child})
+        set(dirlist ${dirlist} ${child})
+    endif()
+  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})
+endforeach()