[CMake] Bug in find_file() command ?

Adolfo Rodríguez Tsouroukdissian adolfo.rodriguez at pal-robotics.com
Mon Sep 3 04:58:30 EDT 2012


On Tue, Aug 28, 2012 at 6:59 PM, Glenn Coombs <glenn.coombs at gmail.com>wrote:

> I need to test for the presence of a directory called driver_root.  I
> couldn't see a find_directory() command in the help


I cannot comment about your issues concerning find_file, but if you know
the name of a file contained in the directory you can use find_path:

http://cmake.org/cmake/help/v2.8.8/cmake.html#command:find_path

Cheers,

Adolfo.


> 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
>
>
> --
>
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>



-- 
Adolfo Rodríguez Tsouroukdissian
Robotics engineer
adolfo.rodriguez at pal-robotics.com
http://www.pal-robotics.com

PAL ROBOTICS S.L
c/ Pujades 77-79, 4º4ª
08005 Barcelona, Spain.
Tel. +34.93.414.53.47
Fax.+34.93.209.11.09

AVISO DE CONFIDENCIALIDAD: Este mensaje y sus documentos adjuntos, pueden
contener información privilegiada y/o confidencial que está dirigida
exclusivamente a su destinatario. Si usted recibe este mensaje y no es el
destinatario indicado, o el empleado encargado de su entrega a dicha
persona, por favor, notifíquelo inmediatamente y remita el mensaje original
a la dirección de correo electrónico indicada. Cualquier copia, uso o
distribución no autorizados de esta comunicación queda estrictamente
prohibida.

CONFIDENTIALITY NOTICE: This e-mail and the accompanying document(s) may
contain confidential information which is privileged and intended only for
the individual or entity to whom they are addressed.  If you are not the
intended recipient, you are hereby notified that any disclosure, copying,
distribution or use of this e-mail and/or accompanying document(s) is
strictly prohibited.  If you have received this e-mail in error, please
immediately notify the sender at the above e-mail address.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120903/82b3951a/attachment.htm>


More information about the CMake mailing list