[CMake] Bug in find_file() command ?
Andreas Schenk
andreas_schenk at hms.harvard.edu
Thu Sep 27 14:20:15 EDT 2012
I had the same problem recently. Do you have a/driver_root/ directory in/ //C:/Windows/SysWOW64/?
On 64-bit Windows systems the System32 directory contains the 64bit DLLs.
For 32-bit executables (like cmake for example), the WOW64 subsystem automatically redirects
System32 directory access to SysWOW64, where the 32-bit DLLs are stored.
This has the side effect, that the path reported by find_file() doesn't correspond to
the actual filesystem path for a file located in SysWOW64.
Cheers,
Andreas
> Once the driver project has converted to using cmake that is what I plan to
> do - use find_path() to look for driver_root/CMakeLists.txt. But in the
> meantime I'm stuck using find_file() instead which works but it looks like
> a bug that I need to specify the NO_DEFAULT_PATH option to avoid getting an
> incorrect match.
>
> --
> Glenn
>
>
>
>On 3 September 2012 09:58, Adolfo Rodríguez Tsouroukdissian <
>adolfo.rodriguez at pal-robotics.com <http://www.cmake.org/mailman/listinfo/cmake>> wrote:
>
>>/
/>>/
/>>/ On Tue, Aug 28, 2012 at 6:59 PM, Glenn Coombs <glenn.coombs at gmail.com <http://www.cmake.org/mailman/listinfo/cmake>>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.cmake.org/mailman/listinfo/cmake>
/>/>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/20120927/b02898aa/attachment.htm>
More information about the CMake
mailing list