| cmake_minimum_required(VERSION 3.15) |
| project(MocInclude) |
| get_filename_component(CS_REAL ${CMAKE_CURRENT_SOURCE_DIR} REALPATH) |
| include("${CS_REAL}/../AutogenCoreTest.cmake") |
| |
| # Test moc include patterns |
| |
| set(COM_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Common") |
| |
| macro(addCopyCommand from to) |
| add_custom_command( |
| OUTPUT ${to} |
| COMMAND ${CMAKE_COMMAND} -E copy ${from} ${to} |
| DEPENDS ${from}) |
| endmacro() |
| |
| # Create an executable |
| function(makeExecutable TARGET_NAME) |
| # Utility variables |
| set(CB_DIR "${CMAKE_CURRENT_BINARY_DIR}") |
| |
| # Copy directory |
| file(REMOVE_RECURSE "${CB_DIR}/InIncludes") |
| file(COPY "${COM_DIR}/InIncludes.in" DESTINATION "${CB_DIR}") |
| file(RENAME "${CB_DIR}/InIncludes.in" "${CB_DIR}/InIncludes") |
| |
| # Generate .moc file from the header externally and |
| # enabled SKIP_AUTOMOC on the source file |
| qtx_wrap_cpp(ExternDotMOC ${COM_DIR}/ExternDot.hpp OPTIONS "-p" "./") |
| addCopyCommand(${ExternDotMOC} |
| ${CB_DIR}/ExternDot.moc) |
| set_property( |
| SOURCE ${COM_DIR}/ExternDot.cpp |
| PROPERTY SKIP_AUTOMOC ON) |
| |
| # Generate .moc file from the GENERATED header externally |
| # and enabled SKIP_AUTOMOC on the source file |
| addCopyCommand(${COM_DIR}/ExternDotGenerated.hpp.in |
| ${CB_DIR}/ExternDotGenerated.hpp) |
| addCopyCommand(${COM_DIR}/ExternDotGenerated.cpp.in |
| ${CB_DIR}/ExternDotGenerated.cpp) |
| qtx_wrap_cpp(ExternDotGeneratedMOC |
| ${CB_DIR}/ExternDotGenerated.hpp |
| OPTIONS "-p" "./") |
| addCopyCommand(${ExternDotGeneratedMOC} |
| ${CB_DIR}/ExternDotGenerated.moc) |
| set_property( |
| SOURCE ${CB_DIR}/ExternDotGenerated.cpp |
| PROPERTY SKIP_AUTOMOC ON) |
| |
| # Generate header moc file externally with a custom name |
| # and enabled SKIP_AUTOMOC on the header |
| qtx_wrap_cpp(MixedCustomMOC |
| ${COM_DIR}/MixedCustom.hpp |
| OPTIONS "-p" "./") |
| addCopyCommand(${MixedCustomMOC} |
| ${CB_DIR}/MixedCustom_extMoc.cpp) |
| set_property( |
| SOURCE ${COM_DIR}/MixedCustom.hpp |
| PROPERTY SKIP_AUTOMOC ON) |
| # Custom target to depend on |
| add_custom_target("${TARGET_NAME}_MixedCustom" |
| DEPENDS ${CB_DIR}/MixedCustom_extMoc.cpp |
| BYPRODUCTS ${CB_DIR}/moc_MixedCustom.cpp |
| COMMAND ${CMAKE_COMMAND} -E copy |
| ${COM_DIR}/moc_MixedCustom.cpp.in |
| ${CB_DIR}/moc_MixedCustom.cpp) |
| |
| add_executable(${TARGET_NAME} |
| # Test own "*.moc" and "moc_*.cpp" includes |
| ${COM_DIR}/None.cpp |
| ${COM_DIR}/OwnDot.cpp |
| ${COM_DIR}/OwnUnderscore.cpp |
| ${COM_DIR}/OwnDotUnderscore.cpp |
| |
| # Test "moc_*.cpp" includes of other files |
| ${COM_DIR}/OtherUnderscore.cpp |
| ${COM_DIR}/OtherUnderscoreExtra.cpp |
| ${COM_DIR}/OtherUnderscoreSub.cpp |
| ${COM_DIR}/OtherUnderscoreSubDir/SubExtra.cpp |
| |
| # Test relative ../../ path for moc includes |
| ${COM_DIR}/DualSub/Second/Second.cpp |
| ${COM_DIR}/DualSubMocked.cpp |
| |
| # Test externally generated moc files |
| ${COM_DIR}/ExternDot.cpp |
| ${CB_DIR}/ExternDot.moc |
| |
| # Test externally generated moc files for GENERATED source |
| ${CB_DIR}/ExternDotGenerated.cpp |
| ${CB_DIR}/ExternDotGenerated.moc |
| |
| # Test externally generated moc files and SKIP_AUTOMOC enabled header |
| ${COM_DIR}/MixedSkipped.cpp |
| ${COM_DIR}/MixedCustom.hpp |
| ${COM_DIR}/MixedCustom.cpp |
| |
| # Test sources in a subdirectory |
| ${CB_DIR}/InIncludes/SubOwnDot.cpp |
| ${COM_DIR}/InIncludesMoc.cpp |
| ) |
| add_dependencies(${TARGET_NAME} "${TARGET_NAME}_MixedCustom") |
| target_include_directories(${TARGET_NAME} PRIVATE "${COM_DIR}") |
| target_include_directories(${TARGET_NAME} PRIVATE "${CB_DIR}") |
| target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") |
| target_link_libraries(${TARGET_NAME} ${QT_LIBRARIES}) |
| set_target_properties(${TARGET_NAME} PROPERTIES AUTOMOC ON) |
| endfunction() |
| |
| add_subdirectory(Strict) |
| add_subdirectory(Relaxed) |