cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
-project(onak VERSION 0.5.0 LANGUAGES C)
+project(onak VERSION 0.6.1 LANGUAGES C)
+include(CheckSymbolExists)
include(FindPkgConfig)
include(GNUInstallDirs)
include(TestBigEndian)
${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run)
endif()
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+
# Configuration options from the user
set(DBTYPE "dynamic" CACHE STRING
"Configure the default database backend to use" )
# Core objects
add_library(libonak STATIC armor.c charfuncs.c cleankey.c cleanup.c decodekey.c
getcgi.c hash.c keyarray.c keyid.c keyindex.c ll.c log.c marshal.c
- mem.c merge.c onak-conf.c parsekey.c photoid.c sigcheck.c sendsync.c
+ mem.c merge.c onak-conf.c parsekey.c photoid.c rsa.c sigcheck.c sendsync.c
sha1x.c wordlist.c)
set(LIBONAK_LIBRARIES "")
target_sources(libonak PRIVATE md5.c sha1.c)
endif()
-# Backends
-
-# These have no dependencies and can always be compiled
-set(BACKENDS "file" "fs" "stacked")
-
-# DB4 backend (add check for existence)
-LIST(APPEND BACKENDS db4)
-set(BACKEND_db4_LIBS db-5.3)
-
-# HKP backend - needs libcurl
-pkg_check_modules(CURL libcurl)
-if (CURL_FOUND)
- LIST(APPEND BACKENDS hkp)
- set(BACKEND_hkp_INC ${CURL_INCLUDE_DIRS})
- set(BACKEND_hkp_LIBS ${CURL_LIBRARIES})
+# We need libhogweed and libgmp to be able to do more than hash calculations
+pkg_check_modules(HOGWEED hogweed)
+if (HOGWEED_FOUND)
+ find_package(GMP)
endif()
-
-# PostgreSQL backend - needs libpq
-pkg_check_modules(POSTGRESQL libpq)
-if (POSTGRESQL_FOUND)
- LIST(APPEND BACKENDS pg)
- set(BACKEND_pg_INC ${POSTGRESQL_INCLUDE_DIRS})
- set(BACKEND_pg_LIBS ${POSTGRESQL_LIBRARIES})
+if (GMP_FOUND)
+ set(HAVE_CRYPTO true)
+ target_include_directories(libonak SYSTEM PUBLIC
+ ${GMP_INCLUDE_DIRS} ${HOGWEED_INCLUDE_DIRS})
+ LIST(APPEND LIBONAK_LIBRARIES ${GMP_LIBRARY} ${HOGWEED_LIBRARIES})
+
+ set(CMAKE_REQUIRED_INCLUDES ${NETTLE_INCLUDE_DIRS})
+ set(CMAKE_REQUIRED_LIBRARIES ${NETTLE_LIBRARIES} ${HOGWEED_LIBRARIES})
+ # API change in later version of Nettle
+ CHECK_SYMBOL_EXISTS(nettle_get_secp_256r1 "nettle/ecc-curve.h" HAVE_NETTLE_GET_SECP_256R1)
+ CHECK_SYMBOL_EXISTS(nettle_get_secp_384r1 "nettle/ecc-curve.h" HAVE_NETTLE_GET_SECP_384R1)
+ CHECK_SYMBOL_EXISTS(nettle_get_secp_521r1 "nettle/ecc-curve.h" HAVE_NETTLE_GET_SECP_521R1)
endif()
-# keyd backend - can be disabled entirely
-if (KEYD STREQUAL "ON")
- LIST(APPEND BACKENDS keyd)
-
- add_executable(keyd keyd.c)
- target_link_libraries(keyd libonak)
- add_executable(keydctl keydctl.c onak-conf.c)
- target_link_libraries(keydctl libonak)
- target_compile_definitions(keydctl PRIVATE
- CONFIGDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}")
-
- pkg_check_modules(SYSTEMD libsystemd)
- if (SYSTEMD_FOUND)
- set(HAVE_SYSTEMD true)
- target_include_directories(keyd SYSTEM PUBLIC
- ${SYSTEMD_INCLUDE_DIRS})
- target_link_libraries(keyd ${SYSTEMD_LIBRARIES})
- endif()
+# Build files that have substitutions in them
+include_directories(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
+configure_file("${CMAKE_SOURCE_DIR}/build-config.h.in"
+ "${CMAKE_BINARY_DIR}/build-config.h" @ONLY)
- install(TARGETS keydctl RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
- install(TARGETS keyd RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR})
- install(FILES keyd.8 keydctl.8
- DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/)
-endif()
+configure_file("${CMAKE_SOURCE_DIR}/onak.ini.in"
+ "${CMAKE_BINARY_DIR}/onak.ini" @ONLY)
+install(FILES ${CMAKE_BINARY_DIR}/onak.ini
+ DESTINATION ${CMAKE_INSTALL_SYSCONFDIR})
+configure_file("${CMAKE_SOURCE_DIR}/onak-mail.pl.in"
+ "${CMAKE_BINARY_DIR}/onak-mail.pl" @ONLY)
+install(PROGRAMS ${CMAKE_BINARY_DIR}/onak-mail.pl
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/onak/)
+install(FILES onak-mail.pl.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/)
+
+# Key database backends
+add_subdirectory(keydb)
# Now we have the DB type confirmed we can tidy up the libonak options
if (DBTYPE STREQUAL "dynamic")
LIST(APPEND LIBONAK_LIBRARIES "dl")
- foreach(BACKEND IN LISTS BACKENDS)
- add_library(keydb_${BACKEND} SHARED keydb_${BACKEND}.c)
- target_include_directories(keydb_${BACKEND} SYSTEM PUBLIC
- ${BACKEND_${BACKEND}_INC})
- target_link_libraries(keydb_${BACKEND} libonak
- ${BACKEND_${BACKEND}_LIBS})
- install(TARGETS keydb_${BACKEND} LIBRARY DESTINATION
- ${CMAKE_INSTALL_LIBDIR}/onak/backends/)
- endforeach(BACKEND)
else()
list (FIND BACKENDS ${DBTYPE} _index)
if (${_index} LESS 0)
DBINIT=keydb_${DBTYPE}_init)
# DB Backend related options are known, so finish off libonak configuration
-target_sources(libonak PRIVATE keydb_${DBTYPE}.c)
+target_sources(libonak PRIVATE keydb/keydb_${DBTYPE}.c)
target_link_libraries(libonak ${LIBONAK_LIBRARIES})
+# CGI directory
+add_subdirectory(cgi)
+
# Executables start here
# Swiss Army tool
add_executable(onak onak.c)
target_link_libraries(onak libonak)
-# CGI
-add_executable(add add.c)
-target_link_libraries(add libonak)
-add_executable(gpgwww gpgwww.c stats.c)
-target_link_libraries(gpgwww libonak)
-add_executable(hashquery hashquery.c)
-target_link_libraries(hashquery libonak)
-add_executable(lookup lookup.c)
-target_link_libraries(lookup libonak)
-
# Tools that operate on the key DB
add_executable(maxpath maxpath.c stats.c)
target_link_libraries(maxpath libonak)
install(TARGETS onak splitkeys RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES onak.1 splitkeys.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
-# Build files that have substitutions in them
-include_directories(${CMAKE_BINARY_DIR})
-configure_file("${CMAKE_SOURCE_DIR}/build-config.h.in"
- "${CMAKE_BINARY_DIR}/build-config.h" @ONLY)
-
-configure_file("${CMAKE_SOURCE_DIR}/onak.ini.in"
- "${CMAKE_BINARY_DIR}/onak.ini" @ONLY)
-install(FILES ${CMAKE_BINARY_DIR}/onak.ini
- DESTINATION ${CMAKE_INSTALL_SYSCONFDIR})
-
-configure_file("${CMAKE_SOURCE_DIR}/onak-mail.pl.in"
- "${CMAKE_BINARY_DIR}/onak-mail.pl" @ONLY)
-install(PROGRAMS ${CMAKE_BINARY_DIR}/onak-mail.pl
- DESTINATION ${CMAKE_INSTALL_LIBDIR}/onak/)
-install(FILES onak-mail.pl.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/)
-
# Basic unit tests
enable_testing()
add_test(NAME syntaxtest COMMAND perl -cw ${CMAKE_BINARY_DIR}/onak-mail.pl)