forked from qt-creator/qt-creator
KArchive: Add creator specific changes
Change-Id: I8227bffd0e83d69d456e49a9d5f66a5ef00ba60e Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -169,6 +169,9 @@ def build_qtcreator(args, paths):
|
|||||||
'-DBUILD_DEVELOPER_DOCS=' + cmake_option(not args.no_docs),
|
'-DBUILD_DEVELOPER_DOCS=' + cmake_option(not args.no_docs),
|
||||||
'-DBUILD_EXECUTABLE_SDKTOOL=' + cmake_option(args.with_sdk_tool),
|
'-DBUILD_EXECUTABLE_SDKTOOL=' + cmake_option(args.with_sdk_tool),
|
||||||
'-DQTC_FORCE_XCB=ON',
|
'-DQTC_FORCE_XCB=ON',
|
||||||
|
'-DQTC_USE_SYSTEM_ZLIB=OFF',
|
||||||
|
'-DQTC_USE_SYSTEM_BZIP2=OFF',
|
||||||
|
'-DQTC_USE_SYSTEM_LZMA=OFF',
|
||||||
'-DWITH_TESTS=' + cmake_option(args.with_tests)]
|
'-DWITH_TESTS=' + cmake_option(args.with_tests)]
|
||||||
cmake_args += common_cmake_arguments(args)
|
cmake_args += common_cmake_arguments(args)
|
||||||
|
|
||||||
|
3
src/libs/3rdparty/CMakeLists.txt
vendored
3
src/libs/3rdparty/CMakeLists.txt
vendored
@@ -5,8 +5,7 @@ add_subdirectory(libptyqt)
|
|||||||
add_subdirectory(qtkeychain)
|
add_subdirectory(qtkeychain)
|
||||||
add_subdirectory(lua)
|
add_subdirectory(lua)
|
||||||
add_subdirectory(sol2)
|
add_subdirectory(sol2)
|
||||||
# Do not enable it yet, as the necessary changes are only introduced with the next patch.
|
add_subdirectory(karchive)
|
||||||
#add_subdirectory(karchive)
|
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
add_subdirectory(winpty)
|
add_subdirectory(winpty)
|
||||||
|
398
src/libs/3rdparty/karchive/CMakeLists.txt
vendored
398
src/libs/3rdparty/karchive/CMakeLists.txt
vendored
@@ -1,152 +1,302 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
option(QTC_USE_SYSTEM_BZIP2 "Use system bzip2 instead of included bzip2" ON)
|
||||||
|
option(QTC_USE_SYSTEM_ZLIB "Use system zlib instead of included zlib" ON)
|
||||||
|
option(QTC_USE_SYSTEM_LZMA "Use system liblzma instead of included liblzma" ON)
|
||||||
|
|
||||||
set(KF_VERSION "6.10.0") # handled by release scripts
|
if (QTC_USE_SYSTEM_BZIP2)
|
||||||
project(KArchive VERSION ${KF_VERSION})
|
find_package(BZip2)
|
||||||
|
if (NOT TARGET BZip2::BZip2)
|
||||||
include(FeatureSummary)
|
set(BZIP2_FALLBACK " (No system bzip2 found)")
|
||||||
find_package(ECM 6.9.0 NO_MODULE)
|
endif()
|
||||||
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
|
|
||||||
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
|
||||||
|
|
||||||
option(WITH_BZIP2 "Make bzip2 required" ON)
|
|
||||||
option(WITH_LIBLZMA "Make liblzma required" ON)
|
|
||||||
option(WITH_LIBZSTD "Make libzstd required" ON)
|
|
||||||
|
|
||||||
set(PKGCONFIG_REQUIRED_TYPE "")
|
|
||||||
|
|
||||||
if(WITH_BZIP2)
|
|
||||||
set(BZIP2_PACKAGE_TYPE "REQUIRED")
|
|
||||||
else()
|
|
||||||
set(BZIP2_PACKAGE_TYPE "RECOMMENDED")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_LIBLZMA)
|
if (QTC_USE_SYSTEM_ZLIB)
|
||||||
set(LIBLZMA_PACKAGE_TYPE "REQUIRED")
|
find_package(ZLIB)
|
||||||
else()
|
if (NOT TARGET ZLIB::ZLIB)
|
||||||
set(LIBLZMA_PACKAGE_TYPE "RECOMMENDED")
|
set(ZLIB_FALLBACK " (No system zlib found)")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_LIBZSTD)
|
if (QTC_USE_SYSTEM_LZMA)
|
||||||
set(PKGCONFIG_REQUIRED_TYPE "REQUIRED")
|
find_package(LibLZMA)
|
||||||
set(LIBZSTD_REQUIRED_TYPE "REQUIRED")
|
if (NOT TARGET LibLZMA::LibLZMA)
|
||||||
else()
|
set(LZMA_FALLBACK " (No system liblzma found)")
|
||||||
set(LIBZSTD_REQUIRED_TYPE "")
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
add_qtc_library(
|
||||||
|
karchive
|
||||||
include(KDEInstallDirs)
|
DEPENDS Qt::Core
|
||||||
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
|
PUBLIC_INCLUDES src
|
||||||
include(KDECMakeSettings)
|
SOURCES
|
||||||
include(KDEGitCommitHooks)
|
src/kar.cpp
|
||||||
|
src/kar.h
|
||||||
include(ECMGenerateExportHeader)
|
src/karchive_export.h
|
||||||
|
src/karchive_p.h
|
||||||
set(REQUIRED_QT_VERSION 6.6.0)
|
src/karchive.cpp
|
||||||
find_package(Qt6Core ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
src/karchive.h
|
||||||
|
src/karchivedirectory.h
|
||||||
find_package(ZLIB)
|
src/karchiveentry.h
|
||||||
set_package_properties(ZLIB PROPERTIES
|
src/karchivefile.h
|
||||||
URL "https://www.zlib.net"
|
src/kcompressiondevice_p.h
|
||||||
DESCRIPTION "Support for gzip compressed files and data streams"
|
src/kcompressiondevice.cpp
|
||||||
TYPE REQUIRED
|
src/kcompressiondevice.h
|
||||||
PURPOSE "Support for gzip compressed files and data streams"
|
src/kfilterbase.cpp
|
||||||
|
src/kfilterbase.h
|
||||||
|
src/klimitediodevice_p.h
|
||||||
|
src/klimitediodevice.cpp
|
||||||
|
src/knonefilter.cpp
|
||||||
|
src/knonefilter.h
|
||||||
|
src/krcc.cpp
|
||||||
|
src/krcc.h
|
||||||
|
src/ktar.cpp
|
||||||
|
src/ktar.h
|
||||||
|
src/kzipfileentry.h
|
||||||
|
src/loggingcategory.cpp
|
||||||
|
src/loggingcategory.h
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(BZip2)
|
# ZIP support
|
||||||
set_package_properties(BZip2 PROPERTIES
|
extend_qtc_library(
|
||||||
URL "https://sourceware.org/bzip2/"
|
karchive
|
||||||
DESCRIPTION "Support for BZip2 compressed files and data streams"
|
CONDITION QTC_USE_SYSTEM_ZLIB AND TARGET ZLIB::ZLIB
|
||||||
TYPE ${BZIP2_PACKAGE_TYPE}
|
FEATURE_INFO "KArchive (System) zlib support"
|
||||||
PURPOSE "Support for BZip2 compressed files and data streams"
|
DEPENDS ZLIB::ZLIB
|
||||||
|
DEFINES
|
||||||
|
HAVE_ZLIB_SUPPORT=1
|
||||||
|
SOURCES
|
||||||
|
src/kgzipfilter.cpp
|
||||||
|
src/kgzipfilter.h
|
||||||
|
src/kzip.cpp
|
||||||
|
src/kzip.h
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(LibLZMA)
|
extend_qtc_library(
|
||||||
set_package_properties(LibLZMA PROPERTIES
|
karchive
|
||||||
URL "https://tukaani.org/xz/"
|
CONDITION NOT QTC_USE_SYSTEM_ZLIB OR NOT TARGET ZLIB::ZLIB
|
||||||
DESCRIPTION "Support for xz compressed files and data streams"
|
SKIP_AUTOMOC
|
||||||
TYPE ${LIBLZMA_PACKAGE_TYPE}
|
DEFINES
|
||||||
PURPOSE "Support for xz compressed files and data streams"
|
HAVE_ZLIB_SUPPORT=1
|
||||||
|
PUBLIC_DEFINES
|
||||||
|
KARCHIVE_HAS_ZLIB
|
||||||
|
FEATURE_INFO "KArchive zlib support${ZLIB_FALLBACK}"
|
||||||
|
INCLUDES
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/
|
||||||
|
SOURCES
|
||||||
|
src/kgzipfilter.cpp
|
||||||
|
src/kgzipfilter.h
|
||||||
|
src/kzip.cpp
|
||||||
|
src/kzip.h
|
||||||
|
|
||||||
|
# Embed zlib sources
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/adler32.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/compress.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/crc32.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/crc32.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/deflate.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/deflate.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/gzclose.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/gzguts.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/gzlib.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/gzread.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/gzwrite.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/infback.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inffast.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inffast.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inffixed.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inflate.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inflate.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inftrees.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/inftrees.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/trees.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/trees.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/uncompr.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/zconf.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/zlib.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/zutil.c
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../zlib/src/zutil.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# BZip2 support
|
||||||
|
extend_qtc_library(karchive
|
||||||
|
CONDITION QTC_USE_SYSTEM_BZIP2 AND TARGET BZip2::BZip2
|
||||||
|
FEATURE_INFO "KArchive (System) BZip2 support"
|
||||||
|
DEPENDS BZip2::BZip2
|
||||||
|
DEFINES
|
||||||
|
HAVE_BZIP2_SUPPORT=1
|
||||||
|
NEED_BZ2_PREFIX=1
|
||||||
|
PUBLIC_DEFINES
|
||||||
|
KARCHIVE_HAS_BZIP2
|
||||||
|
|
||||||
find_package(PkgConfig ${PKGCONFIG_REQUIRED_TYPE})
|
SOURCES
|
||||||
if (PkgConfig_FOUND)
|
src/kbzip2filter.cpp
|
||||||
pkg_check_modules(LibZstd ${LIBZSTD_REQUIRED_TYPE} IMPORTED_TARGET "libzstd")
|
|
||||||
endif()
|
|
||||||
add_feature_info(LibZstd LibZstd_FOUND
|
|
||||||
"Support for zstd compressed files and data streams"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
include(ECMSetupVersion)
|
extend_qtc_library(
|
||||||
include(ECMGenerateHeaders)
|
karchive
|
||||||
include(ECMQtDeclareLoggingCategory)
|
CONDITION NOT QTC_USE_SYSTEM_BZIP2 OR NOT TARGET BZip2::BZip2
|
||||||
include(ECMAddQch)
|
INCLUDES ./3rdparty/bzip2
|
||||||
include(ECMDeprecationSettings)
|
FEATURE_INFO "KArchive BZip2 support${BZIP2_FALLBACK}"
|
||||||
include(ECMPoQmTools)
|
DEFINES
|
||||||
|
HAVE_BZIP2_SUPPORT=1
|
||||||
|
NEED_BZ2_PREFIX=1
|
||||||
|
PUBLIC_DEFINES
|
||||||
|
KARCHIVE_HAS_BZIP2
|
||||||
|
|
||||||
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
|
SOURCES
|
||||||
|
src/kbzip2filter.cpp
|
||||||
|
|
||||||
option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
|
# Embed bzip2 sources
|
||||||
add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
|
./3rdparty/bzip2/blocksort.c
|
||||||
|
./3rdparty/bzip2/bzlib.c
|
||||||
set(karchive_version_header "${CMAKE_CURRENT_BINARY_DIR}/src/karchive_version.h")
|
./3rdparty/bzip2/bzlib.h
|
||||||
ecm_setup_version(PROJECT
|
./3rdparty/bzip2/compress.c
|
||||||
VARIABLE_PREFIX KARCHIVE
|
./3rdparty/bzip2/crctable.c
|
||||||
VERSION_HEADER "${karchive_version_header}"
|
./3rdparty/bzip2/decompress.c
|
||||||
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfigVersion.cmake"
|
./3rdparty/bzip2/huffman.c
|
||||||
SOVERSION 6)
|
./3rdparty/bzip2/randtable.c
|
||||||
|
|
||||||
ecm_set_disabled_deprecation_versions(
|
|
||||||
QT 6.8
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# libLZMA support
|
||||||
add_subdirectory(src)
|
if (NOT QTC_USE_SYSTEM_LZMA)
|
||||||
if (BUILD_TESTING)
|
include (CheckTypeSize)
|
||||||
add_subdirectory(autotests)
|
include (CheckIncludeFile)
|
||||||
add_subdirectory(tests)
|
CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
|
||||||
|
CHECK_INCLUDE_FILE("stdbool.h" HAVE_STDBOOL_H)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ecm_install_po_files_as_qm(poqm)
|
extend_qtc_library(
|
||||||
|
karchive
|
||||||
# create a Config.cmake and a ConfigVersion.cmake file and install them
|
CONDITION QTC_USE_SYSTEM_LZMA AND TARGET LibLZMA::LibLZMA
|
||||||
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6Archive")
|
FEATURE_INFO "KArchive (System) libLZMA support"
|
||||||
|
DEPENDS LibLZMA::LibLZMA
|
||||||
if (BUILD_QCH)
|
DEFINES
|
||||||
ecm_install_qch_export(
|
HAVE_XZ_SUPPORT=1
|
||||||
TARGETS KF6Archive_QCH
|
SOURCES
|
||||||
FILE KF6ArchiveQchTargets.cmake
|
src/kxzfilter.cpp
|
||||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
src/kxzfilter.h
|
||||||
COMPONENT Devel
|
src/k7zip.cpp
|
||||||
)
|
src/k7zip.h
|
||||||
set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF6ArchiveQchTargets.cmake\")")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
|
||||||
|
|
||||||
configure_package_config_file(
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/KF6ArchiveConfig.cmake.in"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfig.cmake"
|
|
||||||
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
install(FILES ${karchive_version_header}
|
extend_qtc_library(
|
||||||
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KArchive
|
karchive
|
||||||
COMPONENT Devel)
|
CONDITION NOT QTC_USE_SYSTEM_LZMA OR NOT TARGET LibLZMA::LibLZMA
|
||||||
|
FEATURE_INFO "KArchive 7zip & xz support${LZMA_FALLBACK}"
|
||||||
|
DEFINES
|
||||||
|
HAVE_XZ_SUPPORT=1
|
||||||
|
SIZEOF_SIZE_T=${SIZEOF_SIZE_T}
|
||||||
|
HAVE_STDBOOL_H=${HAVE_STDBOOL_H}
|
||||||
|
HAVE_CHECK_CRC32
|
||||||
|
HAVE_CHECK_CRC64
|
||||||
|
HAVE_CHECK_SHA256
|
||||||
|
|
||||||
install(FILES
|
HAVE_ENCODER_LZMA1 HAVE_DECODER_LZMA1
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfig.cmake"
|
HAVE_ENCODER_LZMA2 HAVE_DECODER_LZMA2
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfigVersion.cmake"
|
HAVE_ENCODER_X86 HAVE_DECODER_X86
|
||||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
HAVE_ENCODER_POWERPC HAVE_DECODER_POWERPC
|
||||||
COMPONENT Devel)
|
HAVE_ENCODER_IA64 HAVE_DECODER_IA64
|
||||||
|
HAVE_ENCODER_ARM HAVE_DECODER_ARM
|
||||||
|
HAVE_ENCODER_ARMTHUMB HAVE_DECODER_ARMTHUMB
|
||||||
|
HAVE_ENCODER_ARM64 HAVE_DECODER_ARM64
|
||||||
|
HAVE_ENCODER_SPARC HAVE_DECODER_SPARC
|
||||||
|
HAVE_ENCODER_RISCV HAVE_DECODER_RISCV
|
||||||
|
HAVE_ENCODER_DELTA HAVE_DECODER_DELTA
|
||||||
|
|
||||||
install(EXPORT KF6ArchiveTargets
|
HAVE_MF_HC3 HAVE_MF_HC4 HAVE_MF_BT2 HAVE_MF_BT3 HAVE_MF_BT4
|
||||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
PUBLIC_DEFINES
|
||||||
FILE KF6ArchiveTargets.cmake
|
KARCHIVE_HAS_XZ
|
||||||
NAMESPACE KF6::)
|
INCLUDES
|
||||||
|
./3rdparty/xz/src/common
|
||||||
|
./3rdparty/xz/src/liblzma/api
|
||||||
|
./3rdparty/xz/src/liblzma/check
|
||||||
|
./3rdparty/xz/src/liblzma/common
|
||||||
|
./3rdparty/xz/src/liblzma/delta
|
||||||
|
./3rdparty/xz/src/liblzma/lz
|
||||||
|
./3rdparty/xz/src/liblzma/lzma
|
||||||
|
./3rdparty/xz/src/liblzma/range_decoder
|
||||||
|
./3rdparty/xz/src/liblzma/rangecoder
|
||||||
|
./3rdparty/xz/src/liblzma/simple
|
||||||
|
SOURCES
|
||||||
|
src/kxzfilter.cpp
|
||||||
|
src/kxzfilter.h
|
||||||
|
src/k7zip.cpp
|
||||||
|
src/k7zip.h
|
||||||
|
|
||||||
include(ECMFeatureSummary)
|
# Embed liblzma sources
|
||||||
ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
./3rdparty/xz/src/liblzma/check/check.c
|
||||||
|
./3rdparty/xz/src/liblzma/check/crc32_fast.c
|
||||||
|
./3rdparty/xz/src/liblzma/check/crc32_table.c
|
||||||
|
./3rdparty/xz/src/liblzma/check/crc64_fast.c
|
||||||
|
./3rdparty/xz/src/liblzma/check/crc64_table.c
|
||||||
|
./3rdparty/xz/src/liblzma/check/sha256.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/alone_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/auto_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/block_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/block_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/block_header_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/block_header_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/block_util.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/common.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/easy_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/easy_preset.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/filter_common.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/filter_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/filter_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/filter_flags_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/filter_flags_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/index_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/index_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/index_hash.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/index.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/stream_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/stream_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/stream_flags_common.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/stream_flags_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/stream_flags_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/vli_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/vli_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/common/vli_size.c
|
||||||
|
./3rdparty/xz/src/liblzma/delta/delta_common.c
|
||||||
|
./3rdparty/xz/src/liblzma/delta/delta_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/delta/delta_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/lz/lz_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/lz/lz_encoder_mf.c
|
||||||
|
./3rdparty/xz/src/liblzma/lz/lz_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/fastpos_table.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma_encoder_optimum_fast.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma_encoder_optimum_normal.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma_encoder_presets.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma2_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/lzma/lzma2_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/rangecoder/price_table.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/arm.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/arm64.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/armthumb.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/ia64.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/powerpc.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/riscv.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/simple_coder.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/simple_decoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/simple_encoder.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/sparc.c
|
||||||
|
./3rdparty/xz/src/liblzma/simple/x86.c
|
||||||
|
)
|
||||||
|
|
||||||
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
# Zstd support
|
||||||
|
# BSD License: https://github.com/facebook/zstd/blob/dev/LICENSE
|
||||||
|
# Disabled for now as we don't need it and the packages are suboptimal
|
||||||
|
#extend_qtc_library(
|
||||||
|
# karchive
|
||||||
|
# CONDITION TARGET PkgConfig::LibZstd
|
||||||
|
# DEPENDS PkgConfig::LibZstd
|
||||||
|
# FEATURE_INFO "KArchive Zstd support"
|
||||||
|
# DEFINES
|
||||||
|
# HAVE_ZSTD_SUPPORT=1
|
||||||
|
# PUBLIC_DEFINES
|
||||||
|
# KARCHIVE_HAS_ZSTD
|
||||||
|
# SOURCES
|
||||||
|
# src/kzstdfilter.cpp
|
||||||
|
# src/kzstdfilter.h
|
||||||
|
#)
|
||||||
|
152
src/libs/3rdparty/karchive/CMakeLists.txt.kde
vendored
Normal file
152
src/libs/3rdparty/karchive/CMakeLists.txt.kde
vendored
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
set(KF_VERSION "6.10.0") # handled by release scripts
|
||||||
|
project(KArchive VERSION ${KF_VERSION})
|
||||||
|
|
||||||
|
include(FeatureSummary)
|
||||||
|
find_package(ECM 6.9.0 NO_MODULE)
|
||||||
|
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
|
||||||
|
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||||
|
|
||||||
|
option(WITH_BZIP2 "Make bzip2 required" ON)
|
||||||
|
option(WITH_LIBLZMA "Make liblzma required" ON)
|
||||||
|
option(WITH_LIBZSTD "Make libzstd required" ON)
|
||||||
|
|
||||||
|
set(PKGCONFIG_REQUIRED_TYPE "")
|
||||||
|
|
||||||
|
if(WITH_BZIP2)
|
||||||
|
set(BZIP2_PACKAGE_TYPE "REQUIRED")
|
||||||
|
else()
|
||||||
|
set(BZIP2_PACKAGE_TYPE "RECOMMENDED")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_LIBLZMA)
|
||||||
|
set(LIBLZMA_PACKAGE_TYPE "REQUIRED")
|
||||||
|
else()
|
||||||
|
set(LIBLZMA_PACKAGE_TYPE "RECOMMENDED")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_LIBZSTD)
|
||||||
|
set(PKGCONFIG_REQUIRED_TYPE "REQUIRED")
|
||||||
|
set(LIBZSTD_REQUIRED_TYPE "REQUIRED")
|
||||||
|
else()
|
||||||
|
set(LIBZSTD_REQUIRED_TYPE "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||||
|
|
||||||
|
include(KDEInstallDirs)
|
||||||
|
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
|
||||||
|
include(KDECMakeSettings)
|
||||||
|
include(KDEGitCommitHooks)
|
||||||
|
|
||||||
|
include(ECMGenerateExportHeader)
|
||||||
|
|
||||||
|
set(REQUIRED_QT_VERSION 6.6.0)
|
||||||
|
find_package(Qt6Core ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
||||||
|
|
||||||
|
find_package(ZLIB)
|
||||||
|
set_package_properties(ZLIB PROPERTIES
|
||||||
|
URL "https://www.zlib.net"
|
||||||
|
DESCRIPTION "Support for gzip compressed files and data streams"
|
||||||
|
TYPE REQUIRED
|
||||||
|
PURPOSE "Support for gzip compressed files and data streams"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_package(BZip2)
|
||||||
|
set_package_properties(BZip2 PROPERTIES
|
||||||
|
URL "https://sourceware.org/bzip2/"
|
||||||
|
DESCRIPTION "Support for BZip2 compressed files and data streams"
|
||||||
|
TYPE ${BZIP2_PACKAGE_TYPE}
|
||||||
|
PURPOSE "Support for BZip2 compressed files and data streams"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_package(LibLZMA)
|
||||||
|
set_package_properties(LibLZMA PROPERTIES
|
||||||
|
URL "https://tukaani.org/xz/"
|
||||||
|
DESCRIPTION "Support for xz compressed files and data streams"
|
||||||
|
TYPE ${LIBLZMA_PACKAGE_TYPE}
|
||||||
|
PURPOSE "Support for xz compressed files and data streams"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
find_package(PkgConfig ${PKGCONFIG_REQUIRED_TYPE})
|
||||||
|
if (PkgConfig_FOUND)
|
||||||
|
pkg_check_modules(LibZstd ${LIBZSTD_REQUIRED_TYPE} IMPORTED_TARGET "libzstd")
|
||||||
|
endif()
|
||||||
|
add_feature_info(LibZstd LibZstd_FOUND
|
||||||
|
"Support for zstd compressed files and data streams"
|
||||||
|
)
|
||||||
|
|
||||||
|
include(ECMSetupVersion)
|
||||||
|
include(ECMGenerateHeaders)
|
||||||
|
include(ECMQtDeclareLoggingCategory)
|
||||||
|
include(ECMAddQch)
|
||||||
|
include(ECMDeprecationSettings)
|
||||||
|
include(ECMPoQmTools)
|
||||||
|
|
||||||
|
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
|
||||||
|
|
||||||
|
option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
|
||||||
|
add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
|
||||||
|
|
||||||
|
set(karchive_version_header "${CMAKE_CURRENT_BINARY_DIR}/src/karchive_version.h")
|
||||||
|
ecm_setup_version(PROJECT
|
||||||
|
VARIABLE_PREFIX KARCHIVE
|
||||||
|
VERSION_HEADER "${karchive_version_header}"
|
||||||
|
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfigVersion.cmake"
|
||||||
|
SOVERSION 6)
|
||||||
|
|
||||||
|
ecm_set_disabled_deprecation_versions(
|
||||||
|
QT 6.8
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
add_subdirectory(src)
|
||||||
|
if (BUILD_TESTING)
|
||||||
|
add_subdirectory(autotests)
|
||||||
|
add_subdirectory(tests)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ecm_install_po_files_as_qm(poqm)
|
||||||
|
|
||||||
|
# create a Config.cmake and a ConfigVersion.cmake file and install them
|
||||||
|
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6Archive")
|
||||||
|
|
||||||
|
if (BUILD_QCH)
|
||||||
|
ecm_install_qch_export(
|
||||||
|
TARGETS KF6Archive_QCH
|
||||||
|
FILE KF6ArchiveQchTargets.cmake
|
||||||
|
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||||
|
COMPONENT Devel
|
||||||
|
)
|
||||||
|
set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF6ArchiveQchTargets.cmake\")")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
|
configure_package_config_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/KF6ArchiveConfig.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfig.cmake"
|
||||||
|
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES ${karchive_version_header}
|
||||||
|
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KArchive
|
||||||
|
COMPONENT Devel)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfig.cmake"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF6ArchiveConfigVersion.cmake"
|
||||||
|
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||||
|
COMPONENT Devel)
|
||||||
|
|
||||||
|
install(EXPORT KF6ArchiveTargets
|
||||||
|
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||||
|
FILE KF6ArchiveTargets.cmake
|
||||||
|
NAMESPACE KF6::)
|
||||||
|
|
||||||
|
include(ECMFeatureSummary)
|
||||||
|
ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||||
|
|
||||||
|
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
11
src/libs/3rdparty/karchive/src/k7zip.cpp
vendored
11
src/libs/3rdparty/karchive/src/k7zip.cpp
vendored
@@ -16,13 +16,15 @@
|
|||||||
#include <qplatformdefs.h>
|
#include <qplatformdefs.h>
|
||||||
|
|
||||||
#include "kcompressiondevice.h"
|
#include "kcompressiondevice.h"
|
||||||
|
#include "kfilterbase.h"
|
||||||
#include "klimitediodevice_p.h"
|
#include "klimitediodevice_p.h"
|
||||||
#include <kfilterbase.h>
|
#include "kxzfilter.h"
|
||||||
#include <kxzfilter.h>
|
|
||||||
|
|
||||||
#include "zlib.h"
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <time.h> // time()
|
#include <time.h> // time()
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
|
#undef uncompress
|
||||||
|
|
||||||
#ifndef QT_STAT_LNK
|
#ifndef QT_STAT_LNK
|
||||||
#define QT_STAT_LNK 0120000
|
#define QT_STAT_LNK 0120000
|
||||||
@@ -2789,7 +2791,8 @@ bool K7Zip::closeArchive()
|
|||||||
QBuffer inBuffer(&enc);
|
QBuffer inBuffer(&enc);
|
||||||
|
|
||||||
KCompressionDevice flt(&inBuffer, false, KCompressionDevice::Xz);
|
KCompressionDevice flt(&inBuffer, false, KCompressionDevice::Xz);
|
||||||
flt.open(QIODevice::WriteOnly);
|
if(!flt.open(QIODevice::WriteOnly))
|
||||||
|
return false;
|
||||||
|
|
||||||
KFilterBase *filter = flt.filterBase();
|
KFilterBase *filter = flt.filterBase();
|
||||||
|
|
||||||
|
16
src/libs/3rdparty/karchive/src/karchive.cpp
vendored
16
src/libs/3rdparty/karchive/src/karchive.cpp
vendored
@@ -964,7 +964,10 @@ static bool sortByPosition(const KArchiveFile *file1, const KArchiveFile *file2)
|
|||||||
return file1->position() < file2->position();
|
return file1->position() < file2->position();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KArchiveDirectory::copyTo(const QString &dest, bool recursiveCopy) const
|
bool KArchiveDirectory::copyTo(
|
||||||
|
const QString &dest,
|
||||||
|
bool recursiveCopy,
|
||||||
|
std::function<bool(const KArchiveFile *, QString)> progress) const
|
||||||
{
|
{
|
||||||
QDir root;
|
QDir root;
|
||||||
const QString destDir(QDir(dest).absolutePath()); // get directory path without any "." or ".."
|
const QString destDir(QDir(dest).absolutePath()); // get directory path without any "." or ".."
|
||||||
@@ -1029,11 +1032,16 @@ bool KArchiveDirectory::copyTo(const QString &dest, bool recursiveCopy) const
|
|||||||
}
|
}
|
||||||
} while (!dirStack.isEmpty());
|
} while (!dirStack.isEmpty());
|
||||||
|
|
||||||
std::sort(fileList.begin(), fileList.end(), sortByPosition); // sort on d->pos, so we have a linear access
|
std::sort(
|
||||||
|
fileList.begin(),
|
||||||
|
fileList.end(),
|
||||||
|
sortByPosition); // sort on d->pos, so we have a linear access
|
||||||
|
|
||||||
for (QList<const KArchiveFile *>::const_iterator it = fileList.constBegin(), end = fileList.constEnd(); it != end; ++it) {
|
for (const KArchiveFile *f : fileList) {
|
||||||
const KArchiveFile *f = *it;
|
|
||||||
qint64 pos = f->position();
|
qint64 pos = f->position();
|
||||||
|
if (progress)
|
||||||
|
if (!progress(f, fileToDir[pos]))
|
||||||
|
return false;
|
||||||
if (!f->copyTo(fileToDir[pos])) {
|
if (!f->copyTo(fileToDir[pos])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -12,8 +12,6 @@
|
|||||||
#include "kgzipfilter.h"
|
#include "kgzipfilter.h"
|
||||||
#include "knonefilter.h"
|
#include "knonefilter.h"
|
||||||
|
|
||||||
#include "config-compression.h"
|
|
||||||
|
|
||||||
#if HAVE_BZIP2_SUPPORT
|
#if HAVE_BZIP2_SUPPORT
|
||||||
#include "kbzip2filter.h"
|
#include "kbzip2filter.h"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -13,6 +13,9 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
|
#undef uncompress
|
||||||
|
#undef compress
|
||||||
|
|
||||||
/* gzip flag byte */
|
/* gzip flag byte */
|
||||||
#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
|
#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
|
||||||
|
|
||||||
|
2
src/libs/3rdparty/karchive/src/ktar.cpp
vendored
2
src/libs/3rdparty/karchive/src/ktar.cpp
vendored
@@ -102,7 +102,7 @@ bool KTar::createDevice(QIODevice::OpenMode mode)
|
|||||||
if (f.open(QIODevice::ReadOnly)) {
|
if (f.open(QIODevice::ReadOnly)) {
|
||||||
mime = db.mimeTypeForData(&f);
|
mime = db.mimeTypeForData(&f);
|
||||||
}
|
}
|
||||||
if (!mime.isValid()) {
|
if (!mime.isValid() || mime.name() == QStringLiteral("application/octet-stream")) {
|
||||||
// Unable to determine mimetype from contents, get it from file name
|
// Unable to determine mimetype from contents, get it from file name
|
||||||
mime = db.mimeTypeForFile(fileName(), QMimeDatabase::MatchExtension);
|
mime = db.mimeTypeForFile(fileName(), QMimeDatabase::MatchExtension);
|
||||||
}
|
}
|
||||||
|
80
src/libs/3rdparty/karchive/src/kzip.cpp
vendored
80
src/libs/3rdparty/karchive/src/kzip.cpp
vendored
@@ -25,6 +25,16 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
|
// "Our" zip zconf.h defines "Z_PREFIX", so we need to undef it here, as this class has another
|
||||||
|
// function called crc32. Instead of a define, we create a forwarder function.
|
||||||
|
#ifdef Z_PREFIX
|
||||||
|
#undef crc32
|
||||||
|
uLong crc32(uLong crc, const Bytef *buf, uInt len)
|
||||||
|
{
|
||||||
|
return z_crc32(crc, buf, len);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef QT_STAT_LNK
|
#ifndef QT_STAT_LNK
|
||||||
#define QT_STAT_LNK 0120000
|
#define QT_STAT_LNK 0120000
|
||||||
#endif // QT_STAT_LNK
|
#endif // QT_STAT_LNK
|
||||||
@@ -835,32 +845,31 @@ bool KZip::closeArchive()
|
|||||||
qint64 centraldiroffset = device()->pos();
|
qint64 centraldiroffset = device()->pos();
|
||||||
// qCDebug(KArchiveLog) << "closearchive: centraldiroffset: " << centraldiroffset;
|
// qCDebug(KArchiveLog) << "closearchive: centraldiroffset: " << centraldiroffset;
|
||||||
qint64 atbackup = centraldiroffset;
|
qint64 atbackup = centraldiroffset;
|
||||||
QMutableListIterator<KZipFileEntry *> it(d->m_fileList);
|
|
||||||
|
|
||||||
while (it.hasNext()) {
|
for (KZipFileEntry *entry : d->m_fileList) {
|
||||||
// set crc and compressed size in each local file header
|
// set crc and compressed size in each local file header
|
||||||
it.next();
|
if (!device()->seek(entry->headerStart() + 14)) {
|
||||||
if (!device()->seek(it.value()->headerStart() + 14)) {
|
setErrorString(
|
||||||
setErrorString(tr("Could not seek to next file header: %1").arg(device()->errorString()));
|
tr("Could not seek to next file header: %1").arg(device()->errorString()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// qCDebug(KArchiveLog) << "closearchive setcrcandcsize: fileName:"
|
// qCDebug(KArchiveLog) << "closearchive setcrcandcsize: fileName:"
|
||||||
// << it.value()->path()
|
// << entry->path()
|
||||||
// << "encoding:" << it.value()->encoding();
|
// << "encoding:" << entry->encoding();
|
||||||
|
|
||||||
uLong mycrc = it.value()->crc32();
|
uLong mycrc = entry->crc32();
|
||||||
buffer[0] = char(mycrc); // crc checksum, at headerStart+14
|
buffer[0] = char(mycrc); // crc checksum, at headerStart+14
|
||||||
buffer[1] = char(mycrc >> 8);
|
buffer[1] = char(mycrc >> 8);
|
||||||
buffer[2] = char(mycrc >> 16);
|
buffer[2] = char(mycrc >> 16);
|
||||||
buffer[3] = char(mycrc >> 24);
|
buffer[3] = char(mycrc >> 24);
|
||||||
|
|
||||||
int mysize1 = it.value()->compressedSize();
|
int mysize1 = entry->compressedSize();
|
||||||
buffer[4] = char(mysize1); // compressed file size, at headerStart+18
|
buffer[4] = char(mysize1); // compressed file size, at headerStart+18
|
||||||
buffer[5] = char(mysize1 >> 8);
|
buffer[5] = char(mysize1 >> 8);
|
||||||
buffer[6] = char(mysize1 >> 16);
|
buffer[6] = char(mysize1 >> 16);
|
||||||
buffer[7] = char(mysize1 >> 24);
|
buffer[7] = char(mysize1 >> 24);
|
||||||
|
|
||||||
int myusize = it.value()->size();
|
int myusize = entry->size();
|
||||||
buffer[8] = char(myusize); // uncompressed file size, at headerStart+22
|
buffer[8] = char(myusize); // uncompressed file size, at headerStart+22
|
||||||
buffer[9] = char(myusize >> 8);
|
buffer[9] = char(myusize >> 8);
|
||||||
buffer[10] = char(myusize >> 16);
|
buffer[10] = char(myusize >> 16);
|
||||||
@@ -873,13 +882,11 @@ bool KZip::closeArchive()
|
|||||||
}
|
}
|
||||||
device()->seek(atbackup);
|
device()->seek(atbackup);
|
||||||
|
|
||||||
it.toFront();
|
for (KZipFileEntry *entry : d->m_fileList) {
|
||||||
while (it.hasNext()) {
|
// qCDebug(KArchiveLog) << "fileName:" << entry->path()
|
||||||
it.next();
|
// << "encoding:" << entry->encoding();
|
||||||
// qCDebug(KArchiveLog) << "fileName:" << it.value()->path()
|
|
||||||
// << "encoding:" << it.value()->encoding();
|
|
||||||
|
|
||||||
QByteArray path = QFile::encodeName(it.value()->path());
|
QByteArray path = QFile::encodeName(entry->path());
|
||||||
|
|
||||||
const int extra_field_len = (d->m_extraField == ModificationTime) ? 9 : 0;
|
const int extra_field_len = (d->m_extraField == ModificationTime) ? 9 : 0;
|
||||||
const int bufferSize = extra_field_len + path.length() + 46;
|
const int bufferSize = extra_field_len + path.length() + 46;
|
||||||
@@ -899,24 +906,24 @@ bool KZip::closeArchive()
|
|||||||
// memcpy(buffer, head, sizeof(head));
|
// memcpy(buffer, head, sizeof(head));
|
||||||
memmove(buffer, head, sizeof(head));
|
memmove(buffer, head, sizeof(head));
|
||||||
|
|
||||||
buffer[10] = char(it.value()->encoding()); // compression method
|
buffer[10] = char(entry->encoding()); // compression method
|
||||||
buffer[11] = char(it.value()->encoding() >> 8);
|
buffer[11] = char(entry->encoding() >> 8);
|
||||||
|
|
||||||
transformToMsDos(it.value()->date(), &buffer[12]);
|
transformToMsDos(entry->date(), &buffer[12]);
|
||||||
|
|
||||||
uLong mycrc = it.value()->crc32();
|
uLong mycrc = entry->crc32();
|
||||||
buffer[16] = char(mycrc); // crc checksum
|
buffer[16] = char(mycrc); // crc checksum
|
||||||
buffer[17] = char(mycrc >> 8);
|
buffer[17] = char(mycrc >> 8);
|
||||||
buffer[18] = char(mycrc >> 16);
|
buffer[18] = char(mycrc >> 16);
|
||||||
buffer[19] = char(mycrc >> 24);
|
buffer[19] = char(mycrc >> 24);
|
||||||
|
|
||||||
int mysize1 = it.value()->compressedSize();
|
int mysize1 = entry->compressedSize();
|
||||||
buffer[20] = char(mysize1); // compressed file size
|
buffer[20] = char(mysize1); // compressed file size
|
||||||
buffer[21] = char(mysize1 >> 8);
|
buffer[21] = char(mysize1 >> 8);
|
||||||
buffer[22] = char(mysize1 >> 16);
|
buffer[22] = char(mysize1 >> 16);
|
||||||
buffer[23] = char(mysize1 >> 24);
|
buffer[23] = char(mysize1 >> 24);
|
||||||
|
|
||||||
int mysize = it.value()->size();
|
int mysize = entry->size();
|
||||||
buffer[24] = char(mysize); // uncompressed file size
|
buffer[24] = char(mysize); // uncompressed file size
|
||||||
buffer[25] = char(mysize >> 8);
|
buffer[25] = char(mysize >> 8);
|
||||||
buffer[26] = char(mysize >> 16);
|
buffer[26] = char(mysize >> 16);
|
||||||
@@ -928,10 +935,10 @@ bool KZip::closeArchive()
|
|||||||
buffer[30] = char(extra_field_len);
|
buffer[30] = char(extra_field_len);
|
||||||
buffer[31] = char(extra_field_len >> 8);
|
buffer[31] = char(extra_field_len >> 8);
|
||||||
|
|
||||||
buffer[40] = char(it.value()->permissions());
|
buffer[40] = char(entry->permissions());
|
||||||
buffer[41] = char(it.value()->permissions() >> 8);
|
buffer[41] = char(entry->permissions() >> 8);
|
||||||
|
|
||||||
int myhst = it.value()->headerStart();
|
int myhst = entry->headerStart();
|
||||||
buffer[42] = char(myhst); // relative offset of local header
|
buffer[42] = char(myhst); // relative offset of local header
|
||||||
buffer[43] = char(myhst >> 8);
|
buffer[43] = char(myhst >> 8);
|
||||||
buffer[44] = char(myhst >> 16);
|
buffer[44] = char(myhst >> 16);
|
||||||
@@ -952,14 +959,14 @@ bool KZip::closeArchive()
|
|||||||
extfield[4] = 1 | 2 | 4; // specify flags from local field
|
extfield[4] = 1 | 2 | 4; // specify flags from local field
|
||||||
// (unless I misread the spec)
|
// (unless I misread the spec)
|
||||||
// provide only modification time
|
// provide only modification time
|
||||||
unsigned long time = (unsigned long)it.value()->date().toSecsSinceEpoch();
|
unsigned long time = (unsigned long) entry->date().toSecsSinceEpoch();
|
||||||
extfield[5] = char(time);
|
extfield[5] = char(time);
|
||||||
extfield[6] = char(time >> 8);
|
extfield[6] = char(time >> 8);
|
||||||
extfield[7] = char(time >> 16);
|
extfield[7] = char(time >> 16);
|
||||||
extfield[8] = char(time >> 24);
|
extfield[8] = char(time >> 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
crc = crc32(crc, (Bytef *)buffer, bufferSize);
|
crc = crc32(crc, (Bytef *) buffer, bufferSize);
|
||||||
bool ok = (device()->write(buffer, bufferSize) == bufferSize);
|
bool ok = (device()->write(buffer, bufferSize) == bufferSize);
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
@@ -1087,18 +1094,17 @@ bool KZip::doPrepareWriting(const QString &name,
|
|||||||
// to save, so that we don't have duplicate file entries when viewing the zip
|
// to save, so that we don't have duplicate file entries when viewing the zip
|
||||||
// with konqi...
|
// with konqi...
|
||||||
// CAUTION: the old file itself is still in the zip and won't be removed !!!
|
// CAUTION: the old file itself is still in the zip and won't be removed !!!
|
||||||
QMutableListIterator<KZipFileEntry *> it(d->m_fileList);
|
|
||||||
// qCDebug(KArchiveLog) << "fileName to write: " << name;
|
// qCDebug(KArchiveLog) << "fileName to write: " << name;
|
||||||
while (it.hasNext()) {
|
for (auto it = d->m_fileList.begin(); it != d->m_fileList.end();) {
|
||||||
it.next();
|
// qCDebug(KArchiveLog) << "prepfileName: " << entry->path();
|
||||||
// qCDebug(KArchiveLog) << "prepfileName: " << it.value()->path();
|
if (name == (*it)->path()) {
|
||||||
if (name == it.value()->path()) {
|
|
||||||
// also remove from the parentDir
|
// also remove from the parentDir
|
||||||
parentDir->removeEntry(it.value());
|
parentDir->removeEntry(*it);
|
||||||
// qCDebug(KArchiveLog) << "removing following entry: " << it.value()->path();
|
// qCDebug(KArchiveLog) << "removing following entry: " << entry->path();
|
||||||
delete it.value();
|
delete *it;
|
||||||
it.remove();
|
it = d->m_fileList.erase(it);
|
||||||
}
|
} else
|
||||||
|
it++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// construct a KZipFileEntry and add it to list
|
// construct a KZipFileEntry and add it to list
|
||||||
|
Reference in New Issue
Block a user