On 07/01/2016 02:08 PM, Julien Schueller wrote:


------------------------------------------------------------------------

    *De: *"Nils Gladitz" <nilsglad...@gmail.com>
    *À: *"Julien Schueller" <schuel...@phimeca.com>,
    "cmake-developers" <cmake-developers@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" <nilsglad...@gmail.com>
            *À: *"Julien Schueller" <schuel...@phimeca.com>,
            "cmake-developers" <cmake-developers@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
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers

Reply via email to