[CMake] Bug in find_file() command ?

Glenn Coombs glenn.coombs at gmail.com
Tue Aug 28 12:59:23 EDT 2012


I need to test for the presence of a directory called driver_root.  I
couldn't see a find_directory() command in the help so I am using the
following lines in my CMakeLists.txt:

    message("1 DRV_ROOT_CHECK: ${DRV_ROOT_CHECK}")
    if (DEFINED ENV{DRV_ROOT})
        find_file(DRV_ROOT_CHECK driver_root $ENV{DRV_ROOT}/..)
    message("2 DRV_ROOT_CHECK: ${DRV_ROOT_CHECK}")
    endif()

    message("3 DRV_ROOT_CHECK: ${DRV_ROOT_CHECK}")
    find_file(DRV_ROOT_CHECK driver_root
        ../CVSFILES
        ../..
        ../../CVSFILES
        ../../..
        ../../../CVSFILES
        ../../../..
    )
    message("4 DRV_ROOT_CHECK: ${DRV_ROOT_CHECK}")

    set(DRV_ROOT       "${DRV_ROOT_CHECK}" CACHE PATH     "Location of
driver tree")
    set(DRV_ROOT_CHECK "${DRV_ROOT_CHECK}" CACHE INTERNAL "Location of
driver tree")

    message("5 DRV_ROOT_CHECK: ${DRV_ROOT_CHECK}")

    if (DRV_ROOT_CHECK)
        message("   DRV_ROOT: ${DRV_ROOT}")
    else()
        message(FATAL_ERROR "Unable to locate driver_root directory.
Please set DRV_ROOT variable.")
    endif()

It works fine on my machine but fails on one of our build machines.  Both
machines are Windows 7 (64-bit) and are using CMake 2.8.9.  On my machine
it produces this output:

1 DRV_ROOT_CHECK:
3 DRV_ROOT_CHECK:
4 DRV_ROOT_CHECK: C:/data/perforceCheckouts/sim/vxe/CVSFILES/driver_root
5 DRV_ROOT_CHECK: C:/data/perforceCheckouts/sim/vxe/CVSFILES/driver_root
   DRV_ROOT: C:/data/perforceCheckouts/sim/vxe/CVSFILES/driver_root

but on the build machine it produces this output:

1 DRV_ROOT_CHECK:
3 DRV_ROOT_CHECK:
4 DRV_ROOT_CHECK: C:/Windows/System32/driver_root
5 DRV_ROOT_CHECK: C:/Windows/System32/driver_root

There is no file or directory called driver_root in the windows/systsem32
folder.  If I change the find_file() command to this:

find_file(DRV_ROOT_CHECK driver_root PATHS
        ../CVSFILES
        ../..
        ../../CVSFILES
        ../../..
        ../../../CVSFILES
        ../../../..
        NO_DEFAULT_PATH
    )

then it works producing this output:

1 DRV_ROOT_CHECK:
3 DRV_ROOT_CHECK:
4 DRV_ROOT_CHECK: C:/glenn/CVSFILES/driver_root
5 DRV_ROOT_CHECK: C:/glenn/CVSFILES/driver_root

Is this a bug in cmake or can somebody explain how it found a non-existant
file/folder in the windows/system32 folder ?

--
Glenn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120828/96f845b7/attachment.htm>


More information about the CMake mailing list