From d513977a3566b14d9357906615d045d71741537f Mon Sep 17 00:00:00 2001 From: Thorsten Töpper Date: Wed, 18 Feb 2026 21:51:53 +0100 Subject: squash initial implementation --- CMakeLists.txt | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 CMakeLists.txt (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4d2ed7c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 3.15...4.0) + +project(duplicate_finder + LANGUAGES C +) + +# Although C11 would be sufficient, be safe to set this minimum in order to +# prevent errors from unbeknown features, used to and assuming to be there longer... +set (CMAKE_C_STANDARD 17) + +add_compile_options(-Wall -Wextra -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough -Werror=format-security + -Wbidi-chars=any -Werror=implicit -Werror=incompatible-pointer-types -Werror=int-conversion + -fno-delete-null-pointer-checks -fstack-clash-protection -fstack-protector-strong -fstrict-flex-arrays=3) + +set(SOURCE_DF src/duplicate_finder.c src/options.c src/kv_manager.c src/directory_scanner.c src/file_processor.c src/database_interaction.c) + +set(USED_LIBS gdbm crypto sqlite3) + +add_executable(duplicate_finder_debug ${SOURCE_DF}) +target_include_directories(duplicate_finder_debug PRIVATE include) +target_compile_options(duplicate_finder_debug PUBLIC -g -DDEBUGBUILD -Werror) +target_link_libraries(duplicate_finder_debug ${USED_LIBS}) + +add_executable(duplicate_finder_debug_asan ${SOURCE_DF}) +target_include_directories(duplicate_finder_debug_asan PRIVATE include) +target_compile_options(duplicate_finder_debug_asan PUBLIC -g -DDEBUGBUILD -fsanitize=address -Werror) +target_link_libraries(duplicate_finder_debug_asan asan ${USED_LIBS}) + +add_executable(duplicate_finder_asan ${SOURCE_DF}) +target_include_directories(duplicate_finder_asan PRIVATE include) +target_compile_options(duplicate_finder_asan PUBLIC -fsanitize=address) +target_link_libraries(duplicate_finder_asan asan ${USED_LIBS}) + +add_executable(duplicate_finder ${SOURCE_DF}) +target_include_directories(duplicate_finder PRIVATE include) +target_compile_options(duplicate_finder PUBLIC -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -FPIE -pie -Wl,-z,noexecstack -Wl,--as-needed -Wl,--no-copy-dt-needed-entries) +target_link_libraries(duplicate_finder ${USED_LIBS}) + + +# The man page generation... + +find_program(ASCIIDOC_EXEC NAMES asciidoc) +if (NOT ASCIIDOC_EXEC) + message(WARNING "Can't find asciidoc, skip manpage generation") + return() +endif() + +find_program(XMLTO_EXEC NAMES xmlto) +if (NOT XMLTO_EXEC) + message(WARNING "Can't find xmlto, skip manpage generation") + return() +endif() + +find_program(COMPRESS_EXEC NAMES gzip) +if (NOT COMPRESS_EXEC) + message(WARNING "Can't find gzip, skip manpage generation") + return() +endif() + + +set(MANPAGE duplicate_finder.1) +set(ASCIIDOC_GENMAN ${ASCIIDOC_EXEC} -b docbook -d manpage) + +add_custom_command( + OUTPUT ${MANPAGE}.xml + COMMAND ${ASCIIDOC_GENMAN} -o ${MANPAGE}.xml ${CMAKE_CURRENT_SOURCE_DIR}/man/${MANPAGE}.adoc + COMMENT "Create DocBook XML ${MANPAGE}.xml ..." +) + +set(XMLTO_GENMAN ${XMLTO_EXEC} man) +add_custom_command( + OUTPUT ${MANPAGE} + COMMAND ${XMLTO_GENMAN} ${MANPAGE}.xml + DEPENDS ${MANPAGE}.xml + COMMENT "Create man page from DocBook XML ${MANPAGE}.xml ..." +) + +add_custom_command( + OUTPUT ${MANPAGE}.gz + COMMAND ${COMPRESS_EXEC} -f -9 ${MANPAGE} + DEPENDS ${MANPAGE} + COMMENT "Compressing the manpage via gzip..." +) + +add_custom_target(man ALL + DEPENDS ${MANPAGE}.gz +) -- cgit v1.3