blob: d46de73408144eeec2294d6fbf982c30783b66b7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
cmake_minimum_required(VERSION 3.5)
set(quiet "@quiet@")
set(script_dir "@CMAKE_CURRENT_FUNCTION_LIST_DIR@/ExternalProject")
include(${script_dir}/captured_process_setup.cmake)
# Make file names absolute:
#
get_filename_component(filename "@filename@" ABSOLUTE)
get_filename_component(directory "@directory@" ABSOLUTE)
_ep_message_quiet_capture(STATUS "extracting...
src='${filename}'
dst='${directory}'"
)
if(NOT EXISTS "${filename}")
_ep_message_quiet_capture(FATAL_ERROR
"File to extract does not exist: '${filename}'"
)
endif()
# Prepare a space for extracting:
#
set(i 1234)
while(EXISTS "${directory}/../ex-@name@${i}")
math(EXPR i "${i} + 1")
endwhile()
set(ut_dir "${directory}/../ex-@name@${i}")
file(MAKE_DIRECTORY "${ut_dir}")
# Extract it:
#
_ep_message_quiet_capture(STATUS "extracting... [tar @args@]")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar @args@ ${filename}
WORKING_DIRECTORY ${ut_dir}
RESULT_VARIABLE rv
${capture_output}
)
_ep_accumulate_captured_output()
if(NOT rv EQUAL 0)
_ep_message_quiet_capture(STATUS "extracting... [error clean up]")
file(REMOVE_RECURSE "${ut_dir}")
_ep_message_quiet_capture(FATAL_ERROR "Extract of '${filename}' failed")
endif()
# Analyze what came out of the tar file:
#
_ep_message_quiet_capture(STATUS "extracting... [analysis]")
file(GLOB contents "${ut_dir}/*")
list(REMOVE_ITEM contents "${ut_dir}/.DS_Store")
list(LENGTH contents n)
if(NOT n EQUAL 1 OR NOT IS_DIRECTORY "${contents}")
set(contents "${ut_dir}")
endif()
# Move "the one" directory to the final directory:
#
_ep_message_quiet_capture(STATUS "extracting... [rename]")
file(REMOVE_RECURSE ${directory})
get_filename_component(contents ${contents} ABSOLUTE)
file(RENAME ${contents} ${directory})
# Clean up:
#
_ep_message_quiet_capture(STATUS "extracting... [clean up]")
file(REMOVE_RECURSE "${ut_dir}")
_ep_message_quiet_capture(STATUS "extracting... done")
|