aboutsummaryrefslogtreecommitdiffstats
path: root/src/share
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2024-02-09 14:32:33 +0100
committerCristian Adam <cristian.adam@qt.io>2024-02-19 08:30:47 +0000
commitd13a7dc9b51fcdfb1d7686c753aa1a2d4070cbf0 (patch)
tree838a1fe7782861669be4821781c7fb20e4c596f3 /src/share
parent1bd3c7d9e5b93b23fc642700a34933780db52a48 (diff)
CMakePM: Update cmake conan for auto-setup
Update to https://github.com/conan-io/cmake-conan/commit/ f6464d1e13ef7a47c569f5061f9607ea63339d39 Task-number: QTCREATORBUG-30169 Change-Id: Ibb8f3d353117c5c8ce21b8686cb6e2e5ee146698 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io> Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Diffstat (limited to 'src/share')
-rw-r--r--src/share/3rdparty/package-manager/conan_provider.cmake243
1 files changed, 177 insertions, 66 deletions
diff --git a/src/share/3rdparty/package-manager/conan_provider.cmake b/src/share/3rdparty/package-manager/conan_provider.cmake
index d94a9d811f..e5fa9cec19 100644
--- a/src/share/3rdparty/package-manager/conan_provider.cmake
+++ b/src/share/3rdparty/package-manager/conan_provider.cmake
@@ -1,5 +1,5 @@
# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake
-# commit: 451fa97d2c59c07b13fb4812a64b2a6391f9e781
+# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39
#
# The MIT License (MIT)
#
@@ -30,22 +30,26 @@ function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION)
# it could be cross compilation
message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}")
if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic")
- if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
+ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(${OS} Macos PARENT_SCOPE)
- elseif(${CMAKE_SYSTEM_NAME} STREQUAL "QNX")
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
set(${OS} Neutrino PARENT_SCOPE)
- elseif(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN")
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
set(${OS} Windows PARENT_SCOPE)
set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE)
- elseif(${CMAKE_SYSTEM_NAME} MATCHES "^MSYS")
+ elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS")
set(${OS} Windows PARENT_SCOPE)
set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE)
else()
set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE)
endif()
- if(${CMAKE_SYSTEM_NAME} STREQUAL "Android")
- string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM})
- message(STATUS "CMake-Conan: android_platform=${ANDROID_PLATFORM}")
+ if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+ if(DEFINED ANDROID_PLATFORM)
+ string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM})
+ elseif(DEFINED CMAKE_SYSTEM_VERSION)
+ set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION})
+ endif()
+ message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}")
set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE)
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS")
@@ -91,15 +95,22 @@ function(detect_arch ARCH)
message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.")
endif()
endif()
- if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64" OR CMAKE_OSX_ARCHITECTURES MATCHES arm64)
+ if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "")
+ set(host_arch ${CMAKE_OSX_ARCHITECTURES})
+ elseif(MSVC)
+ set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})
+ else()
+ set(host_arch ${CMAKE_SYSTEM_PROCESSOR})
+ endif()
+ if(host_arch MATCHES "aarch64|arm64|ARM64")
set(_ARCH armv8)
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv7-a|armv7l" OR CMAKE_OSX_ARCHITECTURES MATCHES armv7)
+ elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7")
set(_ARCH armv7)
- elseif(CMAKE_OSX_ARCHITECTURES MATCHES armv7s)
+ elseif(host_arch MATCHES armv7s)
set(_ARCH armv7s)
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686" OR CMAKE_OSX_ARCHITECTURES MATCHES i386)
+ elseif(host_arch MATCHES "i686|i386|X86")
set(_ARCH x86)
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|amd64|x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
+ elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64")
set(_ARCH x86_64)
endif()
message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}")
@@ -114,6 +125,7 @@ function(detect_cxx_standard CXX_STANDARD)
endif()
endfunction()
+
macro(detect_gnu_libstdcxx)
# _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++
check_cxx_source_compiles("
@@ -136,6 +148,7 @@ macro(detect_gnu_libstdcxx)
unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI)
endmacro()
+
macro(detect_libcxx)
# _CONAN_IS_LIBCXX true if LLVM libc++
check_cxx_source_compiles("
@@ -147,10 +160,10 @@ macro(detect_libcxx)
endmacro()
-function(detect_lib_cxx OS LIB_CXX)
- if(${OS} STREQUAL "Android")
- message(STATUS "CMake-Conan: android_stl=${ANDROID_STL}")
- set(${LIB_CXX} ${ANDROID_STL} PARENT_SCOPE)
+function(detect_lib_cxx LIB_CXX)
+ if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+ message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}")
+ set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE)
return()
endif()
@@ -207,37 +220,42 @@ function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUN
string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION)
# Configure compiler.runtime and compiler.runtime_type settings for MSVC
if(CMAKE_MSVC_RUNTIME_LIBRARY)
- set(_KNOWN_MSVC_RUNTIME_VALUES "")
- list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL)
- list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL)
- list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$<CONFIG:Debug>:Debug> MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
-
- # only accept the 6 possible values, otherwise we don't don't know to map this
- if(NOT CMAKE_MSVC_RUNTIME_LIBRARY IN_LIST _KNOWN_MSVC_RUNTIME_VALUES)
- message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${CMAKE_MSVC_RUNTIME_LIBRARY} to Conan settings")
- endif()
+ set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY})
+ else()
+ set(_msvc_runtime_library MultiThreaded$<$<CONFIG:Debug>:Debug>DLL) # default value documented by CMake
+ endif()
+
+ set(_KNOWN_MSVC_RUNTIME_VALUES "")
+ list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL)
+ list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL)
+ list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$<CONFIG:Debug>:Debug> MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
- # Runtime is "dynamic" in all cases if it ends in DLL
- if(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES ".*DLL$")
- set(_COMPILER_RUNTIME "dynamic")
+ # only accept the 6 possible values, otherwise we don't don't know to map this
+ if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES)
+ message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings")
+ endif()
+
+ # Runtime is "dynamic" in all cases if it ends in DLL
+ if(_msvc_runtime_library MATCHES ".*DLL$")
+ set(_COMPILER_RUNTIME "dynamic")
+ else()
+ set(_COMPILER_RUNTIME "static")
+ endif()
+ message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}")
+
+ # Only define compiler.runtime_type when explicitly requested
+ # If a generator expression is used, let Conan handle it conditional on build_type
+ if(NOT _msvc_runtime_library MATCHES "<CONFIG:Debug>:Debug>")
+ if(_msvc_runtime_library MATCHES "Debug")
+ set(_COMPILER_RUNTIME_TYPE "Debug")
else()
- set(_COMPILER_RUNTIME "static")
+ set(_COMPILER_RUNTIME_TYPE "Release")
endif()
+ message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}")
+ endif()
- # Only define compiler.runtime_type when explicitly requested
- # If a generator expression is used, let Conan handle it conditional on build_type
- get_property(_IS_MULTI_CONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
- if(NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "<CONFIG:Debug>:Debug>")
- if(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "Debug")
- set(_COMPILER_RUNTIME_TYPE "Debug")
- else()
- set(_COMPILER_RUNTIME_TYPE "Release")
- endif()
- endif()
+ unset(_KNOWN_MSVC_RUNTIME_VALUES)
- unset(_KNOWN_MSVC_RUNTIME_VALUES)
- unset(_IS_MULTI_CONFIG_GENERATOR)
- endif()
elseif(_COMPILER MATCHES AppleClang)
set(_COMPILER "apple-clang")
string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
@@ -267,6 +285,7 @@ function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUN
set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE)
endfunction()
+
function(detect_build_type BUILD_TYPE)
get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT _MULTICONFIG_GENERATOR)
@@ -276,23 +295,43 @@ function(detect_build_type BUILD_TYPE)
endif()
endfunction()
+macro(set_conan_compiler_if_appleclang lang command output_variable)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang")
+ execute_process(COMMAND xcrun --find ${command}
+ OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE)
+ cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path)
+ cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path)
+ if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}")
+ set(${output_variable} "")
+ endif()
+ unset(_xcrun_out)
+ unset(_xcrun_toolchain_path)
+ unset(_compiler_parent_path)
+ endif()
+endmacro()
+
+
macro(append_compiler_executables_configuration)
set(_conan_c_compiler "")
set(_conan_cpp_compiler "")
if(CMAKE_C_COMPILER)
set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",")
+ set_conan_compiler_if_appleclang(C cc _conan_c_compiler)
else()
message(WARNING "CMake-Conan: The C compiler is not defined. "
"Please define CMAKE_C_COMPILER or enable the C language.")
endif()
if(CMAKE_CXX_COMPILER)
set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"")
+ set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler)
else()
message(WARNING "CMake-Conan: The C++ compiler is not defined. "
"Please define CMAKE_CXX_COMPILER or enable the C++ language.")
endif()
- string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n")
+ if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x")
+ string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n")
+ endif()
unset(_conan_c_compiler)
unset(_conan_cpp_compiler)
endmacro()
@@ -303,7 +342,7 @@ function(detect_host_profile output_file)
detect_arch(MYARCH)
detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE)
detect_cxx_standard(MYCXX_STANDARD)
- detect_lib_cxx(MYOS MYLIB_CXX)
+ detect_lib_cxx(MYLIB_CXX)
detect_build_type(MYBUILD_TYPE)
set(PROFILE "")
@@ -360,7 +399,7 @@ function(detect_host_profile output_file)
# propagate compilers via profile
append_compiler_executables_configuration()
- if(${MYOS} STREQUAL "Android")
+ if(MYOS STREQUAL "Android")
string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n")
endif()
@@ -398,12 +437,26 @@ function(conan_install)
# Invoke "conan install" with the provided arguments
set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER})
message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}")
+
+
+ # In case there was not a valid cmake executable in the PATH, we inject the
+ # same we used to invoke the provider to the PATH
+ if(DEFINED PATH_TO_CMAKE_BIN)
+ set(_OLD_PATH $ENV{PATH})
+ set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}")
+ endif()
+
execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json
RESULT_VARIABLE return_code
OUTPUT_VARIABLE conan_stdout
ERROR_VARIABLE conan_stderr
ECHO_ERROR_VARIABLE # show the text output regardless
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+
+ if(DEFINED PATH_TO_CMAKE_BIN)
+ set(ENV{PATH} "${_OLD_PATH}")
+ endif()
+
if(NOT "${return_code}" STREQUAL "0")
message(FATAL_ERROR "Conan install failed='${return_code}'")
else()
@@ -411,6 +464,7 @@ function(conan_install)
# one is specified, but we don't know a priori where this is.
# TODO: this can be made more robust if Conan can provide this in the json output
string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder)
+ cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER)
# message("conan stdout: ${conan_stdout}")
message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}")
set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}")
@@ -459,6 +513,7 @@ function(conan_version_check)
endif()
endfunction()
+
macro(construct_profile_argument argument_variable profile_list)
set(${argument_variable} "")
if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE")
@@ -479,8 +534,8 @@ endmacro()
macro(conan_provide_dependency method package_name)
set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE)
- get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
- if(NOT CONAN_INSTALL_SUCCESS)
+ get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
+ if(NOT _conan_install_success)
find_program(CONAN_COMMAND "conan" REQUIRED)
conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION)
conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION})
@@ -493,21 +548,39 @@ macro(conan_provide_dependency method package_name)
endif()
construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE)
construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE)
- get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
- if(NOT _MULTICONFIG_GENERATOR)
+ if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py")
+ file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile)
+ if(NOT "${outfile}" MATCHES ".*CMakeDeps.*")
+ message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile")
+ endif()
+ set(generator "")
+ elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt")
+ file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile)
+ if(NOT "${outfile}" MATCHES ".*CMakeDeps.*")
+ message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. "
+ "Please define the generator as it will be mandatory in the future")
+ endif()
+ set(generator "-g;CMakeDeps")
+ endif()
+ get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+ if(NOT _multiconfig_generator)
message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}")
- conan_install(${_host_profile_flags} ${_build_profile_flags} --build=missing -g CMakeDeps)
+ conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator})
else()
message(STATUS "CMake-Conan: Installing both Debug and Release")
- conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release --build=missing -g CMakeDeps)
- conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug --build=missing -g CMakeDeps)
+ conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator})
+ conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator})
endif()
- unset(_MULTICONFIG_GENERATOR)
+ unset(_host_profile_flags)
+ unset(_build_profile_flags)
+ unset(_multiconfig_generator)
+ unset(_conan_install_success)
else()
message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran")
+ unset(_conan_install_success)
endif()
- get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
+ get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
# Ensure that we consider Conan-provided packages ahead of any other,
# irrespective of other settings that modify the search order or search paths
@@ -517,28 +590,66 @@ macro(conan_provide_dependency method package_name)
# find_package (<PackageName>)
# Filter out `REQUIRED` from the argument list, as the first call may fail
- set(_find_args "${ARGN}")
- list(REMOVE_ITEM _find_args "REQUIRED")
- if(NOT "MODULE" IN_LIST _find_args)
- find_package(${package_name} ${_find_args} BYPASS_PROVIDER PATHS "${CONAN_GENERATORS_FOLDER}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+ set(_find_args_${package_name} "${ARGN}")
+ list(REMOVE_ITEM _find_args_${package_name} "REQUIRED")
+ if(NOT "MODULE" IN_LIST _find_args_${package_name})
+ find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+ unset(_find_args_${package_name})
endif()
# Invoke find_package a second time - if the first call succeeded,
# this will simply reuse the result. If not, fall back to CMake default search
# behaviour, also allowing modules to be searched.
- set(_cmake_module_path_orig "${CMAKE_MODULE_PATH}")
- list(PREPEND CMAKE_MODULE_PATH "${CONAN_GENERATORS_FOLDER}")
if(NOT ${package_name}_FOUND)
+ list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index)
+ if(_index EQUAL -1)
+ list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}")
+ endif()
+ unset(_index)
find_package(${package_name} ${ARGN} BYPASS_PROVIDER)
+ list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}")
endif()
+endmacro()
- set(CMAKE_MODULE_PATH "${_cmake_module_path_orig}")
- unset(_find_args)
- unset(_cmake_module_path_orig)
- unset(_host_profile_flags)
- unset(_build_profile_flags)
+#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature
+
+cmake_language(
+ SET_DEPENDENCY_PROVIDER conan_provide_dependency
+ SUPPORTED_METHODS FIND_PACKAGE
+)
+
+
+macro(conan_provide_dependency_check)
+ set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE)
+ get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED)
+ if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED)
+ message(WARNING "Conan is correctly configured as dependency provider, "
+ "but Conan has not been invoked. Please add at least one "
+ "call to `find_package()`.")
+ if(DEFINED CONAN_COMMAND)
+ # supress warning in case `CONAN_COMMAND` was specified but unused.
+ set(_CONAN_COMMAND ${CONAN_COMMAND})
+ unset(_CONAN_COMMAND)
+ endif()
+ endif()
+ unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED)
endmacro()
+
+# Add a deferred call at the end of processing the top-level directory
+# to check if the dependency provider was invoked at all.
+cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check)
+
+]=]
+
# Configurable variables for Conan profiles
set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile")
set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile")
+set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install")
+
+find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH)
+if(NOT _cmake_program)
+ get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY)
+ set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is")
+endif()
+