From 3a82b18566c00e588595aca6e63cbae18361fc33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 11 Jan 2021 22:59:47 +0100 Subject: [PATCH] modules: use if(IN_LIST) from CMake 3.4. And add a dependency-handling code for when this might get useful. For consistency. --- modules/FindMagnumBindings.cmake | 34 +++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/modules/FindMagnumBindings.cmake b/modules/FindMagnumBindings.cmake index 5fad00d..0715d05 100644 --- a/modules/FindMagnumBindings.cmake +++ b/modules/FindMagnumBindings.cmake @@ -65,15 +65,31 @@ mark_as_advanced(MAGNUMBINDINGS_INCLUDE_DIR) # Component distinction (listing them explicitly to avoid mistakes with finding # components from other repositories) -set(_MAGNUMBINDINGS_HEADER_ONLY_COMPONENT_LIST Python) +set(_MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS Python) -# Convert components lists to regular expressions so I can use if(MATCHES). -# TODO: Drop this once CMake 3.3 and if(IN_LIST) can be used -foreach(_WHAT HEADER_ONLY) - string(REPLACE ";" "|" _MAGNUMBINDINGS_${_WHAT}_COMPONENTS "${_MAGNUMBINDINGS_${_WHAT}_COMPONENT_LIST}") - set(_MAGNUMBINDINGS_${_WHAT}_COMPONENTS "^(${_MAGNUMBINDINGS_${_WHAT}_COMPONENTS})$") +# No inter-component dependencies right now + +# Ensure that all inter-component dependencies are specified as well +set(_MAGNUMBINDINGS_ADDITIONAL_COMPONENTS ) +foreach(_component ${MagnumBindings_FIND_COMPONENTS}) + # Mark the dependencies as required if the component is also required + if(MagnumBindings_FIND_REQUIRED_${_component}) + foreach(_dependency ${_MAGNUMBINDINGS_${_component}_DEPENDENCIES}) + set(MagnumBindings_FIND_REQUIRED_${_dependency} TRUE) + endforeach() + endif() + + list(APPEND _MAGNUMBINDINGS_ADDITIONAL_COMPONENTS ${_MAGNUMBINDINGS_${_component}_DEPENDENCIES}) endforeach() +# Join the lists, remove duplicate components +if(_MAGNUMBINDINGS_ADDITIONAL_COMPONENTS) + list(INSERT MagnumBindings_FIND_COMPONENTS 0 ${_MAGNUMBINDINGS_ADDITIONAL_COMPONENTS}) +endif() +if(MagnumBindings_FIND_COMPONENTS) + list(REMOVE_DUPLICATES MagnumBindings_FIND_COMPONENTS) +endif() + # Find all components foreach(_component ${MagnumBindings_FIND_COMPONENTS}) string(TOUPPER ${_component} _COMPONENT) @@ -85,7 +101,7 @@ foreach(_component ${MagnumBindings_FIND_COMPONENTS}) set(MagnumBindings_${_component}_FOUND TRUE) else() # Header-only components - if(_component MATCHES ${_MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS}) + if(_component IN_LIST _MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS) add_library(MagnumBindings::${_component} INTERFACE IMPORTED) endif() @@ -94,7 +110,7 @@ foreach(_component ${MagnumBindings_FIND_COMPONENTS}) set(_MAGNUMBINDINGS_${_COMPONENT}_INCLUDE_PATH_NAMES Magnum/SceneGraph/PythonBindings.h) endif() - if(_component MATCHES ${_MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS}) + if(_component IN_LIST _MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS) # Find includes find_path(_MAGNUMBINDINGS_${_COMPONENT}_INCLUDE_DIR NAMES ${_MAGNUMBINDINGS_${_COMPONENT}_INCLUDE_PATH_NAMES} @@ -111,7 +127,7 @@ foreach(_component ${MagnumBindings_FIND_COMPONENTS}) endif() # Decide if the component was found - if(_component MATCHES ${_MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS} AND _MAGNUMBINDINGS_${_COMPONENT}_INCLUDE_DIR) + if(_component IN_LIST _MAGNUMBINDINGS_HEADER_ONLY_COMPONENTS AND _MAGNUMBINDINGS_${_COMPONENT}_INCLUDE_DIR) set(MagnumBindings_${_component}_FOUND TRUE) else() set(MagnumBindings_${_component}_FOUND FALSE)