Browse Source

Merge topic 'tests-in-symlink-tree'

d9f1431f92 ci: Add jobs that run in symlink trees
879d12a29d ci: Always build Ninja with Unix Makefiles generator
8340313916 ci: Factor out debian12_ninja configure script
25d7843955 ci: Factor out build directory for finding artifacts
a7534c31e6 Tests: Update tests to run in multi-config generators
59b0ae6b24 Tests: Update tests to run in symlinked tree

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !8797
Brad King 2 years ago
parent
commit
81cdf34383

+ 4 - 0
.gitignore

@@ -3,6 +3,10 @@
 # Common build directories
 /build*/
 
+# CI jobs that run in symlinked trees produce these artifacts.
+/real_work/
+/work
+
 # MacOS Finder files.
 .DS_Store
 

+ 79 - 0
.gitlab-ci.yml

@@ -18,6 +18,10 @@ stages:
     - test-ext
     - upload
 
+variables:
+    # Some jobs that place their artifacts in a different directory will override this.
+    CMAKE_CI_BUILD_DIR: build
+
 ################################################################################
 # Job declarations
 #
@@ -195,6 +199,18 @@ t:debian12-makefiles-clang:
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
+t:debian12-ninja-multi-symlinked:
+    extends:
+        - .debian12_ninja_multi_symlinked
+        - .cmake_test_linux_release
+        - .linux_x86_64_tags
+        - .cmake_junit_artifacts
+        - .run_dependent
+        - .needs_centos7_x86_64
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+        CMAKE_CI_JOB_NIGHTLY_NINJA: "true"
+
 t:debian12-hip-radeon:
     extends:
         - .debian12_hip_radeon
@@ -395,6 +411,16 @@ b:fedora38-ninja:
     variables:
         CMAKE_CI_JOB_CONTINUOUS: "true"
 
+b:fedora38-makefiles-symlinked:
+    extends:
+        - .fedora38_makefiles_symlinked
+        - .cmake_build_linux
+        - .cmake_build_artifacts
+        - .linux_x86_64_tags
+        - .run_manually
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+
 b:debian12-makefiles-inplace:
     extends:
         - .debian12_makefiles_inplace
@@ -445,6 +471,20 @@ t:fedora38-ninja:
     variables:
         CMAKE_CI_JOB_CONTINUOUS: "true"
 
+t:fedora38-makefiles-symlinked:
+    extends:
+        - .fedora38_makefiles_symlinked
+        - .cmake_test_linux
+        - .linux_x86_64_tags_x11
+        - .cmake_test_artifacts
+        - .run_dependent
+    dependencies:
+        - b:fedora38-makefiles-symlinked
+    needs:
+        - b:fedora38-makefiles-symlinked
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+
 t:fedora38-ninja-multi:
     extends:
         - .fedora38_ninja_multi
@@ -867,6 +907,16 @@ b:macos-arm64-ninja:
     variables:
         CMAKE_CI_JOB_CONTINUOUS: "true"
 
+b:macos-arm64-ninja-symlinked:
+    extends:
+        - .macos_arm64_ninja_symlinked
+        - .cmake_build_macos
+        - .cmake_build_artifacts
+        - .macos_arm64_tags
+        - .run_manually
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+
 b:macos-arm64-pch:
     extends:
         - .macos_arm64_pch
@@ -905,6 +955,21 @@ t:macos-arm64-ninja:
         CMAKE_CI_JOB_CONTINUOUS: "true"
         CMAKE_CI_JOB_NIGHTLY_NINJA: "true"
 
+t:macos-arm64-ninja-symlinked:
+    extends:
+        - .macos_arm64_ninja_symlinked
+        - .cmake_test_macos
+        - .cmake_test_artifacts
+        - .macos_arm64_tags
+        - .run_dependent
+    dependencies:
+        - b:macos-arm64-ninja-symlinked
+    needs:
+        - b:macos-arm64-ninja-symlinked
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+        CMAKE_CI_JOB_NIGHTLY_NINJA: "true"
+
 b:macos-x86_64-makefiles:
     extends:
         - .macos_x86_64_makefiles
@@ -964,6 +1029,20 @@ t:macos-arm64-xcode:
     needs:
         - t:macos-arm64-ninja
 
+t:macos-arm64-xcode-symlinked:
+    extends:
+        - .macos_arm64_xcode_symlinked
+        - .cmake_test_macos_external
+        - .macos_arm64_tags_ext
+        - .cmake_junit_artifacts
+        - .run_dependent
+    dependencies:
+        - t:macos-arm64-ninja
+    needs:
+        - t:macos-arm64-ninja
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+
 t:macos-x86_64-ninja-ub:
     extends:
         - .macos_x86_64_ninja_ub

+ 61 - 61
.gitlab/artifacts.yml

@@ -5,63 +5,63 @@
         expire_in: 1d
         paths:
             # Test specifications.
-            - build/**/CTestTestfile.cmake
+            - ${CMAKE_CI_BUILD_DIR}/**/CTestTestfile.cmake
 
             # Allow CMake to find CMAKE_ROOT.
-            - build/CMakeFiles/CMakeSourceDir.txt
+            - ${CMAKE_CI_BUILD_DIR}/CMakeFiles/CMakeSourceDir.txt
 
             # Take the install tree.
-            - build/install/
+            - ${CMAKE_CI_BUILD_DIR}/install/
 
             # We need the main binaries.
-            - build/bin/
+            - ${CMAKE_CI_BUILD_DIR}/bin/
             # The cache is needed for the installation test.
-            - build/CMakeCache.txt
+            - ${CMAKE_CI_BUILD_DIR}/CMakeCache.txt
             # Test binaries. Eventually these might be better under
             # `Source/Tests` or the like.
