[CMake] CHECK_INCLUDE_FILES ignores CMAKE_FIND_ROOT_PATH, but should it?

Bjørn Forsman bjorn.forsman at gmail.com
Wed Jan 12 19:49:33 EST 2011


2011/1/10 Bjørn Forsman <bjorn.forsman at gmail.com>:
> Hi all,
>
> I just found out that CHECK_INCLUDE_FILES ignores CMAKE_FIND_ROOT_PATH. The
> documentation for CHECK_INCLUDE_FILES says:
>
>  ...
>  The following variables may be set before calling this macro  to
>  modify the way the check is run:
>
>    CMAKE_REQUIRED_FLAGS = string of compile command line flags
>    CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
>    CMAKE_REQUIRED_INCLUDES = list of include directories
>
> So it seems intentional. But wouldn't it make sense to let CHECK_INCLUDE_FILES
> look in CMAKE_FIND_ROOT_PATH? Or maybe more precise, give the compiler include
> flags for CMAKE_FIND_ROOT_PATH/{include/,usr/include}? It just seems wrong to me
> that include files in CMAKE_FIND_ROOT_PATH can be ignored like that and it
> destroys the meaning of CMAKE_FIND_ROOT_PATH. Comments?
>
> Is maybe CHECK_INCLUDE_FILES deprecated and FIND_PATH/FIND_FILE is the way
> to go?
>
> I'm using CMake 2.8.2.

Anyone?

I'll try rephrasing my question.
I'm trying to build the cdrkit package using CMAKE_FIND_ROOT_PATH:

SET(CMAKE_FIND_ROOT_PATH $ENV{STAGING_DIR})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

cdrkit attempts to find sys/capability.h using CHECK_INCLUDE_FILES.
This fails, even though the header is in
$STAGING_DIR/usr/include/sys/capability.h.

So what is the Right Thing to do here? Change CHECK_INCLUDE_FILES
to also look in CMAKE_FIND_ROOT_PATH or change the cdkit CMakeLists.txt
file to use FIND_PATH instead?

I guess the latter should be pretty easy, but I'd hate to give up on
the idea that
CMake packages can be truly re-rooted simply by using CMAKE_FIND_ROOT_PATH.

Best regards,
Bjørn Forsman


More information about the CMake mailing list