javascript: Fix build for nodejs v5 which has smaller version string
[contrib/mraa.git] / src / javascript / CMakeLists.txt
index d838019..adfc82c 100644 (file)
@@ -7,15 +7,22 @@ include_directories (
 
 # SWIG treats SWIG_FLAGS as a list and not a string so semicolon seperation is
 # required. This hardcodes V8_VERSION to be <10 but I assume that's not going
-# to be a problem for a little while!
-#set_source_files_properties (mraajs.i PROPERTIES SWIG_FLAGS "-node;-DV8_VERSION=0x0${V8_VERSION_HEX};-I${CMAKE_BINARY_DIR}/src")
-#set_source_files_properties (mraajs.i PROPERTIES SWIG_FLAGS "-node;-I${CMAKE_BINARY_DIR}/src")
+# to be a problem for a little while! SWIG uses a padded SWIG_V8 version which
+# we hack together from our findnode module.
+set (V8_VERSION_HEX 0x0${V8_VERSION_MAJOR}${V8_VERSION_MINOR}${V8_VERSION_PATCH})
+string (LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length)
+while (V8_VERSION_HEX_length LESS 8)
+  set (V8_VERSION_HEX "${V8_VERSION_HEX}0")
+  message (DEBUG " - Padded V8 version to match SWIG format")
+  string (LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length)
+endwhile ()
+
 set_property (SOURCE mraajs.i PROPERTY SWIG_FLAGS "-node"
-              "-I${CMAKE_BINARY_DIR}/src" "-DV8_VERSION=0x0${V8_VERSION_MAJOR}${V8_VERSION_MINOR}${V8_VERSION_PATCH}")
+              "-I${CMAKE_BINARY_DIR}/src" "-DV8_VERSION=${V8_VERSION_HEX}")
 set_source_files_properties (mraajs.i PROPERTIES CPLUSPLUS ON)
 
 swig_add_module (mraajs javascript mraajs.i ${mraa_LIB_SRCS})
-swig_link_libraries (mraajs ${NODE_LIBRARIES})
+swig_link_libraries (mraajs ${NODE_LIBRARIES} ${mraa_LIBS})
 
 set_target_properties (mraajs PROPERTIES
   COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -DBUILDING_NODE_EXTENSION -DSWIGJAVASCRIPT=${SWIG_FOUND}"
@@ -23,6 +30,15 @@ set_target_properties (mraajs PROPERTIES
   OUTPUT_NAME mraa
   SUFFIX ".node"
 )
+
+if (${V8_VERSION_MAJOR} GREATER 3)
+  message (INFO " - Using V8 version > 3 so requiring C++11 compiler")
+  # Node 0.12.x V8 engine major version is '3'.
+  # Node 2.1.0  V8 engine major version is '4'.
+  set_property (TARGET mraajs PROPERTY CXX_STANDARD 11)
+  set_property (TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON)
+endif ()
+
 macro (mraa_CREATE_INSTALL_PACKAGE_JSON generated_file install_location)
   configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location})
@@ -31,7 +47,11 @@ mraa_create_install_package_json (package.json lib/node_modules/mraa)
 
 macro (mraa_CREATE_BINDING_GYP generated_file)
   set (mraa_LIB_SRCS_GYP "")
-  foreach (srcfile ${mraa_LIB_SRCS_NOAUTO})
+  set (mraa_NPM_SRCS ${mraa_LIB_SRCS_NOAUTO}
+                     ${mraa_LIB_ARM_SRCS_NOAUTO}
+                     ${mraa_LIB_X86_SRCS_NOAUTO}
+  )
+  foreach (srcfile ${mraa_NPM_SRCS})
     file (RELATIVE_PATH rel ${CMAKE_SOURCE_DIR} ${srcfile})
     set (mraa_LIB_SRCS_GYP "'${rel}',\n${mraa_LIB_SRCS_GYP}")
   endforeach (srcfile)
@@ -58,5 +78,21 @@ add_custom_command (TARGET npmpkg POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
         ${CMAKE_SOURCE_DIR}/docs/npm.md ${CMAKE_SOURCE_DIR}/READMEFIRST)
 add_dependencies (npmpkg mraajs)
 
+if (BUILDDOC)
+  find_package(Yuidoc)
+  if (YUIDOC_FOUND)
+    add_custom_target(jsdoc ALL
+      COMMAND ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/docgen.js -m mraa i xml/ -o jsdoc -c ${CMAKE_CURRENT_SOURCE_DIR}/doxygen2jsdoc_custom.json --strict -h
+      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
+      COMMAND ${CMAKE_SOURCE_DIR}/doxygen2jsdoc/tolower.js -i html/node
+      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      DEPENDS doc
+      COMMENT "Generating API documentation with Yuidoc" VERBATIM
+  )
+  else ()
+    message (INFO " - Failed to find Yuidoc. node.js API doc will not be generated")
+  endif ()
+endif ()
+
 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/mraa.node
          DESTINATION lib/node_modules/mraa)