Help: file: document GET_RUNTIME_DEPENDENCIES separately

Moved documentation of file(GET_RUNTIME_DEPENDENCIES ...) from
the 'Reading' section to a separate section at the bottom of
the page. Because it is a very long text, and because this
signature is quite different from all the others in the
'Reading' section.
diff --git a/Help/command/file.rst b/Help/command/file.rst
index ee7d05d..ef49faa 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -28,7 +28,6 @@
     file(`STRINGS`_ <filename> <out-var> [...])
     file(`\<HASH\>`_ <filename> <out-var>)
     file(`TIMESTAMP`_ <filename> <out-var> [...])
-    file(`GET_RUNTIME_DEPENDENCIES`_ [...])
 
   `Writing`_
     file({`WRITE`_ | `APPEND`_} <filename> <content>...)
@@ -65,6 +64,10 @@
     file(`ARCHIVE_CREATE`_ OUTPUT <archive> PATHS <paths>... [...])
     file(`ARCHIVE_EXTRACT`_ INPUT <archive> [...])
 
+  `Handling Runtime Binaries`_
+    file(`GET_RUNTIME_DEPENDENCIES`_ [...])
+
+
 Reading
 ^^^^^^^
 
@@ -157,323 +160,6 @@
   See the :command:`string(TIMESTAMP)` command for documentation of
   the ``<format>`` and ``UTC`` options.
 
