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