mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-24 02:13:02 -07:00
rework finding qt
This commit is contained in:
parent
d183291753
commit
0e0bed8d32
2 changed files with 139 additions and 48 deletions
|
|
@ -183,11 +183,9 @@ find_package(Threads REQUIRED)
|
||||||
|
|
||||||
message(STATUS "Update Translations: ${UPDATE_TRANSLATIONS}")
|
message(STATUS "Update Translations: ${UPDATE_TRANSLATIONS}")
|
||||||
|
|
||||||
|
# Find Qt, min version is defined in that .cmake file
|
||||||
include(FindQtRuntime)
|
include(FindQtRuntime)
|
||||||
|
|
||||||
# Qt is located through normal CMake package discovery
|
|
||||||
find_package(Qt6 6.4 REQUIRED)
|
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC TRUE)
|
set(CMAKE_AUTOMOC TRUE)
|
||||||
|
|
||||||
## Find other needed libraries
|
## Find other needed libraries
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,32 @@
|
||||||
|
# FindQtRuntime.cmake
|
||||||
|
#
|
||||||
# Find a compatible Qt version
|
# Find a compatible Qt version
|
||||||
# Inputs: WITH_SERVER, WITH_CLIENT, WITH_ORACLE
|
#
|
||||||
# Optional Input: QT6_DIR -- Hint as to where Qt6 lives on the system
|
# Inputs:
|
||||||
# Output: COCKATRICE_QT_VERSION_NAME -- Example values: Qt6
|
# WITH_SERVER
|
||||||
# Output: SERVATRICE_QT_MODULES
|
# WITH_CLIENT
|
||||||
# Output: COCKATRICE_QT_MODULES
|
# WITH_ORACLE
|
||||||
# Output: ORACLE_QT_MODULES
|
# TEST
|
||||||
# Output: TEST_QT_MODULES
|
#
|
||||||
|
# Outputs:
|
||||||
|
# COCKATRICE_QT_VERSION_NAME
|
||||||
|
# QT_CORE_MODULE
|
||||||
|
# SERVATRICE_QT_MODULES
|
||||||
|
# COCKATRICE_QT_MODULES
|
||||||
|
# ORACLE_QT_MODULES
|
||||||
|
# TEST_QT_MODULES
|
||||||
|
# QT_LIBRARY_DIR
|
||||||
|
# QT_PLUGINS_DIR
|
||||||
|
|
||||||
set(REQUIRED_QT_COMPONENTS Core)
|
set(COCKATRICE_QT_VERSION_NAME Qt6)
|
||||||
|
|
||||||
if(WITH_SERVER)
|
# ---------------------------------------------------------------------------
|
||||||
list(APPEND REQUIRED_QT_COMPONENTS Network Sql WebSockets)
|
# Define the Qt components required by each target
|
||||||
endif()
|
# ---------------------------------------------------------------------------
|
||||||
if(WITH_CLIENT)
|
|
||||||
list(
|
set(SERVATRICE_QT_COMPONENTS Network Sql WebSockets)
|
||||||
APPEND
|
|
||||||
REQUIRED_QT_COMPONENTS
|
set(COCKATRICE_QT_COMPONENTS
|
||||||
Concurrent
|
Concurrent
|
||||||
Gui
|
Gui
|
||||||
Multimedia
|
Multimedia
|
||||||
|
|
@ -28,60 +39,142 @@ if(WITH_CLIENT)
|
||||||
Xml
|
Xml
|
||||||
Quick
|
Quick
|
||||||
QuickWidgets
|
QuickWidgets
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(ORACLE_QT_COMPONENTS Concurrent Network Svg Widgets)
|
||||||
|
|
||||||
|
set(TEST_QT_COMPONENTS Concurrent Network Svg Widgets)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Determine which Qt components are required for this build
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set(REQUIRED_QT_COMPONENTS Core)
|
||||||
|
|
||||||
|
if(WITH_SERVER)
|
||||||
|
list(APPEND REQUIRED_QT_COMPONENTS ${SERVATRICE_QT_COMPONENTS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_CLIENT)
|
||||||
|
list(APPEND REQUIRED_QT_COMPONENTS ${COCKATRICE_QT_COMPONENTS})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_ORACLE)
|
if(WITH_ORACLE)
|
||||||
list(APPEND REQUIRED_QT_COMPONENTS Concurrent Network Svg Widgets)
|
list(APPEND REQUIRED_QT_COMPONENTS ${ORACLE_QT_COMPONENTS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TEST)
|
if(TEST)
|
||||||
# Union of Qt modules required across all test targets (independent of application targets).
|
list(APPEND REQUIRED_QT_COMPONENTS ${TEST_QT_COMPONENTS})
|
||||||
# When adding a new test that needs additional Qt modules, add them here rather than in the test's CMakeLists.txt
|
|
||||||
list(APPEND REQUIRED_QT_COMPONENTS Concurrent Network Svg Widgets)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(REMOVE_DUPLICATES REQUIRED_QT_COMPONENTS)
|
list(REMOVE_DUPLICATES REQUIRED_QT_COMPONENTS)
|
||||||
|
|
||||||
# Find Qt and all required components including Linguist
|
# ---------------------------------------------------------------------------
|
||||||
find_package(Qt6 REQUIRED COMPONENTS ${REQUIRED_QT_COMPONENTS} Linguist)
|
# Find Qt and define minimum version centrally
|
||||||
message(STATUS "Qt6_VERSION = ${Qt6_VERSION}")
|
# ---------------------------------------------------------------------------
|
||||||
message(STATUS "Qt6_DIR = ${Qt6_DIR}")
|
|
||||||
message(STATUS "Qt6Core_DIR = ${Qt6Core_DIR}")
|
|
||||||
message(STATUS "TEST=${TEST}")
|
|
||||||
message(STATUS "TEST_QT_MODULES=${TEST_QT_MODULES}")
|
|
||||||
|
|
||||||
set(COCKATRICE_QT_VERSION_NAME Qt6)
|
find_package(Qt6 6.4 REQUIRED COMPONENTS ${REQUIRED_QT_COMPONENTS} Linguist)
|
||||||
|
|
||||||
list(FIND Qt6LinguistTools_TARGETS Qt6::lrelease QT6_LRELEASE_INDEX)
|
# ---------------------------------------------------------------------------
|
||||||
if(QT6_LRELEASE_INDEX EQUAL -1)
|
# Convert a component list such as:
|
||||||
|
# Network;Sql;WebSockets
|
||||||
|
# into:
|
||||||
|
# Qt6::Network;Qt6::Sql;Qt6::WebSockets
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function(_qt_components_to_targets COMPONENTS OUTPUT_VARIABLE)
|
||||||
|
set(TARGETS)
|
||||||
|
|
||||||
|
foreach(COMPONENT IN LISTS COMPONENTS)
|
||||||
|
list(APPEND TARGETS "${COCKATRICE_QT_VERSION_NAME}::${COMPONENT}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(${OUTPUT_VARIABLE}
|
||||||
|
"${TARGETS}"
|
||||||
|
PARENT_SCOPE
|
||||||
|
)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Export Qt target lists for the individual targets
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if(WITH_SERVER)
|
||||||
|
_qt_components_to_targets("${SERVATRICE_QT_COMPONENTS}" SERVATRICE_QT_MODULES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_CLIENT)
|
||||||
|
_qt_components_to_targets("${COCKATRICE_QT_COMPONENTS}" COCKATRICE_QT_MODULES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_ORACLE)
|
||||||
|
_qt_components_to_targets("${ORACLE_QT_COMPONENTS}" ORACLE_QT_MODULES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TEST)
|
||||||
|
_qt_components_to_targets("${TEST_QT_COMPONENTS}" TEST_QT_MODULES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Core-only export (useful for headless libraries)
|
||||||
|
set(QT_CORE_MODULE "${COCKATRICE_QT_VERSION_NAME}::Core")
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Qt Linguist tools
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if(TARGET Qt6::lrelease)
|
||||||
|
set(QT6_LRELEASE_INDEX 0)
|
||||||
|
else()
|
||||||
message(WARNING "Qt6 lrelease not found.")
|
message(WARNING "Qt6 lrelease not found.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(FIND Qt6LinguistTools_TARGETS Qt6::lupdate QT6_LUPDATE_INDEX)
|
if(TARGET Qt6::lupdate)
|
||||||
if(QT6_LUPDATE_INDEX EQUAL -1)
|
set(QT6_LUPDATE_INDEX 0)
|
||||||
|
else()
|
||||||
message(WARNING "Qt6 lupdate not found.")
|
message(WARNING "Qt6 lupdate not found.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Qt runtime/plugin paths
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
# Establish Qt Plugins directory & Library directories
|
if(NOT TARGET Qt6::Core)
|
||||||
get_target_property(QT_LIBRARY_DIR ${COCKATRICE_QT_VERSION_NAME}::Core LOCATION)
|
message(FATAL_ERROR "Qt6::Core target is not available")
|
||||||
get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} DIRECTORY)
|
endif()
|
||||||
|
|
||||||
|
get_target_property(QT_LIBRARY_DIR Qt6::Core LOCATION)
|
||||||
|
get_filename_component(QT_LIBRARY_DIR "${QT_LIBRARY_DIR}" DIRECTORY)
|
||||||
get_filename_component(QT_PLUGINS_DIR "${Qt6Core_DIR}/../../../${QT6_INSTALL_PLUGINS}" ABSOLUTE)
|
get_filename_component(QT_PLUGINS_DIR "${Qt6Core_DIR}/../../../${QT6_INSTALL_PLUGINS}" ABSOLUTE)
|
||||||
get_filename_component(QT_LIBRARY_DIR "${QT_LIBRARY_DIR}/../../.." ABSOLUTE)
|
get_filename_component(QT_LIBRARY_DIR "${QT_LIBRARY_DIR}/../../.." ABSOLUTE)
|
||||||
|
|
||||||
if(UNIX AND APPLE)
|
if(UNIX AND APPLE)
|
||||||
# Mac needs a bit more help finding all necessary components
|
# macOS needs a bit more help finding all necessary components.
|
||||||
list(APPEND QT_LIBRARY_DIR "/usr/local/lib")
|
list(APPEND QT_LIBRARY_DIR "/usr/local/lib")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Debug information
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
message(DEBUG "QT_PLUGINS_DIR = ${QT_PLUGINS_DIR}")
|
message(DEBUG "QT_PLUGINS_DIR = ${QT_PLUGINS_DIR}")
|
||||||
message(DEBUG "QT_LIBRARY_DIR = ${QT_LIBRARY_DIR}")
|
message(DEBUG "QT_LIBRARY_DIR = ${QT_LIBRARY_DIR}")
|
||||||
|
|
||||||
# Establish exports
|
message(STATUS "Qt6_VERSION = ${Qt6_VERSION}")
|
||||||
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" SERVATRICE_QT_MODULES "${_SERVATRICE_NEEDED}")
|
message(STATUS "Qt6_DIR = ${Qt6_DIR}")
|
||||||
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" COCKATRICE_QT_MODULES "${_COCKATRICE_NEEDED}")
|
message(STATUS "Qt6Core_DIR = ${Qt6Core_DIR}")
|
||||||
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" ORACLE_QT_MODULES "${_ORACLE_NEEDED}")
|
message(STATUS "REQUIRED_QT_COMPONENTS = ${REQUIRED_QT_COMPONENTS}")
|
||||||
string(REGEX REPLACE "([^;]+)" "${COCKATRICE_QT_VERSION_NAME}::\\1" TEST_QT_MODULES "${_TEST_NEEDED}")
|
|
||||||
|
|
||||||
# Core-only export (useful for headless libs)
|
if(WITH_CLIENT)
|
||||||
set(QT_CORE_MODULE "${COCKATRICE_QT_VERSION_NAME}::Core")
|
message(STATUS "COCKATRICE_QT_MODULES = ${COCKATRICE_QT_MODULES}")
|
||||||
|
endif()
|
||||||
message(STATUS "Found Qt ${${COCKATRICE_QT_VERSION_NAME}_VERSION} at: ${${COCKATRICE_QT_VERSION_NAME}_DIR}")
|
if(WITH_ORACLE)
|
||||||
|
message(STATUS "ORACLE_QT_MODULES = ${ORACLE_QT_MODULES}")
|
||||||
|
endif()
|
||||||
|
if(WITH_SERVER)
|
||||||
|
message(STATUS "SERVATRICE_QT_MODULES = ${SERVATRICE_QT_MODULES}")
|
||||||
|
endif()
|
||||||
|
if(TEST)
|
||||||
|
message(STATUS "TEST_QT_MODULES = ${TEST_QT_MODULES}")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue