[cmake-developers] find_program HINTS no longer preferred over PATH (was: HINTS not correctly handled in find_program)
Chuck Atkins
chuck.atkins at kitware.com
Wed Sep 9 11:50:00 EDT 2015
>From what I can tell, the search order is still preserved as expected.
[chuck.atkins at hal9000 testdir]$ cat TestFindProgram.cmake
set(CMAKE_PREFIX_PATH
"/FOODIR_CMAKE_PREFIX_PATH1;/FOODIR_CMAKE_PREFIX_PATH2"
CACHE STRING "" FORCE)
set(CMAKE_PROGRAM_PATH
"/FOODIR_CMAKE_PROGRAM_PATH1;/FOODIR_CMAKE_PROGRAM_PATH2"
CACHE STRING "" FORCE)
set(CMAKE_APPBUNDLE_PATH
"/FOODIR_CMAKE_APPBUNDLE_PATH1;/FOODIR_CMAKE_APPBUNDLE_PATH2"
CACHE STRING "" FORCE)
set(ENV{CMAKE_PREFIX_PATH}
"/FOODIR_ENV_CMAKE_PREFIX_PATH1:/FOODIR_ENV_CMAKE_PREFIX_PATH2"
)
set(ENV{CMAKE_PROGRAM_PATH}
"/FOODIR_ENV_CMAKE_PROGRAM_PATH1:/FOODIR_ENV_CMAKE_PROGRAM_PATH2"
)
set(ENV{CMAKE_APPBUNDLE_PATH}
"/FOODIR_ENV_CMAKE_APPBUNDLE_PATH1:/FOODIR_ENV_CMAKE_APPBUNDLE_PATH2"
)
set(ENV{PATH} "/FOODIR_ENV_PATH1:/FOODIR_ENV_PATH2")
set(CMAKE_SYSTEM_PREFIX_PATH
"/FOODIR_CMAKE_SYSTEM_PREFIX_PATH1;/FOODIR_CMAKE_SYSTEM_PREFIX_PATH2"
CACHE STRING "" FORCE)
set(CMAKE_SYSTEM_PROGRAM_PATH
"/FOODIR_CMAKE_SYSTEM_PROGRAM_PATH1;/FOODIR_CMAKE_SYSTEM_PROGRAM_PATH2"
CACHE STRING "" FORCE)
set(CMAKE_SYSTEM_APPBUNDLE_PATH
"/FOODIR_CMAKE_SYSTEM_APPBUNDLE_PATH1;/FOODIR_CMAKE_SYSTEM_APPBUNDLE_PATH2"
CACHE STRING "" FORCE)
find_program(FOO foo.bin
HINTS /FOODIR_FP_HINTS1 /FOODIR_FP_HINTS2
PATHS /FOODIR_FP_PATHS1 /FOODIR_FP_PATHS2)
[chuck.atkins at hal9000 testdir]$
By setting each possible location to FOODIR_LOCATIONNAME1 and
FOODIR_LOCATIONMAME2, strace make sit easy to see whats searched for in
what order:
[chuck.atkins at hal9000 testdir]$ strace cmake -P TestFindProgram.cmake 2>&1
| sed -n 's|^[^"]*"\([^"]*foo.bin\)".*|\1|p'
foo.bin
/FOODIR_CMAKE_PREFIX_PATH1/bin/foo.bin
/FOODIR_CMAKE_PREFIX_PATH1/sbin/foo.bin
/FOODIR_CMAKE_PREFIX_PATH1/foo.bin
/FOODIR_CMAKE_PREFIX_PATH2/bin/foo.bin
/FOODIR_CMAKE_PREFIX_PATH2/sbin/foo.bin
/FOODIR_CMAKE_PREFIX_PATH2/foo.bin
/FOODIR_CMAKE_PROGRAM_PATH1/foo.bin
/FOODIR_CMAKE_PROGRAM_PATH2/foo.bin
/FOODIR_CMAKE_APPBUNDLE_PATH1/foo.bin
/FOODIR_CMAKE_APPBUNDLE_PATH2/foo.bin
/FOODIR_ENV_CMAKE_PREFIX_PATH1/bin/foo.bin
/FOODIR_ENV_CMAKE_PREFIX_PATH1/sbin/foo.bin
/FOODIR_ENV_CMAKE_PREFIX_PATH1/foo.bin
/FOODIR_ENV_CMAKE_PREFIX_PATH2/bin/foo.bin
/FOODIR_ENV_CMAKE_PREFIX_PATH2/sbin/foo.bin
/FOODIR_ENV_CMAKE_PREFIX_PATH2/foo.bin
/FOODIR_ENV_CMAKE_PROGRAM_PATH1/foo.bin
/FOODIR_ENV_CMAKE_PROGRAM_PATH2/foo.bin
/FOODIR_ENV_CMAKE_APPBUNDLE_PATH1/foo.bin
/FOODIR_ENV_CMAKE_APPBUNDLE_PATH2/foo.bin
/FOODIR_FP_HINTS1/foo.bin
/FOODIR_FP_HINTS2/foo.bin
/FOODIR_ENV_PATH1/foo.bin
/FOODIR_ENV_PATH2/foo.bin
/FOODIR_CMAKE_SYSTEM_PREFIX_PATH1/bin/foo.bin
/FOODIR_CMAKE_SYSTEM_PREFIX_PATH1/sbin/foo.bin
/FOODIR_CMAKE_SYSTEM_PREFIX_PATH1/foo.bin
/FOODIR_CMAKE_SYSTEM_PREFIX_PATH2/bin/foo.bin
/FOODIR_CMAKE_SYSTEM_PREFIX_PATH2/sbin/foo.bin
/FOODIR_CMAKE_SYSTEM_PREFIX_PATH2/foo.bin
/FOODIR_CMAKE_SYSTEM_PROGRAM_PATH1/foo.bin
/FOODIR_CMAKE_SYSTEM_PROGRAM_PATH2/foo.bin
/FOODIR_CMAKE_SYSTEM_APPBUNDLE_PATH1/foo.bin
/FOODIR_CMAKE_SYSTEM_APPBUNDLE_PATH2/foo.bin
/FOODIR_FP_PATHS1/foo.bin
/FOODIR_FP_PATHS2/foo.bin
[chuck.atkins at hal9000 testdir]$
>From this, it looks like the find_program(... HINTS ...) are still searched
before ENV{PATH}:
/FOODIR_FP_HINTS1/foo.bin
/FOODIR_FP_HINTS2/foo.bin
/FOODIR_ENV_PATH1/foo.bin
/FOODIR_ENV_PATH2/foo.bin
- Chuck
On Wed, Sep 9, 2015 at 11:01 AM, Brad King <brad.king at kitware.com> wrote:
> On 09/03/2015 03:51 AM, CHEVRIER, Marc wrote:
> > 1. Build phase. Under find_program.BUG/build, use CMakeLists.txt to
> prepare runtime part
> > 2. Test phase. Under find_program.BUG/runtime, use CMakeLists.txt to
> show the bug.
>
> Thanks, Marc.
>
> Chuck, this was regressed by your changes in CMake 3.2:
>
> Merge topic 'refactor-search-path-construction'
> http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dd89506c
>
> Please revise the logic to preserve the documented behavior:
>
> http://www.cmake.org/cmake/help/v3.3/command/find_program.html
>
> HINTS should be preferred before ENV{PATH}. Please also add
> appropriate test cases (e.g. Tests/RunCMake/find_program) and
> also check the behavior for other find_* commands.
>
> Thanks,
> -Brad
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150909/f66b4ef2/attachment-0001.html>
More information about the cmake-developers
mailing list