cmake : Define library suffix in case of 64 bits multilib archs in linux
[contrib/upm.git] / src / CMakeLists.txt
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"
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_doxygen)
57   if (DOXYGEN_FOUND)
58     set (CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND})
59     add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i
60       COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../doxy2swig.py -n
61         ${CMAKE_BINARY_DIR}/xml/${libname}_8h.xml
62         ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i
63         DEPENDS ${CMAKE_BINARY_DIR}/xml/${libname}_8h.xml
64     )
65     add_custom_target (${libname}doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${libname}_doc.i)
66     add_dependencies (${libname}doc_i doc)
67     if (BUILDSWIG)
68       add_dependencies (_pyupm_${libname} ${libname}doc_i)
69     else ()
70       add_dependencies (${libname} doc)
71     endif ()
72   endif ()
73 endmacro()
74
75 if (SWIG_FOUND)
76   if(BUILDSWIGPYTHON)
77     find_package (PythonLibs)
78     string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
79     list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR)
80     list (GET PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR)
81   endif(BUILDSWIGPYTHON)
82   if(BUILDSWIGNODE)
83     find_path (NODE_ROOT_DIR "node/node.h")
84     set (NODE_INCLUDE_DIRS
85       ${NODE_ROOT_DIR}/src
86       ${NODE_ROOT_DIR}/node
87       ${NODE_ROOT_DIR}/deps/v8/include
88       ${NODE_ROOT_DIR}/deps/uv/include
89     )
90     macro(createpackagejson)
91         configure_file (${PROJECT_SOURCE_DIR}/src/package.json.in ${CMAKE_CURRENT_BINARY_DIR}/package.json @ONLY)
92         install(FILES ${CMAKE_CURRENT_BINARY_DIR}/package.json
93             DESTINATION lib/node_modules/jsupm_${libname} COMPONENT ${libname})
94     endmacro()
95
96   endif(BUILDSWIGNODE)
97 endif()
98
99 macro(upm_module_init)
100   add_library (${libname} SHARED ${module_src})
101   include_directories (${MRAA_INCLUDE_DIR} .)
102   target_link_libraries (${libname} ${MRAA_LIBRARIES})
103   set_target_properties(
104     ${libname}
105     PROPERTIES PREFIX "libupm-"
106     SOVERSION ${upm_VERSION_MAJOR}
107     VERSION ${upm_VERSION_STRING}
108   )
109   upm_create_install_pkgconfig (upm-${libname}.pc lib${LIB_SUFFIX}/pkgconfig)
110   if (SWIG_FOUND)
111     upm_swig_python()
112     upm_swig_node()
113   endif()
114   if (BUILDDOC)
115     upm_doxygen()
116   endif()
117   install(TARGETS ${libname} DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} )
118   install (FILES ${module_h} DESTINATION include/upm COMPONENT ${libname})
119
120   if (IPK)
121     cpack_add_component (${libname} DISPLAY_NAME ${libname} REQUIRED INSTALL_TYPES all)
122     set(CPACK_COMPONENT_${libname}_DESCRIPTION "${libdescription}")
123   endif()
124 endmacro(upm_module_init)
125
126 subdirlist(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR})
127 foreach(subdir ${SUBDIRS})
128     add_subdirectory(${subdir})
129 endforeach()