e0590a0b56
kf6-kcoreaddons 6.28.0 requires ECM >= 6.28.0 but the vendored ECM source/ was still 6.10.0: the sync engine skipped it because ECM's version marker is a bare set(VERSION "X.Y.Z") that the parser didn't recognize (only KF_VERSION / PROJECT_VERSION / RELEASE_SERVICE_VERSION). Re-lay ECM from its 6.28.0 source.tar (pure cmake modules, no Redox port) and teach both the sync engine and the validator to read set(VERSION) so this class is caught, not silently skipped.
84 lines
3.0 KiB
CMake
84 lines
3.0 KiB
CMake
# SPDX-FileCopyrightText: 2011 Alexander Neundorf <neundorf@kde.org>
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
#[=======================================================================[.rst:
|
|
ECMUseFindModules
|
|
-----------------
|
|
|
|
Selectively use some of the find modules provided by extra-cmake-modules.
|
|
|
|
This module is automatically available once extra-cmake-modules has been
|
|
found, so it is not necessary to ``include(ECMUseFindModules)`` explicitly.
|
|
|
|
::
|
|
|
|
ecm_use_find_modules(DIR <dir>
|
|
MODULES module1.cmake [module2.cmake [...]]
|
|
[NO_OVERRIDE])
|
|
|
|
This allows selective use of the find modules provided by ECM, including
|
|
deferring to CMake's versions of those modules if it has them. Rather than
|
|
adding ``${ECM_FIND_MODULE_DIR}`` to ``CMAKE_MODULE_PATH``, you use
|
|
``ecm_use_find_modules()`` to copy the modules you want to a local (build)
|
|
directory, and add that to ``CMAKE_MODULE_PATH``.
|
|
|
|
The find modules given to ``MODULES`` will be copied to the directory given by ``DIR``
|
|
(which should be located in ``${CMAKE_BINARY_DIR}`` and added to
|
|
``CMAKE_MODULE_PATH``). If ``NO_OVERRIDE`` is given, only modules not also
|
|
provided by CMake will be copied.
|
|
|
|
Example:
|
|
|
|
.. code-block:: cmake
|
|
|
|
find_package(ECM REQUIRED)
|
|
ecm_use_find_modules(
|
|
DIR ${CMAKE_BINARY_DIR}/cmake
|
|
MODULES FindEGL.cmake
|
|
NO_OVERRIDE
|
|
)
|
|
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/cmake)
|
|
|
|
This example will make ``FindEGL.cmake`` available in your project, but only
|
|
as long as it is not yet part of CMake. Calls to ``find_package(EGL)`` will
|
|
then make use of this copied module (or the CMake module if it exists).
|
|
|
|
Another possible use for this macro is to take copies of find modules that can
|
|
be installed along with config files if they are required as a dependency (for
|
|
example, if targets provided by the find module are in the link interface of a
|
|
library).
|
|
|
|
Since pre-1.0.0.
|
|
#]=======================================================================]
|
|
|
|
cmake_policy(VERSION 3.16)
|
|
|
|
function(ecm_use_find_modules)
|
|
set(_options NO_OVERRIDE )
|
|
set(_oneValueArgs DIR )
|
|
set(_multiValueArgs MODULES )
|
|
cmake_parse_arguments(EUFM "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN} )
|
|
if(NOT EUFM_DIR)
|
|
message(FATAL_ERROR "No DIR specified for ecm_use_find_modules() !")
|
|
endif()
|
|
|
|
if(NOT IS_ABSOLUTE "${EUFM_DIR}")
|
|
set(EUFM_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EUFM_DIR}")
|
|
endif()
|
|
file(MAKE_DIRECTORY "${EUFM_DIR}")
|
|
|
|
foreach(file ${EUFM_MODULES})
|
|
if(NOT EXISTS ${ECM_FIND_MODULE_DIR}/${file} )
|
|
message(FATAL_ERROR "File ${file} not found in ${ECM_FIND_MODULE_DIR} !")
|
|
endif()
|
|
if(NOT EXISTS "${CMAKE_ROOT}/Modules/${file}" OR NOT EUFM_NO_OVERRIDE)
|
|
configure_file("${ECM_FIND_MODULE_DIR}/${file}" "${EUFM_DIR}/${file}" COPYONLY)
|
|
endif()
|
|
endforeach()
|
|
# This is required by some of the find modules
|
|
file(WRITE "${EUFM_DIR}/ECMFindModuleHelpersStub.cmake"
|
|
"include(\"${ECM_MODULE_DIR}/ECMFindModuleHelpers.cmake\")")
|
|
|
|
endfunction()
|