I submitted a patch to update `CMakeExpandImportedTargets` with `INTERFACE_LINK_LIBRARIES`. Shortly after I read the discussion at http://www.cmake .org/Bug/view.php?id=15299 which suggested `CMakeExpandImportedTargets` is deprecated and one should use `BundleUtilities` instead.
Well, it seems that `BundleUtilities` can't expand a single static imported library target to the list of all dependent libraries (that's what I need) so I think `CMakeExpandImportedTargets` is still benefitial and could be benefitial to others, too. My patch enables `CMakeExpandImportedTargets` to use the `INTERFACE_LINK_LIBRARIES` property and also resolves the $<CONFIG>, $<NOT> and $<0|1:> generator expressions. I found no elegant way to resolve all generator expressions (`file(GENERATE ...)` can't be used since it does not output the resolved content instantly). Tamas On Wed, Jul 15, 2015 at 5:56 PM, Tamás Kenéz <tamas.ke...@gmail.com> wrote: > The CMakeExpandedImportedTargets module used only the deprecated > IMPORTED_LINK_INTERFACE_LIBRARIES property to resolve transitive > dependencies. > Since the current `install(EXPORT ...)` command generates target files > that populate INTERFACE_LINK_LIBRARIES instead, the expand module was not > working correctly with the imported libraries generated by `install(EXPORT > ...)`. > > I considered this a bugfix so I based the commit onto the release branch. > > Please review and apply if it's ok. > Tamas > > > From f2df88ec4180595a3fcc4c6be9b2d38e46162cc3 Mon Sep 17 00:00:00 2001 > From: Tamas Kenez <tamas.ke...@gmail.com> > Date: Wed, 15 Jul 2015 17:47:50 +0200 > Subject: [PATCH] CMakeExpandImportedTargets: use INTERFACE_LINK_LIBRARIES > if > non-empty > > The deprecated IMPORTED_LINK_INTERFACE_LIBRARIES should be > overridden by INTERFACE_LINK_LIBRARIES if it's non-empty. > > Unlike IMPORTED_LINK_INTERFACE_LIBRARIES, INTERFACE_LINK_LIBRARIES > usually contains config-related generator expressions which must > be resolved according to the selected configuration. > --- > Modules/CMakeExpandImportedTargets.cmake | 22 +++++++++++++++++++++- > 1 file changed, 21 insertions(+), 1 deletion(-) > > diff --git a/Modules/CMakeExpandImportedTargets.cmake > b/Modules/CMakeExpandImportedTargets.cmake > index 8ac3364..b110e51 100644 > --- a/Modules/CMakeExpandImportedTargets.cmake > +++ b/Modules/CMakeExpandImportedTargets.cmake > @@ -102,7 +102,27 @@ function(CMAKE_EXPAND_IMPORTED_TARGETS _RESULT ) > list(GET _importedConfigs ${_configIndexToUse} > _importedConfigToUse) > > get_target_property(_importedLocation "${_CURRENT_LIB}" > IMPORTED_LOCATION_${_importedConfigToUse}) > - get_target_property(_linkInterfaceLibs "${_CURRENT_LIB}" > IMPORTED_LINK_INTERFACE_LIBRARIES_${_importedConfigToUse} ) > + get_target_property(_linkInterfaceLibs "${_CURRENT_LIB}" > INTERFACE_LINK_LIBRARIES) > + if(_linkInterfaceLibs) > + # resolve $<CONFIG:...> generator expressions > + string(REGEX REPLACE "\\$<CONFIG:${_importedConfigToUse}>" > "1" > + _linkInterfaceLibs "${_linkInterfaceLibs}") > + string(REGEX REPLACE "\\$<CONFIG:[^>]*>" "0" > + _linkInterfaceLibs "${_linkInterfaceLibs}") > + # resolve $<NOT:(0|1)> > + string(REGEX REPLACE "\\$<NOT:0>" "1" > + _linkInterfaceLibs "${_linkInterfaceLibs}") > + string(REGEX REPLACE "\\$<NOT:1>" "0" > + _linkInterfaceLibs "${_linkInterfaceLibs}") > + # resolve $<(0|1):...> > + # empty items will be ignored by `foreach` later > + string(REGEX REPLACE "\\$<0:[^>]*>" "" > + _linkInterfaceLibs "${_linkInterfaceLibs}") > + string(REGEX REPLACE "\\$<1:([^>]*)>" "\\1" > + _linkInterfaceLibs "${_linkInterfaceLibs}") > + else() > + get_target_property(_linkInterfaceLibs "${_CURRENT_LIB}" > IMPORTED_LINK_INTERFACE_LIBRARIES_${_importedConfigToUse} ) > + endif() > > list(APPEND _CCSR_NEW_REQ_LIBS "${_importedLocation}") > # message(STATUS "Appending lib ${_CURRENT_LIB} as > ${_importedLocation}") > -- > 1.9.4.msysgit.2 > >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers