npm: add node-gyp build support
[contrib/mraa.git] / src / javascript / CMakeLists.txt
1 find_path (NODE_ROOT_DIR "node/node.h")
2
3 set (NODE_INCLUDE_DIRS
4   ${NODE_ROOT_DIR}/src
5   ${NODE_ROOT_DIR}/node
6   ${NODE_ROOT_DIR}/deps/v8/include
7   ${NODE_ROOT_DIR}/deps/uv/include
8 )
9
10 include_directories (
11   ${NODE_INCLUDE_DIRS}
12   ${CMAKE_CURRENT_SOURCE_DIR}/..
13 )
14
15 # SWIG treats SWIG_FLAGS as a list and not a string so semicolon seperation is required
16 set_source_files_properties (mraajs.i PROPERTIES SWIG_FLAGS "-node;-I${CMAKE_BINARY_DIR}/src")
17 set_source_files_properties (mraajs.i PROPERTIES CPLUSPLUS ON)
18
19 swig_add_module (mraajs javascript mraajs.i ${mraa_LIB_SRCS})
20 swig_link_libraries (mraajs ${NODE_LIBRARIES})
21
22 if (DOXYGEN_FOUND)
23   foreach (_file ${DOCFILES})
24     add_dependencies (${SWIG_MODULE_mraajs_REAL_NAME} ${_file}doc_i)
25   endforeach ()
26 endif ()
27
28 set_target_properties (mraajs PROPERTIES
29   COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -DBUILDING_NODE_EXTENSION"
30   PREFIX ""
31   OUTPUT_NAME mraa
32   SUFFIX ".node"
33 )
34 macro (mraa_CREATE_INSTALL_PACKAGE_JSON generated_file install_location)
35   configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
36   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location})
37 endmacro (mraa_CREATE_INSTALL_PACKAGE_JSON)
38 mraa_create_install_package_json (package.json lib/node_modules/mraa)
39
40 macro (mraa_CREATE_BINDING_GYP generated_file)
41   set (mraa_LIB_SRCS_GYP "")
42   foreach (srcfile ${mraa_LIB_SRCS_NOAUTO})
43     file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${srcfile})
44     set (mraa_LIB_SRCS_GYP "'${rel}',\n${mraa_LIB_SRCS_GYP}")
45   endforeach (srcfile)
46   foreach (includedir ${mraa_LIB_INCLUDE_DIRS})
47     file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${includedir})
48     set (mraa_LIB_INCLUDE_DIRS_GYP "'${rel}',\n${mraa_LIB_INCLUDE_DIRS_GYP}")
49   endforeach (includedir)
50   configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
51 endmacro (mraa_CREATE_BINDING_GYP)
52 mraa_create_binding_gyp (binding.gyp)
53
54 add_custom_target (npmpkg)
55 add_custom_command (TARGET npmpkg POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
56             ${CMAKE_CURRENT_BINARY_DIR}/mraajsJAVASCRIPT_wrap.cxx ${CMAKE_SOURCE_DIR}/src
57             COMMAND ${CMAKE_COMMAND} -E copy
58             ${CMAKE_BINARY_DIR}/src/version.c ${CMAKE_SOURCE_DIR}/src
59             COMMAND ${CMAKE_COMMAND} -E copy
60             ${CMAKE_CURRENT_BINARY_DIR}/package.json ${CMAKE_SOURCE_DIR}
61             COMMAND ${CMAKE_COMMAND} -E copy
62             ${CMAKE_CURRENT_BINARY_DIR}/binding.gyp ${CMAKE_SOURCE_DIR}
63             COMMAND ${CMAKE_COMMAND} -E copy
64             ${CMAKE_SOURCE_DIR}/docs/npm.md ${CMAKE_SOURCE_DIR}/READMEFIRST)
65 add_dependencies (npmpkg mraajs)
66
67 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/mraa.node
68          DESTINATION lib/node_modules/mraa)