The following issue has been SUBMITTED. ====================================================================== https://public.kitware.com/Bug/view.php?id=15927 ====================================================================== Reported By: Gehua Yang Assigned To: ====================================================================== Project: CMake Issue ID: 15927 Category: CMake Reproducibility: always Severity: minor Priority: normal Status: new ====================================================================== Date Submitted: 2016-01-19 10:07 EST Last Modified: 2016-01-19 10:07 EST ====================================================================== Summary: Escape semicolon ";" in CMake/CTest variables? Description: My CMake-Controlled private build depends on a couple external libraries. On Windows, the build needs to find the dll files of external libraries in order to run the automated tests. The solution I came up with is to add those folders to the PATH environment variable for the build. Here is what I did in the CTest script (using CMake 3.4.1 for Windows):
SET(MYPATH "$ENV{PATH}\;C:\\Gehua\\Code\\tbb\\tbb43_20150611oss\\bin\\intel64\\vc14") # set any extra envionment variables here # a. TBB path is needed to run tests # b. Use the "true" command-line plink for git's ssh use. SET (CTEST_ENVIRONMENT "GIT_SSH=c:\\Program Files (x86)\\PuTTY\\plink.exe" "PATH=${MYPATH}" ) MESSAGE(STATUS "env=${CTEST_ENVIRONMENT}") Here is the output from running the build from the code above: -- env=GIT_SSH=c:\Program Files (x86)\PuTTY\plink.exe;PATH=C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;%USERPROFILE%\.dnx\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\IDM Computer Solutions\UltraCompare;C:\Program Files\IDM Computer Solutions\UltraFinder\\;C:\Gehua\Code\tbb\tbb43_20150611oss\bin\intel64\vc14 But this change does NOT work for the tests. The tests failed without execution. I suspected that it still did not find the depending dll files. So I added the following code in a simple test file: std::cout << "env PATH=" << getenv ("PATH") << '\n'; std::cout << "env GIT_SSH=" << getenv ("GIT_SSH") << '\n'; The output is : env PATH=C:\ProgramData\Oracle\Java\javapath env GIT_SSH=c:\Program Files (x86)\PuTTY\plink.exe As one can see, The PATH variable content was truncated at the semicolon mark (";"). It is not surprising outcome as CMake use semicolon as delimiter of list elements. But in this particular case, I am seeking for a way to escape the semicolons so that CMake/CTest treats it as an integral part of the string. Is there a way to do it? Steps to Reproduce: SET(MYPATH "$ENV{PATH}\;C:\\Gehua\\Code\\tbb\\tbb43_20150611oss\\bin\\intel64\\vc14") # set any extra envionment variables here # a. TBB path is needed to run tests # b. Use the "true" command-line plink for git's ssh use. SET (CTEST_ENVIRONMENT "GIT_SSH=c:\\Program Files (x86)\\PuTTY\\plink.exe" "PATH=${MYPATH}" ) MESSAGE(STATUS "env=${CTEST_ENVIRONMENT}") But the result is: PATH=C:\ProgramData\Oracle\Java\javapath GIT_SSH=c:\Program Files (x86)\PuTTY\plink.exe ====================================================================== Issue History Date Modified Username Field Change ====================================================================== 2016-01-19 10:07 Gehua Yang New Issue ====================================================================== -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers