UI: Fix UI file changes not being picked up by CMake

Due to how CMake and generated project files are structured, just using
AUTOUIC to pick up Qt `.ui` files will lead to a situation where
changing such a file doesn't trigger a regeneration of the associated
header files and thus a re-build of the target.

Upstream fix still requires `.ui` files to be added as target sources.

CMake issue: https://gitlab.kitware.com/cmake/cmake/-/issues/17959
This commit is contained in:
PatTheMav 2022-03-19 13:04:30 +01:00 committed by Jim
parent c8b2db9760
commit 6d91c3512b
5 changed files with 95 additions and 34 deletions

View File

@ -91,6 +91,36 @@ target_include_directories(obs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR})
target_sources(obs PRIVATE forms/obs.qrc)
target_sources(
obs
PRIVATE forms/AutoConfigFinishPage.ui
forms/AutoConfigStartPage.ui
forms/AutoConfigStartPage.ui
forms/AutoConfigStreamPage.ui
forms/AutoConfigTestPage.ui
forms/AutoConfigVideoPage.ui
forms/ColorSelect.ui
forms/OBSAbout.ui
forms/OBSBasic.ui
forms/OBSBasicFilters.ui
forms/OBSBasicInteraction.ui
forms/OBSBasicSettings.ui
forms/OBSBasicSourceSelect.ui
forms/OBSBasicTransform.ui
forms/OBSExtraBrowsers.ui
forms/OBSImporter.ui
forms/OBSLogReply.ui
forms/OBSMissingFiles.ui
forms/OBSRemux.ui
forms/OBSUpdate.ui
forms/OBSYoutubeActions.ui
forms/source-toolbar/browser-source-toolbar.ui
forms/source-toolbar/color-source-toolbar.ui
forms/source-toolbar/device-select-toolbar.ui
forms/source-toolbar/game-capture-toolbar.ui
forms/source-toolbar/image-source-toolbar.ui
forms/source-toolbar/media-controls.ui
forms/source-toolbar/text-source-toolbar.ui)
target_sources(
obs
@ -406,6 +436,17 @@ elseif(OS_POSIX)
endif()
endif()
get_target_property(_SOURCES obs SOURCES)
set(_UI ${_SOURCES})
list(FILTER _UI INCLUDE REGEX ".*\\.ui?")
source_group(
TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms"
PREFIX "UI Files"
FILES ${_UI})
unset(_SOURCES)
unset(_UI)
define_graphic_modules(obs)
setup_obs_app(obs)
setup_target_resources(obs obs-studio)

View File

@ -18,6 +18,8 @@ set_target_properties(
AUTORCC ON
AUTOUIC_SEARCH_PATHS "forms")
target_sources(aja-output-ui PRIVATE forms/output.ui)
target_sources(
aja-output-ui
PRIVATE AJAOutputUI.h
@ -82,4 +84,15 @@ endif()
set_target_properties(aja-output-ui PROPERTIES FOLDER "frontend" PREFIX "")
get_target_property(_SOURCES aja-output-ui SOURCES)
set(_UI ${_SOURCES})
list(FILTER _UI INCLUDE REGEX ".*\\.ui?")
source_group(
TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms"
PREFIX "UI Files"
FILES ${_UI})
unset(_SOURCES)
unset(_UI)
setup_plugin_target(aja-output-ui)

View File

@ -20,6 +20,8 @@ set_target_properties(
target_compile_features(decklink-captions PRIVATE cxx_std_17)
target_sources(decklink-captions PRIVATE forms/captions.ui)
target_sources(decklink-captions PRIVATE decklink-captions.cpp
decklink-captions.h)
@ -45,4 +47,15 @@ endif()
set_target_properties(decklink-captions PROPERTIES FOLDER "plugins/decklink"
PREFIX "")
get_target_property(_SOURCES decklink-captions SOURCES)
set(_UI ${_SOURCES})
list(FILTER _UI INCLUDE REGEX ".*\\.ui?")
source_group(
TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms"
PREFIX "UI Files"
FILES ${_UI})
unset(_SOURCES)
unset(_UI)
setup_plugin_target(decklink-captions)

View File

@ -4,40 +4,6 @@ if(NOT ENABLE_DECKLINK)
return()
endif()
if(NOT COMMAND find_qt)
macro(find_qt)
set(oneValueArgs VERSION)
set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC
COMPONENTS_LINUX)
cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}"
${ARGN})
if(OS_WINDOWS)
find_package(
Qt${FIND_QT_VERSION}
COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_WIN}
REQUIRED)
elseif(OS_MACOS)
find_package(
Qt${FIND_QT_VERSION}
COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_MAC}
REQUIRED)
else()
find_package(
Qt${FIND_QT_VERSION}
COMPONENTS ${FIND_QT_COMPONENTS} ${FIND_QT_COMPONENTS_LINUX}
REQUIRED)
endif()
foreach(_COMPONENT IN LISTS ${FIND_QT_COMPONENTS})
if(NOT TARGET Qt::${_COMPONENT} AND TARGET
Qt${FIND_QT_VERSION}::${_COMPONENT})
add_library(Qt::${_COMPONENT} ALIAS Qt${FIND_QT_VERSION}::${_COMPONENT})
endif()
endforeach()
endmacro()
endif()
add_library(decklink-output-ui MODULE)
add_library(OBS::decklink-output-ui ALIAS decklink-output-ui)
@ -53,6 +19,8 @@ set_target_properties(
AUTORCC ON
AUTOUIC_SEARCH_PATHS "forms")
target_sources(decklink-output-ui PRIVATE forms/output.ui)
target_sources(
decklink-output-ui
PRIVATE DecklinkOutputUI.cpp
@ -101,4 +69,15 @@ elseif(OS_POSIX)
Qt${QT_VERSION}::GuiPrivate)
endif()
get_target_property(_SOURCES decklink-output-ui SOURCES)
set(_UI ${_SOURCES})
list(FILTER _UI INCLUDE REGEX ".*\\.ui?")
source_group(
TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms"
PREFIX "UI Files"
FILES ${_UI})
unset(_SOURCES)
unset(_UI)
setup_plugin_target(decklink-output-ui)

View File

@ -15,6 +15,10 @@ set_target_properties(
AUTORCC ON
AUTOUIC_SEARCH_PATHS "forms")
target_sources(
frontend-tools PRIVATE forms/auto-scene-switcher.ui forms/captions.ui
forms/output-timer.ui forms/scripts.ui)
target_sources(
frontend-tools
PRIVATE frontend-tools.c
@ -103,4 +107,15 @@ elseif(OS_POSIX)
target_sources(frontend-tools PRIVATE auto-scene-switcher-nix.cpp)
endif()
get_target_property(_SOURCES frontend-tools SOURCES)
set(_UI ${_SOURCES})
list(FILTER _UI INCLUDE REGEX ".*\\.ui?")
source_group(
TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms"
PREFIX "UI Files"
FILES ${_UI})
unset(_SOURCES)
unset(_UI)
setup_plugin_target(frontend-tools)