# Make file names absolute: # get_filename_component(filename "/Users/mincli/Documents/libigl/external/cgal/src/CGAL-4.11.zip" ABSOLUTE) get_filename_component(directory "/Users/mincli/Documents/libigl/external/cgal/src/CGAL_Project" ABSOLUTE) message(STATUS "extracting... src='${filename}' dst='${directory}'") if(NOT EXISTS "${filename}") message(FATAL_ERROR "error: file to extract does not exist: '${filename}'") endif() # Prepare a space for extracting: # set(i 1234) while(EXISTS "${directory}/../ex-CGAL_Project${i}") math(EXPR i "${i} + 1") endwhile() set(ut_dir "${directory}/../ex-CGAL_Project${i}") file(MAKE_DIRECTORY "${ut_dir}") # Extract it: # message(STATUS "extracting... [tar xfz]") execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${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 "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")