summaryrefslogtreecommitdiffstats
path: root/Help
diff options
context:
space:
mode:
authorRobert Maynard <rmaynard@nvidia.com>2023-06-29 19:24:49 (GMT)
committerRobert Maynard <rmaynard@nvidia.com>2023-07-20 21:02:58 (GMT)
commit6b5f2dbbfe453f9bafe46ee420e657735ff16fb0 (patch)
treea27c2718ea6c2ddd76e75b35eb035cfc48a0b358 /Help
parentb0054dd65c1d69a437abe85d27e704326884a9c2 (diff)
downloadCMake-6b5f2dbbfe453f9bafe46ee420e657735ff16fb0.zip
CMake-6b5f2dbbfe453f9bafe46ee420e657735ff16fb0.tar.gz
CMake-6b5f2dbbfe453f9bafe46ee420e657735ff16fb0.tar.bz2
file(REAL_PATH): resolve symlinks before '..' components
Previously REAL_PATH would collapse paths before resolving any symlinks so if `..` crossed a symlink the output from `REAL_PATH` would be wrong. It looked like REAL_PATH did this by mistake since it was a side-effect of ensuring we had an absolute path before resolving symlinks.
Diffstat (limited to 'Help')
-rw-r--r--Help/command/file.rst5
-rw-r--r--Help/manual/cmake-policies.7.rst8
-rw-r--r--Help/policy/CMP0152.rst20
3 files changed, 33 insertions, 0 deletions
diff --git a/Help/command/file.rst b/Help/command/file.rst
index 30a7f4d..f9d1a79 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -981,6 +981,11 @@ Path Conversion
if ``USERPROFILE`` is not defined. On all other platforms, only ``HOME``
is used.
+ .. versionchanged:: 3.28
+
+ All symlinks are resolved before collapsing ``../`` components.
+ See policy :policy:`CMP0152`.
+
.. signature::
file(RELATIVE_PATH <variable> <directory> <file>)
diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst
index 7c48806..89b7924 100644
--- a/Help/manual/cmake-policies.7.rst
+++ b/Help/manual/cmake-policies.7.rst
@@ -51,6 +51,14 @@ The :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable may also be used
to determine whether to report an error on use of deprecated macros or
functions.
+Policies Introduced by CMake 3.28
+=================================
+
+.. toctree::
+ :maxdepth: 1
+
+ CMP0152: file(REAL_PATH) resolves symlinks before collapsing ../ components. </policy/CMP0152>
+
Policies Introduced by CMake 3.27
=================================
diff --git a/Help/policy/CMP0152.rst b/Help/policy/CMP0152.rst
new file mode 100644
index 0000000..d7e8692
--- /dev/null
+++ b/Help/policy/CMP0152.rst
@@ -0,0 +1,20 @@
+CMP0152
+-------
+
+.. versionadded:: 3.28
+
+:command:`file(REAL_PATH)` resolves symlinks before collapsing ../ components.
+
+In CMake 3.27 and below, :command:`file(REAL_PATH)` collapsed any ``../``
+components in a path before resolving symlinks. This produced incorrect
+results when the ``../`` collapsed away a symlink.
+
+The ``OLD`` behavior for this policy is to collapse ``../`` components before
+resolving symlinks.
+The ``NEW`` behavior for this policy is to resolve all symlinks before
+collapsing ``../`` components.
+
+This policy was introduced in CMake version 3.28. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt