]> the.earth.li Git - onak.git/blobdiff - CMakeLists.txt
Remove dead store in generic_fetch_key
[onak.git] / CMakeLists.txt
index 4b2868860b787f04a840ecbf5c6a3e613b53502f..98659b3fac0baee17c49b075245518b1b24a8838 100644 (file)
@@ -1,6 +1,7 @@
 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)
@@ -10,6 +11,8 @@ if ("x${CMAKE_INSTALL_FULL_RUNSTATEDIR}" STREQUAL "x")
                ${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" )
@@ -34,7 +37,7 @@ endif()
 # 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 "")
 
@@ -48,70 +51,48 @@ else()
        target_sources(libonak PRIVATE md5.c sha1.c)
 endif()
 
-# Backends
-
-# These have no dependencies and can always be compiled
-set(BACKENDS "file" "fs" "keyring" "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)
@@ -127,25 +108,9 @@ target_compile_definitions(libonak PRIVATE
        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})
 
-# 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)
-
-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/)
-
 # CGI directory
 add_subdirectory(cgi)