| cmake_minimum_required(VERSION 3.15) |
| project(MocIncludeSymlink) |
| include("../AutogenCoreTest.cmake") |
| |
| # |
| # Tests if MocInclude can be build when |
| # - The source directory is a symbolic link |
| # - The build directory is a symbolic link |
| # |
| |
| # -- Utility variables |
| set(CS_DIR "${CMAKE_CURRENT_SOURCE_DIR}") |
| set(CB_DIR "${CMAKE_CURRENT_BINARY_DIR}") |
| |
| # Absolute MocInclude path |
| get_filename_component(MocIncludePath "../MocInclude" ABSOLUTE) |
| message("MocIncludePath: ${MocIncludePath}") |
| |
| # Use nested subdirectories to ensure relatives paths are correct as well |
| set(BUILD_DIR_NORMAL "${CB_DIR}/Build/Normal") |
| set(BUILD_DIR_LINKED "${CB_DIR}/Build/Linked") |
| |
| set(SL_SOURCE_DIR "${CB_DIR}/SL_Source") |
| set(SL_BUILD_DIR "${CB_DIR}/SL_Build") |
| |
| # -- Utility macros |
| function(makeSymLink origin link) |
| message("Creating symbolic link\n Link: ${link}\n To: ${origin}") |
| file(CREATE_LINK ${origin} ${link} RESULT res SYMBOLIC) |
| if(NOT (${res} STREQUAL "0")) |
| message("Symlink creation failed.\n Link: ${link}\n To: ${origin}\n Result: ${res}") |
| endif() |
| endfunction() |
| |
| # -- Make source directory symlink |
| makeSymLink(${MocIncludePath} ${SL_SOURCE_DIR} linkResult) |
| if(NOT EXISTS ${SL_SOURCE_DIR}) |
| message("Directory symlink can't be created. Skipping test.") |
| return() |
| endif() |
| |
| # -- Make normal build directory |
| file(REMOVE_RECURSE ${BUILD_DIR_NORMAL}) |
| file(MAKE_DIRECTORY ${BUILD_DIR_NORMAL}) |
| |
| # -- Make linked build directory and symlink |
| file(REMOVE_RECURSE ${BUILD_DIR_LINKED}) |
| file(MAKE_DIRECTORY ${BUILD_DIR_LINKED}) |
| makeSymLink(${BUILD_DIR_LINKED} ${SL_BUILD_DIR} linkResult) |
| if(NOT EXISTS ${SL_BUILD_DIR}) |
| message("Directory symlink can't be created. Skipping test.") |
| return() |
| endif() |
| |
| |
| # -- Building |
| macro(buildMocInclude sourceDir binaryDir) |
| message("Building MocInclude\n - source dir: ${sourceDir}\n - binary dir: ${binaryDir}\n") |
| try_compile(result |
| "${binaryDir}" |
| "${sourceDir}" |
| MocInclude |
| CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}" |
| "-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}" |
| "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}" |
| OUTPUT_VARIABLE output |
| ) |
| if (result) |
| message(STATUS "--- Build success. ---") |
| else() |
| message(STATUS "\n### Building MocInclude failed. ###\n\n--- Output ---\n${output}") |
| message(FATAL_ERROR "--- Building MocInclude failed. End of output. ---") |
| endif() |
| endmacro() |
| |
| message("\nTry building with\n - symbolic link source dir\n - non symbolic build dir\n") |
| buildMocInclude(${SL_SOURCE_DIR} ${BUILD_DIR_NORMAL}) |
| |
| message("\nTry building with\n - symbolic link source dir\n - symbolic link build dir\n") |
| buildMocInclude(${SL_SOURCE_DIR} ${SL_BUILD_DIR}) |