1823ab4d76
The CMake language implicitly flattens lists so a ";" in a list element must be escaped with a backslash. List expansion removes backslashes escaping semicolons to leave raw semicolons in the values. Teach ExternalData_Add_Test and ExternalData_Expand_Arguments to re-escape semicolons found in list elements so the resulting argument lists work as if constructed directly by the set() command. For example: ExternalData_Add_Test(Data NAME test1 COMMAND ... "a\\;b") ExternalData_Expand_Arguments(Data args2 "c\\;d") add_test(NAME test2 COMMAND ... ${args2}) should be equivalent to set(args1 "a\\;b") add_test(NAME test1 COMMAND ... ${args1}) set(args2 "c\\;d") add_test(NAME test2 COMMAND ... ${args2}) which is equivalent to add_test(NAME test1 COMMAND ... "a;b") add_test(NAME test2 COMMAND ... "c;d") Note that it is not possible to make ExternalData_Add_Test act exactly like add_test when quoted arguments contain semicolons because the CMake language flattens lists when constructing function ARGN values. This re-escape approach at least allows test arguments to have semicolons. While at it, teach ExternalData APIs to not transform "DATA{...;...}" arguments because the contained semicolons are non-sensical. Suggested-by: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
45 lines
1.3 KiB
CMake
45 lines
1.3 KiB
CMake
cmake_minimum_required(VERSION 2.8.10.20130115)
|
|
project(ExternalDataTest NONE)
|
|
|
|
include(CTest)
|
|
|
|
include(ExternalData)
|
|
|
|
if(NOT "${CMAKE_CURRENT_SOURCE_DIR}" MATCHES "^/")
|
|
set(slash /)
|
|
endif()
|
|
set(ExternalData_URL_TEMPLATES
|
|
"file://${slash}${CMAKE_CURRENT_SOURCE_DIR}/%(algo)/%(hash)"
|
|
)
|
|
set(ExternalData_BINARY_ROOT "${CMAKE_CURRENT_BINARY_DIR}/ExternalData")
|
|
file(REMOVE_RECURSE ${ExternalData_BINARY_ROOT}) # clean test
|
|
|
|
if(MAKE_SUPPORTS_SPACES)
|
|
set(Data1CheckSpaces -D "DataSpace=DATA{Data Space.dat}")
|
|
endif()
|
|
|
|
ExternalData_Add_Test(Data1
|
|
NAME Data1Check
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-D Data=DATA{Data.dat}
|
|
${Data1CheckSpaces}
|
|
-D SeriesA=DATA{SeriesA.dat,:}
|
|
-D SeriesB=DATA{SeriesB.dat,:}
|
|
-D SeriesC=DATA{SeriesC.dat,:}
|
|
-D SeriesD=DATA{SeriesD.dat,:}
|
|
-D SeriesAn=DATA{SeriesAn1.dat,:}
|
|
-D SeriesBn=DATA{SeriesBn_1.dat,:}
|
|
-D SeriesCn=DATA{SeriesCn.1.dat,:}
|
|
-D SeriesDn=DATA{SeriesDn-1.dat,:}
|
|
-D SeriesMixed=DATA{SeriesMixed.1.dat,:}
|
|
-D Paired=DATA{PairedA.dat,PairedB.dat}
|
|
-D Meta=DATA{MetaTop.dat,REGEX:Meta[ABC].dat}
|
|
-D Directory=DATA{Directory/,A.dat,REGEX:[BC].dat}
|
|
-D "Semicolons=DATA{Data.dat}\\;DATA{Data.dat}"
|
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/Data1Check.cmake
|
|
)
|
|
ExternalData_Add_Target(Data1)
|
|
|
|
add_subdirectory(Data2)
|
|
add_subdirectory(Data3)
|