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