[cmake-developers] PATHS guess in find_package ignored with NO_DEFAULT_PATH & CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
Nils Gladitz
nilsgladitz at gmail.com
Fri Jul 1 08:19:25 EDT 2016
On 07/01/2016 02:08 PM, Julien Schueller wrote:
>
>
> ------------------------------------------------------------------------
>
> *De: *"Nils Gladitz" <nilsgladitz at gmail.com>
> *À: *"Julien Schueller" <schueller at phimeca.com>,
> "cmake-developers" <cmake-developers at cmake.org>
> *Envoyé: *Vendredi 1 Juillet 2016 13:57:40
> *Objet: *Re: [cmake-developers] PATHS guess in find_package
> ignored with NO_DEFAULT_PATH & CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
>
>
>
> On 07/01/2016 01:44 PM, Julien Schueller wrote:
>
>
>
> ------------------------------------------------------------------------
>
> *De: *"Nils Gladitz" <nilsgladitz at gmail.com>
> *À: *"Julien Schueller" <schueller at phimeca.com>,
> "cmake-developers" <cmake-developers at cmake.org>
> *Envoyé: *Vendredi 1 Juillet 2016 12:37:47
> *Objet: *Re: [cmake-developers] PATHS guess in
> find_package ignored with NO_DEFAULT_PATH &
> CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
>
> On 07/01/2016 11:13 AM, Julien Schueller wrote:
>
>
> I'm using find_package in no-module mode with the
> PATHS option to provide a hard-coded guess to a path
> where a sublibrary 'hmat' was previously found,
> and with the NO_DEFAULT_PATH to not find it first in
> system directories.
> find_package (HMAT REQUIRED NO_MODULE PATHS
> <hmat-prefix>/lib/cmake/hmat NO_DEFAULT_PATH)
>
> So far so good. Now I want to cross-compile with the
> usual toolchain file:
> set (CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
> set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
> set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
> set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
> ...
> This works wonderfully too.
>
> But now I add CMAKE_FIND_ROOT_PATH_MODE_PACKAGE to
> ONLY in my toolchain file to prevent detecting native
> libraries
> set (CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
> And now find_package fails to find my package!
>
> I'm puzzled as I did not find in the doc something
> that explains why the PATHS is ignored (step #8 in
> find_package):
> https://cmake.org/cmake/help/v3.5/command/find_package.html#command:find_package
>
>
> The given path "<hmat-prefix>/lib/cmake/hmat" is prefixed
> by the paths in CMAKE_FIND_ROOT_PATH.
> Which means that (given ONLY) cmake only looks for the
> package in
> "/usr/i686-w64-mingw32/<hmat-prefix>/lib/cmake/hmat".
>
> You might want to e.g. add <hmat-prefix> to
> CMAKE_FIND_ROOT_PATH and use PATHS / instead.
>
> Nils
>
>
> Thanks,
>
> In my case <hmat-prefix> has the same value as
> CMAKE_FIND_ROOT_PATH, and even if I modify the PATHS option
> value to be relative (PATHS lib/cmake/hmat) the detection fails.
> (They're not actually set to /usr/i686-w64-mingw32 but some
> absolute location in my home where I unzip a mingw toolchain,
> but I can reproduce the issue on another box where the
> toolchain is natively /usr/i686-w64-mingw32).
>
>
> I don't think behavior for relative paths is defined.
>
> Use absolute paths like "/lib/cmake/hmat", just "/" probably works
> as well (since the path in the prefix matches
> "<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/").
>
> Nils
>
>
> Yes, if I use just "/lib/cmake/hmat" it works. Couldn't cmake see that
> that my absolute path begins with CMAKE_FIND_ROOT_PATH and hence
> should be treated as valid according
> to CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ?
CMake could do a lot of things but as-is the defined (documented)
behavior is that when you tell cmake to only look in the prefixes
provided by CMAKE_FIND_ROOT_PATH then all search locations are re-rooted
to those prefixes.
e.g. a given path "/usr" can exist under your regular filesystem root
and as /usr/i686-w64-mingw32/usr.
Still you would not want cmake to look in your native /usr directory in
this case even though it is "valid" (exists).
Nils
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20160701/d61be778/attachment.html>
More information about the cmake-developers
mailing list