[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