npm: Fix npm builds for ARM hosts
[contrib/mraa.git] / src / javascript / CMakeLists.txt
1 find_package (Nodejs)
2
3 include_directories (
4   ${NODE_INCLUDE_DIRS}
5   ${CMAKE_CURRENT_SOURCE_DIR}/..
6 )
7
8 # SWIG treats SWIG_FLAGS as a list and not a string so semicolon seperation is
9 # required. This hardcodes V8_VERSION to be <10 but I assume that's not going
10 # to be a problem for a little while!
11 #set_source_files_properties (mraajs.i PROPERTIES SWIG_FLAGS "-node;-DV8_VERSION=0x0${V8_VERSION_HEX};-I${CMAKE_BINARY_DIR}/src")
12 #set_source_files_properties (mraajs.i PROPERTIES SWIG_FLAGS "-node;-I${CMAKE_BINARY_DIR}/src")
13 set_property (SOURCE mraajs.i PROPERTY SWIG_FLAGS "-node"
14               "-I${CMAKE_BINARY_DIR}/src" "-DV8_VERSION=0x0${V8_VERSION_MAJOR}${V8_VERSION_MINOR}${V8_VERSION_PATCH}")
15 set_source_files_properties (mraajs.i PROPERTIES CPLUSPLUS ON)
16
17 swig_add_module (mraajs javascript mraajs.i ${mraa_LIB_SRCS})
18 swig_link_libraries (mraajs ${NODE_LIBRARIES})
19
20 set_target_properties (mraajs PROPERTIES
21   COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -DBUILDING_NODE_EXTENSION -DSWIGJAVASCRIPT=${SWIG_FOUND}"
22   PREFIX ""
23   OUTPUT_NAME mraa
24   SUFFIX ".node"
25 )
26 macro (mraa_CREATE_INSTALL_PACKAGE_JSON generated_file install_location)
27   configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
28   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location})
29 endmacro (mraa_CREATE_INSTALL_PACKAGE_JSON)
30 mraa_create_install_package_json (package.json lib/node_modules/mraa)
31
32 macro (mraa_CREATE_BINDING_GYP generated_file)
33   set (mraa_LIB_SRCS_GYP "")
34   set (mraa_NPM_SRCS ${mraa_LIB_SRCS_NOAUTO}
35                      ${mraa_LIB_ARM_SRCS_NOAUTO}
36                      ${mraa_LIB_X86_SRCS_NOAUTO}
37   )
38   foreach (srcfile ${mraa_NPM_SRCS})
39     file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${srcfile})
40     set (mraa_LIB_SRCS_GYP "'${rel}',\n${mraa_LIB_SRCS_GYP}")
41   endforeach (srcfile)
42   foreach (includedir ${mraa_LIB_INCLUDE_DIRS})
43     file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${includedir})
44     set (mraa_LIB_INCLUDE_DIRS_GYP "'${rel}',\n${mraa_LIB_INCLUDE_DIRS_GYP}")
45   endforeach (includedir)
46   configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
47 endmacro (mraa_CREATE_BINDING_GYP)
48 mraa_create_binding_gyp (binding.gyp)
49
50 add_custom_target (npmpkg)
51 add_custom_command (TARGET npmpkg POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
52         ${CMAKE_CURRENT_BINARY_DIR}/mraajsJAVASCRIPT_wrap.cxx ${CMAKE_SOURCE_DIR}/src
53         COMMAND ${CMAKE_COMMAND} -E copy
54         ${CMAKE_BINARY_DIR}/src/version.c ${CMAKE_SOURCE_DIR}/src
55         COMMAND ${CMAKE_COMMAND} -E copy
56         ${CMAKE_CURRENT_BINARY_DIR}/package.json ${CMAKE_SOURCE_DIR}
57         COMMAND sed -i "'s/mraa.node/build\\/Release\\/mraa.node/'"
58         ${CMAKE_SOURCE_DIR}/package.json
59         COMMAND ${CMAKE_COMMAND} -E copy
60         ${CMAKE_CURRENT_BINARY_DIR}/binding.gyp ${CMAKE_SOURCE_DIR}
61         COMMAND ${CMAKE_COMMAND} -E copy
62         ${CMAKE_SOURCE_DIR}/docs/npm.md ${CMAKE_SOURCE_DIR}/READMEFIRST)
63 add_dependencies (npmpkg mraajs)
64
65 if (BUILDDOC)
66   find_package(Yuidoc)
67   if (YUIDOC_FOUND)
68     add_custom_target(jsdoc ALL
69       COMMAND ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/docgen.js -m mraa i xml/ -o jsdoc -c ${CMAKE_CURRENT_SOURCE_DIR}/doxygen2jsdoc_custom.json --strict -h
70       COMMAND ${YUIDOC_EXECUTABLE} -C --no-sort --helpers ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/helper.js --themedir ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/generators/yuidoc/tmpl/mraa -o html/node jsdoc/yuidoc/mraa
71       COMMAND ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/tolower.js -i html/node
72       WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
73       DEPENDS doc
74       COMMENT "Generating API documentation with Yuidoc" VERBATIM
75   )
76   else ()
77     message (INFO " - Failed to find Yuidoc. node.js API doc will not be generated")
78   endif ()
79 endif ()
80
81 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/mraa.node
82          DESTINATION lib/node_modules/mraa)