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 <henry.bruce@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This commit is contained in:
Henry Bruce 2016-01-22 16:54:27 -08:00 committed by Abhishek Malik
parent 2331548f25
commit 8490a63309
2 changed files with 50 additions and 23 deletions

View File

@ -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)

View File

@ -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