]> the.earth.li Git - onak.git/blobdiff - CMakeLists.txt
0.6.3 release
[onak.git] / CMakeLists.txt
index bf819d7e718453d6a106c73e69ef1b12b3c0d74f..ed47ba32766625792e3a3b7d2ca348c7e3f834c5 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.3 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" )
@@ -20,22 +23,45 @@ option(KEYD
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
 
+include(CheckCSourceCompiles)
+check_c_source_compiles(
+       "
+               #include <stdlib.h>
+               static void f(__attribute__((unused))) {}
+               int main(void) { f(); return 0;}
+       "
+       HAVE___ATTRIBUTE__UNUSED
+)
+if (HAVE___ATTRIBUTE__UNUSED)
+       set(UNUSED_ATTRIB "__attribute__((unused))")
+else()
+       set(UNUSED_ATTRIB "")
+endif()
+
 # Pick up a git based version number for development builds
 find_package(Git)
 if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
-       EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} describe --tags --dirty
-               OUTPUT_VARIABLE GIT_VERSION
-               OUTPUT_STRIP_TRAILING_WHITESPACE)
-       string(REPLACE "onak-" "" VERSION ${GIT_VERSION})
+       if (EXISTS "${CMAKE_SOURCE_DIR}/.git/refs/tags/onak-0.6.2")
+               EXECUTE_PROCESS(
+                       COMMAND ${GIT_EXECUTABLE} describe --tags --dirty
+                       OUTPUT_VARIABLE GIT_VERSION
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+               string(REPLACE "onak-" "" VERSION ${GIT_VERSION})
+       else()
+               EXECUTE_PROCESS(
+                       COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+                       OUTPUT_VARIABLE VERSION
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+       endif()
 else()
        set(VERSION ${PROJECT_VERSION})
 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
-       sha1x.c wordlist.c)
+       hash.c hash-helper.c key-store.c keyarray.c keyid.c keyindex.c
+       ll.c log.c marshal.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 "")
 
 # Ideally use Nettle, fall back to our own md5/sha1 routines otherwise
@@ -48,6 +74,31 @@ else()
        target_sources(libonak PRIVATE md5.c sha1.c)
 endif()
 
+# 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()
+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 will use this for socket activation, if it's available
+pkg_check_modules(SYSTEMD libsystemd)
+if (SYSTEMD_FOUND)
+       set(HAVE_SYSTEMD true)
+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"