diff --git a/.gitignore b/.gitignore index c595774..c124afb 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ *.a BUILD install +result diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d9daf3..7e07d95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,56 +6,48 @@ set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS ON) # Would've done OFF but I need typeof (for now) -option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON) -option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON) -option(DCFG_POSIX_SUPPORT "Enable POSIX support" ON) -option(DCFG_BUILD_PROGRAMS "Build DCFG example programs" ON) +option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON) +option(DCFG_POSIX_SUPPORT "Enable POSIX support" ON) +option(DCFG_BUILD_PROGRAMS "Build DCFG example programs" ON) find_package(Threads) 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}) +# Shared library +add_library(${PROJECT_NAME}_shared SHARED ${SRC_DIR}/dcfg.c) +target_include_directories(${PROJECT_NAME}_shared PUBLIC ${INCLUDE_DIR}) +set_target_properties(${PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME "dcfg") +# Static library +add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c) +target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR}) +set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg") + +# Common settings for both libraries +foreach(TARGET ${PROJECT_NAME}_shared ${PROJECT_NAME}_static) 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) + target_link_libraries(${TARGET} PRIVATE Threads::Threads) + target_compile_definitions(${TARGET} PRIVATE DCFG_PTHREAD_SUPPORT) endif() - if (DCFG_POSIX_SUPPORT) - target_compile_definitions(${PROJECT_NAME} PRIVATE DCFG_POSIX_SUPPORT) + if(DCFG_POSIX_SUPPORT) + target_compile_definitions(${TARGET} PRIVATE DCFG_POSIX_SUPPORT) endif() - set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg") - install(TARGETS ${PROJECT_NAME} DESTINATION lib) -else() - add_library(${PROJECT_NAME} STATIC ${SRC_DIR}/dcfg.c) - target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIR}) - - 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() - if (DCFG_POSIX_SUPPORT) - target_compile_definitions(${PROJECT_NAME} PRIVATE DCFG_POSIX_SUPPORT) + if(MSVC) + target_compile_options(${TARGET} PRIVATE /W4 /permissive-) + else() + target_compile_options(${TARGET} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token) endif() +endforeach() - set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg") - install(TARGETS ${PROJECT_NAME} DESTINATION lib) -endif() - +# Install libraries +install(TARGETS ${PROJECT_NAME}_shared ${PROJECT_NAME}_static DESTINATION lib) install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include) -if(MSVC) - target_compile_options(${PROJECT_NAME} PRIVATE /W4 /permissive-) -else() - target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token) -endif() - +# Build example programs if(DCFG_BUILD_PROGRAMS) set(PROGRAMS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/programs) file(GLOB PROGRAM_SOURCES "${PROGRAMS_DIR}/*.c") @@ -64,7 +56,7 @@ if(DCFG_BUILD_PROGRAMS) get_filename_component(PROG_NAME ${PROG_SRC} NAME_WE) add_executable(${PROG_NAME} ${PROG_SRC}) target_include_directories(${PROG_NAME} PRIVATE ${INCLUDE_DIR}) - target_link_libraries(${PROG_NAME} PRIVATE ${PROJECT_NAME}) + target_link_libraries(${PROG_NAME} PRIVATE ${PROJECT_NAME}_shared) if(DCFG_PTHREAD_SUPPORT) target_link_libraries(${PROG_NAME} PRIVATE Threads::Threads) endif() diff --git a/flake.nix b/flake.nix index 946a1ad..d4edbfb 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,7 @@ }; in { - devShells.default = pkgs.mkShell.override { stdenv = pkgs.llvmPackages_20.libcxxStdenv; } { + devShells.default = pkgs.mkShell { packages = with pkgs; [ cmake ninja @@ -30,6 +30,18 @@ tokei ]; }; + + packages.default = pkgs.stdenv.mkDerivation { + pname = "dcfg"; + version = "master"; + src = ./.; + + nativeBuildInputs = [ + pkgs.cmake + pkgs.pkg-config + ]; + buildInputs = [ ]; + }; } ); }