mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 21:00:17 -06:00
This makes the scripts easier to work on, since the separate files don't require the extra level of escaping that the inlined code did. This also means the scripts can be rendered with appropriate syntax highlighting in IDEs, etc.
66 lines
1.7 KiB
CMake
66 lines
1.7 KiB
CMake
# 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)
|
|
|
|
# Make file names absolute:
|
|
#
|
|
get_filename_component(filename "@filename@" ABSOLUTE)
|
|
get_filename_component(directory "@directory@" ABSOLUTE)
|
|
|
|
message(STATUS "extracting...
|
|
src='${filename}'
|
|
dst='${directory}'"
|
|
)
|
|
|
|
if(NOT EXISTS "${filename}")
|
|
message(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:
|
|
#
|
|
message(STATUS "extracting... [tar @args@]")
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar @args@ ${filename}
|
|
WORKING_DIRECTORY ${ut_dir}
|
|
RESULT_VARIABLE rv
|
|
)
|
|
|
|
if(NOT rv EQUAL 0)
|
|
message(STATUS "extracting... [error clean up]")
|
|
file(REMOVE_RECURSE "${ut_dir}")
|
|
message(FATAL_ERROR "Extract of '${filename}' failed")
|
|
endif()
|
|
|
|
# Analyze what came out of the tar file:
|
|
#
|
|
message(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:
|
|
#
|
|
message(STATUS "extracting... [rename]")
|
|
file(REMOVE_RECURSE ${directory})
|
|
get_filename_component(contents ${contents} ABSOLUTE)
|
|
file(RENAME ${contents} ${directory})
|
|
|
|
# Clean up:
|
|
#
|
|
message(STATUS "extracting... [clean up]")
|
|
file(REMOVE_RECURSE "${ut_dir}")
|
|
|
|
message(STATUS "extracting... done")
|