瀏覽代碼

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
PatTheMav 3 年之前
父節點
當前提交
6d91c3512b

+ 41 - 0
UI/CMakeLists.txt

@@ -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)

+ 13 - 0
UI/frontend-plugins/aja-output-ui/CMakeLists.txt

@@ -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)

+ 13 - 0
UI/frontend-plugins/decklink-captions/CMakeLists.txt

@@ -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)

+ 13 - 34
UI/frontend-plugins/decklink-output-ui/CMakeLists.txt

@@ -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)

+ 15 - 0
UI/frontend-plugins/frontend-tools/CMakeLists.txt

@@ -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)