From 3059c06fa05c4a5536ec82d00bd991891956704d Mon Sep 17 00:00:00 2001 From: xbolshe Date: Thu, 1 Oct 2015 22:32:45 +0300 Subject: [PATCH] javascript: Add nodejs 4.1.1 support API changes in V8 API mean that node.js 4 needs some changes both in mraajs.i but also require a C++11 compiler Signed-off-by: Eugene Bolshakov Signed-off-by: Brendan Le Foll --- CMakeLists.txt | 6 +++--- src/javascript/CMakeLists.txt | 9 ++++++++ src/javascript/mraajs.i | 39 ++++++++++++++++++++++++++++------- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e6a9d20..9e26c99 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,8 @@ project (mraa) FIND_PACKAGE (Threads REQUIRED) -set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-omit-frame-pointer") -set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall") +set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-omit-frame-pointer ") +set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall ") set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries") # Set CMAKE_LIB_INSTALL_DIR if not defined @@ -16,7 +16,7 @@ set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_ # Make a version file containing the current version from git. include (GetGitRevisionDescription) git_describe (VERSION "--tags") -if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_HEAD-HASH-NOTFOUND") +if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_HEAD-HASH-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_-128-NOTFOUND") message (WARNING " - Install git to compile a production libmraa!") set (VERSION "v0.8.0-dirty") endif () diff --git a/src/javascript/CMakeLists.txt b/src/javascript/CMakeLists.txt index 4b33ebb..47a9096 100644 --- a/src/javascript/CMakeLists.txt +++ b/src/javascript/CMakeLists.txt @@ -23,6 +23,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}) diff --git a/src/javascript/mraajs.i b/src/javascript/mraajs.i index 7399540..96dc1ba 100644 --- a/src/javascript/mraajs.i +++ b/src/javascript/mraajs.i @@ -42,12 +42,20 @@ namespace mraa { class Spi; %typemap(out) uint8_t* { -%#if SWIG_V8_VERSION > 0x032870 +%#if SWIG_V8_VERSION > 0x040000 + v8::MaybeLocal objret = node::Buffer::New(v8::Isolate::GetCurrent(), (char*) $1, arg3); + free($1); + if(!objret.ToLocal(&$result)) { + SWIG_exception_fail(SWIG_ERROR, "Spi buffer failed"); + SWIGV8_RETURN(SWIGV8_UNDEFINED()); + } +%#elif SWIG_V8_VERSION > 0x032870 $result = node::Buffer::New((char*) $1, arg3); + free($1); %#else $result = node::Buffer::New((char*) $1, arg3)->handle_; -%#endif free($1); +%#endif } } @@ -73,15 +81,24 @@ class Spi; %typemap(argout) (char* data, int length) { if (result < 0) { /* Check for I/O error */ free($1); - SWIG_exception_fail(SWIG_ERROR, "I2c write failed"); + SWIG_exception_fail(SWIG_ERROR, "Uart write failed"); SWIGV8_RETURN(SWIGV8_UNDEFINED()); } -%#if SWIG_V8_VERSION > 0x032870 +%#if SWIG_V8_VERSION > 0x040000 + v8::MaybeLocal objret = node::Buffer::New(v8::Isolate::GetCurrent(), (char*) $1, result); + free($1); + if(!objret.ToLocal(&$result)) { + SWIG_exception_fail(SWIG_ERROR, "Uart buffer failed"); + SWIGV8_RETURN(SWIGV8_UNDEFINED()); + } +%#elif SWIG_V8_VERSION > 0x032870 $result = node::Buffer::New((char*) $1, result); + free($1); %#else $result = node::Buffer::New((char*) $1, result)->handle_; -%#endif free($1); +%#endif + } //I2c::read() @@ -105,12 +122,20 @@ class Spi; SWIG_exception_fail(SWIG_ERROR, "I2c write failed"); SWIGV8_RETURN(SWIGV8_UNDEFINED()); } -%#if SWIG_V8_VERSION > 0x032870 +%#if SWIG_V8_VERSION > 0x040000 + v8::MaybeLocal objret = node::Buffer::New(v8::Isolate::GetCurrent(), (char*) $1, result); + free($1); + if(!objret.ToLocal(&$result)) { + SWIG_exception_fail(SWIG_ERROR, "I2c buffer failed"); + SWIGV8_RETURN(SWIGV8_UNDEFINED()); + } +%#elif SWIG_V8_VERSION > 0x032870 $result = node::Buffer::New((char*) $1, result); + free($1); %#else $result = node::Buffer::New((char*) $1, result)->handle_; -%#endif free($1); +%#endif } %include ../mraa.i