From 2e5e3eaea2750d231cbebf04549162fcb7a4b48b Mon Sep 17 00:00:00 2001 From: Eugene Bolshakov Date: Sat, 23 Jan 2016 16:35:20 +0300 Subject: [PATCH] mraajs: Check for CMAKE version > 3.1 or use workaround Older cmake versions don't support the CXX_STANDARD property. Remove doubled CMAKE_CXX_FLAGS in mraajs COMPILE_FLAGS Closes #411 Signed-off-by: Eugene Bolshakov Signed-off-by: Brendan Le Foll --- CMakeLists.txt | 1 + docs/building.md | 2 +- src/javascript/CMakeLists.txt | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 490d720..c7b43be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,7 @@ if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_HEAD- endif () message (INFO " - libmraa Version ${VERSION}") +message (INFO " - cmake Version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}") #parse the version information into pieces. string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}") diff --git a/docs/building.md b/docs/building.md index 208ad37..fbd46b8 100644 --- a/docs/building.md +++ b/docs/building.md @@ -12,7 +12,7 @@ what you'll need: * [git](http://git-scm.com) * [python](http://python.org) 2.7 or 3.4+ (you'll need not just the interpreter but python-dev) * [node.js](http://nodejs.org) 0.10.x or 0.12.x (you'll need not just the interpreter but nodejs-dev) -* [CMake](http://cmake.org) 2.8.8+ +* [CMake](http://cmake.org) 2.8.8+ (3.1+ is recommended for node.js version 2+) For Debian-like distros the below command installs the basic set: diff --git a/src/javascript/CMakeLists.txt b/src/javascript/CMakeLists.txt index adfc82c..6440b4e 100644 --- a/src/javascript/CMakeLists.txt +++ b/src/javascript/CMakeLists.txt @@ -25,18 +25,34 @@ swig_add_module (mraajs javascript mraajs.i ${mraa_LIB_SRCS}) swig_link_libraries (mraajs ${NODE_LIBRARIES} ${mraa_LIBS}) set_target_properties (mraajs PROPERTIES - COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -DBUILDING_NODE_EXTENSION -DSWIGJAVASCRIPT=${SWIG_FOUND}" + COMPILE_FLAGS " -DBUILDING_NODE_EXTENSION -DSWIGJAVASCRIPT=${SWIG_FOUND}" PREFIX "" OUTPUT_NAME mraa SUFFIX ".node" ) +message (INFO " - swig Version ${SWIG_VERSION}") +message (INFO " - CXX compiler Version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") + 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) + if(CMAKE_VERSION VERSION_LESS "3.1") + message(INFO " - **WARNING** Need to use CMAKE version 3.1+, but it is ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}") + message(INFO " - So a workaround will be used.") + if(CMAKE_COMPILER_IS_GNUCXX) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7") + message(FATAL_ERROR " FATAL ERROR: GNU gcc compiler is also too old (need 4.7+, but ${CMAKE_CXX_COMPILER_VERSION}) and does not support C++11 standard.") + endif() + set(MRAA_CXX11_WORKAROUND_OPTION "-std=gnu++11") + else() + set(MRAA_CXX11_WORKAROUND_OPTION "-std=c++11") + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MRAA_CXX11_WORKAROUND_OPTION} ") + endif() endif () macro (mraa_CREATE_INSTALL_PACKAGE_JSON generated_file install_location)