# CMakeLists for servatrice directory # # provides the servatrice binary project(ContinuumServatrice VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") set(servatrice_SOURCES src/email_parser.cpp src/event_loop_watchdog.cpp src/forwarded_address.cpp src/main.cpp src/metrics_registry.cpp src/ratelimiter.cpp src/servatrice.cpp src/servatrice_connection_pool.cpp src/servatrice_database_interface.cpp src/server_logger.cpp src/serversocketinterface.cpp src/settingscache.cpp src/isl_interface.cpp src/signalhandler.cpp src/trusted_sources.cpp ${VERSION_STRING_CPP} src/smtpclient.cpp src/smtp/qxthmac.cpp src/smtp/qxtmailattachment.cpp src/smtp/qxtmailmessage.cpp src/smtp/qxtsmtp.cpp ) set(servatrice_RESOURCES servatrice.qrc) # Qxt SMTP is vendored. cockatrice_disable_sanitizers_for( src/smtp/qxthmac.cpp src/smtp/qxtmailattachment.cpp src/smtp/qxtmailmessage.cpp src/smtp/qxtsmtp.cpp ) cockatrice_disable_coverage_for( src/smtp/qxthmac.cpp src/smtp/qxtmailattachment.cpp src/smtp/qxtmailmessage.cpp src/smtp/qxtsmtp.cpp ) if(WIN32) set(servatrice_SOURCES ${servatrice_SOURCES} servatrice.rc) endif(WIN32) # Under FreeBSD we need libexecinfo to use backtrace_symbols_fd() if(CMAKE_HOST_SYSTEM MATCHES "FreeBSD") find_package(Libexecinfo REQUIRED) set(SYSTEM_LIBRARIES ${EXECINFO_LIBRARY} ${SYSTEM_LIBRARIES}) endif() if(APPLE) # Headless server: no inherited Cockatrice .icns bundle branding. endif(APPLE) qt_add_resources(servatrice_RESOURCES_RCC ${servatrice_RESOURCES}) set(QT_DONT_USE_QTGUI TRUE) # Mysql connector if(UNIX) if(APPLE) set(MYSQLCLIENT_DEFAULT_PATHS "/usr/local/lib" "/opt/local/lib/mysql55/mysql/" "/opt/local/lib/mysql56/mysql/") else() set(MYSQLCLIENT_DEFAULT_PATHS "/usr/lib64" "/usr/local/lib64" "/usr/lib" "/usr/local/lib") endif() elseif(WIN32) set(MYSQLCLIENT_DEFAULT_PATHS "C:\\Program Files\\MySQL\\MySQL Server 5.7\\lib" "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.7\\lib" ) endif() find_library( MYSQL_CLIENT_LIBRARIES NAMES mysqlclient PATHS ${MYSQLCLIENT_DEFAULT_PATHS} PATH_SUFFIXES mysql mariadb ) if(${MYSQL_CLIENT_LIBRARIES} MATCHES "NOTFOUND") set(MYSQLCLIENT_FOUND FALSE CACHE INTERNAL "" ) message(STATUS "MySQL connector NOT FOUND: Continuum-Servatrice won't be able to connect to a MySQL server") unset(MYSQL_CLIENT_LIBRARIES) else() set(MYSQLCLIENT_FOUND TRUE CACHE INTERNAL "" ) get_filename_component(MYSQLCLIENT_LIBRARY_DIR ${MYSQL_CLIENT_LIBRARIES} PATH) message(STATUS "Found MySQL connector at: ${MYSQL_CLIENT_LIBRARIES}") endif() # Declare path variables set(ICONDIR share/icons CACHE STRING "icon dir" ) set(DESKTOPDIR share/applications CACHE STRING "desktop file destination" ) # Build servatrice binary and link it add_executable(continuum-servatrice MACOSX_BUNDLE ${servatrice_MOC_SRCS} ${servatrice_RESOURCES_RCC} ${servatrice_SOURCES}) # Internally keep the original source tree and Source/Protocol type names. # This target produces only the native Continuum-Servatrice executable. target_precompile_headers(continuum-servatrice PRIVATE "${CMAKE_SOURCE_DIR}/cmake/pch/qtcore_pch.h") if(CMAKE_HOST_SYSTEM MATCHES "FreeBSD") target_link_libraries( continuum-servatrice libcockatrice_deck_list libcockatrice_network_server_remote Threads::Threads ${SERVATRICE_QT_MODULES} ${LIBEXECINFO_LIBRARY} ) else() target_link_libraries( continuum-servatrice libcockatrice_deck_list libcockatrice_network_server_remote Threads::Threads ${SERVATRICE_QT_MODULES} ) endif() # install rules if(UNIX) if(APPLE) set(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}") set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.continuum-universes.continuum-servatrice") set(MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_NAME}-${PROJECT_VERSION}") set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}) set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}) set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}) install(TARGETS continuum-servatrice BUNDLE DESTINATION ./) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuum-servatrice.ini.example DESTINATION ./continuum-servatrice.app/Contents/Resources/) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuum-servatrice.sql DESTINATION ./continuum-servatrice.app/Contents/Resources/) else() # Assume linux install(TARGETS continuum-servatrice RUNTIME DESTINATION bin/) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuum-servatrice.ini.example DESTINATION share/continuum-servatrice/) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuum-servatrice.sql DESTINATION share/continuum-servatrice/) # No upstream Servatrice desktop/icon registration; it would collide with # a separate MTG server installation. The server is managed via CLI. endif() elseif(WIN32) install(TARGETS continuum-servatrice RUNTIME DESTINATION ./) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuum-servatrice.ini.example DESTINATION ./) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuum-servatrice.sql DESTINATION ./) endif() if(APPLE) # these needs to be relative to CMAKE_INSTALL_PREFIX set(plugin_dest_dir continuum-servatrice.app/Contents/Plugins) set(qtconf_dest_dir continuum-servatrice.app/Contents/Resources) # Qt plugins: platforms, sqldrivers/mysql, tls (Qt6) install( DIRECTORY "${QT_PLUGINS_DIR}/" DESTINATION ${plugin_dest_dir} COMPONENT Runtime FILES_MATCHING PATTERN "*.dSYM" EXCLUDE PATTERN "*_debug.dylib" EXCLUDE PATTERN "platforms/*.dylib" PATTERN "sqldrivers/libqsqlmysql*.dylib" PATTERN "tls/*.dylib" ) install( CODE " file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"[Paths] Plugins = Plugins Translations = Resources/translations\") " COMPONENT Runtime ) install( CODE " file(GLOB_RECURSE QTPLUGINS \"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/*.dylib\") set(BU_CHMOD_BUNDLE_ITEMS ON) include(BundleUtilities) fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/continuum-servatrice.app\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR};${MYSQLCLIENT_LIBRARY_DIR}\") " COMPONENT Runtime ) endif() if(WIN32) # these needs to be relative to CMAKE_INSTALL_PREFIX set(plugin_dest_dir Plugins) set(qtconf_dest_dir .) install( DIRECTORY "$/" DESTINATION ./ FILES_MATCHING PATTERN "*.dll" PATTERN "*.pdb" EXCLUDE PATTERN "*.dir*" EXCLUDE PATTERN "*_autogen*" EXCLUDE PATTERN "*.tlog*" EXCLUDE PATTERN "CMakeFiles*" EXCLUDE PATTERN "x64*" EXCLUDE PATTERN ".qt*" EXCLUDE PATTERN ".qsb*" EXCLUDE PATTERN ".lupdate*" EXCLUDE ) # Qt plugins: platforms, sqldrivers, tls (Qt6) install( DIRECTORY "${QT_PLUGINS_DIR}/" DESTINATION ${plugin_dest_dir} COMPONENT Runtime FILES_MATCHING PATTERN "platforms/qdirect2d.dll" PATTERN "platforms/qminimal.dll" PATTERN "platforms/qoffscreen.dll" PATTERN "platforms/qwindows.dll" PATTERN "tls/qcertonlybackend.dll" PATTERN "tls/qopensslbackend.dll" PATTERN "tls/qschannelbackend.dll" PATTERN "sqldrivers/qsqlite.dll" PATTERN "sqldrivers/qsqlodbc.dll" PATTERN "sqldrivers/qsqlpsql.dll" ) install( CODE " file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"[Paths] Plugins = Plugins Translations = Resources/translations\") " COMPONENT Runtime ) install( CODE " file(GLOB_RECURSE QTPLUGINS \"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/*.dll\") set(BU_CHMOD_BUNDLE_ITEMS ON) include(BundleUtilities) fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/continuum-servatrice.exe\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR};${MYSQLCLIENT_LIBRARY_DIR}\") " COMPONENT Runtime ) endif() # Compatibility build target for existing CI commands. No 'servatrice' executable is emitted. add_custom_target(servatrice DEPENDS continuum-servatrice)