mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
@@ -189,7 +189,14 @@ Commands
|
||||
|
||||
Everything after the ``FIND_PACKAGE_ARGS`` keyword is appended to the
|
||||
: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
|
||||
given.
|
||||
|
||||
@@ -254,6 +261,11 @@ Commands
|
||||
The value of the :variable:`FETCHCONTENT_TRY_FIND_PACKAGE_MODE` variable
|
||||
at the time :command:`FetchContent_Declare` was called determines whether
|
||||
``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
|
||||
:command:`find_package` call, ``FetchContent_MakeAvailable()`` then uses
|
||||
@@ -1072,10 +1084,17 @@ function(__FetchContent_declareDetails contentName)
|
||||
|
||||
set(__cmdArgs)
|
||||
set(__findPackageArgs)
|
||||
set(__sawQuietKeyword NO)
|
||||
set(__sawGlobalKeyword NO)
|
||||
foreach(__item IN LISTS ARGN)
|
||||
if(DEFINED __findPackageArgs)
|
||||
# All remaining args are for find_package()
|
||||
string(APPEND __findPackageArgs " [==[${__item}]==]")
|
||||
if(__item STREQUAL "QUIET")
|
||||
set(__sawQuietKeyword YES)
|
||||
elseif(__item STREQUAL "GLOBAL")
|
||||
set(__sawGlobalKeyword YES)
|
||||
endif()
|
||||
continue()
|
||||
endif()
|
||||
|
||||
@@ -1114,9 +1133,12 @@ function(__FetchContent_declareDetails contentName)
|
||||
if(__tryFindPackage AND __tryFindPackageAllowed)
|
||||
set(propertyName "_FetchContent_${contentNameLower}_find_package_args")
|
||||
define_property(GLOBAL PROPERTY ${propertyName})
|
||||
if(NOT QUIET IN_LIST __findPackageArgs)
|
||||
if(NOT __sawQuietKeyword)
|
||||
list(INSERT __findPackageArgs 0 QUIET)
|
||||
endif()
|
||||
if(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL AND NOT __sawGlobalKeyword)
|
||||
list(APPEND __findPackageArgs GLOBAL)
|
||||
endif()
|
||||
cmake_language(EVAL CODE
|
||||
"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-BOGUS)
|
||||
run_cmake(Redirect_find_package_MODULE)
|
||||
run_cmake(GLOBAL)
|
||||
|
||||
Reference in New Issue
Block a user