|
# Authored by Graham Dianaty for Bitlogix Technologies. Based on code from Rene Hollander. ==========// |
|
function(setup_cmakejs) |
|
find_program(CMAKEJS "cmake-js") |
|
find_program(NPM "npm") |
|
# first, check if we have NPM: |
|
if(NPM) |
|
message(VERBOSE "NPM found.") |
|
else() |
|
message(FATAL_ERROR "NPM not found. This project requires Node.js") |
|
endif() |
|
|
|
if(CMAKEJS) |
|
message(VERBOSE "CMake.js found.") |
|
else() |
|
message(ERROR "CMake.js not found, installing globally...") |
|
exec_program(${NPM_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR} ARGS install -g cmake-js OUTPUT_VARIABLE NPM_OUTPUT) |
|
message(STATUS "CMake.js should now be installed.") |
|
message(VERBOSE ${NPM_OUTPUT}) |
|
endif() |
|
|
|
|
|
if(WIN32) |
|
set(NPM_COMMAND ${NPM}.cmd) |
|
set(CMAKEJS_CMD ${CMAKEJS}.cmd) |
|
else() |
|
set(NPM_COMMAND ${NPM}) |
|
set(CMAKEJS_CMD ${CMAKEJS}) |
|
endif() |
|
|
|
function(GET_VARIABLE INPUT_STRING VARIABLE_TO_SELECT OUTPUT_VARIABLE) |
|
set(SEARCH_STRING "${VARIABLE_TO_SELECT}=\"") |
|
string(LENGTH "${SEARCH_STRING}" SEARCH_STRING_LENGTH) |
|
string(LENGTH "${INPUT_STRING}" INPUT_STRING_LENGTH) |
|
|
|
string(FIND "${INPUT_STRING}" "${VARIABLE_TO_SELECT}=\"" SEARCH_STRING_INDEX) |
|
|
|
math(EXPR SEARCH_STRING_INDEX "${SEARCH_STRING_INDEX}+${SEARCH_STRING_LENGTH}") |
|
|
|
string(SUBSTRING "${INPUT_STRING}" ${SEARCH_STRING_INDEX} ${INPUT_STRING_LENGTH} AFTER_SEARCH_STRING) |
|
string(FIND "${AFTER_SEARCH_STRING}" "\"" QUOTE_INDEX) |
|
string(SUBSTRING "${AFTER_SEARCH_STRING}" "0" "${QUOTE_INDEX}" RESULT_STRING) |
|
set("${OUTPUT_VARIABLE}" "${RESULT_STRING}" PARENT_SCOPE) |
|
endfunction(GET_VARIABLE) |
|
|
|
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) |
|
if (CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") |
|
exec_program("${CMAKEJS_CMD}" ${CMAKE_CURRENT_SOURCE_DIR} |
|
ARGS print-configure --debug |
|
OUTPUT_VARIABLE CMAKE_JS_OUTPUT |
|
) |
|
else() |
|
exec_program("${CMAKEJS_CMD}" ${CMAKE_CURRENT_SOURCE_DIR} |
|
ARGS print-configure |
|
OUTPUT_VARIABLE CMAKE_JS_OUTPUT |
|
) |
|
endif () |
|
|
|
message(VERBOSE ${CMAKE_JS_OUTPUT}) |
|
|
|
get_variable("${CMAKE_JS_OUTPUT}" "CMAKE_JS_INC" CMAKE_JS_INC) |
|
set(CMAKE_JS_INC "${CMAKE_JS_INC}" PARENT_SCOPE) |
|
|
|
get_variable("${CMAKE_JS_OUTPUT}" "CMAKE_JS_LIB" CMAKE_JS_LIB) |
|
set(CMAKE_JS_LIB "${CMAKE_JS_LIB}" PARENT_SCOPE) |
|
|
|
get_variable("${CMAKE_JS_OUTPUT}" "CMAKE_LIBRARY_OUTPUT_DIRECTORY" CMAKE_LIBRARY_OUTPUT_DIRECTORY) |
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" PARENT_SCOPE) |
|
|
|
message(STATUS "[CMakeJS] Set up variables.") |
|
endfunction(setup_cmakejs) |
Is this compatible with nvm?