nodejs: add infra to detect nodejs version
This introduces FindNodes.cmake which finds the v8 version and the nodejs interp version and passes the information to SWIG via SWIG_V8_VERSION Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
59
cmake/modules/FindNodejs.cmake
Normal file
59
cmake/modules/FindNodejs.cmake
Normal file
@@ -0,0 +1,59 @@
|
||||
find_program (NODE_EXECUTABLE NAMES node
|
||||
HINTS
|
||||
$ENV{NODE_DIR}
|
||||
PATH_SUFFIXES bin
|
||||
DOC "Node.js interpreter"
|
||||
)
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
|
||||
find_path (NODE_ROOT_DIR "node/node.h" "src/node.h"
|
||||
PATHS /usr/include/nodejs /usr/local/include/nodejs)
|
||||
|
||||
set (NODE_INCLUDE_DIRS
|
||||
${NODE_ROOT_DIR}/src
|
||||
${NODE_ROOT_DIR}/node
|
||||
${NODE_ROOT_DIR}/deps/v8/include
|
||||
${NODE_ROOT_DIR}/deps/uv/include
|
||||
)
|
||||
|
||||
find_package_handle_standard_args (Node DEFAULT_MSG
|
||||
NODE_EXECUTABLE
|
||||
NODE_INCLUDE_DIRS
|
||||
)
|
||||
|
||||
if (NODE_EXECUTABLE)
|
||||
execute_process(COMMAND ${NODE_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE _VERSION
|
||||
RESULT_VARIABLE _NODE_VERSION_RESULT)
|
||||
execute_process(COMMAND ${NODE_EXECUTABLE} -e "console.log(process.versions.v8)"
|
||||
OUTPUT_VARIABLE _V8_VERSION
|
||||
RESULT_VARIABLE _V8_RESULT)
|
||||
if (NOT _NODE_VERSION_RESULT AND NOT _V8_RESULT)
|
||||
string (REPLACE "v" "" NODE_VERSION_STRING "${_VERSION}")
|
||||
string (REPLACE "." ";" _VERSION_LIST "${NODE_VERSION_STRING}")
|
||||
list (GET _VERSION_LIST 0 NODE_VERSION_MAJOR)
|
||||
list (GET _VERSION_LIST 1 NODE_VERSION_MINOR)
|
||||
list (GET _VERSION_LIST 2 NODE_VERSION_PATCH)
|
||||
set (V8_VERSION_STRING ${_V8_VERSION})
|
||||
string (REPLACE "." ";" _V8_VERSION_LIST "${_V8_VERSION}")
|
||||
list (GET _V8_VERSION_LIST 0 V8_VERSION_MAJOR)
|
||||
list (GET _V8_VERSION_LIST 1 V8_VERSION_MINOR)
|
||||
list (GET _V8_VERSION_LIST 2 V8_VERSION_PATCH)
|
||||
# we end up with a nasty newline so strip everything that isn't a number
|
||||
string (REGEX MATCH "^[0-9]*" V8_VERSION_PATCH ${V8_VERSION_PATCH})
|
||||
else ()
|
||||
set (NODE_VERSION_STRING "0.10.30")
|
||||
set (NODE_VERSION_MAJOR "0")
|
||||
set (NODE_VERSION_MINOR "10")
|
||||
set (NODE_VERSION_PATCH "30")
|
||||
set (V8_VERSION_MAJOR "3")
|
||||
set (V8_VERSION_MAJOR "14")
|
||||
set (V8_VERSION_MAJOR "5")
|
||||
set (V8_VERSION_STRING "3.28.72")
|
||||
message ("defaulted to node 0.10.30")
|
||||
endif ()
|
||||
message ("INFO - Node version is " ${NODE_VERSION_STRING} "INFO - Node using v8 " ${V8_VERSION_STRING})
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (NODE_EXECUTABLE)
|
||||
@@ -1,20 +1,17 @@
|
||||
find_path (NODE_ROOT_DIR "node/node.h" "src/node.h"
|
||||
PATHS /usr/include/nodejs /usr/local/include/nodejs)
|
||||
|
||||
set (NODE_INCLUDE_DIRS
|
||||
${NODE_ROOT_DIR}/src
|
||||
${NODE_ROOT_DIR}/node
|
||||
${NODE_ROOT_DIR}/deps/v8/include
|
||||
${NODE_ROOT_DIR}/deps/uv/include
|
||||
)
|
||||
find_package (Nodejs)
|
||||
|
||||
include_directories (
|
||||
${NODE_INCLUDE_DIRS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/..
|
||||
)
|
||||
|
||||
# SWIG treats SWIG_FLAGS as a list and not a string so semicolon seperation is required
|
||||
set_source_files_properties (mraajs.i PROPERTIES SWIG_FLAGS "-node;-I${CMAKE_BINARY_DIR}/src")
|
||||
# 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")
|
||||
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}")
|
||||
set_source_files_properties (mraajs.i PROPERTIES CPLUSPLUS ON)
|
||||
|
||||
swig_add_module (mraajs javascript mraajs.i ${mraa_LIB_SRCS})
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
%module (docstring="Javascript interface to libmraa") mraa
|
||||
|
||||
%feature("autodoc", "3");
|
||||
#define NODE012
|
||||
|
||||
%include carrays.i
|
||||
%include cpointer.i
|
||||
@@ -29,7 +28,7 @@ namespace mraa {
|
||||
class Spi;
|
||||
%typemap(out) uint8_t*
|
||||
{
|
||||
#ifdef NODE012
|
||||
#if V8_VERSION > 0x032872
|
||||
$result = node::Buffer::New((char*) $1, arg3);
|
||||
#else
|
||||
$result = node::Buffer::New((char*) $1, arg3)->handle_;
|
||||
@@ -60,7 +59,7 @@ class Spi;
|
||||
SWIG_exception_fail(SWIG_ERROR, "I2c write failed");
|
||||
SWIGV8_RETURN(SWIGV8_UNDEFINED());
|
||||
}
|
||||
#ifdef NODE012
|
||||
#if V8_VERSION > 0x032872
|
||||
$result = node::Buffer::New((char*) $1, result);
|
||||
#else
|
||||
$result = node::Buffer::New((char*) $1, result)->handle_;
|
||||
|
||||
Reference in New Issue
Block a user