[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 07:57:40 EDT 2016



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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20160701/89092510/attachment.html>


More information about the cmake-developers mailing list