From 3169bdcf6fc1cd704e406c580afab60a0f9a2838 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 11 Aug 2022 19:52:15 -0700 Subject: [PATCH] minizip-ng: add Signed-off-by: Rosen Penev --- releases.json | 8 + subprojects/minizip-ng.wrap | 9 + .../packagefiles/minizip-ng/meson.build | 187 ++++++++++++++++++ .../packagefiles/minizip-ng/meson_options.txt | 32 +++ subprojects/packagefiles/minizip-ng/mz.def | 166 ++++++++++++++++ tools/sanity_checks.py | 3 + 6 files changed, 405 insertions(+) create mode 100644 subprojects/minizip-ng.wrap create mode 100644 subprojects/packagefiles/minizip-ng/meson.build create mode 100644 subprojects/packagefiles/minizip-ng/meson_options.txt create mode 100644 subprojects/packagefiles/minizip-ng/mz.def diff --git a/releases.json b/releases.json index e206811b1..de5b75c21 100644 --- a/releases.json +++ b/releases.json @@ -1240,6 +1240,14 @@ "2.1.0-1" ] }, + "minizip-ng": { + "dependency_names": [ + "minizip-ng" + ], + "versions": [ + "3.0.6-1" + ] + }, "mocklibc": { "versions": [ "1.0-2" diff --git a/subprojects/minizip-ng.wrap b/subprojects/minizip-ng.wrap new file mode 100644 index 000000000..6a43eac69 --- /dev/null +++ b/subprojects/minizip-ng.wrap @@ -0,0 +1,9 @@ +[wrap-file] +directory = minizip-ng-3.0.6 +source_url = https://github.com/zlib-ng/minizip-ng/archive/refs/tags/3.0.6.tar.gz +source_filename = 3.0.6.tar.gz +source_hash = 383fa1bdc28c482828a8a8db53f758dbd44291b641182724fda5df5b59cce543 +patch_directory = minizip-ng + +[provide] +minizip-ng = minizip_ng_dep diff --git a/subprojects/packagefiles/minizip-ng/meson.build b/subprojects/packagefiles/minizip-ng/meson.build new file mode 100644 index 000000000..146a216d1 --- /dev/null +++ b/subprojects/packagefiles/minizip-ng/meson.build @@ -0,0 +1,187 @@ +project('minizip-ng', 'c', + version: '3.0.6', + default_options: ['warning_level=1'], +) + +if host_machine.system() == 'windows' and get_option('buildtype') != 'static' + add_project_arguments('-DMZ_EXPORTS', language: 'c') +endif + +cc = meson.get_compiler('c') +if cc.has_header('stdint.h') + add_project_arguments('-DHAVE_STDINT_H', language: 'c') +endif + +if cc.has_header('inttypes.h') + add_project_arguments('-DHAVE_INTTYPES_H', language: 'c') +endif + +if cc.has_function('getrandom') + add_project_arguments('-DHAVE_GETRANDOM', language: 'c') +endif + +if not cc.has_function('fseeko') + add_project_arguments('-DNO_FSEEKO', language: 'c') +endif + +sources = files( + 'mz_crypt.c', + 'mz_os.c', + 'mz_strm.c', + 'mz_strm_buf.c', + 'mz_strm_mem.c', + 'mz_strm_split.c', + 'mz_zip.c', + 'mz_zip_rw.c', +) + +if host_machine.system() == 'windows' + sources += files('mz_os_win32.c', 'mz_strm_os_win32.c') +else + sources += files('mz_os_posix.c', 'mz_strm_os_posix.c') +endif + +compat = get_option('compat') +if compat + sources += files('mz_compat.c') + add_project_arguments('-DHAVE_COMPAT', language: 'c') +endif + +bsd_dep = dependency('libbsd', required: get_option('bsd')) +if bsd_dep.found() + add_project_arguments('-DHAVE_LIBBSD', language: 'c') +endif + +if cc.has_function('arc4random_buf', dependencies: bsd_dep) + add_project_arguments('-DHAVE_ARC4RANDOM_BUF', language: 'c') +endif + +if cc.has_function('arc4random', dependencies: bsd_dep) + add_project_arguments('-DHAVE_ARC4RANDOM', language: 'c') +endif + +crypt_dep = dependency('openssl', required: get_option('wzaes')) +if crypt_dep.found() + sources += files('mz_crypt_openssl.c') +elif host_machine.system() == 'windows' + crypt_dep = cc.find_library('crypt32', required: get_option('wzaes')) + if crypt_dep.found() + sources += files('mz_crypt_win32.c') + endif +elif host_machine.system() == 'darwin' + crypt_dep = dependency('appleframeworks', modules : [ 'CoreFoundation', 'Security' ], required: get_option('wzaes')) + if crypt_dep.found() + sources += files('mz_crypt_apple.c') + endif +endif + +if crypt_dep.found() + sources += files('mz_strm_wzaes.c') + add_project_arguments('-DHAVE_WZAES', language: 'c') + add_project_arguments('-DMZ_ZIP_SIGNING', language: 'c') +else + add_project_arguments('-DMZ_ZIP_NO_ENCRYPTION', language: 'c') + add_project_arguments('-DMZ_ZIP_NO_CRYPTO', language: 'c') +endif + +iconv_dep = dependency('iconv', required: get_option('iconv')) +if iconv_dep.found() + add_project_arguments('-DHAVE_ICONV', language: 'c') +endif + +bzip2_dep = dependency('bzip2', required: get_option('bzip2')) +if bzip2_dep.found() + sources += files('mz_strm_bzip.c') + add_project_arguments('-DHAVE_BZIP2', language: 'c') +endif + +lzma_dep = dependency('liblzma', required: get_option('lzma')) +if lzma_dep.found() + sources += files('mz_strm_lzma.c') + add_project_arguments('-DHAVE_LZMA', language: 'c') +endif + +zlib_dep = dependency('zlib-ng', required: get_option('zlib')) +if not zlib_dep.found() + zlib_dep = dependency('zlib', required: get_option('zlib')) + if zlib_dep.found() + add_project_arguments('-DZLIB_COMPAT', language: 'c') + endif +endif +if zlib_dep.found() + sources += files('mz_strm_zlib.c') + add_project_arguments('-DHAVE_ZLIB', language: 'c') +endif + +zstd_dep = dependency('libzstd', required: get_option('zstd')) +if zstd_dep.found() + sources += files('mz_strm_zstd.c') + add_project_arguments('-DHAVE_ZSTD', language: 'c') +endif + +if not zlib_dep.found() and not zstd_dep.found() and not bzip2_dep.found() and not lzma_dep.found() + add_project_arguments('-DMZ_ZIP_NO_DECOMPRESSION', language: 'c') + add_project_arguments('-DMZ_ZIP_NO_COMPRESSION', language: 'c') +endif + +minizip_ng = library(compat ? 'minizip' : 'minizip-ng', + sources, + version: meson.project_version(), + soversion: host_machine.system() == 'windows' ? '' : '3', + vs_module_defs: 'mz.def', + dependencies: [ bsd_dep, crypt_dep, iconv_dep, bzip2_dep, lzma_dep, zlib_dep, zstd_dep, ], + install: true, +) + +minizip_ng_dep = declare_dependency( + include_directories: '.', + link_with: minizip_ng, +) + +pconf = import('pkgconfig') +pconf.generate(minizip_ng, + description: 'Minizip zip file manipulation library', +) + +headers = files( + 'mz.h', + 'mz_crypt.h', + 'mz_os.h', + 'mz_strm.h', + 'mz_strm_buf.h', + 'mz_strm_bzip.h', + 'mz_strm_lzma.h', + 'mz_strm_mem.h', + 'mz_strm_os.h', + 'mz_strm_pkcrypt.h', + 'mz_strm_split.h', + 'mz_strm_wzaes.h', + 'mz_strm_zlib.h', + 'mz_strm_zstd.h', + 'mz_zip.h', + 'mz_zip_rw.h', +) + +if compat + zip_h = configure_file( + input: 'mz_compat_shim.h.in', + output: 'zip.h', + format: 'cmake@', + configuration: {'MZ_COMPAT_FILE': 'MZ_COMPAT_ZIP', 'FILE_H': 'zip.h'}, + ) + + unzip_h = configure_file( + input: 'mz_compat_shim.h.in', + output: 'unzip.h', + format: 'cmake@', + configuration: {'MZ_COMPAT_FILE': 'MZ_COMPAT_UNZIP', 'FILE_H': 'unzip.h'}, + ) + + headers += files('mz_compat.h') + headers += zip_h + headers += unzip_h +endif + +install_headers( + headers, +) diff --git a/subprojects/packagefiles/minizip-ng/meson_options.txt b/subprojects/packagefiles/minizip-ng/meson_options.txt new file mode 100644 index 000000000..8288f1976 --- /dev/null +++ b/subprojects/packagefiles/minizip-ng/meson_options.txt @@ -0,0 +1,32 @@ +option('bsd', type: 'feature', + description: 'Build with libbsd arc4random', +) + +option('iconv', type: 'feature', + description: 'Build with iconv support', +) + +option('compat', type : 'boolean', + description : 'Build with compatibility support for traditional minizip', + value: false, +) + +option('bzip2', type : 'feature', + description : 'Build with bzip2 support', +) + +option('lzma', type : 'feature', + description : 'Build with lzma support', +) + +option('wzaes', type: 'feature', + description: 'Buid with WinZip AES support', +) + +option('zlib', type : 'feature', + description : 'Build with zlib/zlib-ng support', +) + +option('zstd', type : 'feature', + description : 'Build with zstd support', +) diff --git a/subprojects/packagefiles/minizip-ng/mz.def b/subprojects/packagefiles/minizip-ng/mz.def new file mode 100644 index 000000000..7220ce505 --- /dev/null +++ b/subprojects/packagefiles/minizip-ng/mz.def @@ -0,0 +1,166 @@ +EXPORTS +; +mz_path_combine +mz_path_append_slash +mz_path_remove_slash +mz_path_has_slash +mz_path_convert_slashes +mz_path_compare_wc +mz_path_resolve +mz_path_remove_filename +mz_path_remove_extension +mz_path_get_filename +mz_dir_make +mz_file_get_crc +mz_os_unicode_string_create +mz_os_unicode_string_delete +mz_os_utf8_string_create +mz_os_utf8_string_delete +mz_os_rand +mz_os_rename +mz_os_unlink +mz_os_file_exists +mz_os_get_file_size +mz_os_get_file_date +mz_os_set_file_date +mz_os_get_file_attribs +mz_os_set_file_attribs +mz_os_make_dir +mz_os_open_dir +mz_os_read_dir +mz_os_close_dir +mz_os_is_dir +mz_os_is_symlink +mz_os_make_symlink +mz_os_read_symlink +mz_os_ms_time +mz_zip_create +mz_zip_delete +mz_zip_open +mz_zip_close +mz_zip_get_comment +mz_zip_set_comment +mz_zip_get_version_madeby +mz_zip_set_version_madeby +mz_zip_set_recover +mz_zip_set_data_descriptor +mz_zip_get_stream +mz_zip_set_cd_stream +mz_zip_get_cd_mem_stream +mz_zip_set_number_entry +mz_zip_get_number_entry +mz_zip_set_disk_number_with_cd +mz_zip_get_disk_number_with_cd +mz_zip_entry_is_open +mz_zip_entry_read_open +mz_zip_entry_read +mz_zip_entry_read_close +mz_zip_entry_write_open +mz_zip_entry_write +mz_zip_entry_write_close +mz_zip_entry_seek_local_header +mz_zip_entry_get_compress_stream +mz_zip_entry_close_raw +mz_zip_entry_close +mz_zip_entry_is_dir +mz_zip_entry_is_symlink +mz_zip_entry_get_info +mz_zip_entry_get_local_info +mz_zip_get_entry +mz_zip_goto_entry +mz_zip_goto_first_entry +mz_zip_goto_next_entry +mz_zip_locate_entry +mz_zip_locate_first_entry +mz_zip_locate_next_entry +mz_zip_attrib_is_dir +mz_zip_attrib_is_symlink +mz_zip_attrib_convert +mz_zip_attrib_posix_to_win32 +mz_zip_attrib_win32_to_posix +mz_zip_extrafield_find +mz_zip_extrafield_contains +mz_zip_extrafield_read +mz_zip_extrafield_write +mz_zip_dosdate_to_tm +mz_zip_dosdate_to_time_t +mz_zip_time_t_to_tm +mz_zip_time_t_to_dos_date +mz_zip_tm_to_dosdate +mz_zip_ntfs_to_unix_time +mz_zip_unix_to_ntfs_time +mz_zip_path_compare +mz_zip_get_compression_method_string +mz_zip_reader_is_open +mz_zip_reader_open +mz_zip_reader_open_file +mz_zip_reader_open_file_in_memory +mz_zip_reader_open_buffer +mz_zip_reader_close +mz_zip_reader_goto_first_entry +mz_zip_reader_goto_next_entry +mz_zip_reader_locate_entry +mz_zip_reader_entry_open +mz_zip_reader_entry_close +mz_zip_reader_entry_read +mz_zip_reader_entry_has_sign +mz_zip_reader_entry_sign_verify +mz_zip_reader_entry_get_hash +mz_zip_reader_entry_get_first_hash +mz_zip_reader_entry_get_info +mz_zip_reader_entry_is_dir +mz_zip_reader_entry_save +mz_zip_reader_entry_save_process +mz_zip_reader_entry_save_file +mz_zip_reader_entry_save_buffer +mz_zip_reader_entry_save_buffer_length +mz_zip_reader_save_all +mz_zip_reader_set_pattern +mz_zip_reader_set_password +mz_zip_reader_set_raw +mz_zip_reader_get_raw +mz_zip_reader_get_zip_cd +mz_zip_reader_get_comment +mz_zip_reader_set_recover +mz_zip_reader_set_encoding +mz_zip_reader_set_sign_required +mz_zip_reader_set_overwrite_cb +mz_zip_reader_set_password_cb +mz_zip_reader_set_progress_cb +mz_zip_reader_set_progress_interval +mz_zip_reader_set_entry_cb +mz_zip_reader_get_zip_handle +mz_zip_reader_create +mz_zip_reader_delete +mz_zip_writer_is_open +mz_zip_writer_open +mz_zip_writer_open_file +mz_zip_writer_open_file_in_memory +mz_zip_writer_close +mz_zip_writer_entry_open +mz_zip_writer_entry_close +mz_zip_writer_entry_write +mz_zip_writer_add +mz_zip_writer_add_process +mz_zip_writer_add_info +mz_zip_writer_add_buffer +mz_zip_writer_add_file +mz_zip_writer_add_path +mz_zip_writer_copy_from_reader +mz_zip_writer_set_password +mz_zip_writer_set_comment +mz_zip_writer_set_raw +mz_zip_writer_get_raw +mz_zip_writer_set_aes +mz_zip_writer_set_compress_method +mz_zip_writer_set_compress_level +mz_zip_writer_set_zip_cd +mz_zip_writer_set_certificate +mz_zip_writer_set_overwrite_cb +mz_zip_writer_set_password_cb +mz_zip_writer_set_progress_cb +mz_zip_writer_set_progress_interval +mz_zip_writer_set_entry_cb +mz_zip_writer_get_zip_handle +mz_zip_writer_create +mz_zip_writer_delete diff --git a/tools/sanity_checks.py b/tools/sanity_checks.py index 05197138d..327d1a7cd 100755 --- a/tools/sanity_checks.py +++ b/tools/sanity_checks.py @@ -45,6 +45,9 @@ 'm4': [ 'm4_test_runner.py', ], + 'minizip-ng': [ + 'mz.def', + ], 'mpdecimal': [ 'gettests.py', ],