Merge topic 'ExternalData-allow-no-urls'
8eb20ee
ExternalData: Allow local stores without any URL templates
This commit is contained in:
commit
0b2d376142
|
@ -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()
|
||||
|
||||
|
|
|
@ -42,3 +42,4 @@ ExternalData_Add_Target(Data1)
|
|||
|
||||
add_subdirectory(Data2)
|
||||
add_subdirectory(Data3)
|
||||
add_subdirectory(Data4)
|
||||
|
|
|
@ -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)
|
|
@ -0,0 +1 @@
|
|||
8c018830e3efa5caf3c7415028335a57
|
|
@ -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()
|
|
@ -0,0 +1 @@
|
|||
aaad162b85f60d1eb57ca71a23e8efd7
|
|
@ -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\)
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
include(ExternalData)
|
||||
set(ExternalData_OBJECT_STORES "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
ExternalData_Add_Target(Data)
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue