Re: [cmake-developers] [ANNOUNCE] CMake 3.12.0-rc2 is ready for testing
I've reproduced the error. A possible fix would be to extend pkg_check_module and pkg_search_module to allow globally imported targets, i.e. to add an IMPORTED_GLOBAL_TARGET or GLOBAL keyword (where the latter is only usable together with IMPORTED_TARGET) to allow similar control as add_library. Essentially, adding GLOBAL here https://gitlab.kitware.com/cmake/cmake/blob/master/Modules/FindPkgConfig.cmake#L232 immediately solves the problem, so it's indeed related to target visibility. Therefore, I think this is intended behavior and the logic for the RHS target is correct. Maybe we should open an issue and discuss the design of the fix there together with Brad King and the others. Best regards, Patrick Stotko On 30.06.2018 23:03, Patrick Stotko wrote: It seems that CMake does not find PkgConfig::GooCanvas because it is imported but not globally imported, i.e. it is maybe a visibility problem. For reference, the relaxation of this limitation (https://gitlab.kitware.com/cmake/cmake/merge_requests/2040) is covered by this additional check for the LHS target: https://gitlab.kitware.com/cmake/cmake/blob/c9349cc1b94a08b4f5ed86a397e72ceed50847dd/Source/cmTargetLinkLibrariesCommand.cxx#L383 Maybe a corresponding check for locally imported RHS targets is missing here: https://gitlab.kitware.com/cmake/cmake/blob/c9349cc1b94a08b4f5ed86a397e72ceed50847dd/Source/cmTargetLinkLibrariesCommand.cxx#L396 Best regards, Patrick Stotko Am 30.06.2018 um 21:15 schrieb Rolf Eike Beer: * The "target_link_libraries()" command may now be called to modify targets created outside the current directory. I played a bit around with that as I hope it would simplify some things in OSM2go, but it looks there are still some limitations: in main: add_library(osm2go_lib ...) add_subdirectory(sub) in sub: pkg_search_module(GooCanvas REQUIRED IMPORTED_TARGET goocanvas) target_sources(osm2go_lib PRIVATE src/platforms/gtk/canvas_goocanvas.cpp ) target_link_libraries(osm2go_lib PRIVATE PkgConfig::GooCanvas) Breaks: CMake Error at CMakeLists.txt:43 (add_library): Target "osm2go_lib" links to target "PkgConfig::GooCanvas" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? Is this intended to work? There is an easy workaround, but it feels nasty: add_library(osm2go_x_lib INTERFACE) target_link_libraries(osm2go_x_lib INTERFACE PkgConfig::GooCanvas) target_link_libraries(osm2go_lib PRIVATE osm2go_x_lib) -- 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: https://cmake.org/mailman/listinfo/cmake-developers
Re: [cmake-developers] [ANNOUNCE] CMake 3.12.0-rc2 is ready for testing
It seems that CMake does not find PkgConfig::GooCanvas because it is imported but not globally imported, i.e. it is maybe a visibility problem. For reference, the relaxation of this limitation (https://gitlab.kitware.com/cmake/cmake/merge_requests/2040) is covered by this additional check for the LHS target: https://gitlab.kitware.com/cmake/cmake/blob/c9349cc1b94a08b4f5ed86a397e72ceed50847dd/Source/cmTargetLinkLibrariesCommand.cxx#L383 Maybe a corresponding check for locally imported RHS targets is missing here: https://gitlab.kitware.com/cmake/cmake/blob/c9349cc1b94a08b4f5ed86a397e72ceed50847dd/Source/cmTargetLinkLibrariesCommand.cxx#L396 Best regards, Patrick Stotko Am 30.06.2018 um 21:15 schrieb Rolf Eike Beer: * The "target_link_libraries()" command may now be called to modify targets created outside the current directory. I played a bit around with that as I hope it would simplify some things in OSM2go, but it looks there are still some limitations: in main: add_library(osm2go_lib ...) add_subdirectory(sub) in sub: pkg_search_module(GooCanvas REQUIRED IMPORTED_TARGET goocanvas) target_sources(osm2go_lib PRIVATE src/platforms/gtk/canvas_goocanvas.cpp ) target_link_libraries(osm2go_lib PRIVATE PkgConfig::GooCanvas) Breaks: CMake Error at CMakeLists.txt:43 (add_library): Target "osm2go_lib" links to target "PkgConfig::GooCanvas" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? Is this intended to work? There is an easy workaround, but it feels nasty: add_library(osm2go_x_lib INTERFACE) target_link_libraries(osm2go_x_lib INTERFACE PkgConfig::GooCanvas) target_link_libraries(osm2go_lib PRIVATE osm2go_x_lib) -- 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: https://cmake.org/mailman/listinfo/cmake-developers
Re: [cmake-developers] [ANNOUNCE] CMake 3.12.0-rc2 is ready for testing
> There is an easy workaround, but it feels nasty: > > add_library(osm2go_x_lib INTERFACE) > target_link_libraries(osm2go_x_lib INTERFACE PkgConfig::GooCanvas) > target_link_libraries(osm2go_lib PRIVATE osm2go_x_lib) This also seems to be not "stackable", i.e. an additional interface library in sub/sub can neither be linked into osm2go_lib nor osm2go_x_lib. signature.asc Description: This is a digitally signed message part. -- 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: https://cmake.org/mailman/listinfo/cmake-developers
Re: [cmake-developers] [ANNOUNCE] CMake 3.12.0-rc2 is ready for testing
> * The "target_link_libraries()" command may now be called to modify > targets created outside the current directory. I played a bit around with that as I hope it would simplify some things in OSM2go, but it looks there are still some limitations: in main: add_library(osm2go_lib ...) add_subdirectory(sub) in sub: pkg_search_module(GooCanvas REQUIRED IMPORTED_TARGET goocanvas) target_sources(osm2go_lib PRIVATE src/platforms/gtk/canvas_goocanvas.cpp ) target_link_libraries(osm2go_lib PRIVATE PkgConfig::GooCanvas) Breaks: CMake Error at CMakeLists.txt:43 (add_library): Target "osm2go_lib" links to target "PkgConfig::GooCanvas" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? Is this intended to work? There is an easy workaround, but it feels nasty: add_library(osm2go_x_lib INTERFACE) target_link_libraries(osm2go_x_lib INTERFACE PkgConfig::GooCanvas) target_link_libraries(osm2go_lib PRIVATE osm2go_x_lib) signature.asc Description: This is a digitally signed message part. -- 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: https://cmake.org/mailman/listinfo/cmake-developers
[cmake-developers] [ANNOUNCE] CMake 3.12.0-rc2 is ready for testing
I am proud to announce the second CMake 3.12 release candidate. https://cmake.org/download/ Documentation is available at: https://cmake.org/cmake/help/v3.12 Release notes appear below and are also published at https://cmake.org/cmake/help/v3.12/release/3.12.html Some of the more significant changes in CMake 3.12 are: * The "target_link_libraries()" command now supports Object Libraries. Linking to an object library uses its object files in direct dependents and also propagates usage requirements. * The "target_link_libraries()" command may now be called to modify targets created outside the current directory. * The "file(GLOB)" and "file(GLOB_RECURSE)" commands learned a new flag "CONFIGURE_DEPENDS" which enables expression of build system dependency on globbed directory's contents. * The "Compile Features" functionality is now aware of C++ 20. No specific features are yet enumerated besides the "cxx_std_20" meta- feature. * The Visual Studio Generators for VS 2017 learned to support a "version=14.##" option in the "CMAKE_GENERATOR_TOOLSET" value (e.g. via the "cmake(1)" "-T" option) to specify a toolset version number. * The "cmake(1)" Build Tool Mode ("cmake --build") gained "-- parallel []" and "-j []" options to specify a parallel build level. They map to corresponding options of the native build tool. * The "add_compile_definitions()" command was added to set preprocessor definitions at directory level. This supersedes "add_definitions()". * The "cmake_minimum_required()" and "cmake_policy(VERSION)" commands now accept a version range using the form "[...]". The "" version is required but policies are set based on the "" version. This allows projects to specify a range of versions for which they have been updated and avoid explicit policy settings. * The "find_package()" command now searches a prefix specified by a "PackageName_ROOT" CMake or environment variable. Package roots are maintained as a stack so nested calls to all "find_*" commands inside find modules also search the roots as prefixes. See policy "CMP0074". * A new "$" and "$" "generator expression" has been added to enable consumption of generator expressions whose evaluation results itself in generator expressions. * A new "$" "generator expression" has been added. * A new "$" "generator expression" has been added. * The "FindCURL" module now provides imported targets. * The "FindJPEG" module now provides imported targets. * A "FindODBC" module was added to find an Open Database Connectivity (ODBC) library. * New "FindPython3" and "FindPython2" modules, as well as a new "FindPython" module, have been added to provide a new way to locate python environments. CMake 3.12 Release Notes Changes made since CMake 3.11 include the following. New Features Generators -- * The Visual Studio Generators for VS 2017 learned to support a "version=14.##" option in the "CMAKE_GENERATOR_TOOLSET" value (e.g. via the "cmake(1)" "-T" option) to specify a toolset version number. Command-Line * The "cmake(1)" Build Tool Mode ("cmake --build") gained "-- parallel []" and "-j []" options to specify a parallel build level. They map to corresponding options of the native build tool. Commands * The "add_compile_definitions()" command was added to set preprocessor definitions at directory level. This supersedes "add_definitions()". * The "cmake_minimum_required()" and "cmake_policy(VERSION)" commands now accept a version range using the form "[...]". The "" version is required but policies are set based on the "" version. This allows projects to specify a range of versions for which they have been updated and avoid explicit policy settings. * The "file(GLOB)" and "file(GLOB_RECURSE)" commands learned a new flag "CONFIGURE_DEPENDS" which enables expression of build system dependency on globbed directory's contents. * The "file(TOUCH)" and "file(TOUCH_NOCREATE)" commands were added to expose "TOUCH" functionality without having to use CMake's command- line tool mode with "execute_process()". * The "find_package()" command now searches a prefix specified by a "PackageName_ROOT" CMake or environment variable. Package roots are maintained as a stack so nested calls to all "find_*" commands inside find modules also search the roots as prefixes. See policy "CMP0074". * The "install()" command learned an optional "NAMELINK_COMPONENT" parameter, which allows you to change the component for a shared library's namelink. If none is specified, the value of "COMPONENT" is used by default. * The "list()" command learned a "JOIN" sub-command to concatenate list's elements separated by a glue string. * The "list()" command learned a "SUBLIST" sub-command to get a sublist of the list. * The "list()" command learned a "TRANSFORM" sub-command to apply