| include(RunCMake) |
| |
| # This function assumes that ``${RunCMake_BINARY_DIR}/${name}/source`` and |
| # ``${RunCMake_BINARY_DIR}/${name}/binary`` are set up properly prior to |
| # calling it. |
| function (run_symlink_test name) |
| set(RunCMake_TEST_NO_CLEAN TRUE) |
| configure_file( |
| "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" |
| "${RunCMake_BINARY_DIR}/${name}/source/CMakeLists.txt" |
| COPYONLY) |
| set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}/source") |
| set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${name}/binary") |
| # Emulate a shell using this directory. |
| set(ENV{PWD} "${RunCMake_TEST_BINARY_DIR}") |
| set(RunCMake_TEST_OPTIONS |
| "-Dinclude_dir:PATH=${CMAKE_CURRENT_LIST_DIR}") |
| run_cmake("${name}_symlinks") |
| endfunction () |
| |
| # Create the following structure: |
| # |
| # .../common_real/source |
| # .../common_real/binary |
| # .../common -> common_real |
| # |
| # In this case, CMake should act as if .../common *is* .../common_real for all |
| # computations except ``REALPATH``. This supports the case where a system has |
| # a stable *symlink*, but not a stable target for that symlink. |
| file(REMOVE_RECURSE "${RunCMake_BINARY_DIR}/common_real") |
| file(REMOVE "${RunCMake_BINARY_DIR}/common") |
| file(MAKE_DIRECTORY "${RunCMake_BINARY_DIR}/common_real/source") |
| file(CREATE_LINK "common_real" "${RunCMake_BINARY_DIR}/common" SYMBOLIC) |
| run_symlink_test(common) |