Win32Depends.cmake: get rid of 7z

CMake 3.9 has been proven to successfully unpack 7z archives.
This commit is contained in:
Přemysl Eric Janouch 2021-10-22 21:53:35 +02:00
parent 47fb9653b8
commit 885ccb46a3
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 14 additions and 55 deletions

View File

@ -1,13 +1,11 @@
# Usage: cmake -P Win32Depends.cmake # Usage: cmake -P Win32Depends.cmake
# Only CMake 3.1+ supports XZ archives and 7z doesn't also untar automatically # Only CMake 3.1+ supports XZ archives, not sure when 7z support comes from
cmake_minimum_required (VERSION 3.1) cmake_minimum_required (VERSION 3.9)
# Directories # Directories
set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends) set (working_dir ${CMAKE_CURRENT_BINARY_DIR}/win32-depends)
set (pkg_dir ${working_dir}/packages) set (pkg_dir ${working_dir}/packages)
set (tools_dir ${working_dir}/tools)
set (sevenzip_executable ${tools_dir}/7za)
set (tmp_dir ${working_dir}/tmp) set (tmp_dir ${working_dir}/tmp)
file (MAKE_DIRECTORY ${working_dir}) file (MAKE_DIRECTORY ${working_dir})
file (MAKE_DIRECTORY ${pkg_dir}) file (MAKE_DIRECTORY ${pkg_dir})
@ -21,11 +19,7 @@ if (files)
endif (files) endif (files)
# Packages # Packages
set (pkg_list "7za" "gtk" "gtkalt" "winlibs" "mingw_lua") set (pkg_list "gtk" "gtkalt" "winlibs" "mingw_lua")
set (pkg_7za_root "http://sourceforge.net/projects/sevenzip/files")
set (pkg_7za_urls "${pkg_7za_root}/7-Zip/9.20/7za920.zip")
set (pkg_7za_md5 "2fac454a90ae96021f4ffc607d4c00f8")
set (pkg_gtk_root "http://ftp.gnome.org/pub/gnome/binaries/win32") set (pkg_gtk_root "http://ftp.gnome.org/pub/gnome/binaries/win32")
set (pkg_gtk_urls set (pkg_gtk_urls
@ -68,11 +62,11 @@ foreach (pkg_set ${pkg_list})
message (WARNING "MD5 checksum missing for ${basename}") message (WARNING "MD5 checksum missing for ${basename}")
set (pkg_md5_sum) set (pkg_md5_sum)
set (pkg_md5_param) set (pkg_md5_param)
else (NOT pkg_md5) else ()
list (GET pkg_md5 0 pkg_md5_sum) list (GET pkg_md5 0 pkg_md5_sum)
list (REMOVE_AT pkg_md5 0) list (REMOVE_AT pkg_md5 0)
set (pkg_md5_param EXPECTED_MD5 ${pkg_md5_sum}) set (pkg_md5_param EXPECTED_MD5 ${pkg_md5_sum})
endif (NOT pkg_md5) endif ()
if (NOT EXISTS ${filename}) if (NOT EXISTS ${filename})
message (STATUS "Downloading ${url}...") message (STATUS "Downloading ${url}...")
@ -90,74 +84,39 @@ foreach (pkg_set ${pkg_list})
if (NOT output MATCHES "^${pkg_md5_sum}") if (NOT output MATCHES "^${pkg_md5_sum}")
message (FATAL_ERROR "MD5 mismatch for ${basename}") message (FATAL_ERROR "MD5 mismatch for ${basename}")
endif (NOT output MATCHES "^${pkg_md5_sum}") endif (NOT output MATCHES "^${pkg_md5_sum}")
endif (NOT EXISTS ${filename}) endif ()
endforeach (url) endforeach (url)
endforeach (pkg_set) endforeach (pkg_set)
if (NOT WIN32) # Stage 2: extract the rest of packages
unset (sevenzip_executable)
find_program (sevenzip_executable 7za)
if (NOT sevenzip_executable)
message (FATAL_ERROR "Could not find 7za (part of p7zip)")
endif (NOT sevenzip_executable)
endif (NOT WIN32)
# Stage 2: setup 7za first
file (MAKE_DIRECTORY ${tmp_dir})
foreach (url ${pkg_7za_urls})
get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...")
set (filename ${pkg_dir}/${filename})
execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf ${filename}
WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status)
if (status)
message (FATAL_ERROR "Extraction failed: ${status}")
endif (status)
endforeach (url)
file (MAKE_DIRECTORY ${tools_dir})
file (COPY ${tmp_dir}/7za.exe DESTINATION ${tools_dir})
file (REMOVE_RECURSE ${tmp_dir})
list (REMOVE_ITEM pkg_list "7za")
# Stage 3: extract the rest of packages
foreach (pkg_set ${pkg_list}) foreach (pkg_set ${pkg_list})
foreach (url ${pkg_${pkg_set}_urls}) foreach (url ${pkg_${pkg_set}_urls})
get_filename_component (filename ${url} NAME) get_filename_component (filename ${url} NAME)
message (STATUS "Extracting ${filename}...") message (STATUS "Extracting ${filename}...")
set (extract_command ${CMAKE_COMMAND} -E tar xf)
if (filename MATCHES "\\.7z$")
set (extract_command ${sevenzip_executable} x)
set (quiet OUTPUT_QUIET)
else (filename MATCHES "\\.7z$")
set (extract_command ${CMAKE_COMMAND} -E tar xf)
set (quiet)
endif (filename MATCHES "\\.7z$")
set (filename ${pkg_dir}/${filename}) set (filename ${pkg_dir}/${filename})
if (pkg_${pkg_set}_strip) if (pkg_${pkg_set}_strip)
file (MAKE_DIRECTORY ${tmp_dir}) file (MAKE_DIRECTORY ${tmp_dir})
execute_process (COMMAND ${extract_command} ${filename} execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${tmp_dir} WORKING_DIRECTORY ${tmp_dir}
RESULT_VARIABLE status ${quiet}) RESULT_VARIABLE status)
file (COPY ${tmp_dir}/${pkg_${pkg_set}_strip}/ file (COPY ${tmp_dir}/${pkg_${pkg_set}_strip}/
DESTINATION ${working_dir}) DESTINATION ${working_dir})
file (REMOVE_RECURSE ${tmp_dir}) file (REMOVE_RECURSE ${tmp_dir})
else (pkg_${pkg_set}_strip) else ()
execute_process (COMMAND ${extract_command} ${filename} execute_process (COMMAND ${extract_command} ${filename}
WORKING_DIRECTORY ${working_dir} WORKING_DIRECTORY ${working_dir}
RESULT_VARIABLE status ${quiet}) RESULT_VARIABLE status)
endif (pkg_${pkg_set}_strip) endif ()
if (status) if (status)
message (FATAL_ERROR "Extraction failed: ${status}") message (FATAL_ERROR "Extraction failed: ${status}")
endif (status) endif ()
endforeach (url) endforeach (url)
endforeach (pkg_set) endforeach (pkg_set)
# Stage 4: final touches # Stage 3: final touches
# We have to fix the prefix path as it is completely wrong everywhere # We have to fix the prefix path as it is completely wrong everywhere
file (GLOB files ${working_dir}/lib/pkgconfig/*.pc) file (GLOB files ${working_dir}/lib/pkgconfig/*.pc)
foreach (file ${files}) foreach (file ${files})