|
|
@@ -0,0 +1,112 @@
|
|
|
+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)
|