-.. signature::
-  file(GET_RUNTIME_DEPENDENCIES [...])
-
-  .. versionadded:: 3.16
-
-  Recursively get the list of libraries depended on by the given files:
-
-  .. code-block:: cmake
-
-    file(GET_RUNTIME_DEPENDENCIES
-      [RESOLVED_DEPENDENCIES_VAR <deps_var>]
-      [UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>]
-      [CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>]
-      [EXECUTABLES <executable_files>...]
-      [LIBRARIES <library_files>...]
-      [MODULES <module_files>...]
-      [DIRECTORIES <directories>...]
-      [BUNDLE_EXECUTABLE <bundle_executable_file>]
-      [PRE_INCLUDE_REGEXES <regexes>...]
-      [PRE_EXCLUDE_REGEXES <regexes>...]
-      [POST_INCLUDE_REGEXES <regexes>...]
-      [POST_EXCLUDE_REGEXES <regexes>...]
-      [POST_INCLUDE_FILES <files>...]
-      [POST_EXCLUDE_FILES <files>...]
-      )
-
-  Please note that this sub-command is not intended to be used in project mode.
-  It is intended for use at install time, either from code generated by the
-  :command:`install(RUNTIME_DEPENDENCY_SET)` command, or from code provided by
-  the project via :command:`install(CODE)` or :command:`install(SCRIPT)`.
-  For example:
-
-  .. code-block:: cmake
-
-    install(CODE [[
-      file(GET_RUNTIME_DEPENDENCIES
-        # ...
-        )
-      ]])
-
-  The arguments are as follows:
-
-    ``RESOLVED_DEPENDENCIES_VAR <deps_var>``
-      Name of the variable in which to store the list of resolved dependencies.
-
-    ``UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>``
-      Name of the variable in which to store the list of unresolved
-      dependencies. If this variable is not specified, and there are any
-      unresolved dependencies, an error is issued.
-
-    ``CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>``
-      Variable prefix in which to store conflicting dependency information.
-      Dependencies are conflicting if two files with the same name are found in
-      two different directories. The list of filenames that conflict are stored
-      in ``<conflicting_deps_prefix>_FILENAMES``. For each filename, the list
-      of paths that were found for that filename are stored in
-      ``<conflicting_deps_prefix>_<filename>``.
-
-    ``EXECUTABLES <executable_files>...``
-      List of executable files to read for dependencies. These are executables
-      that are typically created with :command:`add_executable`, but they do
-      not have to be created by CMake. On Apple platforms, the paths to these
-      files determine the value of ``@executable_path`` when recursively
-      resolving the libraries. Specifying any kind of library (``STATIC``,
-      ``MODULE``, or ``SHARED``) here will result in undefined behavior.
-
-    ``LIBRARIES <library_files>...``
-      List of library files to read for dependencies. These are libraries that
-      are typically created with :command:`add_library(SHARED)`, but they do
-      not have to be created by CMake. Specifying ``STATIC`` libraries,
-      ``MODULE`` libraries, or executables here will result in undefined
-      behavior.
-
-    ``MODULES <module_files>...``
-      List of loadable module files to read for dependencies. These are modules
-      that are typically created with :command:`add_library(MODULE)`, but they
-      do not have to be created by CMake. They are typically used by calling
-      ``dlopen()`` at runtime rather than linked at link time with ``ld -l``.
-      Specifying ``STATIC`` libraries, ``SHARED`` libraries, or executables
-      here will result in undefined behavior.
-
-    ``DIRECTORIES <directories>...``
-      List of additional directories to search for dependencies. On Linux
-      platforms, these directories are searched if the dependency is not found
-      in any of the other usual paths. If it is found in such a directory, a
-      warning is issued, because it means that the file is incomplete (it does
-      not list all of the directories that contain its dependencies).
-      On Windows platforms, these directories are searched if the dependency
-      is not found in any of the other search paths, but no warning is issued,
-      because searching other paths is a normal part of Windows dependency
-      resolution. On Apple platforms, this argument has no effect.
-
-    ``BUNDLE_EXECUTABLE <bundle_executable_file>``
-      Executable to treat as the "bundle executable" when resolving libraries.
-      On Apple platforms, this argument determines the value of
-      ``@executable_path`` when recursively resolving libraries for
-      ``LIBRARIES`` and ``MODULES`` files. It has no effect on ``EXECUTABLES``
-      files. On other platforms, it has no effect. This is typically (but not
-      always) one of the executables in the ``EXECUTABLES`` argument which
-      designates the "main" executable of the package.
-
-  The following arguments specify filters for including or excluding libraries
-  to be resolved. See below for a full description of how they work.
-
-    ``PRE_INCLUDE_REGEXES <regexes>...``
-      List of pre-include regexes through which to filter the names of
-      not-yet-resolved dependencies.
-
-    ``PRE_EXCLUDE_REGEXES <regexes>...``
-      List of pre-exclude regexes through which to filter the names of
-      not-yet-resolved dependencies.
-
-    ``POST_INCLUDE_REGEXES <regexes>...``
-      List of post-include regexes through which to filter the names of
-      resolved dependencies.
-
-    ``POST_EXCLUDE_REGEXES <regexes>...``
-      List of post-exclude regexes through which to filter the names of
-      resolved dependencies.
-
-    ``POST_INCLUDE_FILES <files>...``
-      .. versionadded:: 3.21
-
-      List of post-include filenames through which to filter the names of
-      resolved dependencies. Symlinks are resolved when attempting to match
-      these filenames.
-
-    ``POST_EXCLUDE_FILES <files>...``
-      .. versionadded:: 3.21
-
-      List of post-exclude filenames through which to filter the names of
-      resolved dependencies. Symlinks are resolved when attempting to match
-      these filenames.
-
-  These arguments can be used to exclude unwanted system libraries when
-  resolving the dependencies, or to include libraries from a specific
-  directory. The filtering works as follows:
-
-  1. If the not-yet-resolved dependency matches any of the
-     ``PRE_INCLUDE_REGEXES``, steps 2 and 3 are skipped, and the dependency
-     resolution proceeds to step 4.
-
-  2. If the not-yet-resolved dependency matches any of the
-     ``PRE_EXCLUDE_REGEXES``, dependency resolution stops for that dependency.
-
-  3. Otherwise, dependency resolution proceeds.
-
-  4. ``file(GET_RUNTIME_DEPENDENCIES)`` searches for the dependency according
-     to the linking rules of the platform (see below).
-
-  5. If the dependency is found, and its full path matches one of the
-     ``POST_INCLUDE_REGEXES`` or ``POST_INCLUDE_FILES``, the full path is added
-     to the resolved dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``
-     recursively resolves that library's own dependencies. Otherwise, resolution
-     proceeds to step 6.
-
-  6. If the dependency is found, but its full path matches one of the
-     ``POST_EXCLUDE_REGEXES`` or ``POST_EXCLUDE_FILES``, it is not added to the
-     resolved dependencies, and dependency resolution stops for that dependency.
-
-  7. If the dependency is found, and its full path does not match either
-     ``POST_INCLUDE_REGEXES``, ``POST_INCLUDE_FILES``, ``POST_EXCLUDE_REGEXES``,
-     or ``POST_EXCLUDE_FILES``, the full path is added to the resolved
-     dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``  recursively resolves
-     that library's own dependencies.
-
-  Different platforms have different rules for how dependencies are resolved.
-  These specifics are described here.
-
-  On Linux platforms, library resolution works as follows:
-
-  1. If the depending file does not have any ``RUNPATH`` entries, and the
-     library exists in one of the depending file's ``RPATH`` entries, or its
-     parents', in that order, the dependency is resolved to that file.
-  2. Otherwise, if the depending file has any ``RUNPATH`` entries, and the
-     library exists in one of those entries, the dependency is resolved to that
-     file.
-  3. Otherwise, if the library exists in one of the directories listed by
-     ``ldconfig``, the dependency is resolved to that file.
-  4. Otherwise, if the library exists in one of the ``DIRECTORIES`` entries,
-     the dependency is resolved to that file. In this case, a warning is
-     issued, because finding a file in one of the ``DIRECTORIES`` means that
-     the depending file is not complete (it does not list all the directories
-     from which it pulls dependencies).
-
-  5. Otherwise, the dependency is unresolved.
-
-  On Windows platforms, library resolution works as follows:
-
-  1. DLL dependency names are converted to lowercase for matching filters.
-     Windows DLL names are case-insensitive, and some linkers mangle the
-     case of the DLL dependency names.  However, this makes it more difficult
-     for ``PRE_INCLUDE_REGEXES``, ``PRE_EXCLUDE_REGEXES``,
-     ``POST_INCLUDE_REGEXES``, and ``POST_EXCLUDE_REGEXES`` to properly
-     filter DLL names - every regex would have to check for both uppercase
-     and lowercase letters.  For example:
-
-     .. code-block:: cmake
-
-       file(GET_RUNTIME_DEPENDENCIES
-         # ...
-         PRE_INCLUDE_REGEXES "^[Mm][Yy][Ll][Ii][Bb][Rr][Aa][Rr][Yy]\\.[Dd][Ll][Ll]$"
-         )
-
-     Converting the DLL name to lowercase allows the regexes to only match
-     lowercase names, thus simplifying the regex. For example:
-
-     .. code-block:: cmake
-
-       file(GET_RUNTIME_DEPENDENCIES
-         # ...
-         PRE_INCLUDE_REGEXES "^mylibrary\\.dll$"
-         )
-
-     This regex will match ``mylibrary.dll`` regardless of how it is cased,
-     either on disk or in the depending file. (For example, it will match
-     ``mylibrary.dll``, ``MyLibrary.dll``, and ``MYLIBRARY.DLL``.)
-
-     .. versionchanged:: 3.27
-
-       The conversion to lowercase only applies while matching filters.
-       Results reported after filtering case-preserve each DLL name as it is
-       found on disk, if resolved, and otherwise as it is referenced by the
-       dependent binary.
-
-       Prior to CMake 3.27, the results were reported with lowercase DLL
-       file names, but the directory portion retained its casing.
-
-  2. (**Not yet implemented**) If the depending file is a Windows Store app,
-     and the dependency is listed as a dependency in the application's package
-     manifest, the dependency is resolved to that file.
-
-  3. Otherwise, if the library exists in the same directory as the depending
-     file, the dependency is resolved to that file.
-
-  4. Otherwise, if the library exists in either the operating system's
-     ``system32`` directory or the ``Windows`` directory, in that order, the
-     dependency is resolved to that file.
-
-  5. Otherwise, if the library exists in one of the directories specified by
-     ``DIRECTORIES``, in the order they are listed, the dependency is resolved
-     to that file. In this case, a warning is not issued, because searching
-     other directories is a normal part of Windows library resolution.
-
-  6. Otherwise, the dependency is unresolved.
-
-  On Apple platforms, library resolution works as follows:
-
-  1. If the dependency starts with ``@executable_path/``, and an
-     ``EXECUTABLES`` argument is in the process of being resolved, and
-     replacing ``@executable_path/`` with the directory of the executable
-     yields an existing file, the dependency is resolved to that file.
-
-  2. Otherwise, if the dependency starts with ``@executable_path/``, and there
-     is a ``BUNDLE_EXECUTABLE`` argument, and replacing ``@executable_path/``
-     with the directory of the bundle executable yields an existing file, the
-     dependency is resolved to that file.
-
-  3. Otherwise, if the dependency starts with ``@loader_path/``, and replacing
-     ``@loader_path/`` with the directory of the depending file yields an
-     existing file, the dependency is resolved to that file.
-
-  4. Otherwise, if the dependency starts with ``@rpath/``, and replacing
-     ``@rpath/`` with one of the ``RPATH`` entries of the depending file
-     yields an existing file, the dependency is resolved to that file.
-     Note that ``RPATH`` entries that start with ``@executable_path/`` or
-     ``@loader_path/`` also have these items replaced with the appropriate
-     path.
-
-  5. Otherwise, if the dependency is an absolute file that exists,
-     the dependency is resolved to that file.
-
-  6. Otherwise, the dependency is unresolved.
-
-  This function accepts several variables that determine which tool is used for
-  dependency resolution:
-
-  .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
-
-    Determines which operating system and executable format the files are built
-    for. This could be one of several values:
-
-    * ``linux+elf``
-    * ``windows+pe``
-    * ``macos+macho``
-
-    If this variable is not specified, it is determined automatically by system
-    introspection.
-
-  .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
-
-    Determines the tool to use for dependency resolution. It could be one of
-    several values, depending on the value of
-    :variable:`CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`:
-
-    ================================================= =============================================
-       ``CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM``       ``CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL``
-    ================================================= =============================================
-    ``linux+elf``                                     ``objdump``
-    ``windows+pe``                                    ``objdump`` or ``dumpbin``
-    ``macos+macho``                                   ``otool``
-    ================================================= =============================================
-
-    If this variable is not specified, it is determined automatically by system
-    introspection.
-
-  .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
-
-    Determines the path to the tool to use for dependency resolution. This is
-    the actual path to ``objdump``, ``dumpbin``, or ``otool``.
-
-    If this variable is not specified, it is determined by the value of
-    ``CMAKE_OBJDUMP`` if set, else by system introspection.
-
-    .. versionadded:: 3.18
-      Use ``CMAKE_OBJDUMP`` if set.
-
 Writing
 ^^^^^^^
 
