Merge topic 'fetchcontent-global-targets'
f19b48e0b8
FetchContent: Honor CMAKE_FIND_PACKAGE_TARGETS_GLOBAL1305bade56
Help: Add missing version directive for find_package() GLOBAL keyword Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !7347
This commit is contained in:
commit
9f16821ea5
@ -146,10 +146,11 @@ available components.
|
|||||||
ignored on all other ones. Formally, it is up to the target package how to
|
ignored on all other ones. Formally, it is up to the target package how to
|
||||||
interpret the registry view information given to it.
|
interpret the registry view information given to it.
|
||||||
|
|
||||||
Specifying the ``GLOBAL`` keyword will promote all imported targets to
|
.. versionadded:: 3.24
|
||||||
a global scope in the importing project. Alternatively this functionality
|
Specifying the ``GLOBAL`` keyword will promote all imported targets to
|
||||||
can be enabled by setting the variable
|
a global scope in the importing project. Alternatively, this functionality
|
||||||
:variable:`CMAKE_FIND_PACKAGE_TARGETS_GLOBAL`
|
can be enabled by setting the :variable:`CMAKE_FIND_PACKAGE_TARGETS_GLOBAL`
|
||||||
|
variable.
|
||||||
|
|
||||||
.. _FIND_PACKAGE_VERSION_FORMAT:
|
.. _FIND_PACKAGE_VERSION_FORMAT:
|
||||||
|
|
||||||
|
@ -195,7 +195,14 @@ Commands
|
|||||||
|
|
||||||
Everything after the ``FIND_PACKAGE_ARGS`` keyword is appended to the
|
Everything after the ``FIND_PACKAGE_ARGS`` keyword is appended to the
|
||||||
:command:`find_package` call, so all other ``<contentOptions>`` must
|
:command:`find_package` call, so all other ``<contentOptions>`` must
|
||||||
come before the ``FIND_PACKAGE_ARGS`` keyword.
|
come before the ``FIND_PACKAGE_ARGS`` keyword. If the
|
||||||
|
:variable:`CMAKE_FIND_PACKAGE_TARGETS_GLOBAL` variable is set to true
|
||||||
|
at the time ``FetchContent_Declare()`` is called, a ``GLOBAL`` keyword
|
||||||
|
will be appended to the :command:`find_package` arguments if it was
|
||||||
|
not already specified. It will also be appended if
|
||||||
|
``FIND_PACKAGE_ARGS`` was not given, but
|
||||||
|
:variable:`FETCHCONTENT_TRY_FIND_PACKAGE_MODE` was set to ``ALWAYS``.
|
||||||
|
|
||||||
``OVERRIDE_FIND_PACKAGE`` cannot be used when ``FIND_PACKAGE_ARGS`` is
|
``OVERRIDE_FIND_PACKAGE`` cannot be used when ``FIND_PACKAGE_ARGS`` is
|
||||||
given.
|
given.
|
||||||
|
|
||||||
@ -260,6 +267,11 @@ Commands
|
|||||||
The value of the :variable:`FETCHCONTENT_TRY_FIND_PACKAGE_MODE` variable
|
The value of the :variable:`FETCHCONTENT_TRY_FIND_PACKAGE_MODE` variable
|
||||||
at the time :command:`FetchContent_Declare` was called determines whether
|
at the time :command:`FetchContent_Declare` was called determines whether
|
||||||
``FetchContent_MakeAvailable()`` can call :command:`find_package`.
|
``FetchContent_MakeAvailable()`` can call :command:`find_package`.
|
||||||
|
If the :variable:`CMAKE_FIND_PACKAGE_TARGETS_GLOBAL` variable is set to
|
||||||
|
true when ``FetchContent_MakeAvailable()`` is called, it still affects
|
||||||
|
any imported targets created when that in turn calls
|
||||||
|
:command:`find_package`, even if that variable was false when the
|
||||||
|
corresponding details were declared.
|
||||||
|
|
||||||
If the dependency was not satisfied by a provider or a
|
If the dependency was not satisfied by a provider or a
|
||||||
:command:`find_package` call, ``FetchContent_MakeAvailable()`` then uses
|
:command:`find_package` call, ``FetchContent_MakeAvailable()`` then uses
|
||||||
@ -1078,10 +1090,17 @@ function(__FetchContent_declareDetails contentName)
|
|||||||
|
|
||||||
set(__cmdArgs)
|
set(__cmdArgs)
|
||||||
set(__findPackageArgs)
|
set(__findPackageArgs)
|
||||||
|
set(__sawQuietKeyword NO)
|
||||||
|
set(__sawGlobalKeyword NO)
|
||||||
foreach(__item IN LISTS ARGN)
|
foreach(__item IN LISTS ARGN)
|
||||||
if(DEFINED __findPackageArgs)
|
if(DEFINED __findPackageArgs)
|
||||||
# All remaining args are for find_package()
|
# All remaining args are for find_package()
|
||||||
string(APPEND __findPackageArgs " [==[${__item}]==]")
|
string(APPEND __findPackageArgs " [==[${__item}]==]")
|
||||||
|
if(__item STREQUAL "QUIET")
|
||||||
|
set(__sawQuietKeyword YES)
|
||||||
|
elseif(__item STREQUAL "GLOBAL")
|
||||||
|
set(__sawGlobalKeyword YES)
|
||||||
|
endif()
|
||||||
continue()
|
continue()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -1120,9 +1139,12 @@ function(__FetchContent_declareDetails contentName)
|
|||||||
if(__tryFindPackage AND __tryFindPackageAllowed)
|
if(__tryFindPackage AND __tryFindPackageAllowed)
|
||||||
set(propertyName "_FetchContent_${contentNameLower}_find_package_args")
|
set(propertyName "_FetchContent_${contentNameLower}_find_package_args")
|
||||||
define_property(GLOBAL PROPERTY ${propertyName})
|
define_property(GLOBAL PROPERTY ${propertyName})
|
||||||
if(NOT QUIET IN_LIST __findPackageArgs)
|
if(NOT __sawQuietKeyword)
|
||||||
list(INSERT __findPackageArgs 0 QUIET)
|
list(INSERT __findPackageArgs 0 QUIET)
|
||||||
endif()
|
endif()
|
||||||
|
if(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL AND NOT __sawGlobalKeyword)
|
||||||
|
list(APPEND __findPackageArgs GLOBAL)
|
||||||
|
endif()
|
||||||
cmake_language(EVAL CODE
|
cmake_language(EVAL CODE
|
||||||
"set_property(GLOBAL PROPERTY ${propertyName} ${__findPackageArgs})"
|
"set_property(GLOBAL PROPERTY ${propertyName} ${__findPackageArgs})"
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
FetchContent_MakeAvailable(
|
||||||
|
GlobalWithArgsKeyword
|
||||||
|
GlobalWithoutArgsKeyword
|
||||||
|
LocalWithArgsKeyword
|
||||||
|
LocalWithoutArgsKeyword
|
||||||
|
)
|
||||||
|
|
||||||
|
# This one was declared without GLOBAL, but should still become global when
|
||||||
|
# this variable is true at the time FetchContent_MakeAvailable() is called
|
||||||
|
set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL TRUE)
|
||||||
|
FetchContent_MakeAvailable(EventuallyGlobal)
|
50
Tests/RunCMake/FetchContent_find_package/GLOBAL.cmake
Normal file
50
Tests/RunCMake/FetchContent_find_package/GLOBAL.cmake
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageFindModules)
|
||||||
|
set(FETCHCONTENT_TRY_FIND_PACKAGE_MODE ALWAYS)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL TRUE)
|
||||||
|
FetchContent_Declare(
|
||||||
|
GlobalWithArgsKeyword
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/FatalIfAdded
|
||||||
|
FIND_PACKAGE_ARGS
|
||||||
|
)
|
||||||
|
FetchContent_Declare(
|
||||||
|
GlobalWithoutArgsKeyword
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/FatalIfAdded
|
||||||
|
)
|
||||||
|
|
||||||
|
set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL FALSE)
|
||||||
|
FetchContent_Declare(
|
||||||
|
LocalWithArgsKeyword
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/FatalIfAdded
|
||||||
|
FIND_PACKAGE_ARGS
|
||||||
|
)
|
||||||
|
FetchContent_Declare(
|
||||||
|
LocalWithoutArgsKeyword
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/FatalIfAdded
|
||||||
|
)
|
||||||
|
FetchContent_Declare(
|
||||||
|
EventuallyGlobal
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/FatalIfAdded
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(ChildScope)
|
||||||
|
|
||||||
|
if(NOT TARGET GlobalWithArgsKeywordExe)
|
||||||
|
message(SEND_ERROR "GlobalWithArgsKeywordExe is not a global target")
|
||||||
|
endif()
|
||||||
|
if(NOT TARGET GlobalWithoutArgsKeywordExe)
|
||||||
|
message(SEND_ERROR "GlobalWithoutArgsKeywordExe is not a global target")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET LocalWithArgsKeywordExe)
|
||||||
|
message(SEND_ERROR "LocalWithArgsKeywordExe is unexpectedly a global target")
|
||||||
|
endif()
|
||||||
|
if(TARGET LocalWithoutArgsKeywordExe)
|
||||||
|
message(SEND_ERROR "LocalWithoutArgsKeywordExe is unexpectedly a global target")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET EventuallyGlobalExe)
|
||||||
|
message(SEND_ERROR "EventuallyGlobalExe is not a global target")
|
||||||
|
endif()
|
@ -0,0 +1,6 @@
|
|||||||
|
add_executable(EventuallyGlobalExe IMPORTED)
|
||||||
|
set_target_properties(EventuallyGlobalExe PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CMAKE_COMMAND}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(EventuallyGlobal_FOUND TRUE)
|
@ -0,0 +1,6 @@
|
|||||||
|
add_executable(GlobalWithArgsKeywordExe IMPORTED)
|
||||||
|
set_target_properties(GlobalWithArgsKeywordExe PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CMAKE_COMMAND}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(GlobalWithArgsKeyword_FOUND TRUE)
|
@ -0,0 +1,6 @@
|
|||||||
|
add_executable(GlobalWithoutArgsKeywordExe IMPORTED)
|
||||||
|
set_target_properties(GlobalWithoutArgsKeywordExe PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CMAKE_COMMAND}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(GlobalWithoutArgsKeyword_FOUND TRUE)
|
@ -0,0 +1,6 @@
|
|||||||
|
add_executable(LocalWithArgsKeywordExe IMPORTED)
|
||||||
|
set_target_properties(LocalWithArgsKeywordExe PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CMAKE_COMMAND}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LocalWithArgsKeyword_FOUND TRUE)
|
@ -0,0 +1,6 @@
|
|||||||
|
add_executable(LocalWithoutArgsKeywordExe IMPORTED)
|
||||||
|
set_target_properties(LocalWithoutArgsKeywordExe PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CMAKE_COMMAND}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LocalWithoutArgsKeyword_FOUND TRUE)
|
@ -20,3 +20,4 @@ run_cmake(Try_find_package-NEVER)
|
|||||||
run_cmake(Try_find_package-OPT_IN)
|
run_cmake(Try_find_package-OPT_IN)
|
||||||
run_cmake(Try_find_package-BOGUS)
|
run_cmake(Try_find_package-BOGUS)
|
||||||
run_cmake(Redirect_find_package_MODULE)
|
run_cmake(Redirect_find_package_MODULE)
|
||||||
|
run_cmake(GLOBAL)
|
||||||
|
Loading…
Reference in New Issue
Block a user