Warning, /frameworks/extra-cmake-modules/modules/ECMUseFindModules.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2011 Alexander Neundorf <neundorf@kde.org>
0002 #
0003 # SPDX-License-Identifier: BSD-3-Clause
0004
0005 #[=======================================================================[.rst:
0006 ECMUseFindModules
0007 -----------------
0008
0009 Selectively use some of the find modules provided by extra-cmake-modules.
0010
0011 This module is automatically available once extra-cmake-modules has been
0012 found, so it is not necessary to ``include(ECMUseFindModules)`` explicitly.
0013
0014 ::
0015
0016 ecm_use_find_modules(DIR <dir>
0017 MODULES module1.cmake [module2.cmake [...]]
0018 [NO_OVERRIDE])
0019
0020 This allows selective use of the find modules provided by ECM, including
0021 deferring to CMake's versions of those modules if it has them. Rather than
0022 adding ``${ECM_FIND_MODULE_DIR}`` to ``CMAKE_MODULE_PATH``, you use
0023 ``ecm_use_find_modules()`` to copy the modules you want to a local (build)
0024 directory, and add that to ``CMAKE_MODULE_PATH``.
0025
0026 The find modules given to ``MODULES`` will be copied to the directory given by ``DIR``
0027 (which should be located in ``${CMAKE_BINARY_DIR}`` and added to
0028 ``CMAKE_MODULE_PATH``). If ``NO_OVERRIDE`` is given, only modules not also
0029 provided by CMake will be copied.
0030
0031 Example:
0032
0033 .. code-block:: cmake
0034
0035 find_package(ECM REQUIRED)
0036 ecm_use_find_modules(
0037 DIR ${CMAKE_BINARY_DIR}/cmake
0038 MODULES FindEGL.cmake
0039 NO_OVERRIDE
0040 )
0041 set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/cmake)
0042
0043 This example will make ``FindEGL.cmake`` available in your project, but only
0044 as long as it is not yet part of CMake. Calls to ``find_package(EGL)`` will
0045 then make use of this copied module (or the CMake module if it exists).
0046
0047 Another possible use for this macro is to take copies of find modules that can
0048 be installed along with config files if they are required as a dependency (for
0049 example, if targets provided by the find module are in the link interface of a
0050 library).
0051
0052 Since pre-1.0.0.
0053 #]=======================================================================]
0054
0055 function(ecm_use_find_modules)
0056 set(_options NO_OVERRIDE )
0057 set(_oneValueArgs DIR )
0058 set(_multiValueArgs MODULES )
0059 cmake_parse_arguments(EUFM "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN} )
0060 if(NOT EUFM_DIR)
0061 message(FATAL_ERROR "No DIR specified for ecm_use_find_modules() !")
0062 endif()
0063
0064 if(NOT IS_ABSOLUTE "${EUFM_DIR}")
0065 set(EUFM_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EUFM_DIR}")
0066 endif()
0067 file(MAKE_DIRECTORY "${EUFM_DIR}")
0068
0069 foreach(file ${EUFM_MODULES})
0070 if(NOT EXISTS ${ECM_FIND_MODULE_DIR}/${file} )
0071 message(FATAL_ERROR "File ${file} not found in ${ECM_FIND_MODULE_DIR} !")
0072 endif()
0073 if(NOT EXISTS "${CMAKE_ROOT}/Modules/${file}" OR NOT EUFM_NO_OVERRIDE)
0074 configure_file("${ECM_FIND_MODULE_DIR}/${file}" "${EUFM_DIR}/${file}" COPYONLY)
0075 endif()
0076 endforeach()
0077 # This is required by some of the find modules
0078 file(WRITE "${EUFM_DIR}/ECMFindModuleHelpersStub.cmake"
0079 "include(\"${ECM_MODULE_DIR}/ECMFindModuleHelpers.cmake\")")
0080
0081 endfunction()