blob: 9ff39b2aa5dff4f49ca13f08f5a0618f8eb93b89 [file] [log] [blame]
Radek Krejcicb293a32020-11-13 15:36:29 +01001# yanglint
2
Jan Kundrát2e3f9352021-12-11 02:16:27 +01003if(WIN32)
4 set(YANGLINT_INTERACTIVE OFF)
5else()
6 set(YANGLINT_INTERACTIVE ON)
7endif()
8
Radek Krejcicb293a32020-11-13 15:36:29 +01009set(lintsrc
Radek Krejcicb293a32020-11-13 15:36:29 +010010 main_ni.c
Radek Krejcie9f13b12020-11-09 17:42:04 +010011 cmd.c
12 cmd_add.c
13 cmd_clear.c
14 cmd_data.c
15 cmd_list.c
Michal Vasko538be422021-10-19 14:06:59 +020016 cmd_feature.c
Radek Krejcie9f13b12020-11-09 17:42:04 +010017 cmd_load.c
18 cmd_print.c
19 cmd_searchpath.c
aPiecek647f62e2023-05-18 10:55:58 +020020 cmd_extdata.c
aPieceka83b8e02023-06-07 15:25:16 +020021 cmd_help.c
22 cmd_verb.c
23 cmd_debug.c
24 yl_opt.c
Radek Krejcie9f13b12020-11-09 17:42:04 +010025 common.c
Jan Kundrát2e3f9352021-12-11 02:16:27 +010026)
27if(YANGLINT_INTERACTIVE)
28 set(lintsrc ${lintsrc}
29 main.c
30 completion.c
31 configuration.c
32 linenoise/linenoise.c)
33else()
34 set(lintsrc ${lintsrc}
35 main_ni_only.c)
36endif()
Radek Krejcicb293a32020-11-13 15:36:29 +010037
38set(format_sources
39 ${format_sources}
40 ${CMAKE_CURRENT_SOURCE_DIR}/*.c
41 ${CMAKE_CURRENT_SOURCE_DIR}/*.h
42 PARENT_SCOPE)
Michal Vaskob3b3afc2020-11-25 09:52:26 +010043
Michal Vasko1b0b9a12021-05-06 08:38:34 +020044add_executable(yanglint ${lintsrc} ${compatsrc})
Radek Krejcicb293a32020-11-13 15:36:29 +010045target_link_libraries(yanglint yang)
46install(TARGETS yanglint DESTINATION ${CMAKE_INSTALL_BINDIR})
47install(FILES ${PROJECT_SOURCE_DIR}/tools/lint/yanglint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
48target_include_directories(yanglint BEFORE PRIVATE ${PROJECT_BINARY_DIR})
49
Jan Kundrátf0bd0b62021-12-11 02:23:51 +010050if(WIN32)
Jan Kundrátf0bd0b62021-12-11 02:23:51 +010051 target_include_directories(yanglint PRIVATE ${GETOPT_INCLUDE_DIR})
52 target_link_libraries(yanglint ${GETOPT_LIBRARY})
53endif()
54
Radek Krejcie868acc2020-11-13 16:42:58 +010055#
56# tests
57#
58function(add_yanglint_test)
Jan Kundrátd4ddd122022-08-22 19:12:25 +020059 cmake_parse_arguments(ADDTEST "" "NAME;VIA;SCRIPT" "" ${ARGN})
Radek Krejcie868acc2020-11-13 16:42:58 +010060 set(TEST_NAME yanglint_${ADDTEST_NAME})
61
aPiecek266ca762023-03-22 15:04:59 +010062 if(${ADDTEST_VIA} STREQUAL "tclsh")
63 set(WRAPPER ${PATH_TCLSH})
Jan Kundrátd4ddd122022-08-22 19:12:25 +020064 else()
65 message(FATAL_ERROR "build: unexpected wrapper '${ADDTEST_VIA}'")
66 endif()
67
68 add_test(NAME ${TEST_NAME} COMMAND ${WRAPPER} ${CMAKE_CURRENT_SOURCE_DIR}/tests/${ADDTEST_SCRIPT})
aPiecek266ca762023-03-22 15:04:59 +010069 set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "TESTS_DIR=${CMAKE_CURRENT_SOURCE_DIR}/tests")
70 set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "YANG_MODULES_DIR=${CMAKE_CURRENT_SOURCE_DIR}/tests/modules")
aPiecek83e89f22023-05-30 15:47:14 +020071 set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "YANGLINT=${PROJECT_BINARY_DIR}")
Radek Krejcie868acc2020-11-13 16:42:58 +010072endfunction(add_yanglint_test)
73
Michal Vaskocdffdab2021-06-23 14:00:10 +020074if(ENABLE_TESTS)
aPiecek266ca762023-03-22 15:04:59 +010075 # tests of interactive mode using tclsh
76 find_program(PATH_TCLSH NAMES tclsh)
77 if(NOT PATH_TCLSH)
78 message(WARNING "'tclsh' not found! The yanglint(1) interactive tests will not be available.")
aPiecek83e89f22023-05-30 15:47:14 +020079 else()
80 if(YANGLINT_INTERACTIVE)
81 add_yanglint_test(NAME interactive VIA tclsh SCRIPT interactive/all.tcl)
82 add_yanglint_test(NAME non-interactive VIA tclsh SCRIPT non-interactive/all.tcl)
83 else()
84 add_yanglint_test(NAME non-interactive VIA tclsh SCRIPT non-interactive/all.tcl)
85 endif()
Radek Iša2227c662020-11-25 16:13:09 +010086 endif()
Radek Krejcie868acc2020-11-13 16:42:58 +010087endif()