Bläddra i källkod

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.
Brad King 13 år sedan
förälder
incheckning
e2e0d2e3c7

+ 2 - 1
Modules/ExternalData.cmake

@@ -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)

+ 1 - 0
Tests/Module/ExternalData/Data2/CMakeLists.txt

@@ -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
   )

+ 6 - 3
Tests/Module/ExternalData/Data2/Data2Check.cmake

@@ -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}")

+ 1 - 0
Tests/Module/ExternalData/Data2b.dat.md5

@@ -0,0 +1 @@
+8c018830e3efa5caf3c7415028335a57

+ 2 - 1
Tests/RunCMake/ExternalData/SubDirectory1-stdout.txt

@@ -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!

+ 11 - 1
Tests/RunCMake/ExternalData/SubDirectory1/CMakeLists.txt

@@ -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}")