[cmake-developers] PATHS guess in find_package ignored with NO_DEFAULT_PATH & CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
Julien Schueller
schueller at phimeca.com
Fri Jul 1 08:28:28 EDT 2016
> 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 14:19:25
> Objet: Re: [cmake-developers] PATHS guess in find_package ignored with
> NO_DEFAULT_PATH & CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
> 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
I see your point.
Thank you so much for the quick response.
--
Julien Schueller
Phimeca Engineering
www.phimeca.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20160701/1df88342/attachment-0001.html>
More information about the cmake-developers
mailing list