On 02/27/2012 09:15 PM, Alexander Neundorf wrote: > Hi, > > I think find_package in Config mode might still need some more work. > > When the FooConfig.cmake has been found, Foo_FOUND is set to TRUE: > > // Set a variable marking whether the package was found. > std::string foundVar = this->Name; > foundVar += "_FOUND"; > > > This means it is true in all cases that the Config.cmake file has been found > (and the version was compatible). > > Now I have to questions: > > > * how to handle COMPONENTS ? > > > If a package is requested with COMPONENTS, these should be considered for > setting Foo_FOUND: > find_package(Foo REQUIRED COMPONENTS A B C) > should only succeed if A, B and C are found. > > This is how I would expect COMPONENTS to be handled in a FindFoo.cmake: > (a) all components are searched by the Find-module, and each per-component > X_Y_FOUND is set accordingly > > (b) there is a package-specific default subset of these components which have > to be found to make the package found, i.e. FOO_FOUND=TRUE > > (c) by adding COMPONENTS to the find_package() call, these components are > added to the set of components which have to be found to make FOO_FOUND=TRUE > > (d) if REQUIRED is used and FOO_FOUND is false, it errors out >
I like that proposal. I'm also quite unhappy with how components are handled in config-mode. > > > * how to handle dependencies ? > > > Let's say the exported targets of Foo link against other imported/exported > targets. So that the imported targets work properly, the targets for the > libraries it depends on must have been found and imported before. > Where should this > find_package(Bar) > be done ? > In FooConfig.cmake ? > This would be possible only if Bar can be found in Config mode, because > otherwise Foo cannot rely on FindBar.cmake being available. > > For Find-modules, it is clear that a Find-module should also find all its > dependencies. > For a Config file I'm not sure about it. Shouldn't this be only a source of > information, purely declarative, and not initiate searching other packages ? I think current best practice is to call find_package(Bar) inside the FooConfig.cmake. If the FindBar.cmake is contained in CMake, everything's fine (possibly, you need a cmake_minimum_required()), otherwise Foo should install FindBar.cmake alongside FooConfig.cmake. Michael -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers