Home | History | Annotate | Download | only in src
      1 macro(subdirlist result curdir)
      2   file(GLOB children RELATIVE ${curdir} ${curdir}/*)
      3   set(dirlist "")
      4   foreach(child ${children})
      5       if(IS_DIRECTORY ${curdir}/${child})
      6         set(dirlist ${dirlist} ${child})
      7     endif()
      8   endforeach()
      9   set(${result} ${dirlist})
     10 endmacro()
     11 
     12 macro (upm_CREATE_INSTALL_PKGCONFIG generated_file install_location)
     13   configure_file (${PROJECT_SOURCE_DIR}/src/pkgconfig.in
     14     ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
     15   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location})
     16 endmacro (upm_CREATE_INSTALL_PKGCONFIG)
     17 
     18 macro(upm_SWIG_PYTHON)
     19   if (BUILDSWIGPYTHON AND BUILDSWIG)
     20     set_source_files_properties (pyupm_${libname}.i PROPERTIES CPLUSPLUS ON)
     21     swig_add_module (pyupm_${libname} python pyupm_${libname}.i ${module_src})
     22     swig_link_libraries (pyupm_${libname} ${PYTHON_LIBRARIES} ${MRAA_LIBRARIES})
     23     target_include_directories ( ${SWIG_MODULE_pyupm_${libname}_REAL_NAME}
     24       PUBLIC
     25       "${PYTHON_INCLUDE_PATH}"
     26       "${PYTHON_INCLUDE_DIRS}"
     27      )
     28     install (FILES ${CMAKE_CURRENT_BINARY_DIR}/_pyupm_${libname}.so
     29          ${CMAKE_CURRENT_BINARY_DIR}/pyupm_${libname}.py
     30          DESTINATION ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages/
     31          COMPONENT ${libname})
     32   endif()
     33 endmacro()
     34 
     35 macro(upm_SWIG_NODE)
     36   if (BUILDSWIGNODE AND BUILDSWIG)
     37     set_source_files_properties (jsupm_${libname}.i PROPERTIES CPLUSPLUS ON)
     38     set_source_files_properties (jsupm_${libname}.i PROPERTIES SWIG_FLAGS "-node")
     39     swig_add_module (jsupm_${libname} javascript jsupm_${libname}.i ${module_src})
     40     swig_link_libraries (jsupm_${libname} ${MRAA_LIBRARIES} ${NODE_LIBRARIES})
     41     target_include_directories ( ${SWIG_MODULE_jsupm_${libname}_REAL_NAME}
     42       PUBLIC
     43       "${NODE_INCLUDE_DIRS}"
     44      )
     45     set_target_properties (jsupm_${libname} PROPERTIES
     46       COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -DBUILDING_NODE_EXTENSION -DSWIG_V8_VERSION=0x0${V8_DEFINE_STRING}"
     47       PREFIX ""
     48       SUFFIX ".node"
     49     )
     50     createpackagejson(${libname})
     51     install (FILES ${CMAKE_CURRENT_BINARY_DIR}/jsupm_${libname}.node
     52          DESTINATION lib/node_modules/jsupm_${libname} COMPONENT ${libname})
     53   endif()
     54 endmacro()
     55 
     56 macro(upm_SWIG_JAVA)
     57   if (BUILDSWIGJAVA AND BUILDSWIG)
     58 
     59     FIND_PACKAGE (JNI REQUIRED)
     60 
     61     include_directories (
     62       ${JAVA_INCLUDE_PATH}
     63       ${JAVA_INCLUDE_PATH2}
     64       ${CMAKE_CURRENT_SOURCE_DIR}/..
     65     )
     66 
     67     set_source_files_properties (javaupm_${libname}.i PROPERTIES CPLUSPLUS ON)
     68     set_source_files_properties (javaupm_${libname}.i PROPERTIES SWIG_FLAGS ";-package;upm_${libname};-I${CMAKE_BINARY_DIR}/src")
     69     swig_add_module (javaupm_${libname} java javaupm_${libname}.i ${module_src})
     70     swig_link_libraries (javaupm_${libname} ${MRAA_LIBRARIES} ${JAVA_LIBRARIES})
     71     target_include_directories ( ${SWIG_MODULE_javaupm_${libname}_REAL_NAME}
     72       PUBLIC
     73       "${JAVA_INCLUDE_DIRS}"
     74       "${JAVA_INCLUDE_PATH}"
     75      )
     76     set_target_properties (javaupm_${libname} PROPERTIES
     77       COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -DJAVACALLBACK"
     78       PREFIX "lib"
     79       SUFFIX ".so"
     80     )
     81     install (FILES ${CMAKE_CURRENT_BINARY_DIR}/libjavaupm_${libname}.so
     82 	DESTINATION lib/java
     83     )
     84     install (FILES ${CMAKE_CURRENT_BINARY_DIR}/upm_${libname}.jar
     85 	DESTINATION lib/java
     86     )
     87 
     88     if (NOT DEFINED $ENV{JAVA_HOME_NATIVE})
     89 	set (JAVAC $ENV{JAVA_HOME}/bin/javac)
     90 	set (JAR $ENV{JAVA_HOME}/bin/jar)
     91     else ()
     92 	set (JAVAC $ENV{JAVA_HOME_NATIVE}/bin/javac)
     93 	set (JAR $ENV{JAVA_HOME_NATIVE}/bin/jar)
     94     endif ()
     95 
     96     add_custom_command (TARGET javaupm_${libname}
     97         POST_BUILD
     98         COMMAND cmake -E echo "Compiling java.."
     99         COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/upm_${libname}
    100         COMMAND ${JAVAC} *.java -d ${CMAKE_CURRENT_BINARY_DIR}
    101         COMMAND cmake -E echo "Creating jar"
    102         COMMAND ${JAR} cvf upm_${libname}.jar upm_${libname}
    103     )
    104 
    105   endif()
    106 endmacro()
    107 
    108 macro(upm_doxygen)
    109   if (DOXYGEN_FOUND)
    110     if(NOT DEFINED classname)
    111       set (classname ${libname})
    112     endif()
    113     set (CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND})
    114     add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i
    115       COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../doxy2swig.py -n
    116         ${CMAKE_BINARY_DIR}/xml/${classname}_8h.xml
    117         ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i
    118         DEPENDS ${CMAKE_BINARY_DIR}/xml/${classname}_8h.xml
    119     )
    120     add_custom_target (${libname}doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i)
    121     add_dependencies (${libname}doc_i doc)
    122     if (BUILDSWIG)
    123       add_dependencies (_pyupm_${libname} ${libname}doc_i)
    124       add_dependencies (pydoc _pyupm_${libname})
    125     else ()
    126       add_dependencies (${libname} doc)
    127     endif ()
    128   endif ()
    129 endmacro()
    130 
    131 if (SWIG_FOUND)
    132   if(BUILDSWIGPYTHON)
    133     find_package (PythonLibs)
    134     string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
    135     list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR)
    136     list (GET PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR)
    137   endif(BUILDSWIGPYTHON)
    138   if(BUILDSWIGNODE)
    139     if(NOT NODE_FOUND)
    140       find_package(Node)
    141     endif()
    142     if(SWIG_VERSION VERSION_LESS 3.0.5 AND NODE_VERSION_STRING VERSION_GREATER 0.12)
    143       message("WARNING - SWIG 3.0.5+ required for building with nodejs 0.12. Current version is ${SWIG_VERSION}")
    144     endif()
    145     find_path (NODE_ROOT_DIR "node/node.h")
    146     set (NODE_INCLUDE_DIRS
    147       ${NODE_ROOT_DIR}/src
    148       ${NODE_ROOT_DIR}/node
    149       ${NODE_ROOT_DIR}/deps/v8/include
    150       ${NODE_ROOT_DIR}/deps/uv/include
    151     )
    152     macro(createpackagejson)
    153         configure_file (${PROJECT_SOURCE_DIR}/src/package.json.in ${CMAKE_CURRENT_BINARY_DIR}/package.json @ONLY)
    154         install(FILES ${CMAKE_CURRENT_BINARY_DIR}/package.json
    155             DESTINATION lib/node_modules/jsupm_${libname} COMPONENT ${libname})
    156     endmacro()
    157 
    158   endif(BUILDSWIGNODE)
    159 #  if(BUILDSWIGJAVA)
    160 #    add_subdirectory (java)
    161 #  endif(BUILDSWIGJAVA)
    162     
    163 endif()
    164 
    165 macro(upm_module_init)
    166   add_library (${libname} SHARED ${module_src})
    167   foreach (linkflag ${ARGN})
    168     target_link_libraries (${libname} ${linkflag})
    169   endforeach ()
    170   include_directories (${MRAA_INCLUDE_DIR} .)
    171   target_link_libraries (${libname} ${MRAA_LIBRARIES})
    172   set_target_properties(
    173     ${libname}
    174     PROPERTIES PREFIX "libupm-"
    175     SOVERSION ${upm_VERSION_MAJOR}
    176     VERSION ${upm_VERSION_STRING}
    177   )
    178   upm_create_install_pkgconfig (upm-${libname}.pc lib${LIB_SUFFIX}/pkgconfig)
    179   if (SWIG_FOUND)
    180     upm_swig_python()
    181     upm_swig_node()
    182     upm_swig_java()
    183   endif()
    184   if (BUILDDOC)
    185     upm_doxygen()
    186   endif()
    187   install(TARGETS ${libname} DESTINATION ${CMAKE_INSTALL_LIBDIR})
    188   install (FILES ${module_h} DESTINATION include/upm COMPONENT ${libname})
    189 
    190   if (IPK)
    191     cpack_add_component (${libname} DISPLAY_NAME ${libname} REQUIRED INSTALL_TYPES all)
    192     set(CPACK_COMPONENT_${libname}_DESCRIPTION "${libdescription}")
    193   endif()
    194 endmacro(upm_module_init)
    195 
    196 subdirlist(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR})
    197 foreach(subdir ${SUBDIRS})
    198     if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/CMakeLists.txt)
    199         add_subdirectory(${subdir})
    200     endif()
    201 endforeach()
    202