From c06fc562a10d8037089ea2991d95a4757953e776 Mon Sep 17 00:00:00 2001 From: ctrlaltca Date: Sat, 12 May 2018 23:28:22 +0200 Subject: [PATCH] Cmake scripts refactoring; fix #3225 (#3230) * fix #3225 * Servatrice: use websockets as an optional component (for qt < 5.3) * Attempt++ --- CMakeLists.txt | 22 +++---- cockatrice/CMakeLists.txt | 78 ++++++------------------ common/CMakeLists.txt | 2 +- oracle/CMakeLists.txt | 57 ++++++----------- servatrice/CMakeLists.txt | 49 +++++---------- servatrice/src/servatrice.cpp | 4 +- servatrice/src/servatrice.h | 6 +- servatrice/src/serversocketinterface.cpp | 2 +- servatrice/src/serversocketinterface.h | 4 +- 9 files changed, 72 insertions(+), 152 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cabae55a..a56f9486 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,29 +130,23 @@ OPTION(UPDATE_TRANSLATIONS "Update translations on compile" OFF) MESSAGE(STATUS "UPDATE TRANSLATIONS: ${UPDATE_TRANSLATIONS}") IF(WIN32) - FIND_PACKAGE(Qt5Widgets 5.4.0 REQUIRED) # For QSysInfo::buildAbi() + FIND_PACKAGE(Qt5Core 5.4.0 REQUIRED) # For QSysInfo::buildAbi() ELSE() - FIND_PACKAGE(Qt5Widgets 5.0.3 REQUIRED) + FIND_PACKAGE(Qt5Core 5.0.3 REQUIRED) ENDIF() -IF(Qt5Widgets_FOUND) - MESSAGE(STATUS "Found Qt ${Qt5Widgets_VERSION_STRING}") +IF(Qt5Core_FOUND) + MESSAGE(STATUS "Found Qt ${Qt5Core_VERSION_STRING}") # FIX: Qt was built with -reduce-relocations if (Qt5_POSITION_INDEPENDENT_CODE) SET(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() - FIND_PACKAGE(Qt5LinguistTools) - IF(UPDATE_TRANSLATIONS) - IF(NOT Qt5_LUPDATE_EXECUTABLE) - MESSAGE(WARNING "Qt's lupdate not found.") - ENDIF() - ENDIF() - - IF(NOT Qt5_LRELEASE_EXECUTABLE) - MESSAGE(WARNING "Qt's lrelease not found.") - ENDIF() + # guess plugins and libraries directory + set(QT_PLUGINS_DIR "${Qt5Core_DIR}/../../../plugins") + get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION) + get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} PATH) ELSE() MESSAGE(FATAL_ERROR "No Qt5 found!") diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index b372a888..96392656 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -148,71 +148,33 @@ if(APPLE) set(cockatrice_SOURCES ${cockatrice_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns) ENDIF(APPLE) -set(COCKATRICE_LIBS) +# Qt5 +find_package(Qt5 COMPONENTS Concurrent Multimedia Network PrintSupport Svg Widgets REQUIRED) +include_directories(${Qt5Concurrent_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5PrintSupport_INCLUDE_DIRS} ${Qt5Svg_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}) +set(COCKATRICE_QT_MODULES Concurrent Multimedia Network PrintSupport Svg Widgets) -# qt5 stuff -if(Qt5Widgets_FOUND) - include_directories(${Qt5Widgets_INCLUDE_DIRS}) - list(APPEND COCKATRICE_LIBS Widgets) +# Qt5LinguistTools +find_package(Qt5LinguistTools) +if(Qt5LinguistTools_FOUND) + include_directories(${Qt5LinguistTools_INCLUDE_DIRS}) + list(APPEND COCKATRICE_LIBS LinguistTools) - # QtConcurrent - find_package(Qt5Concurrent) - if(Qt5Concurrent_FOUND) - include_directories(${Qt5Concurrent_INCLUDE_DIRS}) - list(APPEND ORACLE_LIBS Concurrent) + if(NOT Qt5_LRELEASE_EXECUTABLE) + MESSAGE(WARNING "Qt's lrelease not found.") endif() - # QtNetwork - find_package(Qt5Network) - if(Qt5Network_FOUND) - include_directories(${Qt5Network_INCLUDE_DIRS}) - list(APPEND COCKATRICE_LIBS Network) - endif() - - # QtMultimedia - find_package(Qt5Multimedia) - if(Qt5Multimedia_FOUND) - include_directories(${Qt5Multimedia_INCLUDE_DIRS}) - list(APPEND COCKATRICE_LIBS Multimedia) - endif() - - # QtPrinter - find_package(Qt5PrintSupport) - if(Qt5PrintSupport_FOUND) - include_directories(${Qt5PrintSupport_INCLUDE_DIRS}) - list(APPEND COCKATRICE_LIBS PrintSupport) - endif() - - # QtSvg - find_package(Qt5Svg) - if(Qt5Svg_FOUND) - include_directories(${Qt5Svg_INCLUDE_DIRS}) - list(APPEND COCKATRICE_LIBS Svg) - endif() - - # Qt5LinguistTools - find_package(Qt5LinguistTools) - if(Qt5LinguistTools_FOUND) - include_directories(${Qt5LinguistTools_INCLUDE_DIRS}) - list(APPEND COCKATRICE_LIBS LinguistTools) - endif() - - # Let cmake chew Qt5's translations and resource files - # Note: header files are MOC-ed automatically by cmake - IF(UPDATE_TRANSLATIONS) + if(UPDATE_TRANSLATIONS) + if(NOT Qt5_LUPDATE_EXECUTABLE) + MESSAGE(WARNING "Qt's lupdate not found.") + endif() QT5_CREATE_TRANSLATION(cockatrice_QM ${translate_SRCS} ${cockatrice_TS}) - ELSE() + else() QT5_ADD_TRANSLATION(cockatrice_QM ${cockatrice_TS}) - ENDIF() - - QT5_ADD_RESOURCES(cockatrice_RESOURCES_RCC ${cockatrice_RESOURCES}) - - # guess plugins and libraries directory - set(QT_PLUGINS_DIR "${Qt5Widgets_DIR}/../../../plugins") - get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION) - get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} PATH) + endif() endif() +QT5_ADD_RESOURCES(cockatrice_RESOURCES_RCC ${cockatrice_RESOURCES}) + # Declare path variables set(ICONDIR share/icons CACHE STRING "icon dir") set(DESKTOPDIR share/applications CACHE STRING "desktop file destination") @@ -227,7 +189,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) ADD_EXECUTABLE(cockatrice WIN32 MACOSX_BUNDLE ${cockatrice_SOURCES} ${cockatrice_QM} ${cockatrice_RESOURCES_RCC} ${cockatrice_MOC_SRCS}) TARGET_LINK_LIBRARIES(cockatrice cockatrice_common) -qt5_use_modules(cockatrice ${COCKATRICE_LIBS}) +qt5_use_modules(cockatrice ${COCKATRICE_QT_MODULES}) if(UNIX) if(APPLE) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 10797924..f32d59a2 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -33,7 +33,7 @@ set(ORACLE_LIBS) INCLUDE_DIRECTORIES(pb) INCLUDE_DIRECTORIES(sfmt) INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR}) -include_directories(${Qt5Widgets_INCLUDE_DIRS}) +include_directories(${Qt5Core_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) add_library(cockatrice_common ${common_SOURCES} ${common_MOC_SRCS}) diff --git a/oracle/CMakeLists.txt b/oracle/CMakeLists.txt index b35a5679..c4902f4b 100644 --- a/oracle/CMakeLists.txt +++ b/oracle/CMakeLists.txt @@ -48,50 +48,33 @@ if(APPLE) set(oracle_SOURCES ${oracle_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns) ENDIF(APPLE) -set(ORACLE_LIBS) +# Qt5 +find_package(Qt5 COMPONENTS Concurrent Network Svg Widgets REQUIRED) +include_directories(${Qt5Concurrent_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5PrintSupport_INCLUDE_DIRS} ${Qt5Svg_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}) +set(ORACLE_QT_MODULES Concurrent Multimedia Network PrintSupport Svg Widgets) -# qt5 stuff -if(Qt5Widgets_FOUND) - include_directories(${Qt5Widgets_INCLUDE_DIRS}) - list(APPEND ORACLE_LIBS Widgets) +# Qt5LinguistTools +find_package(Qt5LinguistTools) +if(Qt5LinguistTools_FOUND) + include_directories(${Qt5LinguistTools_INCLUDE_DIRS}) + list(APPEND ORACLE_LIBS LinguistTools) - # QtConcurrent - find_package(Qt5Concurrent) - if(Qt5Concurrent_FOUND) - include_directories(${Qt5Concurrent_INCLUDE_DIRS}) - list(APPEND ORACLE_LIBS Concurrent) + if(NOT Qt5_LRELEASE_EXECUTABLE) + MESSAGE(WARNING "Qt's lrelease not found.") endif() - # QtNetwork - find_package(Qt5Network) - if(Qt5Network_FOUND) - include_directories(${Qt5Network_INCLUDE_DIRS}) - list(APPEND ORACLE_LIBS Network) - endif() - - # QtSvg - find_package(Qt5Svg) - if(Qt5Svg_FOUND) - include_directories(${Qt5Svg_INCLUDE_DIRS}) - list(APPEND ORACLE_LIBS Svg) - endif() - - # Let cmake chew Qt5's translations and resource files - # Note: header files are MOC-ed automatically by cmake - IF(UPDATE_TRANSLATIONS) + if(UPDATE_TRANSLATIONS) + if(NOT Qt5_LUPDATE_EXECUTABLE) + MESSAGE(WARNING "Qt's lupdate not found.") + endif() QT5_CREATE_TRANSLATION(oracle_QM ${translate_SRCS} ${oracle_TS}) - ELSE() + else() QT5_ADD_TRANSLATION(oracle_QM ${oracle_TS}) - ENDIF() - - QT5_ADD_RESOURCES(oracle_RESOURCES_RCC ${oracle_RESOURCES}) - - # guess plugins and libraries directory - set(QT_PLUGINS_DIR "${Qt5Widgets_DIR}/../../../plugins") - get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION) - get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} PATH) + endif() endif() +QT5_ADD_RESOURCES(oracle_RESOURCES_RCC ${oracle_RESOURCES}) + INCLUDE_DIRECTORIES(../cockatrice/src) # Libz is required to support zipped files @@ -112,7 +95,7 @@ ENDIF() # Build oracle binary and link it ADD_EXECUTABLE(oracle WIN32 MACOSX_BUNDLE ${oracle_SOURCES} ${oracle_QM} ${oracle_RESOURCES_RCC} ${oracle_MOC_SRCS}) -qt5_use_modules(oracle ${ORACLE_LIBS}) +qt5_use_modules(oracle ${ORACLE_QT_MODULES}) IF(ZLIB_FOUND) TARGET_LINK_LIBRARIES(oracle ${ZLIB_LIBRARIES}) diff --git a/servatrice/CMakeLists.txt b/servatrice/CMakeLists.txt index a5b3ca7e..8cebb801 100644 --- a/servatrice/CMakeLists.txt +++ b/servatrice/CMakeLists.txt @@ -36,42 +36,23 @@ if(APPLE) set(servatrice_SOURCES ${servatrice_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns) ENDIF(APPLE) -set(SERVATRICE_LIBS) +# Qt5 +find_package(Qt5 COMPONENTS Network Sql REQUIRED) +include_directories(${Qt5Core_INCLUDE_DIRS}) +include_directories(${Qt5Network_INCLUDE_DIRS}) +include_directories(${Qt5Sql_INCLUDE_DIRS}) +set(SERVATRICE_QT_MODULES Core Network Sql) -# qt5 stuff -if(Qt5Widgets_FOUND) - include_directories(${Qt5Widgets_INCLUDE_DIRS}) - list(APPEND SERVATRICE_LIBS Widgets) - - # QtNetwork - find_package(Qt5Network) - if(Qt5Network_FOUND) - include_directories(${Qt5Network_INCLUDE_DIRS}) - list(APPEND SERVATRICE_LIBS Network) - endif() - - # QtSql - find_package(Qt5Sql) - if(Qt5Sql_FOUND) - include_directories(${Qt5Sql_INCLUDE_DIRS}) - list(APPEND SERVATRICE_LIBS Sql) - endif() - - # QtWebsockets - find_package(Qt5WebSockets) - if(Qt5WebSockets_FOUND) - include_directories(${Qt5WebSockets_INCLUDE_DIRS}) - list(APPEND SERVATRICE_LIBS WebSockets) - endif() - - QT5_ADD_RESOURCES(servatrice_RESOURCES_RCC ${servatrice_RESOURCES}) - - # guess plugins and libraries directory - set(QT_PLUGINS_DIR "${Qt5Widgets_DIR}/../../../plugins") - get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION) - get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} PATH) +# Qt Websockets +find_package(Qt5WebSockets) +if(Qt5WebSockets_FOUND) + include_directories(${Qt5WebSockets_INCLUDE_DIRS}) + list(APPEND SERVATRICE_QT_MODULES WebSockets) +else() + MESSAGE(WARNING "Qt5 websocket module not found") endif() +QT5_ADD_RESOURCES(servatrice_RESOURCES_RCC ${servatrice_RESOURCES}) SET(QT_DONT_USE_QTGUI TRUE) # Mysql connector @@ -114,7 +95,7 @@ if(MSVC) else() TARGET_LINK_LIBRARIES(servatrice cockatrice_common ${CMAKE_THREAD_LIBS_INIT}) endif() -qt5_use_modules(servatrice ${SERVATRICE_LIBS}) +qt5_use_modules(servatrice ${SERVATRICE_QT_MODULES}) # install rules if(UNIX) diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp index a605f445..b0345d85 100644 --- a/servatrice/src/servatrice.cpp +++ b/servatrice/src/servatrice.cpp @@ -104,7 +104,7 @@ Servatrice_ConnectionPool *Servatrice_GameServer::findLeastUsedConnectionPool() return connectionPools[poolIndex]; } -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB #define WEBSOCKET_POOL_NUMBER 999 Servatrice_WebsocketGameServer::Servatrice_WebsocketGameServer(Servatrice *_server, @@ -430,7 +430,7 @@ bool Servatrice::initServer() } } -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB // WEBSOCKET SERVER if (getNumberOfWebSocketPools() > 0) { websocketGameServer = new Servatrice_WebsocketGameServer(this, getNumberOfWebSocketPools(), diff --git a/servatrice/src/servatrice.h b/servatrice/src/servatrice.h index 3b4831fc..0af4043e 100644 --- a/servatrice/src/servatrice.h +++ b/servatrice/src/servatrice.h @@ -21,7 +21,7 @@ #define SERVATRICE_H #include -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB #include #endif #include "server.h" @@ -66,7 +66,7 @@ protected: Servatrice_ConnectionPool *findLeastUsedConnectionPool(); }; -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB class Servatrice_WebsocketGameServer : public QWebSocketServer { Q_OBJECT @@ -158,7 +158,7 @@ private: DatabaseType databaseType; QTimer *pingClock, *statusUpdateClock; Servatrice_GameServer *gameServer; -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB Servatrice_WebsocketGameServer *websocketGameServer; #endif Servatrice_IslServer *islServer; diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index 0bf0d6da..05a6aca1 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -1629,7 +1629,7 @@ bool TcpServerSocketInterface::initTcpSession() return true; } -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB WebsocketServerSocketInterface::WebsocketServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent) diff --git a/servatrice/src/serversocketinterface.h b/servatrice/src/serversocketinterface.h index 3123f141..e4d6dbc5 100644 --- a/servatrice/src/serversocketinterface.h +++ b/servatrice/src/serversocketinterface.h @@ -21,7 +21,7 @@ #define SERVERSOCKETINTERFACE_H #include -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB #include #endif #include "server_protocolhandler.h" @@ -181,7 +181,7 @@ public slots: void initConnection(int socketDescriptor); }; -#if QT_VERSION > 0x050300 +#ifdef QT_WEBSOCKETS_LIB class WebsocketServerSocketInterface : public AbstractServerSocketInterface { Q_OBJECT