diff --git a/cmake/template/YARPConfig.cmake.in b/cmake/template/YARPConfig.cmake.in index cef555b21b1..de7de3168ff 100644 --- a/cmake/template/YARPConfig.cmake.in +++ b/cmake/template/YARPConfig.cmake.in @@ -7,7 +7,6 @@ -include(CMakeFindDependencyMacro) include(CMakeDependentOption) @@ -116,17 +115,14 @@ set(YARP_QML2_IMPORT_DIR_FULL "@PACKAGE_YARP_QML2_IMPORT_DIR@") # Used by YarpIDL.cmake set(YARP_IDL_BINARY_HINT "@PACKAGE_YARP_IDL_BINARY_HINT@") -# FIXME Remove this check when CMake 3.9 or later is required -# This is used later and in YARPTargetsStatic.cmake -if (CMAKE_VERSION VERSION_LESS 3.9) - set(_YARP_FIND_PARTS_REQUIRED) - if (YARP_FIND_REQUIRED) - set(_YARP_FIND_PARTS_REQUIRED REQUIRED) - endif() - set(_YARP_FIND_PARTS_QUIET) - if (YARP_FIND_QUIETLY) - set(_YARP_FIND_PARTS_QUIET QUIET) - endif() +# This is used later and in YARPTargetsStatic.cmake +set(_YARP_FIND_PARTS_REQUIRED) +if (YARP_FIND_REQUIRED) + set(_YARP_FIND_PARTS_REQUIRED REQUIRED) +endif() +set(_YARP_FIND_PARTS_QUIET) +if (YARP_FIND_QUIETLY) + set(_YARP_FIND_PARTS_QUIET QUIET) endif() # Include YARPTargets.cmake file (that includes for now, targets without a @@ -149,19 +145,19 @@ endif() # Find all requested components set(YARP_LIBRARIES YARP::YARP_init) foreach(_yarp_module ${YARP_FIND_COMPONENTS}) - # FIXME Remove this check when CMake 3.9 or later is required - if (CMAKE_VERSION VERSION_LESS 3.9) - find_package(YARP_${_yarp_module} - ${_YARP_FIND_PARTS_QUIET} - ${_YARP_FIND_PARTS_REQUIRED} - HINTS "${YARP_CMAKECONFIG_DIR}" - NO_DEFAULT_PATH) - else() - find_dependency(YARP_${_yarp_module} - HINTS "${YARP_CMAKECONFIG_DIR}" - NO_DEFAULT_PATH) + set(_YARP_FIND_PART_${_yarp_module}_REQUIRED) + # Only propagate REQUIRED if module was not passed to OPTIONAL_COMPONENTS + if(YARP_FIND_REQUIRED_${_yarp_module}) + set(_YARP_FIND_PART_${_yarp_module}_REQUIRED ${_YARP_FIND_PARTS_REQUIRED}) + endif() + find_package(YARP_${_yarp_module} + ${_YARP_FIND_PARTS_QUIET} + ${_YARP_FIND_PART_${_yarp_module}_REQUIRED} + HINTS "${YARP_CMAKECONFIG_DIR}" + NO_DEFAULT_PATH) + if(YARP_${_yarp_module}_FOUND) + list(APPEND YARP_LIBRARIES YARP::YARP_${_yarp_module}) endif() - list(APPEND YARP_LIBRARIES YARP::YARP_${_yarp_module}) endforeach() # Ensure that all requested modules are available diff --git a/cmake/template/YARPTargetsStatic.cmake.in b/cmake/template/YARPTargetsStatic.cmake.in index 175bffca07c..0f6d467c6e8 100644 --- a/cmake/template/YARPTargetsStatic.cmake.in +++ b/cmake/template/YARPTargetsStatic.cmake.in @@ -41,18 +41,17 @@ list(APPEND CMAKE_MODULE_PATH ${YARP_MODULE_PATH}) # Properly find the dependencies. This will force to include all the # dependencies also for packages in other exports foreach(_target ${_targets}) - # FIXME Remove this check when CMake 3.9 or later is required - if (CMAKE_VERSION VERSION_LESS 3.9) - find_package(${_target} - ${_YARP_FIND_PARTS_QUIET} - ${_YARP_FIND_PARTS_REQUIRED} - HINTS "${YARP_CMAKECONFIG_DIR}" - NO_DEFAULT_PATH) - else() - find_dependency(${_target} - HINTS "${YARP_CMAKECONFIG_DIR}" - NO_DEFAULT_PATH) + string(REGEX REPLACE "^YARP_" "" _target "${_target}") + set(_YARP_FIND_PART_${_target}_REQUIRED) + # Only propagate REQUIRED if module was not passed to OPTIONAL_COMPONENTS + if(YARP_FIND_REQUIRED_${_target}) + set(_YARP_FIND_PART_${_target}_REQUIRED ${_YARP_FIND_PARTS_REQUIRED}) endif() + find_package(YARP_${_target} + ${_YARP_FIND_PARTS_QUIET} + ${_YARP_FIND_PART_${_target}_REQUIRED} + HINTS "${YARP_CMAKECONFIG_DIR}" + NO_DEFAULT_PATH) endforeach() # Restore the original situation diff --git a/doc/release/v3_1_0.md b/doc/release/v3_1_0.md index aa3a37f0342..1a24e5726d9 100644 --- a/doc/release/v3_1_0.md +++ b/doc/release/v3_1_0.md @@ -8,6 +8,10 @@ A (partial) list of bug fixed and issues resolved in this release can be found New Features ------------ +### Build System + +* Added support for `OPTIONAL_COMPONENTS` in `find_package(YARP)` calls. + ### Devices #### imuBosch_BNO055