The following issue has been SUBMITTED. 
====================================================================== 
https://public.kitware.com/Bug/view.php?id=16133 
====================================================================== 
Reported By:                Alexis Wilke
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   16133
Category:                   CMake
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2016-05-31 20:27 EDT
Last Modified:              2016-05-31 20:27 EDT
====================================================================== 
Summary:                    NO_DEFAULT_PATH is taken as a path when specified
after the PATHS option.
Description: 
I wanted to make sure that I could get a header from my environment (i.e. source
tree) first, then from the system if no specific version in the environment was
defined there. For this purpose, I used the NO_DEFAULT_PATH option as defined in
the documentation:

https://cmake.org/cmake/help/v3.5/command/find_path.html

However, the code would always return path "/usr/include" when I expect (in my
specific case) to see path "...path-to-source.../contrib/catch"

I found that by putting the NO_DEFAULT_PATH before the PATHS option, it worked
as I first expected. It seems to me, though, that it is not correct. There
should be a check and if a path defined after the PATHS option looks like a
flag, it should be taken as such and see it as the end of the list of PATHS or
HINTS.

Steps to Reproduce: 
The failing search looks like this:

FIND_PATH(CATCH_INCLUDE_DIR
    catch.hpp
    PATHS
        ${CMAKE_SOURCE_DIR}/contrib/catch 
        ${CMAKE_SOURCE_DIR}/contrib
    NO_DEFAULT_PATH
)

IF(NOT CATCH_INCLUDE_DIR)
    # Try again with default paths as per cmake
    FIND_PATH(CATCH_INCLUDE_DIR
        catch.hpp
    )
ENDIF()


My Ubuntu installation includes a catch.hpp under /usr/include. This is because
I have the catch package already installed:

apt-get install catch

My source directory includes a contrib/catch/catch.hpp file.

Adding a MESSAGE("Found Path? ")(${CATCH_INCLUDE_DIR}) before the IF() shows us
that the CATCH_INCLUDE_DIR is already set and it is "/usr/include" instead of
the expected "${CMAKE_SOURCE_DIR}/contrib/catch".



Additional Information: 
There is a work around, which makes me think that the problem is that PATHS (and
probably HINTS) does not properly recognize NO_DEFAULT_PATH as a flag and no see
it as a path...

All I have to do is to put the NO_DEFAULT_PATH ahead of the PATHS specification.

FIND_PATH(CATCH_INCLUDE_DIR
    catch.hpp
    NO_DEFAULT_PATH
    PATHS
        ${CMAKE_SOURCE_DIR}/contrib/catch 
        ${CMAKE_SOURCE_DIR}/contrib
)

See also my Stackoverflow.com entry here:

http://stackoverflow.com/questions/37534142/how-do-i-get-cmake-to-choose-the-header-found-in-my-contrib-directory/37534160#37534160
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2016-05-31 20:27 Alexis Wilke   New Issue                                    
======================================================================

-- 

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