[CMake] FILE TO_NATIVE_PATH on Windows
Brandon J. Van Every
bvanevery at gmail.com
Mon Jul 17 14:15:08 EDT 2006
William A. Hoffman wrote:
> At 12:26 AM 7/17/2006, Brandon J. Van Every wrote:
>
>
>> Because last I tried, it was broken. Precise definition of "broken" later. I'm in the middle of a huge refactoring right now, driven by these pathing and quoting and escaped whitespace problems.
>>
> If it is broken, please let me know so it won't be broken in the next patch release
> of CMake when it comes out.
>
Ok, FILE(TO_NATIVE_PATH ...) is "broken" on Windows in that it doesn't
enclose the resultant path in double quotes. This is a debateable
aspect of design. Quotes get in the way of merging paths, but they are
also necessary to make a path usable.
MACRO(MAKE_WINDOWS_PATH pathname)
# An extra \\ escape is necessary to get a \ through CMake's processing.
STRING(REPLACE "/" "\\" ${pathname} "${${pathname}}")
# Enclose with UNESCAPED quotes. This means we need to escape our
# quotes once here, i.e. with \"
SET(${pathname} \"${${pathname}}\")
ENDMACRO(MAKE_WINDOWS_PATH)
SET(CMAKEISH_PATH "C:/Program Files/Chicken")
MESSAGE(${CMAKEISH_PATH})
SET(MY_NATIVE_PATH ${CMAKEISH_PATH})
MAKE_WINDOWS_PATH(MY_NATIVE_PATH)
MESSAGE(${MY_NATIVE_PATH})
SET(YOUR_NATIVE_PATH ${CMAKEISH_PATH})
FILE(TO_NATIVE_PATH ${CMAKEISH_PATH} YOUR_NATIVE_PATH)
MESSAGE(${YOUR_NATIVE_PATH})
MACRO(SEPARATION_TEST path)
SET(SEPARATED_HOOEY ${${path}})
SEPARATE_ARGUMENTS(SEPARATED_HOOEY)
MESSAGE("${SEPARATED_HOOEY}")
ENDMACRO(SEPARATION_TEST)
SEPARATION_TEST(CMAKEISH_PATH)
SEPARATION_TEST(MY_NATIVE_PATH)
SEPARATION_TEST(YOUR_NATIVE_PATH)
Brandon J. Van Every at KAHLO ~
$ cmake -P windowspath.cmake
C:/Program Files/Chicken
"C:\Program Files\Chicken"
C:\Program Files\Chicken
C:/Program;Files/Chicken
"C:\Program;Files\Chicken"
C:\Program;Files\Chicken
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20060717/31e57301/attachment.html
More information about the CMake
mailing list