aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorThorsten Töpper <atsutane@freethoughts.de>2026-02-18 21:51:53 +0100
committerThorsten Töpper <atsutane@freethoughts.de>2026-02-18 21:51:53 +0100
commitd513977a3566b14d9357906615d045d71741537f (patch)
tree3e707d2de9da71d98650fa8bb1b92ed11ab724ba /CMakeLists.txt
parenteed2d1323441861f2d41f0ecc0a72fcc9190fa5f (diff)
downloadduplicate_finder-d513977a3566b14d9357906615d045d71741537f.tar.gz
duplicate_finder-d513977a3566b14d9357906615d045d71741537f.tar.bz2
squash initial implementation
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt87
1 files changed, 87 insertions, 0 deletions
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
+)