extractfile.cmake.in 2.0 KB

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