From 7e6b36bc2d332a3cb66b83116a393ac4728236d5 Mon Sep 17 00:00:00 2001 From: Mitya Selivanov Date: Thu, 29 Dec 2022 07:51:16 +0100 Subject: Improve C89/90 compat --- CMakeLists.txt | 115 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 35 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index be0471c..f24fe6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,26 +11,24 @@ option(KIT_ENABLE_TESTING "Enable testing" ON) option(KIT_DISABLE_SYSTEM_MALLOC "Disable system memory allocator" OFF) option(KIT_DISABLE_SYSTEM_THREADS "Disable system threads" OFF) -set(KIT_PROJECT kit) -set(KIT_LIBRARY kit) -set(KIT_TEST_LIBRARY kit_test) -set(KIT_TEST_SUITE kit_test_suite) -set(KIT_TARGETS kit-targets) +if(KIT_ENABLE_TESTING) + set(CMAKE_C_STANDARD 90) + set(CMAKE_C_EXTENSIONS OFF) +endif() project( - ${KIT_PROJECT} + kit VERSION 0.1.1 DESCRIPTION "A collection of C libraries" LANGUAGES C) -add_library(${KIT_LIBRARY} STATIC) -add_library(${KIT_PROJECT}::${KIT_LIBRARY} ALIAS ${KIT_LIBRARY}) +add_library(kit STATIC) +add_library(kit::kit ALIAS kit) target_include_directories( - ${KIT_LIBRARY} INTERFACE + kit INTERFACE $) -target_compile_features(${KIT_LIBRARY} PUBLIC c_std_11) if(WIN32) - target_link_libraries(${KIT_LIBRARY} PUBLIC Shlwapi) + target_link_libraries(kit PUBLIC Shlwapi) endif() include(CheckCSourceRuns) @@ -40,12 +38,24 @@ check_c_source_runs( #include int main() { struct timespec t; + (void) t.tv_sec; + (void) t.tv_nsec; return 0; } " KIT_HAVE_STRUCT_TIMESPEC ) +check_c_source_runs( + " + #include + int main() { + return 0; + } + " + KIT_HAVE_BITS_TYPES_STRUCT_TIMESPEC_H +) + check_c_source_runs( " #include @@ -58,6 +68,31 @@ check_c_source_runs( KIT_HAVE_TIMESPEC_GET ) +check_c_source_runs( + " + #include + int main() { + struct timespec t; + clock_gettime(CLOCK_REALTIME, &t) + return 0; + } + " + KIT_HAVE_CLOCK_GETTIME +) + +check_c_source_runs( + " + #include + int main() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + return 0; + } + " + KIT_HAVE_PTHREAD_MUTEXATTR_SETTYPE +) + check_c_source_runs( " #include @@ -99,57 +134,67 @@ if(NOT KIT_HAVE_MALLOC) endif() if(NOT KIT_HAVE_STRUCT_TIMESPEC) - target_compile_definitions(${KIT_LIBRARY} PUBLIC KIT_NEED_STRUCT_TIMESPEC) + target_compile_definitions(kit PUBLIC KIT_NEED_STRUCT_TIMESPEC) +endif() + +if(KIT_HAVE_BITS_TYPES_STRUCT_TIMESPEC_H) + target_compile_definitions(kit PUBLIC KIT_HAVE_BITS_TYPES_STRUCT_TIMESPEC_H) endif() if(NOT KIT_HAVE_TIMESPEC_GET) - target_compile_definitions(${KIT_LIBRARY} PUBLIC KIT_NEED_TIMESPEC_GET) + target_compile_definitions(kit PUBLIC KIT_NEED_TIMESPEC_GET) +endif() + +if(KIT_HAVE_CLOCK_GETTIME) + target_compile_definitions(kit PUBLIC KIT_HAVE_CLOCK_GETTIME) +endif() + +if(KIT_HAVE_PTHREAD_MUTEXATTR_SETTYPE) + target_compile_definitions(kit PUBLIC KIT_HAVE_PTHREAD_MUTEXATTR_SETTYPE) endif() if(KIT_DISABLE_SYSTEM_MALLOC) - target_compile_definitions(${KIT_LIBRARY} PUBLIC KIT_DISABLE_SYSTEM_MALLOC) + target_compile_definitions(kit PUBLIC KIT_DISABLE_SYSTEM_MALLOC) endif() if(KIT_DISABLE_SYSTEM_THREADS) - target_compile_definitions(${KIT_LIBRARY} PUBLIC KIT_DISABLE_SYSTEM_THREADS) + target_compile_definitions(kit PUBLIC KIT_DISABLE_SYSTEM_THREADS) endif() if(NOT KIT_DISABLE_SYSTEM_THREADS) find_package(Threads REQUIRED) - target_link_libraries(${KIT_LIBRARY} PUBLIC Threads::Threads) + target_link_libraries(kit PUBLIC Threads::Threads) endif() -add_library(${KIT_TEST_LIBRARY} STATIC) -add_library(${KIT_PROJECT}::${KIT_TEST_LIBRARY} ALIAS ${KIT_TEST_LIBRARY}) +add_library(kit_test STATIC) +add_library(kit::kit_test ALIAS kit_test) target_include_directories( - ${KIT_TEST_LIBRARY} INTERFACE + kit_test INTERFACE $) -target_compile_features(${KIT_TEST_LIBRARY} PUBLIC c_std_11) enable_testing() if(KIT_ENABLE_TESTING) - add_executable(${KIT_TEST_SUITE}) - add_executable(${KIT_PROJECT}::${KIT_TEST_SUITE} ALIAS ${KIT_TEST_SUITE}) - target_compile_features(${KIT_TEST_SUITE} PRIVATE c_std_11) - target_link_libraries(${KIT_TEST_SUITE} PRIVATE ${KIT_LIBRARY} ${KIT_TEST_LIBRARY} Threads::Threads) + add_executable(kit_test_suite) + add_executable(kit::kit_test_suite ALIAS kit_test_suite) + target_link_libraries(kit_test_suite PRIVATE kit kit_test Threads::Threads) if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") target_compile_options( - ${KIT_LIBRARY} PUBLIC + kit PUBLIC -fsanitize=undefined,address --coverage -O0 -g) target_link_options( - ${KIT_LIBRARY} PUBLIC + kit PUBLIC -fsanitize=undefined,address --coverage) endif() add_test( - NAME ${KIT_LIBRARY}_unittests - COMMAND ${KIT_TEST_SUITE} --no-carriage-return) + NAME kit_unittests + COMMAND kit_test_suite --no-carriage-return) set_tests_properties( - ${KIT_LIBRARY}_unittests + kit_unittests PROPERTIES TIMEOUT "120") endif() @@ -176,21 +221,21 @@ unset(path_) unset(dir_) install( - TARGETS ${KIT_LIBRARY} ${KIT_TEST_LIBRARY} - EXPORT ${KIT_TARGETS} + TARGETS kit kit_test + EXPORT kit-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install( - EXPORT ${KIT_TARGETS} - FILE ${KIT_TARGETS}.cmake + EXPORT kit-targets + FILE kit-targets.cmake NAMESPACE ${PROJECT_NAME}:: DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") export( - EXPORT ${KIT_TARGETS} - FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${KIT_TARGETS}.cmake" + EXPORT kit-targets + FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/kit-targets.cmake" NAMESPACE ${PROJECT_NAME}::) include(CMakePackageConfigHelpers) -- cgit v1.2.3