CMakeLists.txt 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. cmake_minimum_required(VERSION 3.12)
  2. project (hermes)
  3. set(LOGGER_CLASS UnixLogger CACHE STRING "One of UnixLogger, FileLogger or NullLogger")
  4. add_executable (hermes
  5. ${CMAKE_CURRENT_BINARY_DIR}/Configfile.cpp
  6. src/Exception.cpp
  7. src/hermes.cpp
  8. src/ServerSocket.cpp
  9. src/Utils.cpp
  10. src/Database.cpp
  11. src/Proxy.cpp
  12. src/Socket.cpp)
  13. if(WIN32)
  14. set(SOURCES ${SOURCES}
  15. src/FileLogger.cpp
  16. src/win32-service.cpp)
  17. target_compile_definitions(hermes PRIVATE WIN32)
  18. endif()
  19. target_compile_definitions(hermes PRIVATE LOGGER_CLASS=${LOGGER_CLASS})
  20. target_sources(hermes PRIVATE src/${LOGGER_CLASS}.cpp)
  21. # required dependency sqlite3
  22. find_library (SQLITE3_LIBRARY NAMES libsqlite3 sqlite3)
  23. # optional dependency libspf2
  24. find_library (SPF2_LIBRARY NAMES spf2 libspf2)
  25. if(SPF2_LIB)
  26. target_compile_definitions(hermes PRIVATE HAVE_SPF2)
  27. target_sources(hermes PRIVATE src/Spf.cpp)
  28. set(OPT_DEFS ${OPT_DEFS} -DHAVE_SPF2)
  29. endif()
  30. # optional dependency openssl
  31. find_package (OpenSSL)
  32. if(OPENSSL_FOUND)
  33. target_compile_definitions(hermes PRIVATE HAVE_SSL)
  34. set(OPT_DEFS ${OPT_DEFS} -DHAVE_SSL)
  35. endif()
  36. include_directories(
  37. ${CMAKE_CURRENT_BINARY_DIR}
  38. src)
  39. # generation of various files
  40. add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Configfile.cpp
  41. COMMAND cpp ${OPT_DEFS} ${CMAKE_CURRENT_SOURCE_DIR}/src/Configfile.tmpl -I
  42. ${CMAKE_CURRENT_BINARY_DIR} |
  43. ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_config.pl
  44. DEPENDS src/Configfile.cpp.in src/Configfile.h.in src/Configfile.tmpl
  45. docs/hermes-options.html.in scripts/generate_config.pl)
  46. # doxygen
  47. find_package (Doxygen REQUIRED dot)
  48. if(DOXYGEN_FOUND)
  49. add_custom_target(doc ALL
  50. doxygen
  51. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/docs)
  52. install(
  53. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/docs/html
  54. DESTINATION usr/share/doc/hermes/html)
  55. endif()
  56. target_link_libraries(hermes
  57. ${SQLITE3_LIBRARY}
  58. ${OPENSSL_LIBRARIES}
  59. ${SPF2_LIBRARY}
  60. pthread)
  61. install(TARGETS hermes
  62. RUNTIME DESTINATION bin)
  63. install(FILES dists/hermesrc.example
  64. DESTINATION etc)
  65. install(FILES
  66. dists/hermesrc.example
  67. docs/gpl.txt
  68. docs/installing-hermes.txt
  69. docs/hermes-options.html
  70. DESTINATION usr/share/doc/hermes)