cmake,UI: Refactor find_qt macro
If QT_VERSION is not defined, it gets define with the AUTO value. And its definition is moved to the helper file. find_qt now: - Check quietly for Qt5 and Qt6 - If QT_VERSION is set to AUTO. It checks firstly if Qt5 was found it will use it. If not it do the same for Qt6 - If QT_VERSION is set to 5 or 6, it checks if the choice was found and use it. And if not, it falls back to the other if found. - If neither Qt5 or Qt6 are found, a fatal error is emitted. - The macro saved the _QT_VERSION in the cache to replace QT_VERSION, so the process is not repeated each time that find_qt is used. - When Qt::Gui is in the Linux component list, Qt::GuiPrivate is added. So using the versioned one is no longer required.master
parent
64701a1cea
commit
9c85ff8673
|
@ -3,7 +3,6 @@
|
|||
"find_qt": {
|
||||
"flags": [],
|
||||
"kwargs": {
|
||||
"VERSION": "+",
|
||||
"COMPONENTS": "+",
|
||||
"COMPONENTS_WIN": "+",
|
||||
"COMPONENTS_MACOS": "+",
|
||||
|
|
|
@ -6,13 +6,6 @@ if(NOT ENABLE_UI)
|
|||
return()
|
||||
endif()
|
||||
|
||||
if(NOT QT_VERSION)
|
||||
set(QT_VERSION
|
||||
"5"
|
||||
CACHE STRING "OBS Qt version [5, 6]" FORCE)
|
||||
set_property(CACHE QT_VERSION PROPERTY STRINGS 5 6)
|
||||
endif()
|
||||
|
||||
project(obs)
|
||||
|
||||
# Legacy support
|
||||
|
@ -78,16 +71,7 @@ find_package(CURL REQUIRED)
|
|||
add_subdirectory(frontend-plugins)
|
||||
add_executable(obs)
|
||||
|
||||
set(UI_COMPONENTS_WIN "")
|
||||
if(QT_VERSION EQUAL 5)
|
||||
set(UI_COMPONENTS_WIN "WinExtras")
|
||||
endif()
|
||||
|
||||
find_qt(
|
||||
VERSION ${QT_VERSION}
|
||||
COMPONENTS Widgets Network Svg Xml
|
||||
COMPONENTS_WIN ${UI_COMPONENTS_WIN}
|
||||
COMPONENTS_LINUX Gui)
|
||||
find_qt(COMPONENTS Widgets Network Svg Xml COMPONENTS_LINUX Gui)
|
||||
|
||||
target_link_libraries(obs PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network)
|
||||
|
||||
|
@ -352,12 +336,13 @@ if(OS_WINDOWS)
|
|||
win-update/win-update-helpers.hpp
|
||||
${CMAKE_BINARY_DIR}/obs.rc)
|
||||
|
||||
if(QT_VERSION EQUAL 5)
|
||||
target_link_libraries(obs PRIVATE crypt32 OBS::blake2 Qt::WinExtras)
|
||||
else()
|
||||
target_link_libraries(obs PRIVATE crypt32 OBS::blake2)
|
||||
if(_QT_VERSION EQUAL 5)
|
||||
find_qt(COMPONENTS WinExtras)
|
||||
target_link_libraries(obs PRIVATE Qt::WinExtras)
|
||||
endif()
|
||||
|
||||
target_link_libraries(obs PRIVATE crypt32 OBS::blake2)
|
||||
|
||||
target_compile_features(obs PRIVATE cxx_std_17)
|
||||
|
||||
target_compile_definitions(
|
||||
|
@ -441,7 +426,7 @@ elseif(OS_MACOS)
|
|||
|
||||
elseif(OS_POSIX)
|
||||
target_sources(obs PRIVATE platform-x11.cpp)
|
||||
target_link_libraries(obs PRIVATE Qt${QT_VERSION}::GuiPrivate)
|
||||
target_link_libraries(obs PRIVATE Qt::GuiPrivate)
|
||||
|
||||
if(TARGET obspython)
|
||||
find_package(Python REQUIRED COMPONENTS Interpreter Development)
|
||||
|
|
|
@ -9,7 +9,7 @@ find_package(LibAJANTV2 REQUIRED)
|
|||
add_library(aja-output-ui MODULE)
|
||||
add_library(OBS::aja-output-ui ALIAS aja-output-ui)
|
||||
|
||||
find_qt(VERSION ${QT_VERSION} COMPONENTS Widgets)
|
||||
find_qt(COMPONENTS Widgets)
|
||||
|
||||
set_target_properties(
|
||||
aja-output-ui
|
||||
|
@ -78,8 +78,7 @@ elseif(OS_WINDOWS)
|
|||
target_link_options(aja-output-ui PRIVATE "LINKER:/IGNORE:4099")
|
||||
else()
|
||||
find_package(X11 REQUIRED)
|
||||
target_link_libraries(aja-output-ui PRIVATE X11::X11
|
||||
Qt${QT_VERSION}::GuiPrivate)
|
||||
target_link_libraries(aja-output-ui PRIVATE X11::X11 Qt::GuiPrivate)
|
||||
endif()
|
||||
|
||||
set_target_properties(aja-output-ui PROPERTIES FOLDER "frontend" PREFIX "")
|
||||
|
|
|
@ -7,7 +7,7 @@ endif()
|
|||
add_library(decklink-captions MODULE)
|
||||
add_library(OBS::decklink-captions ALIAS decklink-captions)
|
||||
|
||||
find_qt(VERSION ${QT_VERSION} COMPONENTS Widgets)
|
||||
find_qt(COMPONENTS Widgets)
|
||||
|
||||
target_link_libraries(decklink-captions PRIVATE Qt::Widgets)
|
||||
|
||||
|
|
|
@ -7,10 +7,7 @@ endif()
|
|||
add_library(decklink-output-ui MODULE)
|
||||
add_library(OBS::decklink-output-ui ALIAS decklink-output-ui)
|
||||
|
||||
find_qt(
|
||||
VERSION ${QT_VERSION}
|
||||
COMPONENTS Widgets
|
||||
COMPONENTS_LINUX Gui)
|
||||
find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui)
|
||||
|
||||
set_target_properties(
|
||||
decklink-output-ui
|
||||
|
@ -63,8 +60,7 @@ elseif(OS_MACOS)
|
|||
|
||||
elseif(OS_POSIX)
|
||||
find_package(X11 REQUIRED)
|
||||
target_link_libraries(decklink-output-ui PRIVATE X11::X11
|
||||
Qt${QT_VERSION}::GuiPrivate)
|
||||
target_link_libraries(decklink-output-ui PRIVATE X11::X11 Qt::GuiPrivate)
|
||||
endif()
|
||||
|
||||
get_target_property(_SOURCES decklink-output-ui SOURCES)
|
||||
|
|
|
@ -3,10 +3,7 @@ project(frontend-tools)
|
|||
add_library(frontend-tools MODULE)
|
||||
add_library(OBS::frontend-tools ALIAS frontend-tools)
|
||||
|
||||
find_qt(
|
||||
VERSION ${QT_VERSION}
|
||||
COMPONENTS Widgets
|
||||
COMPONENTS_LINUX Gui)
|
||||
find_qt(COMPONENTS Widgets COMPONENTS_LINUX Gui)
|
||||
|
||||
set_target_properties(
|
||||
frontend-tools
|
||||
|
@ -49,7 +46,7 @@ target_link_libraries(frontend-tools PRIVATE OBS::frontend-api OBS::libobs
|
|||
Qt::Widgets)
|
||||
|
||||
if(OS_POSIX AND NOT OS_MACOS)
|
||||
target_link_libraries(frontend-tools PRIVATE Qt${QT_VERSION}::GuiPrivate)
|
||||
target_link_libraries(frontend-tools PRIVATE Qt::GuiPrivate)
|
||||
endif()
|
||||
|
||||
if(ENABLE_SCRIPTING AND TARGET OBS::scripting)
|
||||
|
|
|
@ -179,7 +179,7 @@ file(GLOB RNNOISE_BIN_FILES
|
|||
"${RNNOISE_INCLUDE_DIR}/../bin${_bin_suffix}/rnnoise*.dll"
|
||||
"${RNNOISE_INCLUDE_DIR}/../bin/rnnoise*.dll")
|
||||
|
||||
set(QtCore_DIR "${Qt${QT_VERSION}Core_DIR}")
|
||||
set(QtCore_DIR "${Qt${_QT_VERSION}Core_DIR}")
|
||||
cmake_path(SET QtCore_DIR_NORM NORMALIZE "${QtCore_DIR}/../../..")
|
||||
set(QtCore_BIN_DIR "${QtCore_DIR_NORM}bin")
|
||||
set(QtCore_PLUGIN_DIR "${QtCore_DIR_NORM}plugins")
|
||||
|
@ -189,13 +189,13 @@ obs_status(STATUS "QtCore_PLUGIN_DIR: ${QtCore_PLUGIN_DIR}")
|
|||
file(
|
||||
GLOB
|
||||
QT_DEBUG_BIN_FILES
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Cored.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Guid.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Widgetsd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}WinExtrasd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Svgd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Xmld.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Networkd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Cored.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Guid.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Widgetsd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}WinExtrasd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Svgd.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Xmld.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Networkd.dll"
|
||||
"${QtCore_BIN_DIR}/libGLESv2d.dll"
|
||||
"${QtCore_BIN_DIR}/libEGLd.dll")
|
||||
file(GLOB QT_DEBUG_PLAT_BIN_FILES
|
||||
|
@ -214,13 +214,13 @@ file(
|
|||
file(
|
||||
GLOB
|
||||
QT_BIN_FILES
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Core.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Gui.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Widgets.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}WinExtras.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Svg.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Xml.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${QT_VERSION}Network.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Core.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Gui.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Widgets.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}WinExtras.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Svg.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Xml.dll"
|
||||
"${QtCore_BIN_DIR}/Qt${_QT_VERSION}Network.dll"
|
||||
"${QtCore_BIN_DIR}/libGLESv2.dll"
|
||||
"${QtCore_BIN_DIR}/libEGL.dll")
|
||||
file(GLOB QT_PLAT_BIN_FILES "${QtCore_PLUGIN_DIR}/platforms/qwindows.dll")
|
||||
|
|
|
@ -337,38 +337,98 @@ function(define_graphic_modules target)
|
|||
endforeach()
|
||||
endfunction()
|
||||
|
||||
if(NOT QT_VERSION)
|
||||
set(QT_VERSION
|
||||
AUTO
|
||||
CACHE STRING "OBS Qt version [AUTO, 5, 6]" FORCE)
|
||||
set_property(CACHE QT_VERSION PROPERTY STRINGS AUTO 5 6)
|
||||
endif()
|
||||
|
||||
macro(find_qt)
|
||||
set(oneValueArgs VERSION)
|
||||
set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC COMPONENTS_LINUX)
|
||||
cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}"
|
||||
${ARGN})
|
||||
set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
|
||||
find_package(
|
||||
Qt5
|
||||
COMPONENTS Core
|
||||
QUIET)
|
||||
find_package(
|
||||
Qt6
|
||||
COMPONENTS Core
|
||||
QUIET)
|
||||
|
||||
if(NOT _QT_VERSION AND QT_VERSION STREQUAL AUTO)
|
||||
if(TARGET Qt5::Core)
|
||||
set(_QT_VERSION
|
||||
5
|
||||
CACHE INTERNAL "")
|
||||
elseif(TARGET Qt6::Core)
|
||||
set(_QT_VERSION
|
||||
6
|
||||
CACHE INTERNAL "")
|
||||
endif()
|
||||
elseif(NOT _QT_VERSION)
|
||||
if(TARGET Qt${QT_VERSION}::Core)
|
||||
set(_QT_VERSION
|
||||
${QT_VERSION}
|
||||
CACHE INTERNAL "")
|
||||
else()
|
||||
if(QT_VERSION EQUAL 6)
|
||||
set(FALLBACK_QT_VERSION 5)
|
||||
else()
|
||||
set(FALLBACK_QT_VERSION 6)
|
||||
endif()
|
||||
message(
|
||||
WARNING
|
||||
"Qt${QT_VERSION} was not found, falling back to Qt${FALLBACK_QT_VERSION}"
|
||||
)
|
||||
|
||||
if(TARGET Qt${FALLBACK_QT_VERSION}::Core)
|
||||
set(_QT_VERSION
|
||||
${FALLBACK_QT_VERSION}
|
||||
CACHE INTERNAL "")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(QT_NO_CREATE_VERSIONLESS_TARGETS OFF)
|
||||
|
||||
if(NOT _QT_VERSION)
|
||||
message(FATAL_ERROR "Neither Qt5 or Qt6 were found")
|
||||
endif()
|
||||
|
||||
if(OS_WINDOWS)
|
||||
find_package(
|
||||
Qt${FIND_QT_VERSION}
|
||||
Qt${_QT_VERSION}
|
||||
COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_WIN}
|
||||
REQUIRED)
|
||||
elseif(OS_MACOS)
|
||||
find_package(
|
||||
Qt${FIND_QT_VERSION}
|
||||
Qt${_QT_VERSION}
|
||||
COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_MAC}
|
||||
REQUIRED)
|
||||
else()
|
||||
find_package(
|
||||
Qt${FIND_QT_VERSION}
|
||||
Qt${_QT_VERSION}
|
||||
COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_LINUX}
|
||||
REQUIRED)
|
||||
endif()
|
||||
|
||||
list(APPEND FIND_QT_COMPONENTS "Core")
|
||||
|
||||
if("Gui" IN_LIST FIND_QT_COMPONENTS_LINUX)
|
||||
list(APPEND FIND_QT_COMPONENTS_LINUX "GuiPrivate")
|
||||
endif()
|
||||
|
||||
foreach(_COMPONENT IN LISTS FIND_QT_COMPONENTS FIND_QT_COMPONENTS_WIN
|
||||
FIND_QT_COMPONENTS_MAC FIND_QT_COMPONENTS_LINUX)
|
||||
if(NOT TARGET Qt::${_COMPONENT} AND TARGET
|
||||
Qt${FIND_QT_VERSION}::${_COMPONENT})
|
||||
if(NOT TARGET Qt::${_COMPONENT} AND TARGET Qt${_QT_VERSION}::${_COMPONENT})
|
||||
|
||||
add_library(Qt::${_COMPONENT} INTERFACE IMPORTED)
|
||||
set_target_properties(
|
||||
Qt::${_COMPONENT} PROPERTIES INTERFACE_LINK_LIBRARIES
|
||||
"Qt${FIND_QT_VERSION}::${_COMPONENT}")
|
||||
"Qt${_QT_VERSION}::${_COMPONENT}")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
|
Loading…
Reference in New Issue