ExternalData: Collapse ../ components in DATA{} paths

Relative path components need to be normalized out even if they appear
in the middle of a caller-supplied string.
This commit is contained in:
Brad King 2013-01-30 14:44:49 -05:00
parent ee2abfdc89
commit e2e0d2e3c7
6 changed files with 23 additions and 6 deletions

View File

@ -334,8 +334,9 @@ function(_ExternalData_arg target arg options var_file)
if(IS_ABSOLUTE "${data}")
set(absdata "${data}")
else()
get_filename_component(absdata "${CMAKE_CURRENT_SOURCE_DIR}/${data}" ABSOLUTE)
set(absdata "${CMAKE_CURRENT_SOURCE_DIR}/${data}")
endif()
get_filename_component(absdata "${absdata}" ABSOLUTE)
# Convert to relative path under the source tree.
if(NOT ExternalData_SOURCE_ROOT)

View File

@ -4,6 +4,7 @@ ExternalData_Add_Test(Data2
NAME Data2Check
COMMAND ${CMAKE_COMMAND}
-D Data2=DATA{../Data2.dat}
-D Data2b=DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data2b.dat}
-D SeriesC=DATA{SeriesC_1_.my.dat,:}
-P ${CMAKE_CURRENT_SOURCE_DIR}/Data2Check.cmake
)

View File

@ -1,6 +1,9 @@
if(NOT EXISTS "${Data2}")
message(SEND_ERROR "Input file:\n ${Data2}\ndoes not exist!")
endif()
foreach(d "${Data2}" "${Data2b}")
file(STRINGS "${d}" lines LIMIT_INPUT 1024)
if(NOT "x${lines}" STREQUAL "xInput file already transformed.")
message(SEND_ERROR "Input file:\n ${d}\ndoes not have expected content, but [[${lines}]]")
endif()
endforeach()
foreach(n 1 2 3)
string(REGEX REPLACE "_1_\\.my\\.dat$" "_${n}_.my.dat" SeriesCFile "${SeriesC}")
if(NOT EXISTS "${SeriesCFile}")

View File

@ -0,0 +1 @@
8c018830e3efa5caf3c7415028335a57

View File

@ -1,2 +1,3 @@
-- Data reference correctly transformed in parent dir!
-- Data reference correctly transformed in parent dir 1!
-- Data reference correctly transformed in parent dir 2!
-- Data reference correctly transformed in current dir!

View File

@ -2,7 +2,17 @@ set(input ../Data.txt)
set(output ${CMAKE_BINARY_DIR}/Data.txt)
ExternalData_Expand_Arguments(Data args DATA{${input}})
if("x${args}" STREQUAL "x${output}")
message(STATUS "Data reference correctly transformed in parent dir!")
message(STATUS "Data reference correctly transformed in parent dir 1!")
else()
message(FATAL_ERROR "Data reference transformed to:\n ${args}\n"
"but we expected:\n ${output}")
endif()
set(input ${CMAKE_CURRENT_SOURCE_DIR}/../Data.txt)
set(output ${CMAKE_BINARY_DIR}/Data.txt)
ExternalData_Expand_Arguments(Data args DATA{${input}})
if("x${args}" STREQUAL "x${output}")
message(STATUS "Data reference correctly transformed in parent dir 2!")
else()
message(FATAL_ERROR "Data reference transformed to:\n ${args}\n"
"but we expected:\n ${output}")