FindPackages.cmake 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # Find system packages
  2. # Required packages
  3. find_package(PkgConfig REQUIRED)
  4. # Upstream smartbotic-database client library — provides target smartbotic::db-client
  5. find_package(smartbotic-db-client CONFIG REQUIRED)
  6. find_package(Threads REQUIRED)
  7. find_package(OpenSSL REQUIRED)
  8. find_package(CURL REQUIRED)
  9. find_package(ZLIB REQUIRED)
  10. # nlohmann-json
  11. find_package(nlohmann_json 3.11 QUIET)
  12. if(NOT nlohmann_json_FOUND)
  13. pkg_check_modules(nlohmann_json REQUIRED IMPORTED_TARGET nlohmann_json)
  14. add_library(nlohmann_json::nlohmann_json ALIAS PkgConfig::nlohmann_json)
  15. endif()
  16. # spdlog
  17. find_package(spdlog QUIET)
  18. if(NOT spdlog_FOUND)
  19. pkg_check_modules(spdlog REQUIRED IMPORTED_TARGET spdlog)
  20. add_library(spdlog::spdlog ALIAS PkgConfig::spdlog)
  21. endif()
  22. # gRPC and Protobuf
  23. find_package(gRPC CONFIG QUIET)
  24. if(NOT gRPC_FOUND)
  25. pkg_check_modules(grpc++ REQUIRED IMPORTED_TARGET grpc++)
  26. add_library(gRPC::grpc++ ALIAS PkgConfig::grpc++)
  27. endif()
  28. find_package(Protobuf REQUIRED)
  29. # libwebsockets
  30. pkg_check_modules(websockets REQUIRED IMPORTED_TARGET libwebsockets)
  31. add_library(websockets ALIAS PkgConfig::websockets)
  32. # MySQL/MariaDB client
  33. pkg_check_modules(mariadb QUIET IMPORTED_TARGET libmariadb)
  34. if(mariadb_FOUND)
  35. add_library(mysql_client ALIAS PkgConfig::mariadb)
  36. set(MYSQL_CLIENT_FOUND TRUE CACHE BOOL "MySQL client library found")
  37. message(STATUS "Found MariaDB client library")
  38. else()
  39. pkg_check_modules(mysqlclient QUIET IMPORTED_TARGET mysqlclient)
  40. if(mysqlclient_FOUND)
  41. add_library(mysql_client ALIAS PkgConfig::mysqlclient)
  42. set(MYSQL_CLIENT_FOUND TRUE CACHE BOOL "MySQL client library found")
  43. message(STATUS "Found MySQL client library")
  44. else()
  45. # Not every distribution ships a .pc file for the client. Void, for one,
  46. # installs mysql_config and no pkg-config module at all - so both checks
  47. # above miss and the mysql-query node disappears from the build with only
  48. # a STATUS line to say so. A runner built that way registers a node list
  49. # silently missing mysql-query, and a workflow using it fails with
  50. # "unknown node type" on that host and works on every other.
  51. find_program(MYSQL_CONFIG_EXECUTABLE NAMES mariadb_config mysql_config)
  52. if(MYSQL_CONFIG_EXECUTABLE)
  53. execute_process(COMMAND ${MYSQL_CONFIG_EXECUTABLE} --cflags
  54. OUTPUT_VARIABLE _mysql_cflags
  55. OUTPUT_STRIP_TRAILING_WHITESPACE)
  56. execute_process(COMMAND ${MYSQL_CONFIG_EXECUTABLE} --libs
  57. OUTPUT_VARIABLE _mysql_libs
  58. OUTPUT_STRIP_TRAILING_WHITESPACE)
  59. separate_arguments(_mysql_cflags NATIVE_COMMAND "${_mysql_cflags}")
  60. separate_arguments(_mysql_libs NATIVE_COMMAND "${_mysql_libs}")
  61. add_library(mysql_client INTERFACE)
  62. target_compile_options(mysql_client INTERFACE ${_mysql_cflags})
  63. target_link_libraries(mysql_client INTERFACE ${_mysql_libs})
  64. set(MYSQL_CLIENT_FOUND TRUE CACHE BOOL "MySQL client library found")
  65. message(STATUS "Found MySQL client library via ${MYSQL_CONFIG_EXECUTABLE}")
  66. else()
  67. set(MYSQL_CLIENT_FOUND FALSE CACHE BOOL "MySQL client library found")
  68. message(STATUS "MySQL/MariaDB client library not found - MySQL node support disabled")
  69. endif()
  70. endif()
  71. endif()
  72. # PostgreSQL client (libpq)
  73. pkg_check_modules(libpq QUIET IMPORTED_TARGET libpq)
  74. if(libpq_FOUND)
  75. add_library(postgresql_client ALIAS PkgConfig::libpq)
  76. set(POSTGRESQL_CLIENT_FOUND TRUE CACHE BOOL "PostgreSQL client library found")
  77. message(STATUS "Found PostgreSQL client library (libpq)")
  78. else()
  79. set(POSTGRESQL_CLIENT_FOUND FALSE CACHE BOOL "PostgreSQL client library found")
  80. message(STATUS "PostgreSQL client library not found - PostgreSQL node support disabled")
  81. endif()