X-Git-Url: http://the.earth.li/gitweb/?p=onak.git;a=blobdiff_plain;f=CMakeLists.txt;h=98659b3fac0baee17c49b075245518b1b24a8838;hp=4b2868860b787f04a840ecbf5c6a3e613b53502f;hb=743957a08f068529d3add3e8485678b4e5034195;hpb=3877403043acfbfa57497d3ba51a5ec2db1c77dc diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b28688..98659b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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)