CMakeLists.txt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. cmake_minimum_required(VERSION 3.16)
  2. project(MocIncludeSymlink)
  3. get_filename_component(AUTOGEN_CORE_TEST_CMAKE "../AutogenCoreTest.cmake" ABSOLUTE)
  4. include("${AUTOGEN_CORE_TEST_CMAKE}")
  5. #
  6. # Tests if MocInclude can be build when
  7. # - The source directory is a symbolic link
  8. # - The build directory is a symbolic link
  9. #
  10. # -- Utility variables
  11. set(CS_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
  12. set(CB_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  13. # Absolute MocInclude path
  14. get_filename_component(MocIncludePath "../MocInclude" ABSOLUTE)
  15. message("MocIncludePath: ${MocIncludePath}")
  16. # Use nested subdirectories to ensure relatives paths are correct as well
  17. set(BUILD_DIR_NORMAL "${CB_DIR}/Build/Normal")
  18. set(BUILD_DIR_LINKED "${CB_DIR}/Build/Linked")
  19. set(SL_SOURCE_DIR "${CB_DIR}/SL_Source")
  20. set(SL_BUILD_DIR "${CB_DIR}/SL_Build")
  21. # -- Utility macros
  22. function(makeSymLink origin link)
  23. message("Creating symbolic link\n Link: ${link}\n To: ${origin}")
  24. file(CREATE_LINK ${origin} ${link} RESULT res SYMBOLIC)
  25. if(NOT (${res} STREQUAL "0"))
  26. message("Symlink creation failed.\n Link: ${link}\n To: ${origin}\n Result: ${res}")
  27. endif()
  28. endfunction()
  29. # -- Make source directory symlink
  30. makeSymLink(${MocIncludePath} ${SL_SOURCE_DIR} linkResult)
  31. if(NOT EXISTS ${SL_SOURCE_DIR})
  32. message("Directory symlink can't be created. Skipping test.")
  33. return()
  34. endif()
  35. # -- Make normal build directory
  36. file(REMOVE_RECURSE ${BUILD_DIR_NORMAL})
  37. file(MAKE_DIRECTORY ${BUILD_DIR_NORMAL})
  38. # -- Make linked build directory and symlink
  39. file(REMOVE_RECURSE ${BUILD_DIR_LINKED})
  40. file(MAKE_DIRECTORY ${BUILD_DIR_LINKED})
  41. makeSymLink(${BUILD_DIR_LINKED} ${SL_BUILD_DIR} linkResult)
  42. if(NOT EXISTS ${SL_BUILD_DIR})
  43. message("Directory symlink can't be created. Skipping test.")
  44. return()
  45. endif()
  46. # -- Building
  47. macro(buildMocInclude sourceDir binaryDir)
  48. message("Building MocInclude\n - source dir: ${sourceDir}\n - binary dir: ${binaryDir}\n")
  49. try_compile(result
  50. "${binaryDir}"
  51. "${sourceDir}"
  52. MocInclude
  53. CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
  54. "-DCMAKE_AUTOMOC_PATH_PREFIX=ON"
  55. "-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
  56. "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
  57. "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
  58. "-DAUTOGEN_CORE_TEST_CMAKE:STRING=${AUTOGEN_CORE_TEST_CMAKE}"
  59. OUTPUT_VARIABLE output
  60. )
  61. if (result)
  62. message(STATUS "--- Build success. ---")
  63. else()
  64. message(STATUS "\n### Building MocInclude failed. ###\n\n--- Output ---\n${output}")
  65. message(FATAL_ERROR "--- Building MocInclude failed. End of output. ---")
  66. endif()
  67. endmacro()
  68. message("\nTry building with\n - symbolic link source dir\n - non symbolic build dir\n")
  69. buildMocInclude(${SL_SOURCE_DIR} ${BUILD_DIR_NORMAL})
  70. message("\nTry building with\n - symbolic link source dir\n - symbolic link build dir\n")
  71. buildMocInclude(${SL_SOURCE_DIR} ${SL_BUILD_DIR})