@@ -24,6 +24,7 @@ set(CMAKE_C_STANDARD 11) |
24 | 24 |
|
25 | 25 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
26 | 26 |
|
| 27 | + |
27 | 28 | option(LIBUV_BUILD_SHARED "Build shared lib" ON) |
28 | 29 |
|
29 | 30 | cmake_dependent_option(LIBUV_BUILD_TESTS |
@@ -700,6 +701,8 @@ if(LIBUV_BUILD_TESTS) |
700 | 701 | test/test-udp-send-immediate.c |
701 | 702 | test/test-udp-sendmmsg-error.c |
702 | 703 | test/test-udp-send-unreachable.c |
| 704 | + test/test-udp-recv-cb-close-pollerr.c |
| 705 | + test/test-udp-recvmsg-unreachable-error.c |
703 | 706 | test/test-udp-try-send.c |
704 | 707 | test/test-udp-recv-in-a-row.c |
705 | 708 | test/test-udp-reuseport.c |
@@ -747,6 +750,14 @@ if(LIBUV_BUILD_TESTS) |
747 | 750 | "$<TARGET_FILE:uv_run_tests_a>" |
748 | 751 | "$<TARGET_FILE_DIR:uv_run_tests_a>/uv_run_tests_a_no_ext") |
749 | 752 | endif() |
| 753 | + |
| 754 | + if(QNX) |
| 755 | + install(TARGETS uv_run_tests uv_run_tests_a uv_run_benchmarks_a |
| 756 | + DESTINATION ${CMAKE_INSTALL_BINDIR}/libuv_tests) |
| 757 | + |
| 758 | + install(DIRECTORY test/fixtures |
| 759 | + DESTINATION ${CMAKE_INSTALL_BINDIR}/libuv_tests) |
| 760 | + endif() |
750 | 761 | endif() |
751 | 762 |
|
752 | 763 | # Now for some gibbering horrors from beyond the stars... |
@@ -774,6 +785,11 @@ install(TARGETS uv_a EXPORT libuvConfig |
774 | 785 | install(EXPORT libuvConfig |
775 | 786 | DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libuv |
776 | 787 | NAMESPACE libuv::) |
| 788 | +write_basic_package_version_file(libuvConfigVersion.cmake |
| 789 | + VERSION ${PACKAGE_VERSION} |
| 790 | + COMPATIBILITY SameMajorVersion) |
| 791 | +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libuvConfigVersion.cmake |
| 792 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libuv) |
777 | 793 |
|
778 | 794 | if(LIBUV_BUILD_SHARED) |
779 | 795 | # The version in the filename is mirroring the behaviour of autotools. |
@@ -814,3 +830,77 @@ message(STATUS "summary of build options: |
814 | 830 | C compiler: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID}) |
815 | 831 | CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} |
816 | 832 | ") |
| 833 | + |
| 834 | +# clang-tidy support |
| 835 | +option(ENABLE_CLANG_TIDY "Enable clang-tidy checks" ON) |
| 836 | +if(ENABLE_CLANG_TIDY) |
| 837 | + find_program(CLANG_TIDY_EXE NAMES "clang-tidy") |
| 838 | + if(CLANG_TIDY_EXE) |
| 839 | + set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_EXE}") |
| 840 | + message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") |
| 841 | + else() |
| 842 | + set(CMAKE_C_CLANG_TIDY "clang-tidy") |
| 843 | + message(STATUS "clang-tidy not found: install clang-tidy or set -DCLANG_TIDY_EXE to run tidy analysis on this platform") |
| 844 | + endif() |
| 845 | + |
| 846 | + # Collect source files from existing targets (deduplicated) |
| 847 | + set(ALL_SOURCE_FILES) |
| 848 | + set(SRC_TARGETS) |
| 849 | + set(TEST_TARGETS) |
| 850 | + set(TIDY_TARGETS) |
| 851 | + |
| 852 | + # Add main library sources |
| 853 | + list(APPEND ALL_SOURCE_FILES ${uv_sources}) |
| 854 | + |
| 855 | + # Add test sources if tests are enabled |
| 856 | + if(LIBUV_BUILD_TESTS) |
| 857 | + list(APPEND ALL_SOURCE_FILES ${uv_test_sources}) |
| 858 | + endif() |
| 859 | + |
| 860 | + # Remove duplicates and non-existent files |
| 861 | + list(REMOVE_DUPLICATES ALL_SOURCE_FILES) |
| 862 | + |
| 863 | + foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) |
| 864 | + # Create a clean target name |
| 865 | + string(REPLACE "/" "-" TARGET_NAME ${SOURCE_FILE}) |
| 866 | + string(REGEX REPLACE "\\.[^.]*$" "" TARGET_NAME ${TARGET_NAME}) |
| 867 | + set(FULL_TARGET_NAME "tidy-${TARGET_NAME}") |
| 868 | + |
| 869 | + # Create individual target for this source file |
| 870 | + add_custom_target(${FULL_TARGET_NAME} |
| 871 | + COMMAND ${CMAKE_C_CLANG_TIDY} -p "${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}" |
| 872 | + COMMENT "Running clang-tidy on ${SOURCE_FILE}" |
| 873 | + VERBATIM) |
| 874 | + |
| 875 | + # Add to appropriate folder list |
| 876 | + if(SOURCE_FILE MATCHES "^src/") |
| 877 | + list(APPEND SRC_TARGETS ${FULL_TARGET_NAME}) |
| 878 | + elseif(SOURCE_FILE MATCHES "^test/") |
| 879 | + list(APPEND TEST_TARGETS ${FULL_TARGET_NAME}) |
| 880 | + endif() |
| 881 | + |
| 882 | + # Add to list of all tidy targets |
| 883 | + list(APPEND TIDY_TARGETS ${FULL_TARGET_NAME}) |
| 884 | + endforeach() |
| 885 | + |
| 886 | + # Create folder-based targets |
| 887 | + if(SRC_TARGETS) |
| 888 | + add_custom_target(tidy-src |
| 889 | + COMMENT "Running clang-tidy on src files" |
| 890 | + VERBATIM) |
| 891 | + add_dependencies(tidy-src ${SRC_TARGETS}) |
| 892 | + endif() |
| 893 | + |
| 894 | + if(TEST_TARGETS) |
| 895 | + add_custom_target(tidy-test |
| 896 | + COMMENT "Running clang-tidy on test files" |
| 897 | + VERBATIM) |
| 898 | + add_dependencies(tidy-test ${TEST_TARGETS}) |
| 899 | + endif() |
| 900 | + |
| 901 | + # Create main tidy target that depends on all individual targets |
| 902 | + add_custom_target(tidy |
| 903 | + COMMENT "Running clang-tidy on all source files" |
| 904 | + VERBATIM) |
| 905 | + add_dependencies(tidy ${TIDY_TARGETS}) |
| 906 | +endif() |