diff --git a/CMakeLists.txt b/CMakeLists.txt index cdf7b60..9e6c510 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,34 +6,43 @@ set(CMAKE_C_STANDARD 23) # Would've done C99 but I need typeof (for now) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) -option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON) -option(DCFG_BUILD_STATIC "Build DCFG as a static library" OFF) +option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON) +option(DCFG_BUILD_STATIC "Build DCFG as a static library" OFF) +option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON) -find_package(Threads REQUIRED) +find_package(Threads) -set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) +set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) if(DCFG_BUILD_SHARED) add_library(${PROJECT_NAME} SHARED ${SRC_DIR}/dcfg.c) target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIR}) - target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) + + if(DCFG_PTHREAD_SUPPORT) + find_package(Threads REQUIRED) + target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) + target_compile_definitions(${PROJECT_NAME} PRIVATE DCFG_PTHREAD_SUPPORT) + endif() + set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg") + install(TARGETS ${PROJECT_NAME} DESTINATION lib) endif() if(DCFG_BUILD_STATIC) add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c) target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR}) - target_link_libraries(${PROJECT_NAME}_static PRIVATE Threads::Threads) - set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg") -endif() -if(DCFG_BUILD_SHARED) - install(TARGETS ${PROJECT_NAME} DESTINATION lib) -endif() -if(DCFG_BUILD_STATIC) + if(DCFG_PTHREAD_SUPPORT) + find_package(Threads REQUIRED) + target_link_libraries(${PROJECT_NAME}_static PRIVATE Threads::Threads) + target_compile_definitions(${PROJECT_NAME}_static PRIVATE DCFG_PTHREAD_SUPPORT) + endif() + + set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg") install(TARGETS ${PROJECT_NAME}_static DESTINATION lib) endif() + install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include) if(MSVC) @@ -41,4 +50,3 @@ if(MSVC) else() target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof) endif() - diff --git a/src/dcfg.c b/src/dcfg.c index 2d8fa7f..47dc7c2 100644 --- a/src/dcfg.c +++ b/src/dcfg.c @@ -11,7 +11,18 @@ #include #include +#ifdef DCFG_PTHREAD_SUPPORT #include +#else +typedef struct { + int unused; +} pthread_mutex_t; + +void pthread_mutex_init(pthread_mutex_t *, void *); +void pthread_mutex_destroy(pthread_mutex_t *); +void pthread_mutex_lock(pthread_mutex_t *); +void pthread_mutex_unlock(pthread_mutex_t *); +#endif int64_t dcfg_strtoll(const char *s, char **end, int base) { size_t n = strlen(s);