blob: f6c0e49f59b038bc397943a654b4f1029e1620e0 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# FindNodePackages
# This module finds and installs (using npm) node.js packages that are used by
# the JavaScript binding. The binding should still compile if these packages
# cannot be installed but certain features might not work as described below.
#
# * The ws package is the WebSocket library used by emscripten when the target is
# node.js, it isn't needed for applications hosted on a browser (where native
# WebSockets will be used), but without it it won't work with node.js.
#
# * The jsdoc package is a JavaScript API document generator analogous to Doxygen
# or JavaDoc, it is used by the docs target in the JavaScript binding.
if (NOT NODE_PACKAGES_FOUND)
# Check if the specified node.js package is already installed, if not install it.
macro(InstallPackage varname name)
execute_process(
COMMAND npm list --local ${name}
OUTPUT_VARIABLE check_package
)
set(${varname} OFF)
if (check_package MATCHES "${name}@.")
message(STATUS "Found node.js package: ${name}")
set(${varname} ON)
else()
message(STATUS "Installing node.js package: ${name}")
execute_process(
COMMAND npm install ${name}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE var
)
if (var)
message(STATUS "Installed node.js package: ${name}")
set(${varname} ON)
endif (var)
endif()
endmacro()
# Check if ws WebSocket library https://github.com/websockets/ws is installed
# N.B. something changed between ws 0.5.0 and 0.6.0 that breaks proton js
# so explicitly pulling version 0.5.0
# TODO update javascript binding/emscripten/both to work with latest ws.
InstallPackage("NODE_WS_FOUND" "ws@0.5.0")
# Check if jsdoc3 API documentation generator https://github.com/jsdoc3/jsdoc is installed
InstallPackage("NODE_JSDOC_FOUND" "jsdoc")
set(NODE_PACKAGES_FOUND ON)
endif (NOT NODE_PACKAGES_FOUND)