CMakeLists.txt 2.6 KB

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