diff options
Diffstat (limited to 'tools/lint/CMakeLists.txt')
-rw-r--r-- | tools/lint/CMakeLists.txt | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tools/lint/CMakeLists.txt b/tools/lint/CMakeLists.txt new file mode 100644 index 0000000..32cdcbf --- /dev/null +++ b/tools/lint/CMakeLists.txt @@ -0,0 +1,90 @@ +# yanglint + +if(WIN32) + set(YANGLINT_INTERACTIVE OFF) +else() + set(YANGLINT_INTERACTIVE ON) +endif() + +set(lintsrc + main_ni.c + cmd.c + cmd_add.c + cmd_clear.c + cmd_data.c + cmd_list.c + cmd_feature.c + cmd_load.c + cmd_print.c + cmd_searchpath.c + common.c +) +if(YANGLINT_INTERACTIVE) + set(lintsrc ${lintsrc} + main.c + completion.c + configuration.c + linenoise/linenoise.c) +else() + set(lintsrc ${lintsrc} + main_ni_only.c) +endif() + +set(format_sources + ${format_sources} + ${CMAKE_CURRENT_SOURCE_DIR}/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/*.h + PARENT_SCOPE) + +add_executable(yanglint ${lintsrc} ${compatsrc}) +target_link_libraries(yanglint yang) +install(TARGETS yanglint DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES ${PROJECT_SOURCE_DIR}/tools/lint/yanglint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +target_include_directories(yanglint BEFORE PRIVATE ${PROJECT_BINARY_DIR}) + +if(WIN32) + target_include_directories(yanglint PRIVATE ${GETOPT_INCLUDE_DIR}) + target_link_libraries(yanglint ${GETOPT_LIBRARY}) +endif() + +# +# tests +# +function(add_yanglint_test) + cmake_parse_arguments(ADDTEST "" "NAME;VIA;SCRIPT" "" ${ARGN}) + set(TEST_NAME yanglint_${ADDTEST_NAME}) + + if(${ADDTEST_VIA} STREQUAL "bash") + set(WRAPPER /usr/bin/env bash) + elseif(${ADDTEST_VIA} STREQUAL "expect") + set(WRAPPER ${PATH_EXPECT}) + else() + message(FATAL_ERROR "build: unexpected wrapper '${ADDTEST_VIA}'") + endif() + + add_test(NAME ${TEST_NAME} COMMAND ${WRAPPER} ${CMAKE_CURRENT_SOURCE_DIR}/tests/${ADDTEST_SCRIPT}) + set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "YANGLINT=${PROJECT_BINARY_DIR}/yanglint") + set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "YANG_MODULES_DIR=${PROJECT_SOURCE_DIR}/tests/modules/yang") + set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}") +endfunction(add_yanglint_test) + +if(ENABLE_TESTS) + # tests of non-interactive mode using shunit2 + find_program(PATH_SHUNIT NAMES shunit2) + if(NOT PATH_SHUNIT) + message(WARNING "'shunit2' not found! The yanglint(1) non-interactive tests will not be available.") + else() + add_yanglint_test(NAME ni_list VIA bash SCRIPT shunit2/list.sh) + add_yanglint_test(NAME ni_feature VIA bash SCRIPT shunit2/feature.sh) + endif() + + # tests of interactive mode using expect + find_program(PATH_EXPECT NAMES expect) + if(NOT PATH_EXPECT) + message(WARNING "'expect' not found! The yanglint(1) interactive tests will not be available.") + elseif(YANGLINT_INTERACTIVE) + add_yanglint_test(NAME in_list VIA expect SCRIPT expect/list.exp) + add_yanglint_test(NAME in_feature VIA expect SCRIPT expect/feature.exp) + add_yanglint_test(NAME in_completion VIA expect SCRIPT expect/completion.exp) + endif() +endif() |