[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