@@ -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_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_C_EXTENSIONS OFF)
|
set(CMAKE_C_EXTENSIONS OFF)
|
||||||
|
|
||||||
option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON)
|
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_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)
|
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
|
||||||
if(DCFG_BUILD_SHARED)
|
if(DCFG_BUILD_SHARED)
|
||||||
add_library(${PROJECT_NAME} SHARED ${SRC_DIR}/dcfg.c)
|
add_library(${PROJECT_NAME} SHARED ${SRC_DIR}/dcfg.c)
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIR})
|
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")
|
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg")
|
||||||
|
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DCFG_BUILD_STATIC)
|
if(DCFG_BUILD_STATIC)
|
||||||
add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c)
|
add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c)
|
||||||
target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR})
|
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)
|
if(DCFG_PTHREAD_SUPPORT)
|
||||||
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
|
find_package(Threads REQUIRED)
|
||||||
endif()
|
target_link_libraries(${PROJECT_NAME}_static PRIVATE Threads::Threads)
|
||||||
if(DCFG_BUILD_STATIC)
|
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)
|
install(TARGETS ${PROJECT_NAME}_static DESTINATION lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include)
|
install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@@ -41,4 +50,3 @@ if(MSVC)
|
|||||||
else()
|
else()
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof)
|
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
11
src/dcfg.c
11
src/dcfg.c
@@ -11,7 +11,18 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef DCFG_PTHREAD_SUPPORT
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#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) {
|
int64_t dcfg_strtoll(const char *s, char **end, int base) {
|
||||||
size_t n = strlen(s);
|
size_t n = strlen(s);
|
||||||
|
Reference in New Issue
Block a user