overriding CMAKE_MODULE_PATH
Maciej Mrozowski
reavertm at gmail.com
Mon Aug 16 15:04:13 CEST 2010
On Monday 16 of August 2010 14:38:24 Christophe Giboudeaux wrote:
> Hi,
>
> Le 16/08/2010 12:20, Michael Jansen a écrit :
> > Because it is the right thing to do. The first line overriding it is
> > just plain wrong imho.
> >
> > 1. CMAKE_MODULE_PATH is documented in cmake at the same level as
> > CMAKE_PREFIX_PATH as a variable that changes behaviour. Which means a
> > user can and will expect he is able to override it. Which will break
> > with the first line.
>
> This is incorrect, CMAKE_PREFIX_PATH is an environment variable and
> CMAKE_MODULE_PATH is a CMake parameter
> (http://public.kitware.com/Wiki/CMake_Useful_Variables : _MODULE belongs
> to the "Locations" section and _PREFIX is under "Environment Variables")
Minor nitpick - CMAKE_PREFIX_PATH is *also* environmnent variable (it's CMake
parameter in first place).
> > 2. KDE installs a ton of useful not kde related FindXYZ*.cmake files
> > into a path != /usr/share/cmake... . If a non kde project wants to use
> > it (even a small homegrown project) the user has to set
> > CMAKE_MODULE_PATH from the outside. Therefore he needs the line from
> > Yury in his CMakeLists.txt. Since we as kde are the poster child for
> > cmake usage we should implement our cmake files as examples for other to
> > copy.
>
> This is exactly what CMAKE_PREFIX_PATH does: give the order in which
> CMake looks for stuff. There's no need for this hack.
Not really, CMAKE_PREFIX_PATH does not control CMAKE_MODULE_PATH. It controls
CMAKE_INCLUDE_PATH, CMAKE_PROGRAM_PATH and CMAKE_LIBRARY_PATH - locations that
find_file, find_library and find_program are aware of - not find_package.
CMAKE_MODULE_PATH is responsible for lookup location of FindXXX.cmake files -
find_package call.
So, CMAKE_PREFIX_PATH determines which locations will be searched for
particular dependencies, CMAKE_MODULE_PATH determines which locations will be
searched for CMake modules responsible for finding those dependencies (what is
OP's post about).
Imho, KDE SC buildsystem should *not* allow user-supplied CMAKE_MODULE_PATH
locations - it can only provide yet another way to break compilation (like
user-supplied stuff in /usr/local shadowing eveything else).
> > 3. If someone develops a small lib he plans to add as a kde dependency
> > he probably installs it into some non distro prefix so he doesn't need
> > root rights to install it. So he needs to override CMAKE_MODULE_PATH in
> > say koffice to make it pick up that location. And i would expect it to
> > work. Remember that his KDELIBS_PREFIX could be distro provided and
> > koffice is installed into /usr/local/ .
>
> Once again, CMAKE_PREFIX_PATH is enough. Here's an example:
>
> # echo $CMAKE_PREFIX_PATH
> /kde/inst/akonadi:/kde/inst/extragear-network:/kde/inst/kdepim:/kde/inst/kd
> epimlibs:/kde/inst/kdepim-runtime:/kde/inst/pim
>
> and CMake ran in kdenetwork has no problem to find libktorrent:
>
> -- Found libktorrent: /kde/inst/extragear-network/lib64/libktorrent.so
>
> WRT to the original post, there are two issues:
> - libktorrent should not install FindKtorrent.cmake since it's supposed
> to help finding libktorrent and not ktorrent,
>
> - It should install a LibKtorrentConfig.cmake instead of a FindXXX.cmake
> for the reasons Andreas already gave.
This.
Also if it wasn't clear already - package X depending on KDE4 ${version}
(find_package(KDE4 ${version}) can rely on any .cmake file provided by
kdelibs-${version} and below.
That being said - no FindYYY.cmake file that is already provided by kdelibs
should be used (unless FindYYY.cmake is broken or insufficient).
In any other cases - when kdelibs doesn't provide required FindYYY.cmake flle,
package X is required to provide its own private copy of FindYYY.cmake - which
must not be installed because it would break other packages relying on
kdelibs-supplied FindYYY.cmake module.
--
regards
MM
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-buildsystem/attachments/20100816/842b11c3/attachment.sig
More information about the Kde-buildsystem
mailing list