summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2022-12-29 07:51:16 +0100
committerMitya Selivanov <automainint@guattari.tech>2022-12-29 07:51:16 +0100
commit7e6b36bc2d332a3cb66b83116a393ac4728236d5 (patch)
tree4e7255b1237564f9682cb8e1b84a5bc0c0a4fbef /CMakeLists.txt
parentf9df8ec356b1e18bf46c9a35bec78ed025107376 (diff)
downloadkit-7e6b36bc2d332a3cb66b83116a393ac4728236d5.zip
Improve C89/90 compat
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt115
1 files changed, 80 insertions, 35 deletions
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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/source>)
-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,6 +38,8 @@ check_c_source_runs(
#include <time.h>
int main() {
struct timespec t;
+ (void) t.tv_sec;
+ (void) t.tv_nsec;
return 0;
}
"
@@ -48,6 +48,16 @@ check_c_source_runs(
check_c_source_runs(
"
+ #include <bits/types/struct_timespec.h>
+ int main() {
+ return 0;
+ }
+ "
+ KIT_HAVE_BITS_TYPES_STRUCT_TIMESPEC_H
+)
+
+check_c_source_runs(
+ "
#include <time.h>
int main() {
struct timespec t;
@@ -60,6 +70,31 @@ check_c_source_runs(
check_c_source_runs(
"
+ #include <time.h>
+ int main() {
+ struct timespec t;
+ clock_gettime(CLOCK_REALTIME, &t)
+ return 0;
+ }
+ "
+ KIT_HAVE_CLOCK_GETTIME
+)
+
+check_c_source_runs(
+ "
+ #include <pthread.h>
+ 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 <pthread.h>
int main() {
return 0;
@@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/source>)
-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)