# CMakeLists.txt für Qt6-Migrationstests # Diese Tests validieren BUILD_RTI Guards, Qt6-Kompatibilität und RTI-Integration cmake_minimum_required(VERSION 3.16) # Qt6 finden (wird vom Hauptprojekt gesetzt, aber sicherheitshalber hier auch) if(QT6_GUI_AVAILABLE) # Check if targets already exist from parent CMakeLists.txt if(TARGET Qt6::Core AND TARGET Qt6::Gui AND TARGET Qt6::Widgets AND TARGET Qt6::Test) # Already found by parent - use existing targets elseif(NOT TARGET Qt6::Gui OR NOT TARGET Qt6::Widgets) # Manual fallback: create imported targets when standard find fails due to OpenGL if(NOT TARGET Qt6::Gui) add_library(Qt6::Gui SHARED IMPORTED) set_target_properties(Qt6::Gui PROPERTIES IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libQt6Gui.so.6" INTERFACE_INCLUDE_DIRECTORIES "/usr/include/x86_64-linux-gnu/qt6/QtGui;/usr/include/x86_64-linux-gnu/qt6" ) endif() if(NOT TARGET Qt6::Widgets) add_library(Qt6::Widgets SHARED IMPORTED) set_target_properties(Qt6::Widgets PROPERTIES IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libQt6Widgets.so.6" INTERFACE_INCLUDE_DIRECTORIES "/usr/include/x86_64-linux-gnu/qt6/QtWidgets;/usr/include/x86_64-linux-gnu/qt6" INTERFACE_LINK_LIBRARIES "Qt6::Gui;Qt6::Core" ) endif() else() # Try standard find_package first, fall back to manual targets if OpenGL missing find_package(Qt6 QUIET COMPONENTS Core Gui Widgets Test) endif() # Ensure Core and Test are found if(NOT TARGET Qt6::Core) find_package(Qt6 REQUIRED COMPONENTS Core Test) endif() else() if(NOT TARGET Qt6::Core OR NOT TARGET Qt6::Test) find_package(Qt6 REQUIRED COMPONENTS Core Test) endif() endif() # Nur bauen wenn BUILD_TESTING aktiviert ist if(BUILD_TESTING) # Try to find system-wide GTest first, fallback to FetchContent find_package(GTest QUIET) if(NOT TARGET GTest::gtest_main) include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.13.0 ) # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) endif() # Collect all test source files dynamically file(GLOB MIGRATION_TEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test_*.cpp") if(MIGRATION_TEST_SOURCES) set(EXISTING_SOURCES ${MIGRATION_TEST_SOURCES}) # Exclude tests for non-existent or commented-out components list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_lts_app_descriptor_editor\\.cpp") # Exclude Grantlee-related tests when BUILD_GRANTLEE is OFF if(NOT BUILD_GRANTLEE) list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_.*Grantlee.*\\.cpp") message(STATUS "Migration tests: Grantlee support disabled (BUILD_GRANTLEE=OFF), excluded Grantlee tests") endif() # Exclude CodeGen tests when CodeGen targets aren't available (MIGRATE_MODULE restricts scope) if(NOT TARGET codegen_base) list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_StructBuilder\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_SqlGenerator\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_XmlReader\\.cpp") message(STATUS "Migration tests: CodeGen targets not available, excluded CodeGen tests") endif() # Exclude LtsTimelineClassic tests when LtsTimelineClassic target isn't available if(NOT TARGET LtsTimelineClassic) list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_abstracttimelinemodel\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_ltsclassicdatamodel\\.cpp") list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_ltsclassicfilterproxymodel\\.cpp") message(STATUS "Migration tests: LtsTimelineClassic target not available, excluded LtsTimelineClassic tests") endif() if(NOT EXISTING_SOURCES) message(WARNING "No migration test sources found after filtering - skipping migration_tests target") return() endif() add_executable(migration_tests ${EXISTING_SOURCES}) # Enable Qt Meta-Object Compiler for tests with Q_OBJECT set_target_properties(migration_tests PROPERTIES AUTOMOC ON) target_compile_features(migration_tests PRIVATE cxx_std_23) target_include_directories(migration_tests PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/qt6-after/qt6-migrated-legatus ${CMAKE_SOURCE_DIR}/qt6-after/qt6-migrated-legatus/include ${CMAKE_SOURCE_DIR}/qt6-after/qt6-migrated-legatus/DDS ${CMAKE_BINARY_DIR}/Lts/Common ${CMAKE_BINARY_DIR}/Lts/Common/CodeGen ${CMAKE_BINARY_DIR}/Lts/Common/LtsTimeline ${CMAKE_BINARY_DIR}/Lts/Common/LtsTimelineClassic ) # Link against Qt6 components if(QT6_GUI_AVAILABLE) target_link_libraries(migration_tests PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Test GTest::gtest_main ) endif() # Link against LtsTimelineClassic only if it exists (may not exist with MIGRATE_MODULE) if(TARGET LtsTimelineClassic) target_link_libraries(migration_tests PRIVATE LtsTimelineClassic) add_dependencies(migration_tests LtsTimelineClassic) else() message(STATUS "LtsTimelineClassic target not available - skipping link (MIGRATE_MODULE may restrict scope)") endif() # Grantlee tests require BUILD_GRANTLEE=ON if(BUILD_GRANTLEE) target_link_libraries(migration_tests PRIVATE codegen_grantlee) target_include_directories(migration_tests PRIVATE ${CMAKE_SOURCE_DIR}/qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen ) message(STATUS "Migration tests: Grantlee support enabled") endif() # RTI libraries if BUILD_RTI is ON if(BUILD_RTI) find_package(RTI QUIET) if(RTI_FOUND) target_include_directories(migration_tests PRIVATE ${RTI_INCLUDE_DIRS}) target_link_libraries(migration_tests PRIVATE ${RTI_LIBRARIES}) target_compile_definitions(migration_tests PRIVATE BUILD_RTI=1) message(STATUS "RTI found: ${RTI_LIBRARIES}") else() message(STATUS "BUILD_RTI=ON but RTI not found - building tests without RTI") endif() endif() # Register with CTest include(GoogleTest) gtest_discover_tests(migration_tests) message(STATUS "Migration tests enabled: ${EXISTING_SOURCES}") else() message(WARNING "No migration test sources found in ${CMAKE_CURRENT_SOURCE_DIR}") endif() endif()