Axel Roebel wrote:
Hi,

I just switched from 2.4.8 to 2.6 and found a very strange behavior in one of my existing cmake projects. I am trying to find the include files (and libraries) of Intels mkl libraries with the following
cmake code

FIND_PATH(MKL_INCLUDE_PATH_TMP mkl_dfti.h PATHS /usr/include /usr/local/include /u/formes/share/include /cygdrive/c/Program Files/Intel/MKL/10.0.1.014/include)

Now in cmake 2.4.8 this returned
/cygdrive/c/Program Files/Intel/MKL/10.0.1.014/include

while in cmake 2.6.0 it creates

c:\Program Files\Intel\MKL\10.0.1.014\include

a path that it found in the environment variable INCLUDE


So, we added more places to look for things (INCLUDE). You may want to try the Unix Makefile generator and the windows binary of cmake. The cygwin cmake really does not work very will with native windows programs. It really is meant to work in the cygwin environment with the cygwin tool chain. You could add NO_DEFAULT_PATH to your FIND_PATH call and it would stop cmake from looking in INCLUDE.

This seems already somewhat buggy tpo me because I would have expected that in 
a unix makefile generator the variable should be automatically
converted to unix path style.

The path should be converted before it is actually used if you pass it to say include_directories.

Then I thought to use the to_cmake_path/to_native_path facilities to convert 
the path
to unix flavor. (BTW I am not quite sure what native means in cygwin compiled 
cmake on windows).
Neither of these two did anything useful though. Both ended up with something 
like

"c"  "/Program Files/Intel/MKL/10.0.1.014/include"

which after looking in the source code is obviously due to the fact that the fist thing both TO_*_PATH commands do is

 #if defined(_WIN32) && !defined(__CYGWIN__)
  char pathSep = ';';
#else
  char pathSep = ':';
#endif
  std::vector<cmsys::String> path = cmSystemTools::SplitString(i->c_str(),    
pathSep);

this means for CYGWIN it will always use ":" as path separator splitting the c from the rest and then converting to unix style path. So in short the path conversion for cygwin is working only in one (completely useless) case: unix style path -> unix style path
While I submitted this as a bug report I wonder if there are any workarounds 
that
I might use to get the unix style path with the current cmake 2.6.0


We would have to create a new command to do that. If you check the docs for TO_CMAKE_PATH, it says you can pass in things like: $ENV{PATH}, so it allows for and was intended to work with paths separated by the native path separator. Again, cygwin does not play nice with windows tools. I mean if you passed -I/cygdrive/c/Program Files/Intel/MKL/10.0.1.014/include to the intel compiler, it would not be able to use it would it?

-Bill

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to