@@ -1275,3 +961,323 @@
     timestamp instead of extracting file timestamps from the archive.
 
   With ``VERBOSE``, the command will produce verbose output.
+
+Handling Runtime Binaries
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. signature::
+  file(GET_RUNTIME_DEPENDENCIES [...])
+
+  .. versionadded:: 3.16
+
+  Recursively get the list of libraries depended on by the given files:
+
+  .. code-block:: cmake
+
+    file(GET_RUNTIME_DEPENDENCIES
+      [RESOLVED_DEPENDENCIES_VAR <deps_var>]
+      [UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>]
+      [CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>]
+      [EXECUTABLES <executable_files>...]
+      [LIBRARIES <library_files>...]
+      [MODULES <module_files>...]
+      [DIRECTORIES <directories>...]
+      [BUNDLE_EXECUTABLE <bundle_executable_file>]
+      [PRE_INCLUDE_REGEXES <regexes>...]
+      [PRE_EXCLUDE_REGEXES <regexes>...]
+      [POST_INCLUDE_REGEXES <regexes>...]
+      [POST_EXCLUDE_REGEXES <regexes>...]
+      [POST_INCLUDE_FILES <files>...]
+      [POST_EXCLUDE_FILES <files>...]
+      )
+
+  Please note that this sub-command is not intended to be used in project mode.
+  It is intended for use at install time, either from code generated by the
+  :command:`install(RUNTIME_DEPENDENCY_SET)` command, or from code provided by
+  the project via :command:`install(CODE)` or :command:`install(SCRIPT)`.
+  For example:
+
+  .. code-block:: cmake
+
+    install(CODE [[
+      file(GET_RUNTIME_DEPENDENCIES
+        # ...
+        )
+      ]])
+
+  The arguments are as follows:
+
+    ``RESOLVED_DEPENDENCIES_VAR <deps_var>``
+      Name of the variable in which to store the list of resolved dependencies.
+
+    ``UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>``
+      Name of the variable in which to store the list of unresolved
+      dependencies. If this variable is not specified, and there are any
+      unresolved dependencies, an error is issued.
+
+    ``CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>``
+      Variable prefix in which to store conflicting dependency information.
+      Dependencies are conflicting if two files with the same name are found in
+      two different directories. The list of filenames that conflict are stored
+      in ``<conflicting_deps_prefix>_FILENAMES``. For each filename, the list
+      of paths that were found for that filename are stored in
+      ``<conflicting_deps_prefix>_<filename>``.
+
+    ``EXECUTABLES <executable_files>...``
+      List of executable files to read for dependencies. These are executables
+      that are typically created with :command:`add_executable`, but they do
+      not have to be created by CMake. On Apple platforms, the paths to these
+      files determine the value of ``@executable_path`` when recursively
+      resolving the libraries. Specifying any kind of library (``STATIC``,
+      ``MODULE``, or ``SHARED``) here will result in undefined behavior.
+
+    ``LIBRARIES <library_files>...``
+      List of library files to read for dependencies. These are libraries that
+      are typically created with :command:`add_library(SHARED)`, but they do
+      not have to be created by CMake. Specifying ``STATIC`` libraries,
+      ``MODULE`` libraries, or executables here will result in undefined
+      behavior.
+
+    ``MODULES <module_files>...``
+      List of loadable module files to read for dependencies. These are modules
+      that are typically created with :command:`add_library(MODULE)`, but they
+      do not have to be created by CMake. They are typically used by calling
+      ``dlopen()`` at runtime rather than linked at link time with ``ld -l``.
+      Specifying ``STATIC`` libraries, ``SHARED`` libraries, or executables
+      here will result in undefined behavior.
+
+    ``DIRECTORIES <directories>...``
+      List of additional directories to search for dependencies. On Linux
+      platforms, these directories are searched if the dependency is not found
+      in any of the other usual paths. If it is found in such a directory, a
+      warning is issued, because it means that the file is incomplete (it does
+      not list all of the directories that contain its dependencies).
+      On Windows platforms, these directories are searched if the dependency
+      is not found in any of the other search paths, but no warning is issued,
+      because searching other paths is a normal part of Windows dependency
+      resolution. On Apple platforms, this argument has no effect.
+
+    ``BUNDLE_EXECUTABLE <bundle_executable_file>``
+      Executable to treat as the "bundle executable" when resolving libraries.
+      On Apple platforms, this argument determines the value of
+      ``@executable_path`` when recursively resolving libraries for
+      ``LIBRARIES`` and ``MODULES`` files. It has no effect on ``EXECUTABLES``
+      files. On other platforms, it has no effect. This is typically (but not
+      always) one of the executables in the ``EXECUTABLES`` argument which
+      designates the "main" executable of the package.
+
+  The following arguments specify filters for including or excluding libraries
+  to be resolved. See below for a full description of how they work.
+
+    ``PRE_INCLUDE_REGEXES <regexes>...``
+      List of pre-include regexes through which to filter the names of
+      not-yet-resolved dependencies.
+
+    ``PRE_EXCLUDE_REGEXES <regexes>...``
+      List of pre-exclude regexes through which to filter the names of
+      not-yet-resolved dependencies.
+
+    ``POST_INCLUDE_REGEXES <regexes>...``
+      List of post-include regexes through which to filter the names of
+      resolved dependencies.
+
+    ``POST_EXCLUDE_REGEXES <regexes>...``
+      List of post-exclude regexes through which to filter the names of
+      resolved dependencies.
+
+    ``POST_INCLUDE_FILES <files>...``
+      .. versionadded:: 3.21
+
+      List of post-include filenames through which to filter the names of
+      resolved dependencies. Symlinks are resolved when attempting to match
+      these filenames.
+
+    ``POST_EXCLUDE_FILES <files>...``
+      .. versionadded:: 3.21
+
+      List of post-exclude filenames through which to filter the names of
+      resolved dependencies. Symlinks are resolved when attempting to match
+      these filenames.
+
+  These arguments can be used to exclude unwanted system libraries when
+  resolving the dependencies, or to include libraries from a specific
+  directory. The filtering works as follows:
+
+  1. If the not-yet-resolved dependency matches any of the
+     ``PRE_INCLUDE_REGEXES``, steps 2 and 3 are skipped, and the dependency
+     resolution proceeds to step 4.
+
+  2. If the not-yet-resolved dependency matches any of the
+     ``PRE_EXCLUDE_REGEXES``, dependency resolution stops for that dependency.
+
+  3. Otherwise, dependency resolution proceeds.
+
+  4. ``file(GET_RUNTIME_DEPENDENCIES)`` searches for the dependency according
+     to the linking rules of the platform (see below).
+
+  5. If the dependency is found, and its full path matches one of the
+     ``POST_INCLUDE_REGEXES`` or ``POST_INCLUDE_FILES``, the full path is added
+     to the resolved dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``
+     recursively resolves that library's own dependencies. Otherwise, resolution
+     proceeds to step 6.
+
+  6. If the dependency is found, but its full path matches one of the
+     ``POST_EXCLUDE_REGEXES`` or ``POST_EXCLUDE_FILES``, it is not added to the
+     resolved dependencies, and dependency resolution stops for that dependency.
+
+  7. If the dependency is found, and its full path does not match either
+     ``POST_INCLUDE_REGEXES``, ``POST_INCLUDE_FILES``, ``POST_EXCLUDE_REGEXES``,
+     or ``POST_EXCLUDE_FILES``, the full path is added to the resolved
+     dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``  recursively resolves
+     that library's own dependencies.
+
+  Different platforms have different rules for how dependencies are resolved.
+  These specifics are described here.
+
+  On Linux platforms, library resolution works as follows:
+
+  1. If the depending file does not have any ``RUNPATH`` entries, and the
+     library exists in one of the depending file's ``RPATH`` entries, or its
+     parents', in that order, the dependency is resolved to that file.
+  2. Otherwise, if the depending file has any ``RUNPATH`` entries, and the
+     library exists in one of those entries, the dependency is resolved to that
+     file.
+  3. Otherwise, if the library exists in one of the directories listed by
+     ``ldconfig``, the dependency is resolved to that file.
+  4. Otherwise, if the library exists in one of the ``DIRECTORIES`` entries,
+     the dependency is resolved to that file. In this case, a warning is
+     issued, because finding a file in one of the ``DIRECTORIES`` means that
+     the depending file is not complete (it does not list all the directories
+     from which it pulls dependencies).
+
+  5. Otherwise, the dependency is unresolved.
+
+  On Windows platforms, library resolution works as follows:
+
+  1. DLL dependency names are converted to lowercase for matching filters.
+     Windows DLL names are case-insensitive, and some linkers mangle the
+     case of the DLL dependency names.  However, this makes it more difficult
+     for ``PRE_INCLUDE_REGEXES``, ``PRE_EXCLUDE_REGEXES``,
+     ``POST_INCLUDE_REGEXES``, and ``POST_EXCLUDE_REGEXES`` to properly
+     filter DLL names - every regex would have to check for both uppercase
+     and lowercase letters.  For example:
+
+     .. code-block:: cmake
+
+       file(GET_RUNTIME_DEPENDENCIES
+         # ...
+         PRE_INCLUDE_REGEXES "^[Mm][Yy][Ll][Ii][Bb][Rr][Aa][Rr][Yy]\\.[Dd][Ll][Ll]$"
+         )
+
+     Converting the DLL name to lowercase allows the regexes to only match
+     lowercase names, thus simplifying the regex. For example:
+
+     .. code-block:: cmake
+
+       file(GET_RUNTIME_DEPENDENCIES
+         # ...
+         PRE_INCLUDE_REGEXES "^mylibrary\\.dll$"
+         )
+
+     This regex will match ``mylibrary.dll`` regardless of how it is cased,
+     either on disk or in the depending file. (For example, it will match
+     ``mylibrary.dll``, ``MyLibrary.dll``, and ``MYLIBRARY.DLL``.)
+
+     .. versionchanged:: 3.27
+
+       The conversion to lowercase only applies while matching filters.
+       Results reported after filtering case-preserve each DLL name as it is
+       found on disk, if resolved, and otherwise as it is referenced by the
+       dependent binary.
+
+       Prior to CMake 3.27, the results were reported with lowercase DLL
+       file names, but the directory portion retained its casing.
+
+  2. (**Not yet implemented**) If the depending file is a Windows Store app,
+     and the dependency is listed as a dependency in the application's package
+     manifest, the dependency is resolved to that file.
+
+  3. Otherwise, if the library exists in the same directory as the depending
+     file, the dependency is resolved to that file.
+
+  4. Otherwise, if the library exists in either the operating system's
+     ``system32`` directory or the ``Windows`` directory, in that order, the
+     dependency is resolved to that file.
+
+  5. Otherwise, if the library exists in one of the directories specified by
+     ``DIRECTORIES``, in the order they are listed, the dependency is resolved
+     to that file. In this case, a warning is not issued, because searching
+     other directories is a normal part of Windows library resolution.
+
+  6. Otherwise, the dependency is unresolved.
+
+  On Apple platforms, library resolution works as follows:
+
+  1. If the dependency starts with ``@executable_path/``, and an
+     ``EXECUTABLES`` argument is in the process of being resolved, and
+     replacing ``@executable_path/`` with the directory of the executable
+     yields an existing file, the dependency is resolved to that file.
+
+  2. Otherwise, if the dependency starts with ``@executable_path/``, and there
+     is a ``BUNDLE_EXECUTABLE`` argument, and replacing ``@executable_path/``
+     with the directory of the bundle executable yields an existing file, the
+     dependency is resolved to that file.
+
+  3. Otherwise, if the dependency starts with ``@loader_path/``, and replacing
+     ``@loader_path/`` with the directory of the depending file yields an
+     existing file, the dependency is resolved to that file.
+
+  4. Otherwise, if the dependency starts with ``@rpath/``, and replacing
+     ``@rpath/`` with one of the ``RPATH`` entries of the depending file
+     yields an existing file, the dependency is resolved to that file.
+     Note that ``RPATH`` entries that start with ``@executable_path/`` or
+     ``@loader_path/`` also have these items replaced with the appropriate
+     path.
+
+  5. Otherwise, if the dependency is an absolute file that exists,
+     the dependency is resolved to that file.
+
+  6. Otherwise, the dependency is unresolved.
+
+  This function accepts several variables that determine which tool is used for
+  dependency resolution:
+
+  .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
+
+    Determines which operating system and executable format the files are built
+    for. This could be one of several values:
+
+    * ``linux+elf``
+    * ``windows+pe``
+    * ``macos+macho``
+
+    If this variable is not specified, it is determined automatically by system
+    introspection.
+
+  .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
+
+    Determines the tool to use for dependency resolution. It could be one of
+    several values, depending on the value of
+    :variable:`CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`:
+
+    ================================================= =============================================
+       ``CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM``       ``CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL``
+    ================================================= =============================================
+    ``linux+elf``                                     ``objdump``
+    ``windows+pe``                                    ``objdump`` or ``dumpbin``
+    ``macos+macho``                                   ``otool``
+    ================================================= =============================================
+
+    If this variable is not specified, it is determined automatically by system
+    introspection.
+
+  .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
+
+    Determines the path to the tool to use for dependency resolution. This is
+    the actual path to ``objdump``, ``dumpbin``, or ``otool``.
+
+    If this variable is not specified, it is determined by the value of
+    ``CMAKE_OBJDUMP`` if set, else by system introspection.
+
+    .. versionadded:: 3.18
+      Use ``CMAKE_OBJDUMP`` if set.