-            - build/Tests/EnforceConfig.cmake
-            - build/Tests/CMakeBuildTest.cmake
-            - build/Tests/CMakeBuildDoubleProjectTest.cmake
-            - build/Tests/CMake*/runcompilecommands
-            - build/Tests/CMake*/runcompilecommands.exe
-            - build/Tests/CMake*/test*
-            - build/Tests/CMake*/PseudoMemcheck/valgrind
-            - build/Tests/CMake*/PseudoMemcheck/purify
-            - build/Tests/CMake*/PseudoMemcheck/memcheck_fail
-            - build/Tests/CMake*/PseudoMemcheck/BC
-            - build/Tests/CMake*/PseudoMemcheck/cuda-memcheck
-            - build/Tests/CMake*/PseudoMemcheck/valgrind.exe
-            - build/Tests/CMake*/PseudoMemcheck/purify.exe
-            - build/Tests/CMake*/PseudoMemcheck/memcheck_fail.exe
-            - build/Tests/CMake*/PseudoMemcheck/BC.exe
-            - build/Tests/CMake*/PseudoMemcheck/cuda-memcheck.exe
-            - build/Tests/CMake*/PseudoMemcheck/NoLog
-            - build/Tests/CMake*Lib/*LibTests
-            - build/Tests/CMake*Lib/*LibTests.exe
-            - build/Source/kwsys/cmsysTest*
-            - build/Source/kwsys/testConsoleBufChild.exe
-            - build/Utilities/cmcurl/curltest
-            - build/Utilities/cmcurl/curltest.exe
-            - build/Utilities/KWIML/test/kwiml_test
-            - build/Utilities/KWIML/test/kwiml_test.exe
-            - build/Source/kwsys/*cmsysTestDynload.*
-            - build/Source/kwsys/dynloaddir/cmsysTestDynloadImpl.dll
-            - build/Source/kwsys/dynloaddir/cmsysTestDynloadUse.dll
+            - ${CMAKE_CI_BUILD_DIR}/Tests/EnforceConfig.cmake
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMakeBuildTest.cmake
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMakeBuildDoubleProjectTest.cmake
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/runcompilecommands
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/runcompilecommands.exe
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/test*
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/valgrind
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/purify
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/memcheck_fail
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/BC
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/cuda-memcheck
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/valgrind.exe
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/purify.exe
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/memcheck_fail.exe
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/BC.exe
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/cuda-memcheck.exe
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*/PseudoMemcheck/NoLog
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*Lib/*LibTests
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMake*Lib/*LibTests.exe
+            - ${CMAKE_CI_BUILD_DIR}/Source/kwsys/cmsysTest*
+            - ${CMAKE_CI_BUILD_DIR}/Source/kwsys/testConsoleBufChild.exe
+            - ${CMAKE_CI_BUILD_DIR}/Utilities/cmcurl/curltest
+            - ${CMAKE_CI_BUILD_DIR}/Utilities/cmcurl/curltest.exe
+            - ${CMAKE_CI_BUILD_DIR}/Utilities/KWIML/test/kwiml_test
+            - ${CMAKE_CI_BUILD_DIR}/Utilities/KWIML/test/kwiml_test.exe
+            - ${CMAKE_CI_BUILD_DIR}/Source/kwsys/*cmsysTestDynload.*
+            - ${CMAKE_CI_BUILD_DIR}/Source/kwsys/dynloaddir/cmsysTestDynloadImpl.dll
+            - ${CMAKE_CI_BUILD_DIR}/Source/kwsys/dynloaddir/cmsysTestDynloadUse.dll
 
             # Test directories.
-            - build/Tests/CTest*
-            - build/Tests/Find*
-            - build/Tests/Qt*
-            - build/Tests/RunCMake/
-            - build/Tests/CMakeOnly/
-            - build/Tests/CMakeTests/
-            - build/Tests/CMakeGUI/
-            - build/Tests/FortranC/
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CTest*
+            - ${CMAKE_CI_BUILD_DIR}/Tests/Find*
+            - ${CMAKE_CI_BUILD_DIR}/Tests/Qt*
+            - ${CMAKE_CI_BUILD_DIR}/Tests/RunCMake/
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMakeOnly/
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMakeTests/
+            - ${CMAKE_CI_BUILD_DIR}/Tests/CMakeGUI/
+            - ${CMAKE_CI_BUILD_DIR}/Tests/FortranC/
 
             # CTest/CDash information.
-            - build/Testing/
-            - build/DartConfiguation.tcl
-            - build/CTestCustom.cmake
+            - ${CMAKE_CI_BUILD_DIR}/Testing/
+            - ${CMAKE_CI_BUILD_DIR}/DartConfiguation.tcl
+            - ${CMAKE_CI_BUILD_DIR}/CTestCustom.cmake
 
 .cmake_release_artifacts:
     artifacts:
@@ -71,17 +71,17 @@
         when: always
         paths:
             # Any packages made.
-            - build/cmake-*-linux-x86_64.*
-            - build/cmake-*-linux-aarch64.*
-            - build/cmake-*-macos*-universal.*
-            - build/cmake-*-windows-x86_64.*
-            - build/cmake-*-windows-i386.*
-            - build/cmake-*-windows-arm64.*
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*-linux-x86_64.*
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*-linux-aarch64.*
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*-macos*-universal.*
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*-windows-x86_64.*
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*-windows-i386.*
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*-windows-arm64.*
             # Any source packages made.
-            - build/cmake-*.tar.gz
-            - build/cmake-*.zip
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*.tar.gz
+            - ${CMAKE_CI_BUILD_DIR}/cmake-*.zip
             # Any unsigned packages made.
-            - build/unsigned/cmake-*
+            - ${CMAKE_CI_BUILD_DIR}/unsigned/cmake-*
 
 .cmake_junit_artifacts:
     artifacts:
@@ -89,7 +89,7 @@
         when: always
         reports:
             junit:
-                - build/junit.xml
+                - ${CMAKE_CI_BUILD_DIR}/junit.xml
 
 .cmake_sphinx_artifacts:
     artifacts:
@@ -97,8 +97,8 @@
         when: always
         paths:
             # Take the sphinx logs.
-            - build/build-*.log
-            - build/linkcheck/output.*
+            - ${CMAKE_CI_BUILD_DIR}/build-*.log
+            - ${CMAKE_CI_BUILD_DIR}/linkcheck/output.*
 
 .cmake_test_artifacts:
     artifacts:
@@ -107,22 +107,22 @@
         when: always
         reports:
             junit:
-                - build/junit.xml
+                - ${CMAKE_CI_BUILD_DIR}/junit.xml
         paths:
             # Take the install tree.
-            - build/install/
+            - ${CMAKE_CI_BUILD_DIR}/install/
 
 .cmake_doc_artifacts:
     artifacts:
         expire_in: 1d
         paths:
             # Take the install tree.
-            - build/install-doc/
+            - ${CMAKE_CI_BUILD_DIR}/install-doc/
 
 .cmake_org_help_artifacts:
     artifacts:
         expire_in: 1d
         paths:
-            - build/html
+            - ${CMAKE_CI_BUILD_DIR}/html
         exclude:
-            - build/html/.buildinfo
+            - ${CMAKE_CI_BUILD_DIR}/html/.buildinfo

+ 1 - 109
.gitlab/ci/configure_debian12_ninja.cmake

@@ -1,110 +1,2 @@
-set(CMake_TEST_CTestUpdate_BZR "ON" CACHE BOOL "")
-set(CMake_TEST_CTestUpdate_CVS "ON" CACHE BOOL "")
-set(CMake_TEST_CTestUpdate_GIT "ON" CACHE BOOL "")
-set(CMake_TEST_CTestUpdate_HG "ON" CACHE BOOL "")
-set(CMake_TEST_CTestUpdate_SVN "ON" CACHE BOOL "")
-if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
-  set(CMake_TEST_CTestUpdate_P4 "ON" CACHE BOOL "")
-endif()
-
-set(CMake_TEST_FindALSA "ON" CACHE BOOL "")
-set(CMake_TEST_FindBLAS "All;static=1;Generic" CACHE STRING "")
-set(CMake_TEST_FindBoost "ON" CACHE BOOL "")
-set(CMake_TEST_FindBoost_Python "ON" CACHE BOOL "")
-set(CMake_TEST_FindBZip2 "ON" CACHE BOOL "")
-set(CMake_TEST_FindCups "ON" CACHE BOOL "")
-set(CMake_TEST_FindCURL "ON" CACHE BOOL "")
-set(CMake_TEST_FindDevIL "ON" CACHE BOOL "")
-set(CMake_TEST_FindDoxygen_Dot "ON" CACHE BOOL "")
-set(CMake_TEST_FindDoxygen "ON" CACHE BOOL "")
-set(CMake_TEST_FindEXPAT "ON" CACHE BOOL "")
-set(CMake_TEST_FindFontconfig "ON" CACHE BOOL "")
-set(CMake_TEST_FindFreetype "ON" CACHE BOOL "")
-set(CMake_TEST_FindGDAL "ON" CACHE BOOL "")
-set(CMake_TEST_FindGIF "ON" CACHE BOOL "")
-set(CMake_TEST_FindGit "ON" CACHE BOOL "")
-set(CMake_TEST_FindGLEW "ON" CACHE BOOL "")
-set(CMake_TEST_FindGLUT "ON" CACHE BOOL "")
-set(CMake_TEST_FindGnuTLS "ON" CACHE BOOL "")
-set(CMake_TEST_FindGSL "ON" CACHE BOOL "")
-set(CMake_TEST_FindGTest "ON" CACHE BOOL "")
-set(CMake_TEST_FindGTK2 "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5 "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_MPICH_C_COMPILER "/usr/bin/h5pcc.mpich" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_MPICH_C_COMPILER_EXPLICIT "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_MPICH_CXX_COMPILER "/usr/bin/h5c++.mpich" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_MPICH_CXX_COMPILER_EXPLICIT "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_MPICH_Fortran_COMPILER "/usr/bin/h5pfc.mpich" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_MPICH_Fortran_COMPILER_EXPLICIT "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_OpenMPI_C_COMPILER "/usr/bin/h5pcc.openmpi" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_OpenMPI_C_COMPILER_EXPLICIT "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_OpenMPI_CXX_COMPILER "/usr/bin/h5c++.openmpi" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_OpenMPI_CXX_COMPILER_EXPLICIT "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_OpenMPI_Fortran_COMPILER "/usr/bin/h5pfc.openmpi" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_OpenMPI_Fortran_COMPILER_EXPLICIT "ON" CACHE BOOL "")
-set(CMake_TEST_FindHDF5_Serial_C_COMPILER "/usr/bin/h5cc" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_Serial_CXX_COMPILER "/usr/bin/h5c++" CACHE FILEPATH "")
-set(CMake_TEST_FindHDF5_Serial_Fortran_COMPILER "/usr/bin/h5fc" CACHE FILEPATH "")
-set(CMake_TEST_FindIconv "ON" CACHE BOOL "")
-set(CMake_TEST_FindICU "ON" CACHE BOOL "")
-set(CMake_TEST_FindImageMagick "ON" CACHE BOOL "")
-set(CMake_TEST_FindIntl "ON" CACHE BOOL "")
-set(CMake_TEST_FindJNI "ON" CACHE BOOL "")
-set(CMake_TEST_FindJPEG "ON" CACHE BOOL "")
-set(CMake_TEST_FindJsonCpp "ON" CACHE BOOL "")
-set(CMake_TEST_FindLAPACK "All;static=1;Generic" CACHE STRING "")
-set(CMake_TEST_FindLibArchive "ON" CACHE BOOL "")
-set(CMake_TEST_FindLibinput "ON" CACHE BOOL "")
-set(CMake_TEST_FindLibLZMA "ON" CACHE BOOL "")
-set(CMake_TEST_FindLibUV "ON" CACHE BOOL "")
-set(CMake_TEST_FindLibXml2 "ON" CACHE BOOL "")
-set(CMake_TEST_FindLibXslt "ON" CACHE BOOL "")
-set(CMake_TEST_FindMPI_C "ON" CACHE BOOL "")
-set(CMake_TEST_FindMPI_CXX "ON" CACHE BOOL "")
-set(CMake_TEST_FindMPI_Fortran "ON" CACHE BOOL "")
-set(CMake_TEST_FindMPI "ON" CACHE BOOL "")
-set(CMake_TEST_FindODBC "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenACC "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenGL "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenMP_Fortran "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenSP "ON" CACHE BOOL "")
-set(CMake_TEST_FindOpenSSL "ON" CACHE BOOL "")
-set(CMake_TEST_FindPatch "ON" CACHE BOOL "")
-set(CMake_TEST_FindPNG "ON" CACHE BOOL "")
-set(CMake_TEST_FindPostgreSQL "ON" CACHE BOOL "")
-set(CMake_TEST_FindProtobuf "ON" CACHE BOOL "")
-set(CMake_TEST_FindProtobuf_gRPC "ON" CACHE BOOL "")
-set(CMake_TEST_FindPython3 "ON" CACHE BOOL "")
-set(CMake_TEST_FindPython3_IronPython "ON" CACHE BOOL "")
-set(CMake_TEST_FindPython3_PyPy "ON" CACHE BOOL "")
-set(CMake_TEST_FindRuby "ON" CACHE BOOL "")
-set(CMake_TEST_FindRuby_RVM "ON" CACHE BOOL "")
-set(CMake_TEST_FindSDL "ON" CACHE BOOL "")
-set(CMake_TEST_FindSQLite3 "ON" CACHE BOOL "")
-set(CMake_TEST_FindTIFF "ON" CACHE BOOL "")
-set(CMake_TEST_FindwxWidgets "ON" CACHE BOOL "")
-set(CMake_TEST_FindX11 "ON" CACHE BOOL "")
-set(CMake_TEST_FindXalanC "ON" CACHE BOOL "")
-set(CMake_TEST_FindXercesC "ON" CACHE BOOL "")
-set(CMake_TEST_Fortran_SUBMODULES "ON" CACHE BOOL "")
-set(CMake_TEST_IPO_WORKS_C "ON" CACHE BOOL "")
-set(CMake_TEST_IPO_WORKS_CXX "ON" CACHE BOOL "")
-set(CMake_TEST_IPO_WORKS_Fortran "ON" CACHE BOOL "")
-set(CMake_TEST_JQ "/usr/bin/jq" CACHE PATH "")
-set(CMake_TEST_Qt5 "ON" CACHE BOOL "")
-set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_debian12_ninja_common.cmake")
 set(CMake_TEST_UseSWIG "ON" CACHE BOOL "")
-
-if (NOT "$ENV{SWIFTC}" STREQUAL "")
-  set(CMAKE_Swift_COMPILER "$ENV{SWIFTC}" CACHE FILEPATH "")
-endif()
-
-if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
-  set(CMAKE_TESTS_CDASH_SERVER "https://open.cdash.org" CACHE STRING "")
-endif()
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")

+ 109 - 0
.gitlab/ci/configure_debian12_ninja_common.cmake

@@ -0,0 +1,109 @@
+set(CMake_TEST_CTestUpdate_BZR "ON" CACHE BOOL "")
+set(CMake_TEST_CTestUpdate_CVS "ON" CACHE BOOL "")
+set(CMake_TEST_CTestUpdate_GIT "ON" CACHE BOOL "")
+set(CMake_TEST_CTestUpdate_HG "ON" CACHE BOOL "")
+set(CMake_TEST_CTestUpdate_SVN "ON" CACHE BOOL "")
+if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
+  set(CMake_TEST_CTestUpdate_P4 "ON" CACHE BOOL "")
+endif()
+
+set(CMake_TEST_FindALSA "ON" CACHE BOOL "")
+set(CMake_TEST_FindBLAS "All;static=1;Generic" CACHE STRING "")
+set(CMake_TEST_FindBoost "ON" CACHE BOOL "")
+set(CMake_TEST_FindBoost_Python "ON" CACHE BOOL "")
+set(CMake_TEST_FindBZip2 "ON" CACHE BOOL "")
+set(CMake_TEST_FindCups "ON" CACHE BOOL "")
+set(CMake_TEST_FindCURL "ON" CACHE BOOL "")
+set(CMake_TEST_FindDevIL "ON" CACHE BOOL "")
+set(CMake_TEST_FindDoxygen_Dot "ON" CACHE BOOL "")
+set(CMake_TEST_FindDoxygen "ON" CACHE BOOL "")
+set(CMake_TEST_FindEXPAT "ON" CACHE BOOL "")
+set(CMake_TEST_FindFontconfig "ON" CACHE BOOL "")
+set(CMake_TEST_FindFreetype "ON" CACHE BOOL "")
+set(CMake_TEST_FindGDAL "ON" CACHE BOOL "")
+set(CMake_TEST_FindGIF "ON" CACHE BOOL "")
+set(CMake_TEST_FindGit "ON" CACHE BOOL "")
+set(CMake_TEST_FindGLEW "ON" CACHE BOOL "")
+set(CMake_TEST_FindGLUT "ON" CACHE BOOL "")
+set(CMake_TEST_FindGnuTLS "ON" CACHE BOOL "")
+set(CMake_TEST_FindGSL "ON" CACHE BOOL "")
+set(CMake_TEST_FindGTest "ON" CACHE BOOL "")
+set(CMake_TEST_FindGTK2 "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5 "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_MPICH_C_COMPILER "/usr/bin/h5pcc.mpich" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_MPICH_C_COMPILER_EXPLICIT "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_MPICH_CXX_COMPILER "/usr/bin/h5c++.mpich" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_MPICH_CXX_COMPILER_EXPLICIT "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_MPICH_Fortran_COMPILER "/usr/bin/h5pfc.mpich" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_MPICH_Fortran_COMPILER_EXPLICIT "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_OpenMPI_C_COMPILER "/usr/bin/h5pcc.openmpi" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_OpenMPI_C_COMPILER_EXPLICIT "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_OpenMPI_CXX_COMPILER "/usr/bin/h5c++.openmpi" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_OpenMPI_CXX_COMPILER_EXPLICIT "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_OpenMPI_Fortran_COMPILER "/usr/bin/h5pfc.openmpi" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_OpenMPI_Fortran_COMPILER_EXPLICIT "ON" CACHE BOOL "")
+set(CMake_TEST_FindHDF5_Serial_C_COMPILER "/usr/bin/h5cc" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_Serial_CXX_COMPILER "/usr/bin/h5c++" CACHE FILEPATH "")
+set(CMake_TEST_FindHDF5_Serial_Fortran_COMPILER "/usr/bin/h5fc" CACHE FILEPATH "")
+set(CMake_TEST_FindIconv "ON" CACHE BOOL "")
+set(CMake_TEST_FindICU "ON" CACHE BOOL "")
+set(CMake_TEST_FindImageMagick "ON" CACHE BOOL "")
+set(CMake_TEST_FindIntl "ON" CACHE BOOL "")
+set(CMake_TEST_FindJNI "ON" CACHE BOOL "")
+set(CMake_TEST_FindJPEG "ON" CACHE BOOL "")
+set(CMake_TEST_FindJsonCpp "ON" CACHE BOOL "")
+set(CMake_TEST_FindLAPACK "All;static=1;Generic" CACHE STRING "")
+set(CMake_TEST_FindLibArchive "ON" CACHE BOOL "")
+set(CMake_TEST_FindLibinput "ON" CACHE BOOL "")
+set(CMake_TEST_FindLibLZMA "ON" CACHE BOOL "")
+set(CMake_TEST_FindLibUV "ON" CACHE BOOL "")
+set(CMake_TEST_FindLibXml2 "ON" CACHE BOOL "")
+set(CMake_TEST_FindLibXslt "ON" CACHE BOOL "")
+set(CMake_TEST_FindMPI_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindMPI_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindMPI_Fortran "ON" CACHE BOOL "")
+set(CMake_TEST_FindMPI "ON" CACHE BOOL "")
+set(CMake_TEST_FindODBC "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenGL "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP_Fortran "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenSP "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenSSL "ON" CACHE BOOL "")
+set(CMake_TEST_FindPatch "ON" CACHE BOOL "")
+set(CMake_TEST_FindPNG "ON" CACHE BOOL "")
+set(CMake_TEST_FindPostgreSQL "ON" CACHE BOOL "")
+set(CMake_TEST_FindProtobuf "ON" CACHE BOOL "")
+set(CMake_TEST_FindProtobuf_gRPC "ON" CACHE BOOL "")
+set(CMake_TEST_FindPython3 "ON" CACHE BOOL "")
+set(CMake_TEST_FindPython3_IronPython "ON" CACHE BOOL "")
+set(CMake_TEST_FindPython3_PyPy "ON" CACHE BOOL "")
+set(CMake_TEST_FindRuby "ON" CACHE BOOL "")
+set(CMake_TEST_FindRuby_RVM "ON" CACHE BOOL "")
+set(CMake_TEST_FindSDL "ON" CACHE BOOL "")
+set(CMake_TEST_FindSQLite3 "ON" CACHE BOOL "")
+set(CMake_TEST_FindTIFF "ON" CACHE BOOL "")
+set(CMake_TEST_FindwxWidgets "ON" CACHE BOOL "")
+set(CMake_TEST_FindX11 "ON" CACHE BOOL "")
+set(CMake_TEST_FindXalanC "ON" CACHE BOOL "")
+set(CMake_TEST_FindXercesC "ON" CACHE BOOL "")
+set(CMake_TEST_Fortran_SUBMODULES "ON" CACHE BOOL "")
+set(CMake_TEST_IPO_WORKS_C "ON" CACHE BOOL "")
+set(CMake_TEST_IPO_WORKS_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_IPO_WORKS_Fortran "ON" CACHE BOOL "")
+set(CMake_TEST_JQ "/usr/bin/jq" CACHE PATH "")
+set(CMake_TEST_Qt5 "ON" CACHE BOOL "")
+set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
+
+if (NOT "$ENV{SWIFTC}" STREQUAL "")
+  set(CMAKE_Swift_COMPILER "$ENV{SWIFTC}" CACHE FILEPATH "")
+endif()
+
+if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
+  set(CMAKE_TESTS_CDASH_SERVER "https://open.cdash.org" CACHE STRING "")
+endif()
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")

+ 3 - 0
.gitlab/ci/configure_debian12_ninja_multi_symlinked.cmake

@@ -0,0 +1,3 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_debian12_ninja_common.cmake")
+set(CMake_TEST_UseSWIG "OFF" CACHE BOOL "")

+ 2 - 0
.gitlab/ci/configure_fedora38_makefiles_symlinked.cmake

@@ -0,0 +1,2 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora38_common.cmake")

+ 2 - 0
.gitlab/ci/configure_macos_arm64_ninja_symlinked.cmake

@@ -0,0 +1,2 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_macos_arm64_ninja.cmake")

+ 2 - 0
.gitlab/ci/configure_macos_arm64_xcode_symlinked.cmake

@@ -0,0 +1,2 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_macos_arm64_xcode.cmake")

+ 7 - 0
.gitlab/ci/configure_symlinked_common.cmake

@@ -0,0 +1,7 @@
+# Ensure that the symlink tree is set up correctly.
+if(NOT CMAKE_SOURCE_DIR STREQUAL "$ENV{CI_PROJECT_DIR}/work/cmake")
+  message(FATAL_ERROR "Expected value of CMAKE_SOURCE_DIR:\n  $ENV{CI_PROJECT_DIR}/work/cmake\nActual value:\n  ${CMAKE_SOURCE_DIR}")
+endif()
+if(NOT CMAKE_BINARY_DIR STREQUAL "$ENV{CI_PROJECT_DIR}/work/build")
+  message(FATAL_ERROR "Expected value of CMAKE_BINARY_DIR:\n  $ENV{CI_PROJECT_DIR}/work/build\nActual value:\n  ${CMAKE_BINARY_DIR}")
+endif()

+ 10 - 0
.gitlab/ci/env.sh

@@ -9,6 +9,16 @@ quietly() {
   rm -f "$log"
 }
 
+if test -n "$CMAKE_CI_IN_SYMLINK_TREE"; then
+  mkdir -p "$CI_PROJECT_DIR/real_work/work/build"
+  ln -s real_work/work "$CI_PROJECT_DIR/work"
+  git worktree prune
+  git worktree add "$CI_PROJECT_DIR/work/cmake" HEAD
+
+  # Assert that the hash matches.
+  test "$(git -C "$CI_PROJECT_DIR/work/cmake" rev-parse HEAD)" = "$(git -C "$CI_PROJECT_DIR" rev-parse HEAD)"
+fi
+
 if test -r ".gitlab/ci/env_${CMAKE_CONFIGURATION}.sh"; then
   source ".gitlab/ci/env_${CMAKE_CONFIGURATION}.sh"
 fi

+ 1 - 7
.gitlab/ci/env_debian12_ninja.sh

@@ -1,11 +1,5 @@
 export MY_RUBY_HOME="/usr/local/rvm/rubies/ruby-3.2.2"
 
 if test -z "$CI_MERGE_REQUEST_ID"; then
-  curl -L -O "https://download.swift.org/swift-5.7.1-release/ubuntu1804/swift-5.7.1-RELEASE/swift-5.7.1-RELEASE-ubuntu18.04.tar.gz"
-  echo '2b30f9efc969d9e96f0836d0871130dffb369822a3823ee6f3db44c29c1698e3  swift-5.7.1-RELEASE-ubuntu18.04.tar.gz' > swift.sha256sum
-  sha256sum --check swift.sha256sum
-  mkdir /opt/swift
-  tar xzf swift-5.7.1-RELEASE-ubuntu18.04.tar.gz -C /opt/swift --strip-components=2
-  rm swift-5.7.1-RELEASE-ubuntu18.04.tar.gz swift.sha256sum
-  export SWIFTC="/opt/swift/bin/swiftc"
+  source .gitlab/ci/swift-env.sh
 fi

+ 5 - 0
.gitlab/ci/env_debian12_ninja_multi_symlinked.sh

@@ -0,0 +1,5 @@
+export MY_RUBY_HOME="/usr/local/rvm/rubies/ruby-3.2.2"
+
+if test -z "$CI_MERGE_REQUEST_ID"; then
+  source .gitlab/ci/swift-env.sh
+fi

+ 1 - 0
.gitlab/ci/env_fedora38_makefiles_symlinked.cmake

@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/env_fedora38_makefiles.cmake")

+ 1 - 0
.gitlab/ci/env_fedora38_makefiles_symlinked.sh

@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora38_makefiles.sh

+ 1 - 0
.gitlab/ci/env_macos_arm64_ninja_symlinked.sh

@@ -0,0 +1 @@
+. .gitlab/ci/env_macos_arm64_ninja.sh

+ 5 - 0
.gitlab/ci/gitlab_ci.cmake

@@ -5,8 +5,13 @@ endif ()
 
 # Set up the source and build paths.
 set(CTEST_SOURCE_DIRECTORY "$ENV{CI_PROJECT_DIR}")
+if("$ENV{CMAKE_CI_IN_SYMLINK_TREE}")
+  set(CTEST_SOURCE_DIRECTORY "$ENV{CI_PROJECT_DIR}/work/cmake")
+endif()
 if("$ENV{CMAKE_CI_INPLACE}")
   set(CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}")
+elseif("$ENV{CMAKE_CI_IN_SYMLINK_TREE}")
+  set(CTEST_BINARY_DIRECTORY "$ENV{CI_PROJECT_DIR}/work/build")
 else()
   set(CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}/build")
 endif()

+ 1 - 1
.gitlab/ci/ninja-nightly.sh

@@ -5,7 +5,7 @@ set -e
 cd .gitlab
 
 git clone https://github.com/ninja-build/ninja.git ninja-src
-cmake -S ninja-src -B ninja-src/build -DCMAKE_BUILD_TYPE=Release
+cmake -S ninja-src -B ninja-src/build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
 cmake --build ninja-src/build --parallel --target ninja
 mv ninja-src/build/ninja .
 rm -rf ninja-src

+ 7 - 0
.gitlab/ci/swift-env.sh

@@ -0,0 +1,7 @@
+curl -L -O "https://download.swift.org/swift-5.7.1-release/ubuntu1804/swift-5.7.1-RELEASE/swift-5.7.1-RELEASE-ubuntu18.04.tar.gz"
+echo '2b30f9efc969d9e96f0836d0871130dffb369822a3823ee6f3db44c29c1698e3  swift-5.7.1-RELEASE-ubuntu18.04.tar.gz' > swift.sha256sum
+sha256sum --check swift.sha256sum
+mkdir /opt/swift
+tar xzf swift-5.7.1-RELEASE-ubuntu18.04.tar.gz -C /opt/swift --strip-components=2
+rm swift-5.7.1-RELEASE-ubuntu18.04.tar.gz swift.sha256sum
+export SWIFTC="/opt/swift/bin/swiftc"

+ 20 - 0
.gitlab/os-linux.yml

@@ -137,6 +137,16 @@
         CMAKE_CI_NO_INSTALL: 1
         CTEST_NO_WARNINGS_ALLOWED: 1
 
+.debian12_ninja_multi_symlinked:
+    extends: .debian12
+
+    variables:
+        CMAKE_CONFIGURATION: debian12_ninja_multi_symlinked
+        CMAKE_GENERATOR: "Ninja Multi-Config"
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMAKE_CI_IN_SYMLINK_TREE: 1
+        CMAKE_CI_BUILD_DIR: "real_work/work/build"
+
 .debian12_extdeps:
     extends: .debian12
 
@@ -185,6 +195,16 @@
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Unix Makefiles"
 
+.fedora38_makefiles_symlinked:
+    extends: .fedora38
+
+    variables:
+        CMAKE_CONFIGURATION: fedora38_makefiles_symlinked
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMAKE_GENERATOR: "Unix Makefiles"
+        CMAKE_CI_IN_SYMLINK_TREE: 1
+        CMAKE_CI_BUILD_DIR: "real_work/work/build"
+
 ### Clang Compiler
 
 .debian12_makefiles_clang:

+ 19 - 0
.gitlab/os-macos.yml

@@ -38,6 +38,15 @@
         CMAKE_CONFIGURATION: macos_arm64_ninja
         CTEST_NO_WARNINGS_ALLOWED: 1
 
+.macos_arm64_ninja_symlinked:
+    extends: .macos_build
+
+    variables:
+        CMAKE_CONFIGURATION: macos_arm64_ninja_symlinked
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMAKE_CI_IN_SYMLINK_TREE: 1
+        CMAKE_CI_BUILD_DIR: "real_work/work/build"
+
 .macos_arm64_pch:
     extends: .macos_arm64_ninja
 
@@ -86,6 +95,16 @@
         CMAKE_GENERATOR: Xcode
         CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
 
+.macos_arm64_xcode_symlinked:
+    extends: .macos
+
+    variables:
+        CMAKE_CONFIGURATION: macos_arm64_xcode_symlinked
+        CMAKE_GENERATOR: Xcode
+        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_IN_SYMLINK_TREE: 1
+        CMAKE_CI_BUILD_DIR: "real_work/work/build"
+
 .macos_arm64_xcode_ub:
     extends: .macos
 

+ 11 - 0
Tests/CMakeGUI/CMakeGUITest.cmake

@@ -59,6 +59,12 @@ function(run_cmake_gui_test name)
 
   set(ENV{CMake_GUI_TEST_NAME} "${name}")
   set(ENV{CMake_GUI_CONFIG_DIR} "${_workdir}/config")
+  if(DEFINED ENV{PWD})
+    set(_old_pwd "$ENV{PWD}")
+  else()
+    set(_old_pwd)
+  endif()
+  set(ENV{PWD} "${_workdir}")
   execute_process(
     COMMAND "${CMakeGUITest_COMMAND}" ${_rcgt_ARGS}
     WORKING_DIRECTORY "${_workdir}"
@@ -66,6 +72,11 @@ function(run_cmake_gui_test name)
     OUTPUT_VARIABLE _output
     ERROR_VARIABLE _error
     )
+  if(DEFINED _old_pwd)
+    set(ENV{PWD} "${_old_pwd}")
+  else()
+    set(ENV{PWD})
+  endif()
   if(_result)
     set(_fail 1)
     string(REPLACE "\n" "\n  " _formatted_output "${_output}")

+ 4 - 0
Tests/CMakeLists.txt

@@ -142,6 +142,10 @@ if(BUILD_TESTING)
       )
   endif()
 
+  if(_isMultiConfig)
+    set(test_options -C Debug)
+  endif()
+
   # Look for git to use for tests.
   find_program(GIT_EXECUTABLE NAMES git)
 

+ 1 - 1
Tests/FindGLUT/CMakeLists.txt

@@ -5,5 +5,5 @@ add_test(NAME FindGLUT.Test COMMAND ${CMAKE_CTEST_COMMAND}
   ${build_generator_args}
   --build-project TestFindGLUT
   --build-options ${build_options}
-  --test-command ${CMAKE_CTEST_COMMAND} -V
+  --test-command ${CMAKE_CTEST_COMMAND} -V ${test_options}
   )

+ 1 - 1
Tests/FindGSL/CMakeLists.txt

@@ -5,5 +5,5 @@ add_test(NAME FindGSL.rng COMMAND ${CMAKE_CTEST_COMMAND}
   ${build_generator_args}
   --build-project FindGSL_rng
   --build-options ${build_options}
-  --test-command ${CMAKE_CTEST_COMMAND} -V
+  --test-command ${CMAKE_CTEST_COMMAND} -V ${test_options}
   )

+ 1 - 1
Tests/FindOpenSSL/CMakeLists.txt

@@ -5,5 +5,5 @@ add_test(NAME FindOpenSSL.rand COMMAND ${CMAKE_CTEST_COMMAND}
   ${build_generator_args}
   --build-project FindOpenSSL_rand
   --build-options ${build_options}
-  --test-command ${CMAKE_CTEST_COMMAND} -V
+  --test-command ${CMAKE_CTEST_COMMAND} -V ${test_options}
   )

+ 2 - 0
Tests/RunCMake/CMakeLists.txt

@@ -643,8 +643,10 @@ else()
   message(STATUS "Could not find ctresalloc")
 endif()
 
+get_filename_component(real_binary_dir "${CMake_BINARY_DIR}" REALPATH)
 if(NOT WIN32
     AND NOT MSYS # FIXME: This works on CYGWIN but not on MSYS
+    AND real_binary_dir STREQUAL CMake_BINARY_DIR
     )
   add_RunCMake_test(SymlinkTrees)
 endif ()

+ 0 - 1
Tests/RunCMake/CMakePresets/GoodNoSCache.cmake

@@ -1,5 +1,4 @@
 include(${CMAKE_CURRENT_LIST_DIR}/TestVariable.cmake)
 
 get_filename_component(_parent "${CMAKE_SOURCE_DIR}" DIRECTORY)
-file(REAL_PATH "${_parent}" _parent)
 test_variable(CMAKE_BINARY_DIR "" "${_parent}/GoodNoSCachePrep-build")

+ 5 - 1
Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake

@@ -1,7 +1,11 @@
 include(RunCMake)
 
 function(check_files dir)
-  set(expected ${ARGN})
+  set(expected)
+  foreach(i IN LISTS ARGN)
+    get_filename_component(real_path ${i} REALPATH)
+    list(APPEND expected ${real_path})
+  endforeach()
   list(FILTER expected EXCLUDE REGEX "^$")
   list(REMOVE_DUPLICATES expected)
   list(SORT expected)

+ 2 - 1
Tests/RunCMake/XcFramework/find-library.cmake

@@ -1,5 +1,6 @@
 find_library(MYLIB_XCFRAMEWORK mylib NO_DEFAULT_PATH PATHS "${CMAKE_BINARY_DIR}/../create-xcframework-framework-build")
-file(REAL_PATH "${CMAKE_BINARY_DIR}/../create-xcframework-framework-build/mylib.xcframework" expected_path)
+get_filename_component(bin_parent "${CMAKE_BINARY_DIR}" PATH)
+set(expected_path "${bin_parent}/create-xcframework-framework-build/mylib.xcframework")
 if(NOT MYLIB_XCFRAMEWORK STREQUAL expected_path)
   message(FATAL_ERROR "Expected value of MYLIB_XCFRAMEWORK:\n  ${expected_path}\nActual value:\n  ${MYLIB_XCFRAMEWORK}")
 endif()

+ 20 - 16
Tests/RunCMake/file/REAL_PATH.cmake

@@ -1,17 +1,19 @@
 
 if (NOT WIN32 OR CYGWIN)
+  file(REAL_PATH "${CMAKE_CURRENT_BINARY_DIR}" real_binary_dir)
+
   file(TOUCH "${CMAKE_CURRENT_BINARY_DIR}/test.txt")
   file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/test.sym")
   file(CREATE_LINK  "test.txt" "${CMAKE_CURRENT_BINARY_DIR}/test.sym" SYMBOLIC)
 
   file(REAL_PATH "${CMAKE_CURRENT_BINARY_DIR}/test.sym" real_path)
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/test.txt")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/test.txt\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/test.txt")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/test.txt\"")
   endif()
 
   file(REAL_PATH "test.sym" real_path BASE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/test.txt")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/test.txt\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/test.txt")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/test.txt\"")
   endif()
 
   file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/dir/")
@@ -21,33 +23,33 @@ if (NOT WIN32 OR CYGWIN)
 
   cmake_policy(SET CMP0152 NEW)
   file(REAL_PATH "${CMAKE_CURRENT_BINARY_DIR}/dir/bin/../" real_path)
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/dir/nested")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/dir/nested\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/dir/nested")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/dir/nested\"")
   endif()
 
   file(REAL_PATH "${CMAKE_CURRENT_BINARY_DIR}/dir/bin/../bin" real_path)
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/dir/nested/bin")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/dir/nested/bin\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/dir/nested/bin")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/dir/nested/bin\"")
   endif()
 
   file(REAL_PATH "dir/bin/../bin" real_path BASE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/dir/nested/bin")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/dir/nested/bin\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/dir/nested/bin")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/dir/nested/bin\"")
   endif()
 
   file(REAL_PATH "../bin" real_path BASE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/dir/bin/" )
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/dir/nested/bin")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/dir/nested/bin\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/dir/nested/bin")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/dir/nested/bin\"")
   endif()
 
   cmake_policy(SET CMP0152 OLD)
   file(REAL_PATH "${CMAKE_CURRENT_BINARY_DIR}/dir/bin/../" real_path)
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/dir")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/dir/nested\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/dir")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/dir/nested\"")
   endif()
   file(REAL_PATH "../" real_path BASE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/dir/bin/")
-  if (NOT real_path STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/dir")
-    message(SEND_ERROR "real path is \"${real_path}\", should be \"${CMAKE_CURRENT_BINARY_DIR}/dir\"")
+  if (NOT real_path STREQUAL "${real_binary_dir}/dir")
+    message(SEND_ERROR "real path is \"${real_path}\", should be \"${real_binary_dir}/dir\"")
   endif()
 
 endif()
@@ -61,12 +63,14 @@ If (WIN32)
 else()
   set(HOME_DIR "$ENV{HOME}")
 endif()
+file(REAL_PATH "${HOME_DIR}" HOME_DIR)
 
 file(REAL_PATH "~" real_path EXPAND_TILDE)
 if (NOT real_path STREQUAL "${HOME_DIR}")
   message(SEND_ERROR "real path is \"${real_path}\", should be \"${HOME_DIR}\"")
 endif()
 
+file(TOUCH "${HOME_DIR}/test.txt")
 file(REAL_PATH "~/test.txt" real_path EXPAND_TILDE)
 if (NOT real_path STREQUAL "${HOME_DIR}/test.txt")
   message(SEND_ERROR "real path is \"${real_path}\", should be \"${HOME_DIR}/test.txt\"")