[cmake-developers] the future of FIND_PACKAGE()

Alexander Neundorf neundorf at kde.org
Tue Jun 27 13:59:56 EDT 2006


On Tuesday 27 June 2006 16:51, you wrote:
> Alexander Neundorf wrote:
...
> /
> /usr
> /usr/local
> /opt/*
>
> will cover most system installations for most distributions.  If a
> sysadmin or distro adds more prefixes it can put them in a
> CMAKE_PREFIX_PATH environment variable in /etc/profile for all users to
> see.  Similarly if users prefixes in their home directories they are
> responsible for putting the prefix in CMAKE_PREFIX_PATH just like
> ~/myroot/bin would have to be put in PATH or ~/myroot/lib in
> LD_LIBRARY_PATH.  We could also consider guessing prefixes from PATH and
> LD_LIBRARY_PATH environment varibles.
>
> On Windows, %ProgramFiles% and the system registry may provide a
> sufficient set of prefixes.
>
> Anyway the point is that CMake should be able to find Foo without Foo
> finding CMake.

Although I wouldn't see a problem with this, ok
(for stuff coming with the distro it's no problem, for stuff compiled itself 
with cmake, it's also no problem).

So I think the FooConfig.cmake files should go under lib/ (since they can be 
quite specific) and not under share/.

Leaves the following options:

lib/Foo/cmake/
lib/cmake/Foo/

pkgconfig basically uses the second form. 
In order to minimize confusion, CMake should IMO support only one of these two 
locations. It should also define exactly the case to be used: "cmake" vs. 
"CMake".

The FIND_PACKAGE() documentation also mentions a version number, maybe this 
could be used as suffix for the subdir name:
and with version numbers:

lib/Foo-x.y.z/cmake/
lib/cmake/Foo-x.y.z/

As prefixes I'd suggest to reuse the variables which are used for 
FIND_LIBRARY(). I think introducing more variables should be avoided, it's 
hard to remember them. Reusing the ones from FIND_LIBRARY() would also make 
sense because the FooConfig.cmake files will usually be installed under lib/ 
directory (where also the library itself will be located).
Also the install prefix of cmake itself should be used (i.e. if cmake is 
installed in a strange location, it will find other stuff installed to the 
same strange location too).

So, which one should be prefered, FindFoo.cmake or FooConfig.cmake if both can 
be found by cmake ?
I'd say FooConfig.cmake, since this is provided by the project and should be 
more up-to-date/complete/bug fixed/ etc.

How about adding a PATHS argument to FIND_PACKAGE() as there is for all other 
FIND_XXX() commands ?

Bye
Alex
-- 
Work: alexander.neundorf AT jenoptik.com - http://www.jenoptik-los.de
Home: neundorf AT kde.org                - http://www.kde.org
      alex AT neundorf.net               - http://www.neundorf.net



More information about the cmake-developers mailing list