From 8490a63309b3f11ed458f2799fd548ba20d7d27e Mon Sep 17 00:00:00 2001 From: Henry Bruce Date: Fri, 22 Jan 2016 16:54:27 -0800 Subject: [PATCH] FindNode: Update cmake module to support Fedora22 and check for errors FindNode.cmake reports failure it cannot detect all required include files. Module is now called with REQUIRED flag to prevent generation of makefiles that will not build. Signed-off-by: Henry Bruce Signed-off-by: Abhishek Malik --- cmake/modules/FindNode.cmake | 64 +++++++++++++++++++++++++++--------- src/CMakeLists.txt | 9 +---- 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/cmake/modules/FindNode.cmake b/cmake/modules/FindNode.cmake index 7501a167..c84b19d6 100644 --- a/cmake/modules/FindNode.cmake +++ b/cmake/modules/FindNode.cmake @@ -1,4 +1,12 @@ -find_program (NODE_EXECUTABLE NAMES node + # Macro to add directory to NODE_INCLUDE_DIRS if it exists and is not /usr/include + macro(add_include_dir dir) + if (IS_DIRECTORY ${dir}) + set(NODE_INCLUDE_DIRS ${NODE_INCLUDE_DIRS} ${dir}) + endif() +endmacro() + + +find_program (NODE_EXECUTABLE NAMES node nodejs HINTS $ENV{NODE_DIR} PATH_SUFFIXES bin @@ -7,17 +15,41 @@ find_program (NODE_EXECUTABLE NAMES node include (FindPackageHandleStandardArgs) +# If compat-libuv package exists, it must be at start of include path +find_path (UV_ROOT_DIR "uv.h" PATHS /usr/include/compat-libuv010 NO_DEFAULT_PATH) +if (UV_ROOT_DIR) + # set (NODE_INCLUDE_DIRS ${UV_ROOT_DIR}) + add_include_dir(${UV_ROOT_DIR}) +endif() + +# Now look for node. Flag an error if not found find_path (NODE_ROOT_DIR "node/node.h" "src/node.h" - PATHS /usr/include/nodejs /usr/local/include/nodejs) + PATHS /usr/include/nodejs /usr/local/include/nodejs /usr/local/include) +if (NODE_ROOT_DIR) + add_include_dir(${NODE_ROOT_DIR}/src) + add_include_dir(${NODE_ROOT_DIR}/node) + add_include_dir(${NODE_ROOT_DIR}/deps/v8/include) + add_include_dir(${NODE_ROOT_DIR}/deps/uv/include) +else() + unset(NODE_INCLUDE_DIRS) + message(ERROR " - node.h not found") +endif() -set (NODE_INCLUDE_DIRS - ${NODE_ROOT_DIR}/src - ${NODE_ROOT_DIR}/node - ${NODE_ROOT_DIR}/deps/v8/include - ${NODE_ROOT_DIR}/deps/uv/include -) +# Check that v8.h is in NODE_INCLUDE_DIRS +find_path (V8_ROOT_DIR "v8.h" PATHS ${NODE_INCLUDE_DIRS}) +if (NOT V8_ROOT_DIR) + unset(NODE_INCLUDE_DIRS) + message(ERROR " - v8.h not found") +endif() -find_package_handle_standard_args (Node DEFAULT_MSG +# Check that uv.h is in NODE_INCLUDE_DIRS +find_path (UV_ROOT_DIR "uv.h" PATHS ${NODE_INCLUDE_DIRS}) +if (NOT UV_ROOT_DIR) + unset(NODE_INCLUDE_DIRS) + message(ERROR " - uv.h not found") +endif() + +find_package_handle_standard_args (Nodejs DEFAULT_MSG NODE_EXECUTABLE NODE_INCLUDE_DIRS ) @@ -37,8 +69,6 @@ if (NODE_EXECUTABLE) list (GET _VERSION_LIST 2 NODE_VERSION_PATCH) set (V8_VERSION_STRING ${_V8_VERSION}) string (REPLACE "." ";" _V8_VERSION_LIST "${_V8_VERSION}") - string (REPLACE "." "" V8_DEFINE_STRING "${_V8_VERSION}") - string (STRIP ${V8_DEFINE_STRING} V8_DEFINE_STRING) 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) @@ -50,12 +80,16 @@ if (NODE_EXECUTABLE) set (NODE_VERSION_MINOR "10") set (NODE_VERSION_PATCH "30") set (V8_VERSION_MAJOR "3") - set (V8_VERSION_MINOR "28") - set (V8_VERSION_PATCH "72") + set (V8_VERSION_MINOR"14") + set (V8_VERSION_PATCH "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}) + string (REGEX REPLACE "\n" "" NODE_VERSION_STRING ${NODE_VERSION_STRING}) + string (REGEX REPLACE "\n" "" V8_VERSION_STRING ${V8_VERSION_STRING}) + message ("INFO - Node version is " ${NODE_VERSION_STRING}) + message ("INFO - Node using v8 " ${V8_VERSION_STRING}) + mark_as_advanced (NODE_EXECUTABLE) endif () -mark_as_advanced (NODE_EXECUTABLE) + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5cf074e4..982d9a00 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -147,18 +147,11 @@ if (SWIG_FOUND) endif(BUILDSWIGPYTHON) if(BUILDSWIGNODE) if(NOT NODE_FOUND) - find_package(Node) + find_package(Node REQUIRED) endif() if(SWIG_VERSION VERSION_LESS 3.0.5 AND NODE_VERSION_STRING VERSION_GREATER 0.12) message("WARNING - SWIG 3.0.5+ required for building with nodejs 0.12. Current version is ${SWIG_VERSION}") endif() - find_path (NODE_ROOT_DIR "node/node.h") - set (NODE_INCLUDE_DIRS - ${NODE_ROOT_DIR}/src - ${NODE_ROOT_DIR}/node - ${NODE_ROOT_DIR}/deps/v8/include - ${NODE_ROOT_DIR}/deps/uv/include - ) macro(createpackagejson) configure_file (${PROJECT_SOURCE_DIR}/src/package.json.in ${CMAKE_CURRENT_BINARY_DIR}/package.json @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/package.json