1 cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
2 project(onak VERSION 0.5.0 LANGUAGES C)
5 include(GNUInstallDirs)
7 # Fall back for earlier versions of CMake which lack RUNSTATEDIR
8 if ("x${CMAKE_INSTALL_FULL_RUNSTATEDIR}" STREQUAL "x")
9 set(CMAKE_INSTALL_FULL_RUNSTATEDIR
10 ${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run)
13 # Configuration options from the user
14 set(DBTYPE "dynamic" CACHE STRING
15 "Configure the default database backend to use" )
17 "Enable the key daemon to handle communication with the key database"
20 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
21 TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
23 # Pick up a git based version number for development builds
25 if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
26 EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} describe --tags --dirty
27 OUTPUT_VARIABLE GIT_VERSION
28 OUTPUT_STRIP_TRAILING_WHITESPACE)
29 string(REPLACE "onak-" "" VERSION ${GIT_VERSION})
31 set(VERSION ${PROJECT_VERSION})
35 add_library(libonak STATIC armor.c charfuncs.c cleankey.c cleanup.c decodekey.c
36 getcgi.c hash.c keyarray.c keyid.c keyindex.c ll.c log.c marshal.c
37 mem.c merge.c onak-conf.c parsekey.c photoid.c sigcheck.c sendsync.c
39 set(LIBONAK_LIBRARIES "")
41 # Ideally use Nettle, fall back to our own md5/sha1 routines otherwise
42 pkg_check_modules(NETTLE nettle)
45 target_include_directories(libonak SYSTEM PUBLIC ${NETTLE_INCLUDE_DIRS})
46 LIST(APPEND LIBONAK_LIBRARIES ${NETTLE_LIBRARIES})
48 target_sources(libonak PRIVATE md5.c sha1.c)
51 # Build files that have substitutions in them
52 include_directories(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
53 configure_file("${CMAKE_SOURCE_DIR}/build-config.h.in"
54 "${CMAKE_BINARY_DIR}/build-config.h" @ONLY)
56 configure_file("${CMAKE_SOURCE_DIR}/onak.ini.in"
57 "${CMAKE_BINARY_DIR}/onak.ini" @ONLY)
58 install(FILES ${CMAKE_BINARY_DIR}/onak.ini
59 DESTINATION ${CMAKE_INSTALL_SYSCONFDIR})
61 configure_file("${CMAKE_SOURCE_DIR}/onak-mail.pl.in"
62 "${CMAKE_BINARY_DIR}/onak-mail.pl" @ONLY)
63 install(PROGRAMS ${CMAKE_BINARY_DIR}/onak-mail.pl
64 DESTINATION ${CMAKE_INSTALL_LIBDIR}/onak/)
65 install(FILES onak-mail.pl.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/)
67 # Key database backends
68 add_subdirectory(keydb)
70 # Now we have the DB type confirmed we can tidy up the libonak options
72 if (DBTYPE STREQUAL "dynamic")
73 LIST(APPEND LIBONAK_LIBRARIES "dl")
75 list (FIND BACKENDS ${DBTYPE} _index)
77 message(FATAL_ERROR "${DBTYPE} is not a supported DB backend.")
80 LIST(APPEND LIBONAK_LIBRARIES ${BACKEND_${DBTYPE}_LIBS})
83 # For onak-conf.o compilation
84 target_compile_definitions(libonak PRIVATE
85 CONFIGDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}"
86 DBINIT=keydb_${DBTYPE}_init)
88 # DB Backend related options are known, so finish off libonak configuration
89 target_sources(libonak PRIVATE keydb/keydb_${DBTYPE}.c)
90 target_link_libraries(libonak ${LIBONAK_LIBRARIES})
95 # Executables start here
98 add_executable(onak onak.c)
99 target_link_libraries(onak libonak)
101 # Tools that operate on the key DB
102 add_executable(maxpath maxpath.c stats.c)
103 target_link_libraries(maxpath libonak)
104 add_executable(sixdegrees sixdegrees.c stats.c)
105 target_link_libraries(sixdegrees libonak)
106 add_executable(wotsap wotsap.c)
107 target_link_libraries(wotsap libonak)
110 add_executable(splitkeys splitkeys.c)
111 target_link_libraries(splitkeys libonak)
112 add_executable(stripkey stripkey.c)
113 target_link_libraries(stripkey libonak)
115 install(TARGETS onak splitkeys RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
116 install(FILES onak.1 splitkeys.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
120 add_test(NAME syntaxtest COMMAND perl -cw ${CMAKE_BINARY_DIR}/onak-mail.pl)
121 add_test(NAME sanitytests COMMAND ${CMAKE_SOURCE_DIR}/runtests)