|
Packit |
8fb591 |
cmake_minimum_required(VERSION 2.8.12)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
find_package(Nodejs REQUIRED)
|
|
Packit |
8fb591 |
find_package(SWIG 3.0.12 REQUIRED)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
add_compile_options(-std=gnu++11)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
STRING(TOLOWER ${CMAKE_BUILD_TYPE} lower_type)
|
|
Packit |
8fb591 |
if(${lower_type} STREQUAL "release")
|
|
Packit |
8fb591 |
set(JAVASCRIPT_BUILD_TYPE yang)
|
|
Packit |
8fb591 |
else()
|
|
Packit |
8fb591 |
set(JAVASCRIPT_BUILD_TYPE yang-dev)
|
|
Packit |
8fb591 |
endif()
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
set(SWIG_DEST "${CMAKE_CURRENT_BINARY_DIR}")
|
|
Packit |
8fb591 |
file(MAKE_DIRECTORY ${SWIG_DEST})
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
set(V8_VERSION_HEX 0x0${V8_VERSION_MAJOR}${V8_VERSION_MINOR}${V8_VERSION_PATCH})
|
|
Packit |
8fb591 |
string(LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length)
|
|
Packit |
8fb591 |
while(V8_VERSION_HEX_length LESS 8)
|
|
Packit |
8fb591 |
set(V8_VERSION_HEX "${V8_VERSION_HEX}0")
|
|
Packit |
8fb591 |
string(LENGTH "${V8_VERSION_HEX}" V8_VERSION_HEX_length)
|
|
Packit |
8fb591 |
endwhile()
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
execute_process(COMMAND swig -c++ -javascript -node -DV8_VERSION=${V8_VERSION_HEX} -outcurrentdir -I${CMAKE_BINARY_DIR}/src -I${CMAKE_SOURCE_DIR}/src -I${CMAKE_SOURCE_DIR}/swig/cpp/src ${CMAKE_SOURCE_DIR}/swig/javascript/yang.i WORKING_DIRECTORY ${SWIG_DEST} RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE ERROR)
|
|
Packit |
8fb591 |
if(NOT RET)
|
|
Packit |
8fb591 |
function(PREPEND var prefix)
|
|
Packit |
8fb591 |
set(listVar "")
|
|
Packit |
8fb591 |
foreach(f ${ARGN})
|
|
Packit |
8fb591 |
list(APPEND listVar "${prefix}/${f}")
|
|
Packit |
8fb591 |
endforeach(f)
|
|
Packit |
8fb591 |
set(${var} "${listVar}" PARENT_SCOPE)
|
|
Packit |
8fb591 |
endfunction(PREPEND)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
macro(LIBYANG_CREATE_BINDING_GYP generated_file)
|
|
Packit |
8fb591 |
set(libyang_LIB_SRCS_GYP "")
|
|
Packit |
8fb591 |
PREPEND(libyang_NPM_SRCS "" ${libsrc})
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
string(LENGTH "${CMAKE_SOURCE_DIR}/swig/cpp/" cpp_length)
|
|
Packit |
8fb591 |
foreach(full_srcfile ${LIBYANG_CPP_SOURCES})
|
|
Packit |
8fb591 |
string(SUBSTRING ${full_srcfile} ${cpp_length} -1 srcfile)
|
|
Packit |
8fb591 |
set(libyang_LIB_SRCS_GYP "${libyang_LIB_SRCS_GYP}\n '${srcfile}',")
|
|
Packit |
8fb591 |
endforeach(full_srcfile)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
foreach(plugin ${USER_TYPE_LIST})
|
|
Packit |
8fb591 |
set(libyang_LIB_SRCS_GYP "${libyang_LIB_SRCS_GYP}\n 'src/user_types/${plugin}.c',")
|
|
Packit |
8fb591 |
endforeach(plugin)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
foreach(plugin ${EXTENSIONS_LIST})
|
|
Packit |
8fb591 |
set(libyang_LIB_SRCS_GYP "${libyang_LIB_SRCS_GYP}\n 'src/extensions/${plugin}.c',")
|
|
Packit |
8fb591 |
endforeach(plugin)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
foreach(srcfile ${libsrc})
|
|
Packit |
8fb591 |
set(libyang_LIB_SRCS_GYP "${libyang_LIB_SRCS_GYP}\n '${srcfile}',")
|
|
Packit |
8fb591 |
endforeach(srcfile)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
configure_file(${CMAKE_SOURCE_DIR}/swig/javascript/${generated_file}.in ${SWIG_DEST}/${generated_file} @ONLY)
|
|
Packit |
8fb591 |
endmacro(LIBYANG_CREATE_BINDING_GYP)
|
|
Packit |
8fb591 |
LIBYANG_CREATE_BINDING_GYP(binding.gyp)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_SOURCE_DIR}/src" DESTINATION ${SWIG_DEST})
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_SOURCE_DIR}/swig/cpp/src" DESTINATION ${SWIG_DEST})
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_BINARY_DIR}/src" DESTINATION "${SWIG_DEST}")
|
|
Packit |
8fb591 |
file(COPY "${SWIG_DEST}/yang_wrap.cxx" DESTINATION "${SWIG_DEST}/src")
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_SOURCE_DIR}/models" DESTINATION ${SWIG_DEST})
|
|
Packit |
8fb591 |
file(REMOVE "${SWIG_DEST}/yang_wrap.cxx")
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_SOURCE_DIR}/swig/javascript/README.md" DESTINATION "${SWIG_DEST}")
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_SOURCE_DIR}/swig/javascript/files" DESTINATION "${SWIG_DEST}")
|
|
Packit |
8fb591 |
file(COPY "${CMAKE_SOURCE_DIR}/swig/javascript/test.js" DESTINATION "${SWIG_DEST}")
|
|
Packit |
8fb591 |
configure_file("${CMAKE_SOURCE_DIR}/swig/javascript/index.js.in" "${SWIG_DEST}/index.js" ESCAPE_QUOTES @ONLY)
|
|
Packit |
8fb591 |
configure_file("${CMAKE_SOURCE_DIR}/swig/javascript/package.json.in" "${SWIG_DEST}/package.json" ESCAPE_QUOTES @ONLY)
|
|
Packit |
8fb591 |
else()
|
|
Packit |
8fb591 |
message(${ERROR})
|
|
Packit |
8fb591 |
endif()
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# remove javascript directory with "make clean" command.
|
|
Packit |
8fb591 |
set_property(DIRECTORY ${EXECUTABLE_OUTPUT_PATH} PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${SWIG_DEST}")
|