Merge topic 'ExternalData-allow-no-urls'

8eb20ee ExternalData: Allow local stores without any URL templates
This commit is contained in:
Brad King 2013-11-14 11:27:56 -05:00 committed by CMake Topic Stage
commit 0b2d376142
9 changed files with 59 additions and 6 deletions

View File

@ -58,7 +58,7 @@
#
# It creates custom commands in the target as necessary to make data
# files available for each ``DATA{}`` reference previously evaluated by
# other functions provided by this module. A list of URL templates must
# other functions provided by this module. A list of URL templates may
# be provided in the variable ``ExternalData_URL_TEMPLATES`` using the
# placeholders ``%(algo)`` and ``%(hash)`` in each template. Data fetch
# rules try each URL template in order by substituting the hash
@ -202,8 +202,9 @@ function(ExternalData_add_test target)
endfunction()
function(ExternalData_add_target target)
if(NOT ExternalData_URL_TEMPLATES)
message(FATAL_ERROR "ExternalData_URL_TEMPLATES is not set!")
if(NOT ExternalData_URL_TEMPLATES AND NOT ExternalData_OBJECT_STORES)
message(FATAL_ERROR
"Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!")
endif()
if(NOT ExternalData_OBJECT_STORES)
set(ExternalData_OBJECT_STORES ${CMAKE_BINARY_DIR}/ExternalData/Objects)
@ -625,8 +626,9 @@ endif()
if(ExternalData_CONFIG)
include(${ExternalData_CONFIG})
endif()
if(NOT ExternalData_URL_TEMPLATES)
message(FATAL_ERROR "No ExternalData_URL_TEMPLATES set!")
if(NOT ExternalData_URL_TEMPLATES AND NOT ExternalData_OBJECT_STORES)
message(FATAL_ERROR
"Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!")
endif()
function(_ExternalData_link_or_copy src dst)
@ -754,6 +756,9 @@ function(_ExternalData_download_object name hash algo var_obj)
set(obj "${staged}")
message(STATUS "Staged object: \"${obj}\"")
else()
if(NOT tried)
set(tried "\n (No ExternalData_URL_TEMPLATES given)")
endif()
message(FATAL_ERROR "Object ${algo}=${hash} not found at:${tried}")
endif()

View File

@ -42,3 +42,4 @@ ExternalData_Add_Target(Data1)
add_subdirectory(Data2)
add_subdirectory(Data3)
add_subdirectory(Data4)

View File

@ -0,0 +1,15 @@
set(Store0 ${CMAKE_BINARY_DIR}/ExternalData/Other)
set(Store1 ${CMAKE_BINARY_DIR}/ExternalData/Objects)
set(ExternalData_OBJECT_STORES ${Store0} ${Store1})
unset(ExternalData_URL_TEMPLATES) # All objects already in stores!
ExternalData_Add_Test(Data4
NAME Data4Check
COMMAND ${CMAKE_COMMAND}
-D Data=DATA{Data.dat}
-D Other=DATA{Other.dat}
-D Store0=${Store0}
-D Store1=${Store1}
-P ${CMAKE_CURRENT_SOURCE_DIR}/Data4Check.cmake
)
ExternalData_Add_Target(Data4)
add_dependencies(Data4 Data3)

View File

@ -0,0 +1 @@
8c018830e3efa5caf3c7415028335a57

View File

@ -0,0 +1,26 @@
if(NOT EXISTS "${Data}")
message(SEND_ERROR "Input file:\n ${Data}\ndoes not exist!")
endif()
if(NOT EXISTS "${Other}")
message(SEND_ERROR "Input file:\n ${Other}\ndoes not exist!")
endif()
# Verify that the 'Data' object was found in the second store location left
# from Data1 target downloads and that the 'Other' object was found in the
# first store location left from Data3 target downloads. Neither object
# should exist in the opposite store.
foreach(should_exist
"${Store0}/MD5/aaad162b85f60d1eb57ca71a23e8efd7"
"${Store1}/MD5/8c018830e3efa5caf3c7415028335a57"
)
if(NOT EXISTS ${should_exist})
message(SEND_ERROR "Store file:\n ${should_exist}\nshould exist!")
endif()
endforeach()
foreach(should_not_exist
"${Store0}/MD5/8c018830e3efa5caf3c7415028335a57"
"${Store1}/MD5/aaad162b85f60d1eb57ca71a23e8efd7"
)
if(EXISTS ${should_not_exist})
message(SEND_ERROR "Store file:\n ${should_not_exist}\nshould not exist!")
endif()
endforeach()

View File

@ -0,0 +1 @@
aaad162b85f60d1eb57ca71a23e8efd7

View File

@ -1,5 +1,5 @@
CMake Error at .*/Modules/ExternalData.cmake:[0-9]+ \(message\):
ExternalData_URL_TEMPLATES is not set!
Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!
Call Stack \(most recent call first\):
NoURLTemplates.cmake:2 \(ExternalData_Add_Target\)
CMakeLists.txt:3 \(include\)

View File

@ -0,0 +1,3 @@
include(ExternalData)
set(ExternalData_OBJECT_STORES "${CMAKE_CURRENT_BINARY_DIR}")
ExternalData_Add_Target(Data)

View File

@ -22,6 +22,7 @@ run_cmake(NormalData2)
run_cmake(NormalData3)
run_cmake(NormalDataSub1)
run_cmake(NotUnderRoot)
run_cmake(ObjectStoreOnly)
run_cmake(Semicolon1)
run_cmake(Semicolon2)
run_cmake(Semicolon3)