diff options
author | Sam James <sam@gentoo.org> | 2022-10-02 01:58:20 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2022-10-02 02:00:54 +0100 |
commit | 3441ab9985c98c9f21bf4e529c54e0db84c19187 (patch) | |
tree | 5f21f2740847697e1178655b33316888b4feffaa /sys-libs | |
parent | profiles/base: mask sys-libs/zlib-ng[compat] (diff) | |
download | gentoo-3441ab9985c98c9f21bf4e529c54e0db84c19187.tar.gz gentoo-3441ab9985c98c9f21bf4e529c54e0db84c19187.tar.bz2 gentoo-3441ab9985c98c9f21bf4e529c54e0db84c19187.zip |
sys-libs/minizip-ng: new package, add 3.0.6
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-libs')
5 files changed, 293 insertions, 0 deletions
diff --git a/sys-libs/minizip-ng/Manifest b/sys-libs/minizip-ng/Manifest new file mode 100644 index 000000000000..a1c9881d8a0e --- /dev/null +++ b/sys-libs/minizip-ng/Manifest @@ -0,0 +1 @@ +DIST minizip-ng-3.0.6.tar.gz 642138 BLAKE2B 3faddeef035da0417671ef5578b90ad9ec9a69f376d04fb8095f93e27e3276931ef432e179613e841e754ff6e915e8c631eeaa48795aaa87773e45465bd14afa SHA512 92aaad655e7dbec60ab8075435ccdc72314f75f0516aa4a16094215df2b14b108c2b49cdf6c876e396f0f43f52ad63f52ce7db2e119efe25c55b8b873bef9d4f diff --git a/sys-libs/minizip-ng/files/minizip-ng-3.0.6-Switch-getrandom-and-arc4random_buf-usage-order.patch b/sys-libs/minizip-ng/files/minizip-ng-3.0.6-Switch-getrandom-and-arc4random_buf-usage-order.patch new file mode 100644 index 000000000000..92db9c05b5d1 --- /dev/null +++ b/sys-libs/minizip-ng/files/minizip-ng-3.0.6-Switch-getrandom-and-arc4random_buf-usage-order.patch @@ -0,0 +1,68 @@ +https://github.com/zlib-ng/minizip-ng/pull/651 + +From 1be6ea22e127a99786aefd2896e08bab43ad1333 Mon Sep 17 00:00:00 2001 +From: Sam James <sam@gentoo.org> +Date: Sun, 2 Oct 2022 01:39:17 +0100 +Subject: [PATCH] Switch getrandom() and arc4random_buf() usage order + +We need to match the order of inclusions at the top of the file +otherwise we might end up trying to use arc4random_buf() when +available (because HAVE_ARC4RANODM_BUF is set) even though +we hit HAVE_GETRANDOM first above and only included +<sys/random.h> because of it. + +Besides, if getrandom() is available, we should really prefer +it anyway. + +Fixes an implicit function declaration: +``` +minizip-ng-3.0.6/mz_os_posix.c:124:5: error: implicit declaration of function 'arc4random_buf' [-Werror=implicit-function-declaration] +``` +--- a/mz_os_posix.c ++++ b/mz_os_posix.c +@@ -117,7 +117,22 @@ void mz_os_utf8_string_delete(uint8_t **string) { + + /***************************************************************************/ + +-#if defined(HAVE_ARC4RANDOM_BUF) ++#if defined(HAVE_GETRANDOM) ++int32_t mz_os_rand(uint8_t *buf, int32_t size) { ++ int32_t left = size; ++ int32_t written = 0; ++ ++ while (left > 0) { ++ written = getrandom(buf, left, 0); ++ if (written < 0) ++ return MZ_INTERNAL_ERROR; ++ ++ buf += written; ++ left -= written; ++ } ++ return size - left; ++} ++#elif defined(HAVE_ARC4RANDOM_BUF) + int32_t mz_os_rand(uint8_t *buf, int32_t size) { + if (size < 0) + return 0; +@@ -139,21 +154,6 @@ int32_t mz_os_rand(uint8_t *buf, int32_t size) { + } + return size - left; + } +-#elif defined(HAVE_GETRANDOM) +-int32_t mz_os_rand(uint8_t *buf, int32_t size) { +- int32_t left = size; +- int32_t written = 0; +- +- while (left > 0) { +- written = getrandom(buf, left, 0); +- if (written < 0) +- return MZ_INTERNAL_ERROR; +- +- buf += written; +- left -= written; +- } +- return size - left; +-} + #else + int32_t mz_os_rand(uint8_t *buf, int32_t size) { + static unsigned calls = 0; diff --git a/sys-libs/minizip-ng/files/minizip-ng-3.0.6-test-temporary.patch b/sys-libs/minizip-ng/files/minizip-ng-3.0.6-test-temporary.patch new file mode 100644 index 000000000000..d38603ac7378 --- /dev/null +++ b/sys-libs/minizip-ng/files/minizip-ng-3.0.6-test-temporary.patch @@ -0,0 +1,129 @@ +https://github.com/zlib-ng/minizip-ng/issues/623 +https://github.com/zlib-ng/minizip-ng/commit/6261d6f5ec5bd275257354c048f68ad9723c3231 + +From 6261d6f5ec5bd275257354c048f68ad9723c3231 Mon Sep 17 00:00:00 2001 +From: Nathan Moinvaziri <nathan@solidstatenetworks.com> +Date: Sat, 11 Jun 2022 10:36:42 -0700 +Subject: [PATCH] Generate test files in binary temp directory. + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -804,6 +804,8 @@ if(MZ_BUILD_TESTS AND MZ_BUILD_UNIT_TESTS) + endif() + endif() + ++ set(TEST_TEMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/Testing/Temporary) ++ + add_test(NAME test_cmd COMMAND test_cmd WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + + function(create_compress_tests EXTRA_NAME EXTRA_ARGS) +@@ -840,33 +842,43 @@ if(MZ_BUILD_TESTS AND MZ_BUILD_UNIT_TESTS) + foreach(INDEX RANGE ${COMPRESS_METHOD_COUNT}) + list(GET COMPRESS_METHOD_NAMES ${INDEX} COMPRESS_METHOD_NAME) + list(GET COMPRESS_METHOD_ARGS ${INDEX} COMPRESS_METHOD_ARG) ++ ++ set(COMPRESS_METHOD_DEST_DIR ++ ${TEST_TEMP_DIR}/${COMPRESS_METHOD_NAME}-${EXTRA_NAME}) ++ set(COMPRESS_METHOD_PATH ++ ${TEST_TEMP_DIR}/${COMPRESS_METHOD_NAME}-${EXTRA_NAME}.zip) ++ + add_test(NAME ${COMPRESS_METHOD_NAME}-zip-${EXTRA_NAME} + COMMAND minizip_cmd ${COMPRESS_METHOD_ARG} -o ${EXTRA_ARGS} +- result.zip test.c test.h empty.txt random.bin uniform.bin fuzz ++ ${COMPRESS_METHOD_PATH} ++ test.c test.h empty.txt random.bin uniform.bin fuzz + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + add_test(NAME ${COMPRESS_METHOD_NAME}-list-${EXTRA_NAME} +- COMMAND minizip_cmd -l ${EXTRA_ARGS} result.zip ++ COMMAND minizip_cmd -l ${EXTRA_ARGS} ${COMPRESS_METHOD_PATH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + if(NOT MZ_COMPRESS_ONLY) + add_test(NAME ${COMPRESS_METHOD_NAME}-unzip-${EXTRA_NAME} +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out result.zip ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${COMPRESS_METHOD_DEST_DIR} ${COMPRESS_METHOD_PATH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + add_test(NAME ${COMPRESS_METHOD_NAME}-append-${EXTRA_NAME} + COMMAND minizip_cmd ${COMPRESS_METHOD_ARG} -a ${EXTRA_ARGS} +- result.zip single.txt ++ ${COMPRESS_METHOD_PATH} single.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + if(NOT MZ_COMPRESS_ONLY) + add_test(NAME ${COMPRESS_METHOD_NAME}-append-unzip-${EXTRA_NAME} +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out result.zip ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${COMPRESS_METHOD_DEST_DIR} ${COMPRESS_METHOD_PATH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + add_test(NAME ${COMPRESS_METHOD_NAME}-erase-${EXTRA_NAME} +- COMMAND minizip_cmd -o -e result.zip test.c test.h ++ COMMAND minizip_cmd -o -e ${COMPRESS_METHOD_PATH} test.c test.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + if(NOT MZ_COMPRESS_ONLY) + add_test(NAME ${COMPRESS_METHOD_NAME}-erase-unzip-${EXTRA_NAME} +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out result.zip ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${COMPRESS_METHOD_DEST_DIR} ${COMPRESS_METHOD_PATH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + endforeach() +@@ -891,43 +903,49 @@ if(MZ_BUILD_TESTS AND MZ_BUILD_UNIT_TESTS) + if(NOT MZ_COMPRESS_ONLY) + if(MZ_ZLIB OR MZ_LIBCOMP) + add_test(NAME unzip-tiny +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${TEST_TEMP_DIR}/unzip-tiny + fuzz/unzip_fuzzer_seed_corpus/tiny.zip + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + if(MZ_BZIP2) + add_test(NAME unzip-bzip2 +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${TEST_TEMP_DIR}/unzip-bzip2 + fuzz/unzip_fuzzer_seed_corpus/bzip2.zip + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + if(MZ_LZMA) + add_test(NAME unzip-lzma +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${TEST_TEMP_DIR}/unzip-lzma + fuzz/unzip_fuzzer_seed_corpus/lzma.zip + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + if(MZ_PKCRYPT) + add_test(NAME unzip-pkcrypt +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out -p test123 ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${TEST_TEMP_DIR}/unzip-pkcrypt -p test123 + fuzz/unzip_fuzzer_seed_corpus/encrypted_pkcrypt.zip + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + if(MZ_WZAES) + add_test(NAME unzip-wzaes +- COMMAND minizip_cmd -x -o ${EXTRA_ARGS} -d out -p test123 ++ COMMAND minizip_cmd -x -o ${EXTRA_ARGS} ++ -d ${TEST_TEMP_DIR}/unzip-wzaes -p test123 + fuzz/unzip_fuzzer_seed_corpus/encrypted_wzaes.zip + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) + endif() + endif() + if(NOT MZ_COMPRESS_ONLY AND NOT MZ_DECOMPRESS_ONLY) + if(MZ_ZLIB AND NOT MZ_LIBCOMP) ++ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/random.bin DESTINATION ${TEST_TEMP_DIR}) + add_test(NAME gz + COMMAND minigzip_cmd random.bin +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) ++ WORKING_DIRECTORY ${TEST_TEMP_DIR}) + add_test(NAME ungz +- COMMAND minigzip_cmd -x -d out random.bin.gz +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) ++ COMMAND minigzip_cmd -x -d ${TEST_TEMP_DIR} random.bin.gz ++ WORKING_DIRECTORY ${TEST_TEMP_DIR}) + endif() + endif() + endif() + diff --git a/sys-libs/minizip-ng/metadata.xml b/sys-libs/minizip-ng/metadata.xml new file mode 100644 index 000000000000..f712872be38f --- /dev/null +++ b/sys-libs/minizip-ng/metadata.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="project"> + <email>base-system@gentoo.org</email> + <name>Gentoo Base System</name> + </maintainer> + <use> + <flag name="compat">Enable compatibility with <pkg>sys-libs/zlib</pkg>'s USE=minizip</flag> + <flag name="openssl">Use <pkg>dev-libs/openssl</pkg> for further encryption capabilities</flag> + </use> + <upstream> + <remote-id type="github">zlib-ng/minizip-ng</remote-id> + </upstream> +</pkgmetadata> diff --git a/sys-libs/minizip-ng/minizip-ng-3.0.6.ebuild b/sys-libs/minizip-ng/minizip-ng-3.0.6.ebuild new file mode 100644 index 000000000000..e27b7d11fd07 --- /dev/null +++ b/sys-libs/minizip-ng/minizip-ng-3.0.6.ebuild @@ -0,0 +1,80 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake + +DESCRIPTION="Fork of the popular zip manipulation library found in the zlib distribution" +HOMEPAGE="https://github.com/zlib-ng/minizip-ng" +SRC_URI="https://github.com/zlib-ng/minizip-ng/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="ZLIB" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="compat openssl test" +RESTRICT="!test? ( test )" + +RDEPEND=" + virtual/libiconv + compat? ( !sys-libs/zlib[minizip] ) + openssl? ( dev-libs/openssl:= ) +" +DEPEND="${RDEPEND}" + +PATCHES=( + "${FILESDIR}"/${PN}-3.0.6-Switch-getrandom-and-arc4random_buf-usage-order.patch + "${FILESDIR}"/minizip-ng-3.0.6-test-temporary.patch +) + +src_configure() { + local mycmakeargs=( + -DMZ_COMPAT=$(usex compat) + -DMZ_BUILD_TESTS=$(usex test) + -DMZ_BUILD_UNIT_TESTS=$(usex test) + -DMZ_FETCH_LIBS=OFF + -DMZ_FORCE_FETCH_LIBS=OFF + + # Compression library options + -DMZ_ZLIB=ON + -DMZ_BZIP2=ON + -DMZ_LZMA=ON + -DMZ_ZSTD=ON + -DMZ_LIBCOMP=OFF + + # Encryption support options + -DMZ_PKCRYPT=ON + -DMZ_WZAES=ON + -DMZ_OPENSSL=$(usex openssl) + # TODO: Re-enable, ideally unconditionally, for arc4random + # Revisit when https://github.com/zlib-ng/minizip-ng/pull/648 fixed + -DMZ_LIBBSD=ON + -DMZ_SIGNING=ON + + # Character conversion options + -DMZ_ICONV=ON + ) + + cmake_src_configure +} + +src_test() { + local myctestargs=( + # TODO: investigate + -E "(raw-unzip-pkcrypt|raw-append-unzip-pkcrypt|raw-erase-unzip-pkcrypt|deflate-unzip-pkcrypt|deflate-append-unzip-pkcrypt|deflate-erase-unzip-pkcrypt|bzip2-unzip-pkcrypt|bzip2-append-unzip-pkcrypt|bzip2-erase-unzip-pkcrypt|lzma-unzip-pkcrypt|lzma-append-unzip-pkcrypt|lzma-erase-unzip-pkcrypt|xz-unzip-pkcrypt|xz-append-unzip-pkcrypt|xz-erase-unzip-pkcrypt|zstd-unzip-pkcrypt|zstd-append-unzip-pkcrypt|zstd-erase-unzip-pkcrypt)" + ) + + # TODO: A bunch of tests end up looping and writing over each other's files + # It gets better with a patch applied (see https://github.com/zlib-ng/minizip-ng/issues/623#issuecomment-1264518994) + # but still hangs. + cmake_src_test -j1 +} + +src_install() { + cmake_src_install + + if use compat ; then + ewarn "minizip-ng is experimental and replacing the system zlib[minizip] is dangerous" + ewarn "Please be careful!" + fi +} |