diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2024-05-21 01:29:20 +0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2024-05-21 01:29:20 +0200 |
commit | b54b8f5b25403cf3b9623804b2491ec78a8b913e (patch) | |
tree | 8100b69a2fd1e37d1eb400a33c92ec3c984f208b /tests/CMakeLists.txt | |
parent | 0bbc18869720ad042b668742ca48e5cb8a37491a (diff) | |
download | blogc-b54b8f5b25403cf3b9623804b2491ec78a8b913e.tar.gz blogc-b54b8f5b25403cf3b9623804b2491ec78a8b913e.tar.bz2 blogc-b54b8f5b25403cf3b9623804b2491ec78a8b913e.zip |
build: replace autotools with cmake
this patch removes all the autoconf/automake/libtool build
infrastructure and replaces it with cmake.
notable default behavior changes:
- man pages are not pre-built, and are not built by default, must be
enabled with `-DBUILD_MANPAGES=ON`.
removed features:
- srpm packaging, to be reintroduced at some point.
- deb packaging, now handled externally via rafaelmartins/deb.rgm.io
more stuff must be missing, please report bugs!
Diffstat (limited to 'tests/CMakeLists.txt')
-rw-r--r-- | tests/CMakeLists.txt | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..e1ca881 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,91 @@ +# SPDX-FileCopyrightText: 2024 Rafael G. Martins <rafael@rafaelmartins.eng.br> +# SPDX-License-Identifier: BSD-3-Clause + +find_package(PkgConfig REQUIRED) +pkg_check_modules(CMOCKA IMPORTED_TARGET cmocka) + +find_program(BASH bash HINTS /bin /usr/bin REQUIRED) +find_program(DIFF diff REQUIRED) +find_program(TEE tee REQUIRED) + +try_compile(HAVE_LD_WRAP + SOURCE_FROM_CONTENT + main.c + "#include <stdlib.h>\nvoid __real_exit(int status);\nvoid __wrap_exit(int s){__real_exit(0);}\nint main(){exit(1);}" + LINK_OPTIONS + "-Wl,--wrap=exit" +) + +function(blogc_executable_test _libname _src) + if (NOT CMOCKA_FOUND) + message(STATUS "Skipping test (cmocka not found): ${_libname}_check_${_src}") + return() + endif() + + cmake_parse_arguments(_blogc_executable_test + "" + "" + "WRAP" + ${ARGN} + ) + + if(DEFINED _blogc_executable_test_WRAP) + if(NOT HAVE_LD_WRAP) + message(STATUS "Skipping test (no ld wrap): ${_libname}_check_${_src}") + return() + endif() + endif() + + add_executable(${_libname}_check_${_src} + check_${_src}.c + ) + + if(DEFINED _blogc_executable_test_WRAP) + list(JOIN _blogc_executable_test_WRAP ",--wrap=" _wrap) + set_target_properties(${_libname}_check_${_src} + PROPERTIES LINK_FLAGS + "-Wl,--wrap=${_wrap}" + ) + endif() + + target_link_libraries(${_libname}_check_${_src} PRIVATE + PkgConfig::CMOCKA + lib${_libname} + ) + + add_test( + NAME ${_libname}_check_${_src} + COMMAND + ${CMAKE_SOURCE_DIR}/cmake/scripts/test.sh + ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_check_${_src} + ) +endfunction() + +function(blogc_script_test _libname _src) + configure_file( + check_${_src}.sh.in + ${_libname}_check_${_src}.sh + @ONLY + ) + add_test( + NAME ${_libname}_check_${_src}.sh + COMMAND + ${CMAKE_SOURCE_DIR}/cmake/scripts/test.sh + ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_check_${_src}.sh + ) +endfunction() + +add_subdirectory(common) +add_subdirectory(blogc) + +if(BUILD_BLOGC_MAKE OR BUILD_BLOGC_MAKE_EMBEDDED) + add_subdirectory(blogc-make) +endif() + +if(BUILD_BLOGC_RUNSERVER) + add_subdirectory(blogc-runserver) +endif() + +if(BUILD_BLOGC_GIT_RECEIVER) + add_subdirectory(blogc-git-receiver) +endif() |