All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] assimp: Remove it
@ 2021-09-07  9:17 Robert Yang
  2021-09-07  9:17 ` [PATCH 1/1] " Robert Yang
  2021-09-09  5:06 ` [OE-core] [PATCH 0/1] " Khem Raj
  0 siblings, 2 replies; 17+ messages in thread
From: Robert Yang @ 2021-09-07  9:17 UTC (permalink / raw)
  To: openembedded-core

The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a:

  vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100)

are available in the Git repository at:

  git://git.openembedded.org/openembedded-core-contrib rbt/assimp
  http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp

Robert Yang (1):
  assimp: Remove it

 meta/conf/distro/include/maintainers.inc      |    1 -
 ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
 ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
 .../use-GNUInstallDirs-where-possible.patch   |  257 ---
 meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
 5 files changed, 1980 deletions(-)
 delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
 delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
 delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
 delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb

-- 
2.17.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 1/1] assimp: Remove it
  2021-09-07  9:17 [PATCH 0/1] assimp: Remove it Robert Yang
@ 2021-09-07  9:17 ` Robert Yang
  2021-09-07 12:04   ` [OE-core] " Randy MacLeod
  2021-09-09  5:06 ` [OE-core] [PATCH 0/1] " Khem Raj
  1 sibling, 1 reply; 17+ messages in thread
From: Robert Yang @ 2021-09-07  9:17 UTC (permalink / raw)
  To: openembedded-core

Remove it since it has license issues:

* scripts/StepImporter/schema_ifc2x3.exp
Copyright by: International Alliance for Interoperability, 1996-2005 All rights
reserved. No part of this documentation may be reproduced, stored in a
retrieval system, or transmitted in any form or by any means, without the prior
written permission of the owner

* test/models-nonbsd/X/dwarf-Read-Me.txt
RESTRICTIONS: This model pack is available for use in freeware, shareware,
commercial games/software with the following restrictions:- **You may not
sell/re-sell this model pack or claim it as your own. ***You may not
redistribute this pack in some other model pack through a website or on a
compilation CD of any kind, without my written consent. Psi
http://www.psionic3d.co.uk

* test/models-nonbsd/B3D/turtle.source.txt
Copyright 2004, Psionic Design e-mail: psionic@blueyonder.co.uk Used with
permission. RESTRICTIONS: This model pack is available for use in freeware,
shareware, commercial games/software with the following restrictions:- **You
may not sell/re-sell this model pack or claim it as your own. ***You may not
redistribute this pack in some other model pack through a website or on a
compilation CD of any kind, without my written consent.

And no recipes depend on it, so remove it.

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 meta/conf/distro/include/maintainers.inc      |    1 -
 ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
 ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
 .../use-GNUInstallDirs-where-possible.patch   |  257 ---
 meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
 5 files changed, 1980 deletions(-)
 delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
 delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
 delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
 delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb

diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 0e8185f4e3..e560ba39dd 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -46,7 +46,6 @@ RECIPE_MAINTAINER:pn-apt = "Aníbal Limón <limon.anibal@gmail.com>"
 RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>"
 RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>"
-RECIPE_MAINTAINER:pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>"
 RECIPE_MAINTAINER:pn-at-spi2-atk = "Tim Orling <timothy.t.orling@intel.com>"
 RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling <timothy.t.orling@intel.com>"
diff --git a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch b/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
deleted file mode 100644
index 1078148d6b..0000000000
--- a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
-Date: Fri, 13 Aug 2021 16:42:48 +0530
-Subject: [PATCH] assimp: remove shared lib from _IMPORT_CHECK_TARGETS
-
-In the target assimp::assimp shared library verification removed
-as it is giving configuration error when used by 3rd part component to
-configure itself using assimp::assimp target
-
-Upstream-Status: Inappropriate [oe specific]
-
-Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
----
- assimpTargets-release.cmake.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in
-index cd2fac7e0..52edc7990 100644
---- a/assimpTargets-release.cmake.in
-+++ b/assimpTargets-release.cmake.in
-@@ -72,8 +72,8 @@ else()
-       IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
-       IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
-     )
--    list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
-+    #list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
-+    #list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
-   else()
-     set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
-     set_target_properties(assimp::assimp PROPERTIES
---
-2.17.1
diff --git a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
deleted file mode 100644
index 87a1658710..0000000000
--- a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
+++ /dev/null
@@ -1,1664 +0,0 @@
-From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001
-From: Kim Kulling <kim.kulling@googlemail.com>
-Date: Tue, 19 Nov 2019 20:30:40 +0100
-Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: update
- of zlip to fix gcc build for v9.2.0 32 bit
-
-Upstream-Status: Backport [https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- contrib/zip/.gitignore          |   2 +
- contrib/zip/CMakeLists.txt      |  83 +++++-
- contrib/zip/README.md           |  12 +-
- contrib/zip/appveyor.yml        |   2 +-
- contrib/zip/src/miniz.h         | 457 ++++++++++++++++++++++++++++----
- contrib/zip/src/zip.c           |  62 +++--
- contrib/zip/src/zip.h           | 457 ++++++++++++++++----------------
- contrib/zip/test/CMakeLists.txt |  27 +-
- contrib/zip/test/test.c         |  38 ++-
- contrib/zip/test/test_miniz.c   |  25 +-
- 10 files changed, 821 insertions(+), 344 deletions(-)
-
-diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore
-index a7904a1e..49b2cb2f 100644
---- a/contrib/zip/.gitignore
-+++ b/contrib/zip/.gitignore
-@@ -1,6 +1,7 @@
- /build/
- /test/build/
- /xcodeproj/
-+.vscode/
- 
- # Object files
- *.o
-@@ -54,3 +55,4 @@ zip.dir/
- test/test.exe.vcxproj.filters
- test/test.exe.vcxproj
- test/test.exe.dir/
-+
-diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt
-index b46dbb1d..77916d2e 100644
---- a/contrib/zip/CMakeLists.txt
-+++ b/contrib/zip/CMakeLists.txt
-@@ -1,10 +1,14 @@
--cmake_minimum_required(VERSION 2.8)
--project(zip)
--enable_language(C)
-+cmake_minimum_required(VERSION 3.0)
-+
-+project(zip
-+  LANGUAGES C
-+  VERSION "0.1.15")
- set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
- 
-+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF)
-+
- if (MSVC)
--  # Use secure functions by defaualt and suppress warnings about "deprecated" functions
-+  # Use secure functions by default and suppress warnings about "deprecated" functions
-   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
-   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
-   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1")
-@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR
-         "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR
-         "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
-   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic")
-+  if(ENABLE_COVERAGE)
-+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
-+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
-+  endif()
- endif (MSVC)
- 
- # zip
- set(SRC src/miniz.h src/zip.h src/zip.c)
- add_library(${PROJECT_NAME} ${SRC})
--target_include_directories(${PROJECT_NAME} INTERFACE src)
-+target_include_directories(${PROJECT_NAME} PUBLIC
-+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
-+  $<INSTALL_INTERFACE:include>
-+)
- 
- # test
- if (NOT CMAKE_DISABLE_TESTING)
-   enable_testing()
-   add_subdirectory(test)
-   find_package(Sanitizers)
--  add_sanitizers(${PROJECT_NAME} test.exe)
--  add_sanitizers(${PROJECT_NAME} test_miniz.exe)
-+  add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out})
- endif()
- 
-+####
-+# Installation (https://github.com/forexample/package-example) {
-+
-+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
-+set(INCLUDE_INSTALL_DIR "include")
-+
-+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
-+
-+# Configuration
-+set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
-+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
-+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
-+set(NAMESPACE "${PROJECT_NAME}::")
-+
-+# Include module with fuction 'write_basic_package_version_file'
-+include(CMakePackageConfigHelpers)
-+
-+# Note: PROJECT_VERSION is used as a VERSION
-+write_basic_package_version_file(
-+    "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion
-+)
-+
-+# Use variables:
-+#   * TARGETS_EXPORT_NAME
-+#   * PROJECT_NAME
-+configure_package_config_file(
-+    "cmake/Config.cmake.in"
-+    "${PROJECT_CONFIG}"
-+    INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
-+)
-+
-+install(
-+    FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
-+    DESTINATION "${CONFIG_INSTALL_DIR}"
-+)
-+
-+install(
-+    EXPORT "${TARGETS_EXPORT_NAME}"
-+    NAMESPACE "${NAMESPACE}"
-+    DESTINATION "${CONFIG_INSTALL_DIR}"
-+)
-+
-+# }
-+
- install(TARGETS ${PROJECT_NAME}
-+        EXPORT ${TARGETS_EXPORT_NAME}
-         RUNTIME DESTINATION bin
-         ARCHIVE DESTINATION lib
-         LIBRARY DESTINATION lib
--        COMPONENT library)
--install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include)
-+        INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}
-+)
-+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip)
- 
- # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake)
- if(NOT TARGET uninstall)
-@@ -45,3 +101,12 @@ if(NOT TARGET uninstall)
-     add_custom_target(uninstall
-         COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)
- endif()
-+
-+find_package(Doxygen)
-+if(DOXYGEN_FOUND)
-+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
-+    add_custom_target(doc
-+        ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
-+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-+        COMMENT "Generating API documentation with Doxygen" VERBATIM)
-+endif()
-diff --git a/contrib/zip/README.md b/contrib/zip/README.md
-index d5fb8cd2..14eb9a34 100644
---- a/contrib/zip/README.md
-+++ b/contrib/zip/README.md
-@@ -71,7 +71,7 @@ int arg = 2;
- zip_extract("foo.zip", "/tmp", on_extract_entry, &arg);
- ```
- 
--*   Extract a zip entry into memory.
-+* Extract a zip entry into memory.
- ```c
- void *buf = NULL;
- size_t bufsize;
-@@ -89,7 +89,7 @@ zip_close(zip);
- free(buf);
- ```
- 
--*   Extract a zip entry into memory (no internal allocation).
-+* Extract a zip entry into memory (no internal allocation).
- ```c
- unsigned char *buf;
- size_t bufsize;
-@@ -110,7 +110,7 @@ zip_close(zip);
- free(buf);
- ```
- 
--*   Extract a zip entry into memory using callback.
-+* Extract a zip entry into memory using callback.
- ```c
- struct buffer_t {
-     char *data;
-@@ -144,7 +144,7 @@ free(buf.data);
- ```
- 
- 
--*   Extract a zip entry into a file.
-+* Extract a zip entry into a file.
- ```c
- struct zip_t *zip = zip_open("foo.zip", 0, 'r');
- {
-@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r');
- zip_close(zip);
- ```
- 
--*   List of all zip entries
-+* List of all zip entries
- ```c
- struct zip_t *zip = zip_open("foo.zip", 0, 'r');
- int i, n = zip_total_entries(zip);
-@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) {
- zip_close(zip);
- ```
- 
--## Bindings
-+# Bindings
- Compile zip library as a dynamic library.
- ```shell
- $ mkdir build
-diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml
-index 0be6373c..ea17f5de 100644
---- a/contrib/zip/appveyor.yml
-+++ b/contrib/zip/appveyor.yml
-@@ -1,4 +1,4 @@
--version: zip-0.1.9.{build}
-+version: zip-0.1.15.{build}
- build_script:
- - cmd: >-
-     cd c:\projects\zip
-diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h
-index 2c27a94d..c4fcfb83 100644
---- a/contrib/zip/src/miniz.h
-+++ b/contrib/zip/src/miniz.h
-@@ -221,6 +221,7 @@
- #ifndef MINIZ_HEADER_INCLUDED
- #define MINIZ_HEADER_INCLUDED
- 
-+#include <stdint.h>
- #include <stdlib.h>
- 
- // Defines to completely disable specific portions of miniz.c:
-@@ -284,7 +285,8 @@
- /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */
- #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES)
- #if MINIZ_X86_OR_X64_CPU
--/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */
-+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient
-+ * integer loads and stores from unaligned addresses. */
- #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
- #define MINIZ_UNALIGNED_USE_MEMCPY
- #else
-@@ -354,6 +356,44 @@ enum {
-   MZ_FIXED = 4
- };
- 
-+/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or
-+ * modify this enum. */
-+typedef enum {
-+  MZ_ZIP_NO_ERROR = 0,
-+  MZ_ZIP_UNDEFINED_ERROR,
-+  MZ_ZIP_TOO_MANY_FILES,
-+  MZ_ZIP_FILE_TOO_LARGE,
-+  MZ_ZIP_UNSUPPORTED_METHOD,
-+  MZ_ZIP_UNSUPPORTED_ENCRYPTION,
-+  MZ_ZIP_UNSUPPORTED_FEATURE,
-+  MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
-+  MZ_ZIP_NOT_AN_ARCHIVE,
-+  MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
-+  MZ_ZIP_UNSUPPORTED_MULTIDISK,
-+  MZ_ZIP_DECOMPRESSION_FAILED,
-+  MZ_ZIP_COMPRESSION_FAILED,
-+  MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
-+  MZ_ZIP_CRC_CHECK_FAILED,
-+  MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
-+  MZ_ZIP_ALLOC_FAILED,
-+  MZ_ZIP_FILE_OPEN_FAILED,
-+  MZ_ZIP_FILE_CREATE_FAILED,
-+  MZ_ZIP_FILE_WRITE_FAILED,
-+  MZ_ZIP_FILE_READ_FAILED,
-+  MZ_ZIP_FILE_CLOSE_FAILED,
-+  MZ_ZIP_FILE_SEEK_FAILED,
-+  MZ_ZIP_FILE_STAT_FAILED,
-+  MZ_ZIP_INVALID_PARAMETER,
-+  MZ_ZIP_INVALID_FILENAME,
-+  MZ_ZIP_BUF_TOO_SMALL,
-+  MZ_ZIP_INTERNAL_ERROR,
-+  MZ_ZIP_FILE_NOT_FOUND,
-+  MZ_ZIP_ARCHIVE_TOO_LARGE,
-+  MZ_ZIP_VALIDATION_FAILED,
-+  MZ_ZIP_WRITE_CALLBACK_FAILED,
-+  MZ_ZIP_TOTAL_ERRORS
-+} mz_zip_error;
-+
- // Method
- #define MZ_DEFLATED 8
- 
-@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs,
-                                     void *pBuf, size_t n);
- typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs,
-                                      const void *pBuf, size_t n);
-+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque);
- 
- struct mz_zip_internal_state_tag;
- typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
-@@ -707,13 +748,27 @@ typedef enum {
-   MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
- } mz_zip_mode;
- 
--typedef struct mz_zip_archive_tag {
-+typedef enum {
-+  MZ_ZIP_TYPE_INVALID = 0,
-+  MZ_ZIP_TYPE_USER,
-+  MZ_ZIP_TYPE_MEMORY,
-+  MZ_ZIP_TYPE_HEAP,
-+  MZ_ZIP_TYPE_FILE,
-+  MZ_ZIP_TYPE_CFILE,
-+  MZ_ZIP_TOTAL_TYPES
-+} mz_zip_type;
-+
-+typedef struct {
-   mz_uint64 m_archive_size;
-   mz_uint64 m_central_directory_file_ofs;
--  mz_uint m_total_files;
-+
-+  /* We only support up to UINT32_MAX files in zip64 mode. */
-+  mz_uint32 m_total_files;
-   mz_zip_mode m_zip_mode;
-+  mz_zip_type m_zip_type;
-+  mz_zip_error m_last_error;
- 
--  mz_uint m_file_offset_alignment;
-+  mz_uint64 m_file_offset_alignment;
- 
-   mz_alloc_func m_pAlloc;
-   mz_free_func m_pFree;
-@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag {
- 
-   mz_file_read_func m_pRead;
-   mz_file_write_func m_pWrite;
-+  mz_file_needs_keepalive m_pNeeds_keepalive;
-   void *m_pIO_opaque;
- 
-   mz_zip_internal_state *m_pState;
-@@ -1263,6 +1319,9 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
-                                                 int strategy);
- #endif // #ifndef MINIZ_NO_ZLIB_APIS
- 
-+#define MZ_UINT16_MAX (0xFFFFU)
-+#define MZ_UINT32_MAX (0xFFFFFFFFU)
-+
- #ifdef __cplusplus
- }
- #endif
-@@ -1311,6 +1370,11 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
-    ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
- #endif
- 
-+#define MZ_READ_LE64(p)                                                        \
-+  (((mz_uint64)MZ_READ_LE32(p)) |                                              \
-+   (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32)))       \
-+    << 32U))
-+
- #ifdef _MSC_VER
- #define MZ_FORCEINLINE __forceinline
- #elif defined(__GNUC__)
-@@ -4160,6 +4224,17 @@ enum {
-   MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
-   MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
-   MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
-+
-+  /* ZIP64 archive identifier and record sizes */
-+  MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50,
-+  MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50,
-+  MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56,
-+  MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20,
-+  MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001,
-+  MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50,
-+  MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24,
-+  MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16,
-+
-   // Central directory header record offsets
-   MZ_ZIP_CDH_SIG_OFS = 0,
-   MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
-@@ -4199,6 +4274,31 @@ enum {
-   MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
-   MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
-   MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
-+
-+  /* ZIP64 End of central directory locator offsets */
-+  MZ_ZIP64_ECDL_SIG_OFS = 0,                    /* 4 bytes */
-+  MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4,          /* 4 bytes */
-+  MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8,  /* 8 bytes */
-+  MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */
-+
-+  /* ZIP64 End of central directory header offsets */
-+  MZ_ZIP64_ECDH_SIG_OFS = 0,                       /* 4 bytes */
-+  MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4,            /* 8 bytes */
-+  MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12,          /* 2 bytes */
-+  MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14,           /* 2 bytes */
-+  MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16,            /* 4 bytes */
-+  MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20,            /* 4 bytes */
-+  MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */
-+  MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32,       /* 8 bytes */
-+  MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40,                /* 8 bytes */
-+  MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48,                 /* 8 bytes */
-+  MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0,
-+  MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10,
-+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1,
-+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32,
-+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64,
-+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192,
-+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11
- };
- 
- typedef struct {
-@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag {
-   mz_zip_array m_central_dir;
-   mz_zip_array m_central_dir_offsets;
-   mz_zip_array m_sorted_central_dir_offsets;
-+
-+  /* The flags passed in when the archive is initially opened. */
-+  uint32_t m_init_flags;
-+
-+  /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc.
-+   */
-+  mz_bool m_zip64;
-+
-+  /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64
-+   * will also be slammed to true too, even if we didn't find a zip64 end of
-+   * central dir header, etc.) */
-+  mz_bool m_zip64_has_extended_info_fields;
-+
-+  /* These fields are used by the file, FILE, memory, and memory/heap read/write
-+   * helpers. */
-   MZ_FILE *m_pFile;
-+  mz_uint64 m_file_archive_start_ofs;
-+
-   void *m_pMem;
-   size_t m_mem_size;
-   size_t m_mem_capacity;
-@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time,
- #endif /* #ifndef MINIZ_NO_STDIO */
- #endif /* #ifndef MINIZ_NO_TIME */
- 
-+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip,
-+                                               mz_zip_error err_num) {
-+  if (pZip)
-+    pZip->m_last_error = err_num;
-+  return MZ_FALSE;
-+}
-+
- static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
-                                            mz_uint32 flags) {
-   (void)flags;
-@@ -4480,127 +4604,346 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) {
-   }
- }
- 
--static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
--                                              mz_uint32 flags) {
--  mz_uint cdir_size, num_this_disk, cdir_disk_index;
--  mz_uint64 cdir_ofs;
-+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip,
-+                                               mz_uint32 record_sig,
-+                                               mz_uint32 record_size,
-+                                               mz_int64 *pOfs) {
-   mz_int64 cur_file_ofs;
--  const mz_uint8 *p;
-   mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
-   mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
--  mz_bool sort_central_dir =
--      ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
--  // Basic sanity checks - reject files which are too small, and check the first
--  // 4 bytes of the file to make sure a local header is there.
--  if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
-+
-+  /* Basic sanity checks - reject files which are too small */
-+  if (pZip->m_archive_size < record_size)
-     return MZ_FALSE;
--  // Find the end of central directory record by scanning the file from the end
--  // towards the beginning.
-+
-+  /* Find the record by scanning the file from the end towards the beginning. */
-   cur_file_ofs =
-       MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0);
-   for (;;) {
-     int i,
-         n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs);
-+
-     if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n)
-       return MZ_FALSE;
--    for (i = n - 4; i >= 0; --i)
--      if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
--        break;
-+
-+    for (i = n - 4; i >= 0; --i) {
-+      mz_uint s = MZ_READ_LE32(pBuf + i);
-+      if (s == record_sig) {
-+        if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size)
-+          break;
-+      }
-+    }
-+
-     if (i >= 0) {
-       cur_file_ofs += i;
-       break;
-     }
-+
-+    /* Give up if we've searched the entire file, or we've gone back "too far"
-+     * (~64kb) */
-     if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >=
--                            (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
-+                            (MZ_UINT16_MAX + record_size)))
-       return MZ_FALSE;
-+
-     cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
-   }
--  // Read and verify the end of central directory record.
-+
-+  *pOfs = cur_file_ofs;
-+  return MZ_TRUE;
-+}
-+
-+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
-+                                              mz_uint flags) {
-+  mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0,
-+          cdir_disk_index = 0;
-+  mz_uint64 cdir_ofs = 0;
-+  mz_int64 cur_file_ofs = 0;
-+  const mz_uint8 *p;
-+
-+  mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
-+  mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
-+  mz_bool sort_central_dir =
-+      ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
-+  mz_uint32 zip64_end_of_central_dir_locator_u32
-+      [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) /
-+       sizeof(mz_uint32)];
-+  mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32;
-+
-+  mz_uint32 zip64_end_of_central_dir_header_u32
-+      [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
-+       sizeof(mz_uint32)];
-+  mz_uint8 *pZip64_end_of_central_dir =
-+      (mz_uint8 *)zip64_end_of_central_dir_header_u32;
-+
-+  mz_uint64 zip64_end_of_central_dir_ofs = 0;
-+
-+  /* Basic sanity checks - reject files which are too small, and check the first
-+   * 4 bytes of the file to make sure a local header is there. */
-+  if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
-+    return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-+
-+  if (!mz_zip_reader_locate_header_sig(
-+          pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG,
-+          MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs))
-+    return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR);
-+
-+  /* Read and verify the end of central directory record. */
-   if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
-                     MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
-       MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
--    return MZ_FALSE;
--  if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
--       MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ||
--      ((pZip->m_total_files =
--            MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) !=
--       MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS)))
--    return MZ_FALSE;
-+    return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-+
-+  if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
-+      MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
-+    return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-+
-+  if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE +
-+                       MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) {
-+    if (pZip->m_pRead(pZip->m_pIO_opaque,
-+                      cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE,
-+                      pZip64_locator,
-+                      MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) ==
-+        MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) {
-+      if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) ==
-+          MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) {
-+        zip64_end_of_central_dir_ofs = MZ_READ_LE64(
-+            pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS);
-+        if (zip64_end_of_central_dir_ofs >
-+            (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE))
-+          return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-+
-+        if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs,
-+                          pZip64_end_of_central_dir,
-+                          MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) ==
-+            MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) {
-+          if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) ==
-+              MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) {
-+            pZip->m_pState->m_zip64 = MZ_TRUE;
-+          }
-+        }
-+      }
-+    }
-+  }
- 
-+  pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS);
-+  cdir_entries_on_this_disk =
-+      MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
-   num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
-   cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
-+  cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS);
-+  cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
-+
-+  if (pZip->m_pState->m_zip64) {
-+    mz_uint32 zip64_total_num_of_disks =
-+        MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS);
-+    mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(
-+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS);
-+    mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(
-+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
-+    mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(
-+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS);
-+    mz_uint64 zip64_size_of_central_directory =
-+        MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS);
-+
-+    if (zip64_size_of_end_of_central_dir_record <
-+        (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12))
-+      return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+
-+    if (zip64_total_num_of_disks != 1U)
-+      return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-+
-+    /* Check for miniz's practical limits */
-+    if (zip64_cdir_total_entries > MZ_UINT32_MAX)
-+      return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-+
-+    pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries;
-+
-+    if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX)
-+      return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-+
-+    cdir_entries_on_this_disk =
-+        (mz_uint32)zip64_cdir_total_entries_on_this_disk;
-+
-+    /* Check for miniz's current practical limits (sorry, this should be enough
-+     * for millions of files) */
-+    if (zip64_size_of_central_directory > MZ_UINT32_MAX)
-+      return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-+
-+    cdir_size = (mz_uint32)zip64_size_of_central_directory;
-+
-+    num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir +
-+                                 MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS);
-+
-+    cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir +
-+                                   MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS);
-+
-+    cdir_ofs =
-+        MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS);
-+  }
-+
-+  if (pZip->m_total_files != cdir_entries_on_this_disk)
-+    return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-+
-   if (((num_this_disk | cdir_disk_index) != 0) &&
-       ((num_this_disk != 1) || (cdir_disk_index != 1)))
--    return MZ_FALSE;
-+    return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
- 
--  if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) <
--      pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
--    return MZ_FALSE;
-+  if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
-+    return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- 
--  cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
-   if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size)
--    return MZ_FALSE;
-+    return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- 
-   pZip->m_central_directory_file_ofs = cdir_ofs;
- 
-   if (pZip->m_total_files) {
-     mz_uint i, n;
--
--    // Read the entire central directory into a heap block, and allocate another
--    // heap block to hold the unsorted central dir file record offsets, and
--    // another to hold the sorted indices.
-+    /* Read the entire central directory into a heap block, and allocate another
-+     * heap block to hold the unsorted central dir file record offsets, and
-+     * possibly another to hold the sorted indices. */
-     if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size,
-                               MZ_FALSE)) ||
-         (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets,
-                               pZip->m_total_files, MZ_FALSE)))
--      return MZ_FALSE;
-+      return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- 
-     if (sort_central_dir) {
-       if (!mz_zip_array_resize(pZip,
-                                &pZip->m_pState->m_sorted_central_dir_offsets,
-                                pZip->m_total_files, MZ_FALSE))
--        return MZ_FALSE;
-+        return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-     }
- 
-     if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
-                       pZip->m_pState->m_central_dir.m_p,
-                       cdir_size) != cdir_size)
--      return MZ_FALSE;
-+      return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- 
--    // Now create an index into the central directory file records, do some
--    // basic sanity checking on each record, and check for zip64 entries (which
--    // are not yet supported).
-+    /* Now create an index into the central directory file records, do some
-+     * basic sanity checking on each record */
-     p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p;
-     for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
--      mz_uint total_header_size, comp_size, decomp_size, disk_index;
-+      mz_uint total_header_size, disk_index, bit_flags, filename_size,
-+          ext_data_size;
-+      mz_uint64 comp_size, decomp_size, local_header_ofs;
-+
-       if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
-           (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
--        return MZ_FALSE;
-+        return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+
-       MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
-                            i) =
-           (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p);
-+
-       if (sort_central_dir)
-         MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets,
-                              mz_uint32, i) = i;
-+
-       comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
-       decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
--      if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
--           (decomp_size != comp_size)) ||
--          (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) ||
--          (comp_size == 0xFFFFFFFF))
--        return MZ_FALSE;
-+      local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
-+      filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
-+      ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS);
-+
-+      if ((!pZip->m_pState->m_zip64_has_extended_info_fields) &&
-+          (ext_data_size) &&
-+          (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) ==
-+           MZ_UINT32_MAX)) {
-+        /* Attempt to find zip64 extended information field in the entry's extra
-+         * data */
-+        mz_uint32 extra_size_remaining = ext_data_size;
-+
-+        if (extra_size_remaining) {
-+          const mz_uint8 *pExtra_data;
-+          void *buf = NULL;
-+
-+          if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size >
-+              n) {
-+            buf = MZ_MALLOC(ext_data_size);
-+            if (buf == NULL)
-+              return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-+
-+            if (pZip->m_pRead(pZip->m_pIO_opaque,
-+                              cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
-+                                  filename_size,
-+                              buf, ext_data_size) != ext_data_size) {
-+              MZ_FREE(buf);
-+              return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-+            }
-+
-+            pExtra_data = (mz_uint8 *)buf;
-+          } else {
-+            pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size;
-+          }
-+
-+          do {
-+            mz_uint32 field_id;
-+            mz_uint32 field_data_size;
-+
-+            if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
-+              MZ_FREE(buf);
-+              return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+            }
-+
-+            field_id = MZ_READ_LE16(pExtra_data);
-+            field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16));
-+
-+            if ((field_data_size + sizeof(mz_uint16) * 2) >
-+                extra_size_remaining) {
-+              MZ_FREE(buf);
-+              return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+            }
-+
-+            if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
-+              /* Ok, the archive didn't have any zip64 headers but it uses a
-+               * zip64 extended information field so mark it as zip64 anyway
-+               * (this can occur with infozip's zip util when it reads
-+               * compresses files from stdin). */
-+              pZip->m_pState->m_zip64 = MZ_TRUE;
-+              pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE;
-+              break;
-+            }
-+
-+            pExtra_data += sizeof(mz_uint16) * 2 + field_data_size;
-+            extra_size_remaining =
-+                extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size;
-+          } while (extra_size_remaining);
-+
-+          MZ_FREE(buf);
-+        }
-+      }
-+
-+      /* I've seen archives that aren't marked as zip64 that uses zip64 ext
-+       * data, argh */
-+      if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) {
-+        if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
-+             (decomp_size != comp_size)) ||
-+            (decomp_size && !comp_size))
-+          return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+      }
-+
-       disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
--      if ((disk_index != num_this_disk) && (disk_index != 1))
--        return MZ_FALSE;
--      if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
--           MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
--        return MZ_FALSE;
-+      if ((disk_index == MZ_UINT16_MAX) ||
-+          ((disk_index != num_this_disk) && (disk_index != 1)))
-+        return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-+
-+      if (comp_size != MZ_UINT32_MAX) {
-+        if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
-+             MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
-+          return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+      }
-+
-+      bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
-+      if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED)
-+        return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
-+
-       if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
-                                MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
-                                MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
-                                MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) >
-           n)
--        return MZ_FALSE;
-+        return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-+
-       n -= total_header_size;
-       p += total_header_size;
-     }
-diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c
-index ff3a8fe1..1abcfd8f 100644
---- a/contrib/zip/src/zip.c
-+++ b/contrib/zip/src/zip.c
-@@ -24,7 +24,6 @@
-   ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) &&   \
-    (P)[1] == ':')
- #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0)
--#define ISSLASH(C) ((C) == '/' || (C) == '\\')
- 
- #else
- 
-@@ -48,7 +47,7 @@ int symlink(const char *target, const char *linkpath); // needed on Linux
- #endif
- 
- #ifndef ISSLASH
--#define ISSLASH(C) ((C) == '/')
-+#define ISSLASH(C) ((C) == '/' || (C) == '\\')
- #endif
- 
- #define CLEANUP(ptr)                                                           \
-@@ -78,26 +77,34 @@ static const char *base_name(const char *name) {
-   return base;
- }
- 
--static int mkpath(const char *path) {
--  char const *p;
-+static int mkpath(char *path) {
-+  char *p;
-   char npath[MAX_PATH + 1];
-   int len = 0;
-   int has_device = HAS_DEVICE(path);
- 
-   memset(npath, 0, MAX_PATH + 1);
--
--#ifdef _WIN32
--  // only on windows fix the path
--  npath[0] = path[0];
--  npath[1] = path[1];
--  len = 2;
--#endif // _WIN32
--    
-+  if (has_device) {
-+    // only on windows
-+    npath[0] = path[0];
-+    npath[1] = path[1];
-+    len = 2;
-+  }
-   for (p = path + len; *p && len < MAX_PATH; p++) {
-     if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > 2))) {
--      if (MKDIR(npath) == -1)
--        if (errno != EEXIST)
-+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) ||              \
-+    defined(__MINGW32__)
-+#else
-+      if ('\\' == *p) {
-+        *p = '/';
-+      }
-+#endif
-+
-+      if (MKDIR(npath) == -1) {
-+        if (errno != EEXIST) {
-           return -1;
-+        }
-+      }
-     }
-     npath[len++] = *p;
-   }
-@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char *entryname) {
-   zip->entry.header_offset = zip->archive.m_archive_size;
-   memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * sizeof(mz_uint8));
-   zip->entry.method = 0;
-+
-+  // UNIX or APPLE
-+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19
-+  // regular file with rw-r--r-- persmissions
-+  zip->entry.external_attr = (mz_uint32)(0100644) << 16;
-+#else
-   zip->entry.external_attr = 0;
-+#endif
- 
-   num_alignment_padding_bytes =
-       mz_zip_writer_compute_padding_needed_for_file_alignment(pzip);
-@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) {
-   }
- 
-   if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, (mz_uint)zip->entry.index,
--  buf, bufsize, 0, NULL,  0)) {
-+                                             buf, bufsize, 0, NULL, 0)) {
-     return -1;
-   }
- 
-@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) {
- int zip_entry_fread(struct zip_t *zip, const char *filename) {
-   mz_zip_archive *pzip = NULL;
-   mz_uint idx;
--#if defined(_MSC_VER)
--#else
-   mz_uint32 xattr = 0;
--#endif
-   mz_zip_archive_file_stat info;
- 
-   if (!zip) {
-@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char *dir,
-       goto out;
-     }
- 
--    if ((((info.m_version_made_by >> 8) == 3) || ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or macOS (3 and 19 from section 4.4.2.2 of zip standard)
--        && info.m_external_attr & (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 is directory)
-+    if ((((info.m_version_made_by >> 8) == 3) ||
-+         ((info.m_version_made_by >> 8) ==
-+          19)) // if zip is produced on Unix or macOS (3 and 19 from
-+               // section 4.4.2.2 of zip standard)
-+        && info.m_external_attr &
-+               (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40
-+                               // is directory)
- #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) ||              \
-     defined(__MINGW32__)
--#else      
--      if (info.m_uncomp_size > MAX_PATH || !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, MAX_PATH, 0, NULL, 0)) {
-+#else
-+      if (info.m_uncomp_size > MAX_PATH ||
-+          !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to,
-+                                                 MAX_PATH, 0, NULL, 0)) {
-         goto out;
-       }
-       symlink_to[info.m_uncomp_size] = '\0';
-diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h
-index 5f39df50..a48d64d6 100644
---- a/contrib/zip/src/zip.h
-+++ b/contrib/zip/src/zip.h
-@@ -20,241 +20,240 @@ extern "C" {
- #endif
- 
- #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) &&               \
--    !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(__ssize_t_defined)
--#define _SSIZE_T
-+    !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) &&              \
-+    !defined(_SSIZE_T) && !defined(_SSIZE_T_)
-+
- // 64-bit Windows is the only mainstream platform
- // where sizeof(long) != sizeof(void*)
- #ifdef _WIN64
--typedef long long  ssize_t;  /* byte count or error */
-+typedef long long ssize_t; /* byte count or error */
- #else
--typedef long  ssize_t;  /* byte count or error */
-+typedef long ssize_t; /* byte count or error */
- #endif
-+
-+#define _SSIZE_T_DEFINED
-+#define _SSIZE_T_DEFINED_
-+#define __DEFINED_ssize_t
-+#define __ssize_t_defined
-+#define _SSIZE_T
-+#define _SSIZE_T_
-+
- #endif
- 
- #ifndef MAX_PATH
- #define MAX_PATH 32767 /* # chars in a path name including NULL */
- #endif
- 
-+/**
-+ * @mainpage
-+ *
-+ * Documenation for @ref zip.
-+ */
-+
-+/**
-+ * @addtogroup zip
-+ * @{
-+ */
-+
-+/**
-+ * Default zip compression level.
-+ */
-+
- #define ZIP_DEFAULT_COMPRESSION_LEVEL 6
- 
--/*
--  This data structure is used throughout the library to represent zip archive
--  - forward declaration.
--*/
-+/**
-+ * @struct zip_t
-+ *
-+ * This data structure is used throughout the library to represent zip archive -
-+ * forward declaration.
-+ */
- struct zip_t;
- 
--/*
--  Opens zip archive with compression level using the given mode.
--
--  Args:
--    zipname: zip archive file name.
--    level: compression level (0-9 are the standard zlib-style levels).
--    mode: file access mode.
--        'r': opens a file for reading/extracting (the file must exists).
--        'w': creates an empty file for writing.
--        'a': appends to an existing archive.
--
--  Returns:
--    The zip archive handler or NULL on error
--*/
-+/**
-+ * Opens zip archive with compression level using the given mode.
-+ *
-+ * @param zipname zip archive file name.
-+ * @param level compression level (0-9 are the standard zlib-style levels).
-+ * @param mode file access mode.
-+ *        - 'r': opens a file for reading/extracting (the file must exists).
-+ *        - 'w': creates an empty file for writing.
-+ *        - 'a': appends to an existing archive.
-+ *
-+ * @return the zip archive handler or NULL on error
-+ */
- extern struct zip_t *zip_open(const char *zipname, int level, char mode);
- 
--/*
--  Closes the zip archive, releases resources - always finalize.
--
--  Args:
--    zip: zip archive handler.
--*/
-+/**
-+ * Closes the zip archive, releases resources - always finalize.
-+ *
-+ * @param zip zip archive handler.
-+ */
- extern void zip_close(struct zip_t *zip);
- 
--/*
--  Opens an entry by name in the zip archive.
--  For zip archive opened in 'w' or 'a' mode the function will append
--  a new entry. In readonly mode the function tries to locate the entry
--  in global dictionary.
--
--  Args:
--    zip: zip archive handler.
--    entryname: an entry name in local dictionary.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Opens an entry by name in the zip archive.
-+ *
-+ * For zip archive opened in 'w' or 'a' mode the function will append
-+ * a new entry. In readonly mode the function tries to locate the entry
-+ * in global dictionary.
-+ *
-+ * @param zip zip archive handler.
-+ * @param entryname an entry name in local dictionary.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_open(struct zip_t *zip, const char *entryname);
- 
--/*
--  Opens a new entry by index in the zip archive.
--  This function is only valid if zip archive was opened in 'r' (readonly) mode.
--
--  Args:
--    zip: zip archive handler.
--    index: index in local dictionary.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Opens a new entry by index in the zip archive.
-+ *
-+ * This function is only valid if zip archive was opened in 'r' (readonly) mode.
-+ *
-+ * @param zip zip archive handler.
-+ * @param index index in local dictionary.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_openbyindex(struct zip_t *zip, int index);
- 
--/*
--  Closes a zip entry, flushes buffer and releases resources.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Closes a zip entry, flushes buffer and releases resources.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_close(struct zip_t *zip);
- 
--/*
--  Returns a local name of the current zip entry.
--  The main difference between user's entry name and local entry name
--  is optional relative path.
--  Following .ZIP File Format Specification - the path stored MUST not contain
--  a drive or device letter, or a leading slash.
--  All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
--  for compatibility with Amiga and UNIX file systems etc.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The pointer to the current zip entry name, or NULL on error.
--*/
-+/**
-+ * Returns a local name of the current zip entry.
-+ *
-+ * The main difference between user's entry name and local entry name
-+ * is optional relative path.
-+ * Following .ZIP File Format Specification - the path stored MUST not contain
-+ * a drive or device letter, or a leading slash.
-+ * All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
-+ * for compatibility with Amiga and UNIX file systems etc.
-+ *
-+ * @param zip: zip archive handler.
-+ *
-+ * @return the pointer to the current zip entry name, or NULL on error.
-+ */
- extern const char *zip_entry_name(struct zip_t *zip);
- 
--/*
--  Returns an index of the current zip entry.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The index on success, negative number (< 0) on error.
--*/
-+/**
-+ * Returns an index of the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the index on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_index(struct zip_t *zip);
- 
--/*
--  Determines if the current zip entry is a directory entry.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The return code - 1 (true), 0 (false), negative number (< 0) on error.
--*/
-+/**
-+ * Determines if the current zip entry is a directory entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the return code - 1 (true), 0 (false), negative number (< 0) on
-+ *         error.
-+ */
- extern int zip_entry_isdir(struct zip_t *zip);
- 
--/*
--  Returns an uncompressed size of the current zip entry.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The uncompressed size in bytes.
--*/
-+/**
-+ * Returns an uncompressed size of the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the uncompressed size in bytes.
-+ */
- extern unsigned long long zip_entry_size(struct zip_t *zip);
- 
--/*
--  Returns CRC-32 checksum of the current zip entry.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The CRC-32 checksum.
--*/
-+/**
-+ * Returns CRC-32 checksum of the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the CRC-32 checksum.
-+ */
- extern unsigned int zip_entry_crc32(struct zip_t *zip);
- 
--/*
--  Compresses an input buffer for the current zip entry.
--
--  Args:
--    zip: zip archive handler.
--    buf: input buffer.
--    bufsize: input buffer size (in bytes).
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Compresses an input buffer for the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ * @param buf input buffer.
-+ * @param bufsize input buffer size (in bytes).
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize);
- 
--/*
--  Compresses a file for the current zip entry.
--
--  Args:
--    zip: zip archive handler.
--    filename: input file.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Compresses a file for the current zip entry.
-+ *
-+ * @param zip zip archive handler.
-+ * @param filename input file.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_fwrite(struct zip_t *zip, const char *filename);
- 
--/*
--  Extracts the current zip entry into output buffer.
--  The function allocates sufficient memory for a output buffer.
--
--  Args:
--    zip: zip archive handler.
--    buf: output buffer.
--    bufsize: output buffer size (in bytes).
--
--  Note:
--    - remember to release memory allocated for a output buffer.
--    - for large entries, please take a look at zip_entry_extract function.
--
--  Returns:
--    The return code - the number of bytes actually read on success.
--    Otherwise a -1 on error.
--*/
-+/**
-+ * Extracts the current zip entry into output buffer.
-+ *
-+ * The function allocates sufficient memory for a output buffer.
-+ *
-+ * @param zip zip archive handler.
-+ * @param buf output buffer.
-+ * @param bufsize output buffer size (in bytes).
-+ *
-+ * @note remember to release memory allocated for a output buffer.
-+ *       for large entries, please take a look at zip_entry_extract function.
-+ *
-+ * @return the return code - the number of bytes actually read on success.
-+ *         Otherwise a -1 on error.
-+ */
- extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize);
- 
--/*
--  Extracts the current zip entry into a memory buffer using no memory
--  allocation.
--
--  Args:
--    zip: zip archive handler.
--    buf: preallocated output buffer.
--    bufsize: output buffer size (in bytes).
--
--  Note:
--    - ensure supplied output buffer is large enough.
--    - zip_entry_size function (returns uncompressed size for the current entry)
--      can be handy to estimate how big buffer is needed.
--    - for large entries, please take a look at zip_entry_extract function.
--
--  Returns:
--    The return code - the number of bytes actually read on success.
--    Otherwise a -1 on error (e.g. bufsize is not large enough).
--*/
--extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize);
--
--/*
--  Extracts the current zip entry into output file.
--
--  Args:
--    zip: zip archive handler.
--    filename: output file.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Extracts the current zip entry into a memory buffer using no memory
-+ * allocation.
-+ *
-+ * @param zip zip archive handler.
-+ * @param buf preallocated output buffer.
-+ * @param bufsize output buffer size (in bytes).
-+ *
-+ * @note ensure supplied output buffer is large enough.
-+ *       zip_entry_size function (returns uncompressed size for the current
-+ *       entry) can be handy to estimate how big buffer is needed. for large
-+ * entries, please take a look at zip_entry_extract function.
-+ *
-+ * @return the return code - the number of bytes actually read on success.
-+ *         Otherwise a -1 on error (e.g. bufsize is not large enough).
-+ */
-+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf,
-+                                     size_t bufsize);
-+
-+/**
-+ * Extracts the current zip entry into output file.
-+ *
-+ * @param zip zip archive handler.
-+ * @param filename output file.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_entry_fread(struct zip_t *zip, const char *filename);
- 
--/*
--  Extracts the current zip entry using a callback function (on_extract).
--
--  Args:
--    zip: zip archive handler.
--    on_extract: callback function.
--    arg: opaque pointer (optional argument,
--                         which you can pass to the on_extract callback)
--
--   Returns:
--    The return code - 0 on success, negative number (< 0) on error.
-+/**
-+ * Extracts the current zip entry using a callback function (on_extract).
-+ *
-+ * @param zip zip archive handler.
-+ * @param on_extract callback function.
-+ * @param arg opaque pointer (optional argument, which you can pass to the
-+ *        on_extract callback)
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-  */
- extern int
- zip_entry_extract(struct zip_t *zip,
-@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip,
-                                        const void *data, size_t size),
-                   void *arg);
- 
--/*
--  Returns the number of all entries (files and directories) in the zip archive.
--
--  Args:
--    zip: zip archive handler.
--
--  Returns:
--    The return code - the number of entries on success,
--    negative number (< 0) on error.
--*/
-+/**
-+ * Returns the number of all entries (files and directories) in the zip archive.
-+ *
-+ * @param zip zip archive handler.
-+ *
-+ * @return the return code - the number of entries on success, negative number
-+ *         (< 0) on error.
-+ */
- extern int zip_total_entries(struct zip_t *zip);
- 
--/*
--  Creates a new archive and puts files into a single zip archive.
--
--  Args:
--    zipname: zip archive file.
--    filenames: input files.
--    len: number of input files.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Creates a new archive and puts files into a single zip archive.
-+ *
-+ * @param zipname zip archive file.
-+ * @param filenames input files.
-+ * @param len: number of input files.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_create(const char *zipname, const char *filenames[], size_t len);
- 
--/*
--  Extracts a zip archive file into directory.
--
--  If on_extract_entry is not NULL, the callback will be called after
--  successfully extracted each zip entry.
--  Returning a negative value from the callback will cause abort and return an
--  error. The last argument (void *arg) is optional, which you can use to pass
--  data to the on_extract_entry callback.
--
--  Args:
--    zipname: zip archive file.
--    dir: output directory.
--    on_extract_entry: on extract callback.
--    arg: opaque pointer.
--
--  Returns:
--    The return code - 0 on success, negative number (< 0) on error.
--*/
-+/**
-+ * Extracts a zip archive file into directory.
-+ *
-+ * If on_extract_entry is not NULL, the callback will be called after
-+ * successfully extracted each zip entry.
-+ * Returning a negative value from the callback will cause abort and return an
-+ * error. The last argument (void *arg) is optional, which you can use to pass
-+ * data to the on_extract_entry callback.
-+ *
-+ * @param zipname zip archive file.
-+ * @param dir output directory.
-+ * @param on_extract_entry on extract callback.
-+ * @param arg opaque pointer.
-+ *
-+ * @return the return code - 0 on success, negative number (< 0) on error.
-+ */
- extern int zip_extract(const char *zipname, const char *dir,
-                        int (*on_extract_entry)(const char *filename, void *arg),
-                        void *arg);
- 
-+/** @} */
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt
-index 9b2a8db1..cc060b00 100644
---- a/contrib/zip/test/CMakeLists.txt
-+++ b/contrib/zip/test/CMakeLists.txt
-@@ -1,19 +1,16 @@
- cmake_minimum_required(VERSION 2.8)
- 
--if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
--  if(ENABLE_COVERAGE)
--    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ")
--    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
--    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs")
--    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage")
--    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
--  endif()
--endif ()
--
- # test
--include_directories(../src)
--add_executable(test.exe test.c ../src/zip.c)
--add_executable(test_miniz.exe test_miniz.c)
-+set(test_out test.out)
-+set(test_miniz_out test_miniz.out)
-+
-+add_executable(${test_out} test.c)
-+target_link_libraries(${test_out} zip)
-+add_executable(${test_miniz_out} test_miniz.c)
-+target_link_libraries(${test_miniz_out} zip)
-+
-+add_test(NAME ${test_out} COMMAND ${test_out})
-+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out})
- 
--add_test(NAME test COMMAND test.exe)
--add_test(NAME test_miniz COMMAND test_miniz.exe)
-+set(test_out ${test_out} PARENT_SCOPE)
-+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE)
-diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c
-index 45443053..a9b2ddab 100644
---- a/contrib/zip/test/test.c
-+++ b/contrib/zip/test/test.c
-@@ -29,6 +29,8 @@
- #define XFILE "7.txt\0"
- #define XMODE 0100777
- 
-+#define UNIXMODE 0100644
-+
- #define UNUSED(x) (void)x
- 
- static int total_entries = 0;
-@@ -102,7 +104,8 @@ static void test_read(void) {
-   assert(0 == zip_entry_close(zip));
-   free(buf);
-   buf = NULL;
--  
-+  bufsize = 0;
-+
-   assert(0 == zip_entry_open(zip, "test/test-2.txt"));
-   assert(strlen(TESTDATA2) == zip_entry_size(zip));
-   assert(CRC32DATA2 == zip_entry_crc32(zip));
-@@ -131,7 +134,8 @@ static void test_read(void) {
-   assert(0 == zip_entry_close(zip));
-   free(buf);
-   buf = NULL;
--  
-+  bufsize = 0;
-+
-   buftmp = strlen(TESTDATA1);
-   buf = calloc(buftmp, sizeof(char));
-   assert(0 == zip_entry_open(zip, "test/test-1.txt"));
-@@ -433,6 +437,35 @@ static void test_mtime(void) {
-   remove(ZIPNAME);
- }
- 
-+static void test_unix_permissions(void) {
-+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__)
-+#else
-+  // UNIX or APPLE
-+  struct MZ_FILE_STAT_STRUCT file_stats;
-+
-+  remove(ZIPNAME);
-+
-+  struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
-+  assert(zip != NULL);
-+
-+  assert(0 == zip_entry_open(zip, RFILE));
-+  assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1)));
-+  assert(0 == zip_entry_close(zip));
-+
-+  zip_close(zip);
-+
-+  remove(RFILE);
-+
-+  assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL));
-+
-+  assert(0 == MZ_FILE_STAT(RFILE, &file_stats));
-+  assert(UNIXMODE == file_stats.st_mode);
-+
-+  remove(RFILE);
-+  remove(ZIPNAME);
-+#endif
-+}
-+
- int main(int argc, char *argv[]) {
-   UNUSED(argc);
-   UNUSED(argv);
-@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) {
-   test_write_permissions();
-   test_exe_permissions();
-   test_mtime();
-+  test_unix_permissions();
- 
-   remove(ZIPNAME);
-   return 0;
-diff --git a/contrib/zip/test/test_miniz.c b/contrib/zip/test/test_miniz.c
-index ebc0564d..babcaecd 100644
---- a/contrib/zip/test/test_miniz.c
-+++ b/contrib/zip/test/test_miniz.c
-@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) {
-   uint step = 0;
-   int cmp_status;
-   uLong src_len = (uLong)strlen(s_pStr);
--  uLong cmp_len = compressBound(src_len);
-   uLong uncomp_len = src_len;
-+  uLong cmp_len;
-   uint8 *pCmp, *pUncomp;
-+  size_t sz;
-   uint total_succeeded = 0;
-   (void)argc, (void)argv;
- 
-   printf("miniz.c version: %s\n", MZ_VERSION);
- 
-   do {
-+    pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, &cmp_len, 0);
-+    if (!pCmp) {
-+      printf("tdefl_compress_mem_to_heap failed\n");
-+      return EXIT_FAILURE;
-+    }
-+    if (src_len <= cmp_len) {
-+      printf("tdefl_compress_mem_to_heap failed: from %u to %u bytes\n",
-+             (mz_uint32)uncomp_len, (mz_uint32)cmp_len);
-+      free(pCmp);
-+      return EXIT_FAILURE;
-+    }
-+
-+    sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0);
-+    if (sz != cmp_len) {
-+      printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n",
-+             (mz_uint32)cmp_len, (mz_uint32)sz);
-+      free(pCmp);
-+      return EXIT_FAILURE;
-+    }
-+
-     // Allocate buffers to hold compressed and uncompressed data.
-+    free(pCmp);
-+    cmp_len = compressBound(src_len);
-     pCmp = (mz_uint8 *)malloc((size_t)cmp_len);
-     pUncomp = (mz_uint8 *)malloc((size_t)src_len);
-     if ((!pCmp) || (!pUncomp)) {
diff --git a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch b/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
deleted file mode 100644
index e4f5b9ccbd..0000000000
--- a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From cbf94fd62ff831879d10f99aa7766d391ae8a9b7 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Victor=20Matar=C3=A9?= <matare@fh-aachen.de>
-Date: Tue, 31 Mar 2020 21:30:07 +0200
-Subject: [PATCH] use GNUInstallDirs where possible
-
-Emulate the CMAKE_INSTALL_FULL_* variables on non-Unix systems and
-disable redefining FHS-mandated install locations via user-editable
-ASSIMP_*_INSTALL_DIR variables. Instead, if it REALLY proves necessary,
-Unix users can edit the advanced, canonical CMAKE_INSTALL_* variables.
----
- CMakeLists.txt                 | 36 ++++++++++++++++++++++------------
- assimp.pc.in                   |  6 ++----
- assimpTargets-debug.cmake.in   | 20 +++++++++----------
- assimpTargets-release.cmake.in | 18 ++++++++---------
- assimpTargets.cmake.in         | 15 +-------------
- 5 files changed, 45 insertions(+), 50 deletions(-)
-
-Upstream-Status: Backport
-Comment: Additionally remove setting of ASSIMP_LIBRARY_DIRS, ASSIMP_INCLUDE_DIRS
-         and INTERFACE_INCLUDE_DIRECTORIES as default cross compile paths are enough
-         and setting them manually adds non-existing paths to CMake modules
-
-Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index dcafb649f5..c23c0df33e 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -230,11 +230,6 @@ SET(LIBASSIMP-DEV_COMPONENT "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_M
- SET(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev)
- SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names")
- 
--IF( UNIX )
--  # Use GNUInstallDirs for Unix predefined directories
--  INCLUDE(GNUInstallDirs)
--ENDIF( UNIX )
--
- # Grouped compiler settings
- IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW)
-   IF(NOT HUNTER_ENABLED)
-@@ -329,14 +324,6 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
-   SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" )
- ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
- 
--# Cache these to allow the user to override them manually.
--SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
--  "Path the built library files are installed to." )
--SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
--  "Path the header files are installed to." )
--SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
--  "Path the tool executables are installed to." )
--
- get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
- 
- IF (INJECT_DEBUG_POSTFIX AND (is_multi_config OR CMAKE_BUILD_TYPE STREQUAL "Debug"))
-@@ -391,6 +378,29 @@ IF(HUNTER_ENABLED)
-   )
- ELSE(HUNTER_ENABLED)
-   # cmake configuration files
-+
-+  IF( UNIX )
-+    # Use GNUInstallDirs for Unix predefined directories
-+    INCLUDE(GNUInstallDirs)
-+
-+    SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
-+    SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
-+    SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
-+  ELSE( UNIX )
-+    # Cache these to allow the user to override them on non-Unix platforms
-+    SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
-+      "Path the built library files are installed to." )
-+    SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
-+      "Path the header files are installed to." )
-+    SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
-+      "Path the tool executables are installed to." )
-+
-+    SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR})
-+    SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR})
-+    SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR})
-+  ENDIF( UNIX )
-+
-+
-   CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in"         "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
-   CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in"         "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE)
-   IF (is_multi_config)
-diff --git a/assimp.pc.in b/assimp.pc.in
-index c659e19f2c..555a3a1d3b 100644
---- a/assimp.pc.in
-+++ b/assimp.pc.in
-@@ -1,7 +1,5 @@
--prefix=@CMAKE_INSTALL_PREFIX@
--exec_prefix=@CMAKE_INSTALL_PREFIX@/
--libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@
--includedir=@CMAKE_INSTALL_PREFIX@/../include/@ASSIMP_INCLUDE_INSTALL_DIR@
-+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
-+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
- 
- Name: @CMAKE_PROJECT_NAME@
- Description: Import various well-known 3D model formats in an uniform manner.
-diff --git a/assimpTargets-debug.cmake.in b/assimpTargets-debug.cmake.in
-index 1ebe2a6081..f5034c9349 100644
---- a/assimpTargets-debug.cmake.in
-+++ b/assimpTargets-debug.cmake.in
-@@ -42,22 +42,22 @@ if(MSVC)
-     # Import target "assimp::assimp" for configuration "Debug"
-     set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-     set_target_properties(assimp::assimp PROPERTIES
--      IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/${importLibraryName}"
--      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
-+      IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}"
-+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}")
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
-   else()
-     set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
- 
-     # Import target "assimp::assimp" for configuration "Debug"
-     set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-     set_target_properties(assimp::assimp PROPERTIES
--      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
-+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
-   endif()
- 
- else()
-@@ -66,17 +66,17 @@ else()
-     set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
-     set_target_properties(assimp::assimp PROPERTIES
-       IMPORTED_SONAME_DEBUG "${sharedLibraryName}"
--      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
-+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
-   else()
-     set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
-     set_target_properties(assimp::assimp PROPERTIES
--      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
-+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
-   endif()
- endif()
- 
-diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in
-index f3db8f12cd..a416e8899b 100644
---- a/assimpTargets-release.cmake.in
-+++ b/assimpTargets-release.cmake.in
-@@ -42,12 +42,12 @@ if(MSVC)
-     # Import target "assimp::assimp" for configuration "Release"
-     set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-     set_target_properties(assimp::assimp PROPERTIES
--      IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/${importLibraryName}"
--      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
-+      IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}"
-+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}")
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
-   else()
-     set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
- 
-@@ -57,7 +57,7 @@ if(MSVC)
-       IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
-   endif()
- 
- else()
-@@ -70,17 +70,17 @@ else()
-     endif()
-     set_target_properties(assimp::assimp PROPERTIES
-       IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
--      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
-+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
-   else()
-     set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
-     set_target_properties(assimp::assimp PROPERTIES
--      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
-+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
-     )
-     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
--    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
-+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
-   endif()
- endif()
-
-@@ -91,8 +91,6 @@ get_filename_component(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@" REALPATH)
- 
- set( ASSIMP_CXX_FLAGS ) # dynamically linked library
- set( ASSIMP_LINK_FLAGS "" )
--set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
--set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
- if(ASSIMP_BUILD_SHARED_LIBS)
-   set( ASSIMP_LIBRARIES ${sharedLibraryName})
- else()
- 
-diff --git a/assimpTargets.cmake.in b/assimpTargets.cmake.in
-index ab1a8d2c7b..ef90c834a6 100644
---- a/assimpTargets.cmake.in
-+++ b/assimpTargets.cmake.in
-@@ -40,16 +40,6 @@ unset(_targetsDefined)
- unset(_targetsNotDefined)
- unset(_expectedTargets)
- 
--
--# Compute the installation prefix relative to this file.
--get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
--get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
--get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
--get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
--if(_IMPORT_PREFIX STREQUAL "/")
--  set(_IMPORT_PREFIX "")
--endif()
--
- # Create imported target assimp::assimp
- if(@BUILD_SHARED_LIBS@)
-   add_library(assimp::assimp SHARED IMPORTED)
-@@ -60,7 +50,7 @@ endif()
- set_target_properties(assimp::assimp PROPERTIES
-   COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION"
-   INTERFACE_assimp_MAJOR_VERSION "1"
--  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include"
-+  #INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@"
-   #INTERFACE_LINK_LIBRARIES "TxtUtils::TxtUtils;MealyMachine::MealyMachine"
- )
- 
-@@ -75,9 +65,6 @@ foreach(f ${CONFIG_FILES})
-   include(${f})
- endforeach()
- 
--# Cleanup temporary variables.
--set(_IMPORT_PREFIX)
--
- # Loop over all imported files and verify that they actually exist
- foreach(target ${_IMPORT_CHECK_TARGETS} )
-   foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
-
diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
deleted file mode 100644
index 89c555f08e..0000000000
--- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Open Asset Import Library is a portable Open Source library to import \
-               various well-known 3D model formats in a uniform manner."
-HOMEPAGE = "http://www.assimp.org/"
-SECTION = "devel"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271"
-
-DEPENDS = "zlib"
-
-SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release \
-           file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \
-           file://use-GNUInstallDirs-where-possible.patch \
-           file://0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch \
-           "
-UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))"
-
-SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}"
-
-BBCLASSEXTEND = "native nativesdk"
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-07  9:17 ` [PATCH 1/1] " Robert Yang
@ 2021-09-07 12:04   ` Randy MacLeod
  2021-09-07 12:10     ` Ross Burton
  2021-09-07 12:49     ` Alexander Kanavin
  0 siblings, 2 replies; 17+ messages in thread
From: Randy MacLeod @ 2021-09-07 12:04 UTC (permalink / raw)
  To: Robert Yang, openembedded-core

On 2021-09-07 5:17 a.m., Robert Yang wrote:
> Remove it since it has license issues:
> 
> * scripts/StepImporter/schema_ifc2x3.exp
> Copyright by: International Alliance for Interoperability, 1996-2005 All rights
> reserved. No part of this documentation may be reproduced, stored in a
> retrieval system, or transmitted in any form or by any means, without the prior
> written permission of the owner
> 
> * test/models-nonbsd/X/dwarf-Read-Me.txt
> RESTRICTIONS: This model pack is available for use in freeware, shareware,
> commercial games/software with the following restrictions:- **You may not
> sell/re-sell this model pack or claim it as your own. ***You may not
> redistribute this pack in some other model pack through a website or on a
> compilation CD of any kind, without my written consent. Psi
> http://www.psionic3d.co.uk
> 
> * test/models-nonbsd/B3D/turtle.source.txt
> Copyright 2004, Psionic Design e-mail: psionic@blueyonder.co.uk Used with
> permission. RESTRICTIONS: This model pack is available for use in freeware,
> shareware, commercial games/software with the following restrictions:- **You
> may not sell/re-sell this model pack or claim it as your own. ***You may not
> redistribute this pack in some other model pack through a website or on a
> compilation CD of any kind, without my written consent.
> 
> And no recipes depend on it, so remove it.

In master, it seems that vulkan* depends on assimp:

https://layers.openembedded.org/layerindex/branch/master/recipes/?q=depends%3Aassimp

and lots of recipes in meta-qt5 and meta-ros* so removing it here
would just push the problem around.

I'll look at the sections that you have pointed out later today.

../Randy

> 
> Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
> ---
>   meta/conf/distro/include/maintainers.inc      |    1 -
>   ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
>   ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
>   .../use-GNUInstallDirs-where-possible.patch   |  257 ---
>   meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
>   5 files changed, 1980 deletions(-)
>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
>   delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> 
> diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
> index 0e8185f4e3..e560ba39dd 100644
> --- a/meta/conf/distro/include/maintainers.inc
> +++ b/meta/conf/distro/include/maintainers.inc
> @@ -46,7 +46,6 @@ RECIPE_MAINTAINER:pn-apt = "Aníbal Limón <limon.anibal@gmail.com>"
>   RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>"
>   RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>"
>   RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>"
> -RECIPE_MAINTAINER:pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>"
>   RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>"
>   RECIPE_MAINTAINER:pn-at-spi2-atk = "Tim Orling <timothy.t.orling@intel.com>"
>   RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling <timothy.t.orling@intel.com>"
> diff --git a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch b/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> deleted file mode 100644
> index 1078148d6b..0000000000
> --- a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -From: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
> -Date: Fri, 13 Aug 2021 16:42:48 +0530
> -Subject: [PATCH] assimp: remove shared lib from _IMPORT_CHECK_TARGETS
> -
> -In the target assimp::assimp shared library verification removed
> -as it is giving configuration error when used by 3rd part component to
> -configure itself using assimp::assimp target
> -
> -Upstream-Status: Inappropriate [oe specific]
> -
> -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
> ----
> - assimpTargets-release.cmake.in | 4 ++--
> - 1 file changed, 2 insertions(+), 2 deletions(-)
> -
> -diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in
> -index cd2fac7e0..52edc7990 100644
> ---- a/assimpTargets-release.cmake.in
> -+++ b/assimpTargets-release.cmake.in
> -@@ -72,8 +72,8 @@ else()
> -       IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
> -       IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
> -     )
> --    list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> -+    #list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> -+    #list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> -   else()
> -     set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
> -     set_target_properties(assimp::assimp PROPERTIES
> ---
> -2.17.1
> diff --git a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> deleted file mode 100644
> index 87a1658710..0000000000
> --- a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> +++ /dev/null
> @@ -1,1664 +0,0 @@
> -From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001
> -From: Kim Kulling <kim.kulling@googlemail.com>
> -Date: Tue, 19 Nov 2019 20:30:40 +0100
> -Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: update
> - of zlip to fix gcc build for v9.2.0 32 bit
> -
> -Upstream-Status: Backport [https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1]
> -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
> ----
> - contrib/zip/.gitignore          |   2 +
> - contrib/zip/CMakeLists.txt      |  83 +++++-
> - contrib/zip/README.md           |  12 +-
> - contrib/zip/appveyor.yml        |   2 +-
> - contrib/zip/src/miniz.h         | 457 ++++++++++++++++++++++++++++----
> - contrib/zip/src/zip.c           |  62 +++--
> - contrib/zip/src/zip.h           | 457 ++++++++++++++++----------------
> - contrib/zip/test/CMakeLists.txt |  27 +-
> - contrib/zip/test/test.c         |  38 ++-
> - contrib/zip/test/test_miniz.c   |  25 +-
> - 10 files changed, 821 insertions(+), 344 deletions(-)
> -
> -diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore
> -index a7904a1e..49b2cb2f 100644
> ---- a/contrib/zip/.gitignore
> -+++ b/contrib/zip/.gitignore
> -@@ -1,6 +1,7 @@
> - /build/
> - /test/build/
> - /xcodeproj/
> -+.vscode/
> -
> - # Object files
> - *.o
> -@@ -54,3 +55,4 @@ zip.dir/
> - test/test.exe.vcxproj.filters
> - test/test.exe.vcxproj
> - test/test.exe.dir/
> -+
> -diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt
> -index b46dbb1d..77916d2e 100644
> ---- a/contrib/zip/CMakeLists.txt
> -+++ b/contrib/zip/CMakeLists.txt
> -@@ -1,10 +1,14 @@
> --cmake_minimum_required(VERSION 2.8)
> --project(zip)
> --enable_language(C)
> -+cmake_minimum_required(VERSION 3.0)
> -+
> -+project(zip
> -+  LANGUAGES C
> -+  VERSION "0.1.15")
> - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
> -
> -+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF)
> -+
> - if (MSVC)
> --  # Use secure functions by defaualt and suppress warnings about "deprecated" functions
> -+  # Use secure functions by default and suppress warnings about "deprecated" functions
> -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
> -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
> -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1")
> -@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR
> -         "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR
> -         "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
> -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic")
> -+  if(ENABLE_COVERAGE)
> -+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
> -+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
> -+  endif()
> - endif (MSVC)
> -
> - # zip
> - set(SRC src/miniz.h src/zip.h src/zip.c)
> - add_library(${PROJECT_NAME} ${SRC})
> --target_include_directories(${PROJECT_NAME} INTERFACE src)
> -+target_include_directories(${PROJECT_NAME} PUBLIC
> -+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
> -+  $<INSTALL_INTERFACE:include>
> -+)
> -
> - # test
> - if (NOT CMAKE_DISABLE_TESTING)
> -   enable_testing()
> -   add_subdirectory(test)
> -   find_package(Sanitizers)
> --  add_sanitizers(${PROJECT_NAME} test.exe)
> --  add_sanitizers(${PROJECT_NAME} test_miniz.exe)
> -+  add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out})
> - endif()
> -
> -+####
> -+# Installation (https://github.com/forexample/package-example) {
> -+
> -+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
> -+set(INCLUDE_INSTALL_DIR "include")
> -+
> -+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
> -+
> -+# Configuration
> -+set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
> -+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
> -+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
> -+set(NAMESPACE "${PROJECT_NAME}::")
> -+
> -+# Include module with fuction 'write_basic_package_version_file'
> -+include(CMakePackageConfigHelpers)
> -+
> -+# Note: PROJECT_VERSION is used as a VERSION
> -+write_basic_package_version_file(
> -+    "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion
> -+)
> -+
> -+# Use variables:
> -+#   * TARGETS_EXPORT_NAME
> -+#   * PROJECT_NAME
> -+configure_package_config_file(
> -+    "cmake/Config.cmake.in"
> -+    "${PROJECT_CONFIG}"
> -+    INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
> -+)
> -+
> -+install(
> -+    FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
> -+    DESTINATION "${CONFIG_INSTALL_DIR}"
> -+)
> -+
> -+install(
> -+    EXPORT "${TARGETS_EXPORT_NAME}"
> -+    NAMESPACE "${NAMESPACE}"
> -+    DESTINATION "${CONFIG_INSTALL_DIR}"
> -+)
> -+
> -+# }
> -+
> - install(TARGETS ${PROJECT_NAME}
> -+        EXPORT ${TARGETS_EXPORT_NAME}
> -         RUNTIME DESTINATION bin
> -         ARCHIVE DESTINATION lib
> -         LIBRARY DESTINATION lib
> --        COMPONENT library)
> --install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include)
> -+        INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}
> -+)
> -+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip)
> -
> - # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake)
> - if(NOT TARGET uninstall)
> -@@ -45,3 +101,12 @@ if(NOT TARGET uninstall)
> -     add_custom_target(uninstall
> -         COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)
> - endif()
> -+
> -+find_package(Doxygen)
> -+if(DOXYGEN_FOUND)
> -+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
> -+    add_custom_target(doc
> -+        ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
> -+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
> -+        COMMENT "Generating API documentation with Doxygen" VERBATIM)
> -+endif()
> -diff --git a/contrib/zip/README.md b/contrib/zip/README.md
> -index d5fb8cd2..14eb9a34 100644
> ---- a/contrib/zip/README.md
> -+++ b/contrib/zip/README.md
> -@@ -71,7 +71,7 @@ int arg = 2;
> - zip_extract("foo.zip", "/tmp", on_extract_entry, &arg);
> - ```
> -
> --*   Extract a zip entry into memory.
> -+* Extract a zip entry into memory.
> - ```c
> - void *buf = NULL;
> - size_t bufsize;
> -@@ -89,7 +89,7 @@ zip_close(zip);
> - free(buf);
> - ```
> -
> --*   Extract a zip entry into memory (no internal allocation).
> -+* Extract a zip entry into memory (no internal allocation).
> - ```c
> - unsigned char *buf;
> - size_t bufsize;
> -@@ -110,7 +110,7 @@ zip_close(zip);
> - free(buf);
> - ```
> -
> --*   Extract a zip entry into memory using callback.
> -+* Extract a zip entry into memory using callback.
> - ```c
> - struct buffer_t {
> -     char *data;
> -@@ -144,7 +144,7 @@ free(buf.data);
> - ```
> -
> -
> --*   Extract a zip entry into a file.
> -+* Extract a zip entry into a file.
> - ```c
> - struct zip_t *zip = zip_open("foo.zip", 0, 'r');
> - {
> -@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r');
> - zip_close(zip);
> - ```
> -
> --*   List of all zip entries
> -+* List of all zip entries
> - ```c
> - struct zip_t *zip = zip_open("foo.zip", 0, 'r');
> - int i, n = zip_total_entries(zip);
> -@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) {
> - zip_close(zip);
> - ```
> -
> --## Bindings
> -+# Bindings
> - Compile zip library as a dynamic library.
> - ```shell
> - $ mkdir build
> -diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml
> -index 0be6373c..ea17f5de 100644
> ---- a/contrib/zip/appveyor.yml
> -+++ b/contrib/zip/appveyor.yml
> -@@ -1,4 +1,4 @@
> --version: zip-0.1.9.{build}
> -+version: zip-0.1.15.{build}
> - build_script:
> - - cmd: >-
> -     cd c:\projects\zip
> -diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h
> -index 2c27a94d..c4fcfb83 100644
> ---- a/contrib/zip/src/miniz.h
> -+++ b/contrib/zip/src/miniz.h
> -@@ -221,6 +221,7 @@
> - #ifndef MINIZ_HEADER_INCLUDED
> - #define MINIZ_HEADER_INCLUDED
> -
> -+#include <stdint.h>
> - #include <stdlib.h>
> -
> - // Defines to completely disable specific portions of miniz.c:
> -@@ -284,7 +285,8 @@
> - /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */
> - #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES)
> - #if MINIZ_X86_OR_X64_CPU
> --/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */
> -+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient
> -+ * integer loads and stores from unaligned addresses. */
> - #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
> - #define MINIZ_UNALIGNED_USE_MEMCPY
> - #else
> -@@ -354,6 +356,44 @@ enum {
> -   MZ_FIXED = 4
> - };
> -
> -+/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or
> -+ * modify this enum. */
> -+typedef enum {
> -+  MZ_ZIP_NO_ERROR = 0,
> -+  MZ_ZIP_UNDEFINED_ERROR,
> -+  MZ_ZIP_TOO_MANY_FILES,
> -+  MZ_ZIP_FILE_TOO_LARGE,
> -+  MZ_ZIP_UNSUPPORTED_METHOD,
> -+  MZ_ZIP_UNSUPPORTED_ENCRYPTION,
> -+  MZ_ZIP_UNSUPPORTED_FEATURE,
> -+  MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
> -+  MZ_ZIP_NOT_AN_ARCHIVE,
> -+  MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
> -+  MZ_ZIP_UNSUPPORTED_MULTIDISK,
> -+  MZ_ZIP_DECOMPRESSION_FAILED,
> -+  MZ_ZIP_COMPRESSION_FAILED,
> -+  MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
> -+  MZ_ZIP_CRC_CHECK_FAILED,
> -+  MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
> -+  MZ_ZIP_ALLOC_FAILED,
> -+  MZ_ZIP_FILE_OPEN_FAILED,
> -+  MZ_ZIP_FILE_CREATE_FAILED,
> -+  MZ_ZIP_FILE_WRITE_FAILED,
> -+  MZ_ZIP_FILE_READ_FAILED,
> -+  MZ_ZIP_FILE_CLOSE_FAILED,
> -+  MZ_ZIP_FILE_SEEK_FAILED,
> -+  MZ_ZIP_FILE_STAT_FAILED,
> -+  MZ_ZIP_INVALID_PARAMETER,
> -+  MZ_ZIP_INVALID_FILENAME,
> -+  MZ_ZIP_BUF_TOO_SMALL,
> -+  MZ_ZIP_INTERNAL_ERROR,
> -+  MZ_ZIP_FILE_NOT_FOUND,
> -+  MZ_ZIP_ARCHIVE_TOO_LARGE,
> -+  MZ_ZIP_VALIDATION_FAILED,
> -+  MZ_ZIP_WRITE_CALLBACK_FAILED,
> -+  MZ_ZIP_TOTAL_ERRORS
> -+} mz_zip_error;
> -+
> - // Method
> - #define MZ_DEFLATED 8
> -
> -@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs,
> -                                     void *pBuf, size_t n);
> - typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs,
> -                                      const void *pBuf, size_t n);
> -+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque);
> -
> - struct mz_zip_internal_state_tag;
> - typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
> -@@ -707,13 +748,27 @@ typedef enum {
> -   MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
> - } mz_zip_mode;
> -
> --typedef struct mz_zip_archive_tag {
> -+typedef enum {
> -+  MZ_ZIP_TYPE_INVALID = 0,
> -+  MZ_ZIP_TYPE_USER,
> -+  MZ_ZIP_TYPE_MEMORY,
> -+  MZ_ZIP_TYPE_HEAP,
> -+  MZ_ZIP_TYPE_FILE,
> -+  MZ_ZIP_TYPE_CFILE,
> -+  MZ_ZIP_TOTAL_TYPES
> -+} mz_zip_type;
> -+
> -+typedef struct {
> -   mz_uint64 m_archive_size;
> -   mz_uint64 m_central_directory_file_ofs;
> --  mz_uint m_total_files;
> -+
> -+  /* We only support up to UINT32_MAX files in zip64 mode. */
> -+  mz_uint32 m_total_files;
> -   mz_zip_mode m_zip_mode;
> -+  mz_zip_type m_zip_type;
> -+  mz_zip_error m_last_error;
> -
> --  mz_uint m_file_offset_alignment;
> -+  mz_uint64 m_file_offset_alignment;
> -
> -   mz_alloc_func m_pAlloc;
> -   mz_free_func m_pFree;
> -@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag {
> -
> -   mz_file_read_func m_pRead;
> -   mz_file_write_func m_pWrite;
> -+  mz_file_needs_keepalive m_pNeeds_keepalive;
> -   void *m_pIO_opaque;
> -
> -   mz_zip_internal_state *m_pState;
> -@@ -1263,6 +1319,9 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
> -                                                 int strategy);
> - #endif // #ifndef MINIZ_NO_ZLIB_APIS
> -
> -+#define MZ_UINT16_MAX (0xFFFFU)
> -+#define MZ_UINT32_MAX (0xFFFFFFFFU)
> -+
> - #ifdef __cplusplus
> - }
> - #endif
> -@@ -1311,6 +1370,11 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
> -    ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
> - #endif
> -
> -+#define MZ_READ_LE64(p)                                                        \
> -+  (((mz_uint64)MZ_READ_LE32(p)) |                                              \
> -+   (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32)))       \
> -+    << 32U))
> -+
> - #ifdef _MSC_VER
> - #define MZ_FORCEINLINE __forceinline
> - #elif defined(__GNUC__)
> -@@ -4160,6 +4224,17 @@ enum {
> -   MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
> -   MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
> -   MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
> -+
> -+  /* ZIP64 archive identifier and record sizes */
> -+  MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50,
> -+  MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50,
> -+  MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56,
> -+  MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20,
> -+  MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001,
> -+  MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50,
> -+  MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24,
> -+  MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16,
> -+
> -   // Central directory header record offsets
> -   MZ_ZIP_CDH_SIG_OFS = 0,
> -   MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
> -@@ -4199,6 +4274,31 @@ enum {
> -   MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
> -   MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
> -   MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
> -+
> -+  /* ZIP64 End of central directory locator offsets */
> -+  MZ_ZIP64_ECDL_SIG_OFS = 0,                    /* 4 bytes */
> -+  MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4,          /* 4 bytes */
> -+  MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8,  /* 8 bytes */
> -+  MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */
> -+
> -+  /* ZIP64 End of central directory header offsets */
> -+  MZ_ZIP64_ECDH_SIG_OFS = 0,                       /* 4 bytes */
> -+  MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4,            /* 8 bytes */
> -+  MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12,          /* 2 bytes */
> -+  MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14,           /* 2 bytes */
> -+  MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16,            /* 4 bytes */
> -+  MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20,            /* 4 bytes */
> -+  MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */
> -+  MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32,       /* 8 bytes */
> -+  MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40,                /* 8 bytes */
> -+  MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48,                 /* 8 bytes */
> -+  MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0,
> -+  MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10,
> -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1,
> -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32,
> -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64,
> -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192,
> -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11
> - };
> -
> - typedef struct {
> -@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag {
> -   mz_zip_array m_central_dir;
> -   mz_zip_array m_central_dir_offsets;
> -   mz_zip_array m_sorted_central_dir_offsets;
> -+
> -+  /* The flags passed in when the archive is initially opened. */
> -+  uint32_t m_init_flags;
> -+
> -+  /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc.
> -+   */
> -+  mz_bool m_zip64;
> -+
> -+  /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64
> -+   * will also be slammed to true too, even if we didn't find a zip64 end of
> -+   * central dir header, etc.) */
> -+  mz_bool m_zip64_has_extended_info_fields;
> -+
> -+  /* These fields are used by the file, FILE, memory, and memory/heap read/write
> -+   * helpers. */
> -   MZ_FILE *m_pFile;
> -+  mz_uint64 m_file_archive_start_ofs;
> -+
> -   void *m_pMem;
> -   size_t m_mem_size;
> -   size_t m_mem_capacity;
> -@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time,
> - #endif /* #ifndef MINIZ_NO_STDIO */
> - #endif /* #ifndef MINIZ_NO_TIME */
> -
> -+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip,
> -+                                               mz_zip_error err_num) {
> -+  if (pZip)
> -+    pZip->m_last_error = err_num;
> -+  return MZ_FALSE;
> -+}
> -+
> - static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
> -                                            mz_uint32 flags) {
> -   (void)flags;
> -@@ -4480,127 +4604,346 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) {
> -   }
> - }
> -
> --static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
> --                                              mz_uint32 flags) {
> --  mz_uint cdir_size, num_this_disk, cdir_disk_index;
> --  mz_uint64 cdir_ofs;
> -+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip,
> -+                                               mz_uint32 record_sig,
> -+                                               mz_uint32 record_size,
> -+                                               mz_int64 *pOfs) {
> -   mz_int64 cur_file_ofs;
> --  const mz_uint8 *p;
> -   mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
> -   mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
> --  mz_bool sort_central_dir =
> --      ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
> --  // Basic sanity checks - reject files which are too small, and check the first
> --  // 4 bytes of the file to make sure a local header is there.
> --  if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
> -+
> -+  /* Basic sanity checks - reject files which are too small */
> -+  if (pZip->m_archive_size < record_size)
> -     return MZ_FALSE;
> --  // Find the end of central directory record by scanning the file from the end
> --  // towards the beginning.
> -+
> -+  /* Find the record by scanning the file from the end towards the beginning. */
> -   cur_file_ofs =
> -       MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0);
> -   for (;;) {
> -     int i,
> -         n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs);
> -+
> -     if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n)
> -       return MZ_FALSE;
> --    for (i = n - 4; i >= 0; --i)
> --      if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
> --        break;
> -+
> -+    for (i = n - 4; i >= 0; --i) {
> -+      mz_uint s = MZ_READ_LE32(pBuf + i);
> -+      if (s == record_sig) {
> -+        if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size)
> -+          break;
> -+      }
> -+    }
> -+
> -     if (i >= 0) {
> -       cur_file_ofs += i;
> -       break;
> -     }
> -+
> -+    /* Give up if we've searched the entire file, or we've gone back "too far"
> -+     * (~64kb) */
> -     if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >=
> --                            (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
> -+                            (MZ_UINT16_MAX + record_size)))
> -       return MZ_FALSE;
> -+
> -     cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
> -   }
> --  // Read and verify the end of central directory record.
> -+
> -+  *pOfs = cur_file_ofs;
> -+  return MZ_TRUE;
> -+}
> -+
> -+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
> -+                                              mz_uint flags) {
> -+  mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0,
> -+          cdir_disk_index = 0;
> -+  mz_uint64 cdir_ofs = 0;
> -+  mz_int64 cur_file_ofs = 0;
> -+  const mz_uint8 *p;
> -+
> -+  mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
> -+  mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
> -+  mz_bool sort_central_dir =
> -+      ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
> -+  mz_uint32 zip64_end_of_central_dir_locator_u32
> -+      [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) /
> -+       sizeof(mz_uint32)];
> -+  mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32;
> -+
> -+  mz_uint32 zip64_end_of_central_dir_header_u32
> -+      [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
> -+       sizeof(mz_uint32)];
> -+  mz_uint8 *pZip64_end_of_central_dir =
> -+      (mz_uint8 *)zip64_end_of_central_dir_header_u32;
> -+
> -+  mz_uint64 zip64_end_of_central_dir_ofs = 0;
> -+
> -+  /* Basic sanity checks - reject files which are too small, and check the first
> -+   * 4 bytes of the file to make sure a local header is there. */
> -+  if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
> -+    return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
> -+
> -+  if (!mz_zip_reader_locate_header_sig(
> -+          pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG,
> -+          MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs))
> -+    return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR);
> -+
> -+  /* Read and verify the end of central directory record. */
> -   if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
> -                     MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
> -       MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
> --    return MZ_FALSE;
> --  if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
> --       MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ||
> --      ((pZip->m_total_files =
> --            MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) !=
> --       MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS)))
> --    return MZ_FALSE;
> -+    return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
> -+
> -+  if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
> -+      MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
> -+    return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
> -+
> -+  if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE +
> -+                       MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) {
> -+    if (pZip->m_pRead(pZip->m_pIO_opaque,
> -+                      cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE,
> -+                      pZip64_locator,
> -+                      MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) ==
> -+        MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) {
> -+      if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) ==
> -+          MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) {
> -+        zip64_end_of_central_dir_ofs = MZ_READ_LE64(
> -+            pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS);
> -+        if (zip64_end_of_central_dir_ofs >
> -+            (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE))
> -+          return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
> -+
> -+        if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs,
> -+                          pZip64_end_of_central_dir,
> -+                          MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) ==
> -+            MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) {
> -+          if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) ==
> -+              MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) {
> -+            pZip->m_pState->m_zip64 = MZ_TRUE;
> -+          }
> -+        }
> -+      }
> -+    }
> -+  }
> -
> -+  pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS);
> -+  cdir_entries_on_this_disk =
> -+      MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
> -   num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
> -   cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
> -+  cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS);
> -+  cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
> -+
> -+  if (pZip->m_pState->m_zip64) {
> -+    mz_uint32 zip64_total_num_of_disks =
> -+        MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS);
> -+    mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(
> -+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS);
> -+    mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(
> -+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
> -+    mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(
> -+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS);
> -+    mz_uint64 zip64_size_of_central_directory =
> -+        MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS);
> -+
> -+    if (zip64_size_of_end_of_central_dir_record <
> -+        (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12))
> -+      return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+
> -+    if (zip64_total_num_of_disks != 1U)
> -+      return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> -+
> -+    /* Check for miniz's practical limits */
> -+    if (zip64_cdir_total_entries > MZ_UINT32_MAX)
> -+      return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
> -+
> -+    pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries;
> -+
> -+    if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX)
> -+      return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
> -+
> -+    cdir_entries_on_this_disk =
> -+        (mz_uint32)zip64_cdir_total_entries_on_this_disk;
> -+
> -+    /* Check for miniz's current practical limits (sorry, this should be enough
> -+     * for millions of files) */
> -+    if (zip64_size_of_central_directory > MZ_UINT32_MAX)
> -+      return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
> -+
> -+    cdir_size = (mz_uint32)zip64_size_of_central_directory;
> -+
> -+    num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir +
> -+                                 MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS);
> -+
> -+    cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir +
> -+                                   MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS);
> -+
> -+    cdir_ofs =
> -+        MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS);
> -+  }
> -+
> -+  if (pZip->m_total_files != cdir_entries_on_this_disk)
> -+    return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> -+
> -   if (((num_this_disk | cdir_disk_index) != 0) &&
> -       ((num_this_disk != 1) || (cdir_disk_index != 1)))
> --    return MZ_FALSE;
> -+    return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> -
> --  if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) <
> --      pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
> --    return MZ_FALSE;
> -+  if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
> -+    return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -
> --  cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
> -   if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size)
> --    return MZ_FALSE;
> -+    return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -
> -   pZip->m_central_directory_file_ofs = cdir_ofs;
> -
> -   if (pZip->m_total_files) {
> -     mz_uint i, n;
> --
> --    // Read the entire central directory into a heap block, and allocate another
> --    // heap block to hold the unsorted central dir file record offsets, and
> --    // another to hold the sorted indices.
> -+    /* Read the entire central directory into a heap block, and allocate another
> -+     * heap block to hold the unsorted central dir file record offsets, and
> -+     * possibly another to hold the sorted indices. */
> -     if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size,
> -                               MZ_FALSE)) ||
> -         (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets,
> -                               pZip->m_total_files, MZ_FALSE)))
> --      return MZ_FALSE;
> -+      return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
> -
> -     if (sort_central_dir) {
> -       if (!mz_zip_array_resize(pZip,
> -                                &pZip->m_pState->m_sorted_central_dir_offsets,
> -                                pZip->m_total_files, MZ_FALSE))
> --        return MZ_FALSE;
> -+        return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
> -     }
> -
> -     if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
> -                       pZip->m_pState->m_central_dir.m_p,
> -                       cdir_size) != cdir_size)
> --      return MZ_FALSE;
> -+      return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
> -
> --    // Now create an index into the central directory file records, do some
> --    // basic sanity checking on each record, and check for zip64 entries (which
> --    // are not yet supported).
> -+    /* Now create an index into the central directory file records, do some
> -+     * basic sanity checking on each record */
> -     p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p;
> -     for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
> --      mz_uint total_header_size, comp_size, decomp_size, disk_index;
> -+      mz_uint total_header_size, disk_index, bit_flags, filename_size,
> -+          ext_data_size;
> -+      mz_uint64 comp_size, decomp_size, local_header_ofs;
> -+
> -       if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
> -           (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
> --        return MZ_FALSE;
> -+        return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+
> -       MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
> -                            i) =
> -           (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p);
> -+
> -       if (sort_central_dir)
> -         MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets,
> -                              mz_uint32, i) = i;
> -+
> -       comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
> -       decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
> --      if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
> --           (decomp_size != comp_size)) ||
> --          (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) ||
> --          (comp_size == 0xFFFFFFFF))
> --        return MZ_FALSE;
> -+      local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
> -+      filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
> -+      ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS);
> -+
> -+      if ((!pZip->m_pState->m_zip64_has_extended_info_fields) &&
> -+          (ext_data_size) &&
> -+          (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) ==
> -+           MZ_UINT32_MAX)) {
> -+        /* Attempt to find zip64 extended information field in the entry's extra
> -+         * data */
> -+        mz_uint32 extra_size_remaining = ext_data_size;
> -+
> -+        if (extra_size_remaining) {
> -+          const mz_uint8 *pExtra_data;
> -+          void *buf = NULL;
> -+
> -+          if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size >
> -+              n) {
> -+            buf = MZ_MALLOC(ext_data_size);
> -+            if (buf == NULL)
> -+              return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
> -+
> -+            if (pZip->m_pRead(pZip->m_pIO_opaque,
> -+                              cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
> -+                                  filename_size,
> -+                              buf, ext_data_size) != ext_data_size) {
> -+              MZ_FREE(buf);
> -+              return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
> -+            }
> -+
> -+            pExtra_data = (mz_uint8 *)buf;
> -+          } else {
> -+            pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size;
> -+          }
> -+
> -+          do {
> -+            mz_uint32 field_id;
> -+            mz_uint32 field_data_size;
> -+
> -+            if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
> -+              MZ_FREE(buf);
> -+              return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+            }
> -+
> -+            field_id = MZ_READ_LE16(pExtra_data);
> -+            field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16));
> -+
> -+            if ((field_data_size + sizeof(mz_uint16) * 2) >
> -+                extra_size_remaining) {
> -+              MZ_FREE(buf);
> -+              return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+            }
> -+
> -+            if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
> -+              /* Ok, the archive didn't have any zip64 headers but it uses a
> -+               * zip64 extended information field so mark it as zip64 anyway
> -+               * (this can occur with infozip's zip util when it reads
> -+               * compresses files from stdin). */
> -+              pZip->m_pState->m_zip64 = MZ_TRUE;
> -+              pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE;
> -+              break;
> -+            }
> -+
> -+            pExtra_data += sizeof(mz_uint16) * 2 + field_data_size;
> -+            extra_size_remaining =
> -+                extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size;
> -+          } while (extra_size_remaining);
> -+
> -+          MZ_FREE(buf);
> -+        }
> -+      }
> -+
> -+      /* I've seen archives that aren't marked as zip64 that uses zip64 ext
> -+       * data, argh */
> -+      if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) {
> -+        if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
> -+             (decomp_size != comp_size)) ||
> -+            (decomp_size && !comp_size))
> -+          return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+      }
> -+
> -       disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
> --      if ((disk_index != num_this_disk) && (disk_index != 1))
> --        return MZ_FALSE;
> --      if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
> --           MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
> --        return MZ_FALSE;
> -+      if ((disk_index == MZ_UINT16_MAX) ||
> -+          ((disk_index != num_this_disk) && (disk_index != 1)))
> -+        return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> -+
> -+      if (comp_size != MZ_UINT32_MAX) {
> -+        if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
> -+             MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
> -+          return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+      }
> -+
> -+      bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
> -+      if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED)
> -+        return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
> -+
> -       if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
> -                                MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
> -                                MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
> -                                MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) >
> -           n)
> --        return MZ_FALSE;
> -+        return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> -+
> -       n -= total_header_size;
> -       p += total_header_size;
> -     }
> -diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c
> -index ff3a8fe1..1abcfd8f 100644
> ---- a/contrib/zip/src/zip.c
> -+++ b/contrib/zip/src/zip.c
> -@@ -24,7 +24,6 @@
> -   ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) &&   \
> -    (P)[1] == ':')
> - #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0)
> --#define ISSLASH(C) ((C) == '/' || (C) == '\\')
> -
> - #else
> -
> -@@ -48,7 +47,7 @@ int symlink(const char *target, const char *linkpath); // needed on Linux
> - #endif
> -
> - #ifndef ISSLASH
> --#define ISSLASH(C) ((C) == '/')
> -+#define ISSLASH(C) ((C) == '/' || (C) == '\\')
> - #endif
> -
> - #define CLEANUP(ptr)                                                           \
> -@@ -78,26 +77,34 @@ static const char *base_name(const char *name) {
> -   return base;
> - }
> -
> --static int mkpath(const char *path) {
> --  char const *p;
> -+static int mkpath(char *path) {
> -+  char *p;
> -   char npath[MAX_PATH + 1];
> -   int len = 0;
> -   int has_device = HAS_DEVICE(path);
> -
> -   memset(npath, 0, MAX_PATH + 1);
> --
> --#ifdef _WIN32
> --  // only on windows fix the path
> --  npath[0] = path[0];
> --  npath[1] = path[1];
> --  len = 2;
> --#endif // _WIN32
> --
> -+  if (has_device) {
> -+    // only on windows
> -+    npath[0] = path[0];
> -+    npath[1] = path[1];
> -+    len = 2;
> -+  }
> -   for (p = path + len; *p && len < MAX_PATH; p++) {
> -     if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > 2))) {
> --      if (MKDIR(npath) == -1)
> --        if (errno != EEXIST)
> -+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) ||              \
> -+    defined(__MINGW32__)
> -+#else
> -+      if ('\\' == *p) {
> -+        *p = '/';
> -+      }
> -+#endif
> -+
> -+      if (MKDIR(npath) == -1) {
> -+        if (errno != EEXIST) {
> -           return -1;
> -+        }
> -+      }
> -     }
> -     npath[len++] = *p;
> -   }
> -@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char *entryname) {
> -   zip->entry.header_offset = zip->archive.m_archive_size;
> -   memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * sizeof(mz_uint8));
> -   zip->entry.method = 0;
> -+
> -+  // UNIX or APPLE
> -+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19
> -+  // regular file with rw-r--r-- persmissions
> -+  zip->entry.external_attr = (mz_uint32)(0100644) << 16;
> -+#else
> -   zip->entry.external_attr = 0;
> -+#endif
> -
> -   num_alignment_padding_bytes =
> -       mz_zip_writer_compute_padding_needed_for_file_alignment(pzip);
> -@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) {
> -   }
> -
> -   if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, (mz_uint)zip->entry.index,
> --  buf, bufsize, 0, NULL,  0)) {
> -+                                             buf, bufsize, 0, NULL, 0)) {
> -     return -1;
> -   }
> -
> -@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) {
> - int zip_entry_fread(struct zip_t *zip, const char *filename) {
> -   mz_zip_archive *pzip = NULL;
> -   mz_uint idx;
> --#if defined(_MSC_VER)
> --#else
> -   mz_uint32 xattr = 0;
> --#endif
> -   mz_zip_archive_file_stat info;
> -
> -   if (!zip) {
> -@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char *dir,
> -       goto out;
> -     }
> -
> --    if ((((info.m_version_made_by >> 8) == 3) || ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or macOS (3 and 19 from section 4.4.2.2 of zip standard)
> --        && info.m_external_attr & (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 is directory)
> -+    if ((((info.m_version_made_by >> 8) == 3) ||
> -+         ((info.m_version_made_by >> 8) ==
> -+          19)) // if zip is produced on Unix or macOS (3 and 19 from
> -+               // section 4.4.2.2 of zip standard)
> -+        && info.m_external_attr &
> -+               (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40
> -+                               // is directory)
> - #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) ||              \
> -     defined(__MINGW32__)
> --#else
> --      if (info.m_uncomp_size > MAX_PATH || !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, MAX_PATH, 0, NULL, 0)) {
> -+#else
> -+      if (info.m_uncomp_size > MAX_PATH ||
> -+          !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to,
> -+                                                 MAX_PATH, 0, NULL, 0)) {
> -         goto out;
> -       }
> -       symlink_to[info.m_uncomp_size] = '\0';
> -diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h
> -index 5f39df50..a48d64d6 100644
> ---- a/contrib/zip/src/zip.h
> -+++ b/contrib/zip/src/zip.h
> -@@ -20,241 +20,240 @@ extern "C" {
> - #endif
> -
> - #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) &&               \
> --    !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(__ssize_t_defined)
> --#define _SSIZE_T
> -+    !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) &&              \
> -+    !defined(_SSIZE_T) && !defined(_SSIZE_T_)
> -+
> - // 64-bit Windows is the only mainstream platform
> - // where sizeof(long) != sizeof(void*)
> - #ifdef _WIN64
> --typedef long long  ssize_t;  /* byte count or error */
> -+typedef long long ssize_t; /* byte count or error */
> - #else
> --typedef long  ssize_t;  /* byte count or error */
> -+typedef long ssize_t; /* byte count or error */
> - #endif
> -+
> -+#define _SSIZE_T_DEFINED
> -+#define _SSIZE_T_DEFINED_
> -+#define __DEFINED_ssize_t
> -+#define __ssize_t_defined
> -+#define _SSIZE_T
> -+#define _SSIZE_T_
> -+
> - #endif
> -
> - #ifndef MAX_PATH
> - #define MAX_PATH 32767 /* # chars in a path name including NULL */
> - #endif
> -
> -+/**
> -+ * @mainpage
> -+ *
> -+ * Documenation for @ref zip.
> -+ */
> -+
> -+/**
> -+ * @addtogroup zip
> -+ * @{
> -+ */
> -+
> -+/**
> -+ * Default zip compression level.
> -+ */
> -+
> - #define ZIP_DEFAULT_COMPRESSION_LEVEL 6
> -
> --/*
> --  This data structure is used throughout the library to represent zip archive
> --  - forward declaration.
> --*/
> -+/**
> -+ * @struct zip_t
> -+ *
> -+ * This data structure is used throughout the library to represent zip archive -
> -+ * forward declaration.
> -+ */
> - struct zip_t;
> -
> --/*
> --  Opens zip archive with compression level using the given mode.
> --
> --  Args:
> --    zipname: zip archive file name.
> --    level: compression level (0-9 are the standard zlib-style levels).
> --    mode: file access mode.
> --        'r': opens a file for reading/extracting (the file must exists).
> --        'w': creates an empty file for writing.
> --        'a': appends to an existing archive.
> --
> --  Returns:
> --    The zip archive handler or NULL on error
> --*/
> -+/**
> -+ * Opens zip archive with compression level using the given mode.
> -+ *
> -+ * @param zipname zip archive file name.
> -+ * @param level compression level (0-9 are the standard zlib-style levels).
> -+ * @param mode file access mode.
> -+ *        - 'r': opens a file for reading/extracting (the file must exists).
> -+ *        - 'w': creates an empty file for writing.
> -+ *        - 'a': appends to an existing archive.
> -+ *
> -+ * @return the zip archive handler or NULL on error
> -+ */
> - extern struct zip_t *zip_open(const char *zipname, int level, char mode);
> -
> --/*
> --  Closes the zip archive, releases resources - always finalize.
> --
> --  Args:
> --    zip: zip archive handler.
> --*/
> -+/**
> -+ * Closes the zip archive, releases resources - always finalize.
> -+ *
> -+ * @param zip zip archive handler.
> -+ */
> - extern void zip_close(struct zip_t *zip);
> -
> --/*
> --  Opens an entry by name in the zip archive.
> --  For zip archive opened in 'w' or 'a' mode the function will append
> --  a new entry. In readonly mode the function tries to locate the entry
> --  in global dictionary.
> --
> --  Args:
> --    zip: zip archive handler.
> --    entryname: an entry name in local dictionary.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Opens an entry by name in the zip archive.
> -+ *
> -+ * For zip archive opened in 'w' or 'a' mode the function will append
> -+ * a new entry. In readonly mode the function tries to locate the entry
> -+ * in global dictionary.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param entryname an entry name in local dictionary.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_open(struct zip_t *zip, const char *entryname);
> -
> --/*
> --  Opens a new entry by index in the zip archive.
> --  This function is only valid if zip archive was opened in 'r' (readonly) mode.
> --
> --  Args:
> --    zip: zip archive handler.
> --    index: index in local dictionary.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Opens a new entry by index in the zip archive.
> -+ *
> -+ * This function is only valid if zip archive was opened in 'r' (readonly) mode.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param index index in local dictionary.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_openbyindex(struct zip_t *zip, int index);
> -
> --/*
> --  Closes a zip entry, flushes buffer and releases resources.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Closes a zip entry, flushes buffer and releases resources.
> -+ *
> -+ * @param zip zip archive handler.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_close(struct zip_t *zip);
> -
> --/*
> --  Returns a local name of the current zip entry.
> --  The main difference between user's entry name and local entry name
> --  is optional relative path.
> --  Following .ZIP File Format Specification - the path stored MUST not contain
> --  a drive or device letter, or a leading slash.
> --  All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
> --  for compatibility with Amiga and UNIX file systems etc.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The pointer to the current zip entry name, or NULL on error.
> --*/
> -+/**
> -+ * Returns a local name of the current zip entry.
> -+ *
> -+ * The main difference between user's entry name and local entry name
> -+ * is optional relative path.
> -+ * Following .ZIP File Format Specification - the path stored MUST not contain
> -+ * a drive or device letter, or a leading slash.
> -+ * All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
> -+ * for compatibility with Amiga and UNIX file systems etc.
> -+ *
> -+ * @param zip: zip archive handler.
> -+ *
> -+ * @return the pointer to the current zip entry name, or NULL on error.
> -+ */
> - extern const char *zip_entry_name(struct zip_t *zip);
> -
> --/*
> --  Returns an index of the current zip entry.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The index on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Returns an index of the current zip entry.
> -+ *
> -+ * @param zip zip archive handler.
> -+ *
> -+ * @return the index on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_index(struct zip_t *zip);
> -
> --/*
> --  Determines if the current zip entry is a directory entry.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The return code - 1 (true), 0 (false), negative number (< 0) on error.
> --*/
> -+/**
> -+ * Determines if the current zip entry is a directory entry.
> -+ *
> -+ * @param zip zip archive handler.
> -+ *
> -+ * @return the return code - 1 (true), 0 (false), negative number (< 0) on
> -+ *         error.
> -+ */
> - extern int zip_entry_isdir(struct zip_t *zip);
> -
> --/*
> --  Returns an uncompressed size of the current zip entry.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The uncompressed size in bytes.
> --*/
> -+/**
> -+ * Returns an uncompressed size of the current zip entry.
> -+ *
> -+ * @param zip zip archive handler.
> -+ *
> -+ * @return the uncompressed size in bytes.
> -+ */
> - extern unsigned long long zip_entry_size(struct zip_t *zip);
> -
> --/*
> --  Returns CRC-32 checksum of the current zip entry.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The CRC-32 checksum.
> --*/
> -+/**
> -+ * Returns CRC-32 checksum of the current zip entry.
> -+ *
> -+ * @param zip zip archive handler.
> -+ *
> -+ * @return the CRC-32 checksum.
> -+ */
> - extern unsigned int zip_entry_crc32(struct zip_t *zip);
> -
> --/*
> --  Compresses an input buffer for the current zip entry.
> --
> --  Args:
> --    zip: zip archive handler.
> --    buf: input buffer.
> --    bufsize: input buffer size (in bytes).
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Compresses an input buffer for the current zip entry.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param buf input buffer.
> -+ * @param bufsize input buffer size (in bytes).
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize);
> -
> --/*
> --  Compresses a file for the current zip entry.
> --
> --  Args:
> --    zip: zip archive handler.
> --    filename: input file.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Compresses a file for the current zip entry.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param filename input file.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_fwrite(struct zip_t *zip, const char *filename);
> -
> --/*
> --  Extracts the current zip entry into output buffer.
> --  The function allocates sufficient memory for a output buffer.
> --
> --  Args:
> --    zip: zip archive handler.
> --    buf: output buffer.
> --    bufsize: output buffer size (in bytes).
> --
> --  Note:
> --    - remember to release memory allocated for a output buffer.
> --    - for large entries, please take a look at zip_entry_extract function.
> --
> --  Returns:
> --    The return code - the number of bytes actually read on success.
> --    Otherwise a -1 on error.
> --*/
> -+/**
> -+ * Extracts the current zip entry into output buffer.
> -+ *
> -+ * The function allocates sufficient memory for a output buffer.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param buf output buffer.
> -+ * @param bufsize output buffer size (in bytes).
> -+ *
> -+ * @note remember to release memory allocated for a output buffer.
> -+ *       for large entries, please take a look at zip_entry_extract function.
> -+ *
> -+ * @return the return code - the number of bytes actually read on success.
> -+ *         Otherwise a -1 on error.
> -+ */
> - extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize);
> -
> --/*
> --  Extracts the current zip entry into a memory buffer using no memory
> --  allocation.
> --
> --  Args:
> --    zip: zip archive handler.
> --    buf: preallocated output buffer.
> --    bufsize: output buffer size (in bytes).
> --
> --  Note:
> --    - ensure supplied output buffer is large enough.
> --    - zip_entry_size function (returns uncompressed size for the current entry)
> --      can be handy to estimate how big buffer is needed.
> --    - for large entries, please take a look at zip_entry_extract function.
> --
> --  Returns:
> --    The return code - the number of bytes actually read on success.
> --    Otherwise a -1 on error (e.g. bufsize is not large enough).
> --*/
> --extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize);
> --
> --/*
> --  Extracts the current zip entry into output file.
> --
> --  Args:
> --    zip: zip archive handler.
> --    filename: output file.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Extracts the current zip entry into a memory buffer using no memory
> -+ * allocation.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param buf preallocated output buffer.
> -+ * @param bufsize output buffer size (in bytes).
> -+ *
> -+ * @note ensure supplied output buffer is large enough.
> -+ *       zip_entry_size function (returns uncompressed size for the current
> -+ *       entry) can be handy to estimate how big buffer is needed. for large
> -+ * entries, please take a look at zip_entry_extract function.
> -+ *
> -+ * @return the return code - the number of bytes actually read on success.
> -+ *         Otherwise a -1 on error (e.g. bufsize is not large enough).
> -+ */
> -+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf,
> -+                                     size_t bufsize);
> -+
> -+/**
> -+ * Extracts the current zip entry into output file.
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param filename output file.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_entry_fread(struct zip_t *zip, const char *filename);
> -
> --/*
> --  Extracts the current zip entry using a callback function (on_extract).
> --
> --  Args:
> --    zip: zip archive handler.
> --    on_extract: callback function.
> --    arg: opaque pointer (optional argument,
> --                         which you can pass to the on_extract callback)
> --
> --   Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> -+/**
> -+ * Extracts the current zip entry using a callback function (on_extract).
> -+ *
> -+ * @param zip zip archive handler.
> -+ * @param on_extract callback function.
> -+ * @param arg opaque pointer (optional argument, which you can pass to the
> -+ *        on_extract callback)
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -  */
> - extern int
> - zip_entry_extract(struct zip_t *zip,
> -@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip,
> -                                        const void *data, size_t size),
> -                   void *arg);
> -
> --/*
> --  Returns the number of all entries (files and directories) in the zip archive.
> --
> --  Args:
> --    zip: zip archive handler.
> --
> --  Returns:
> --    The return code - the number of entries on success,
> --    negative number (< 0) on error.
> --*/
> -+/**
> -+ * Returns the number of all entries (files and directories) in the zip archive.
> -+ *
> -+ * @param zip zip archive handler.
> -+ *
> -+ * @return the return code - the number of entries on success, negative number
> -+ *         (< 0) on error.
> -+ */
> - extern int zip_total_entries(struct zip_t *zip);
> -
> --/*
> --  Creates a new archive and puts files into a single zip archive.
> --
> --  Args:
> --    zipname: zip archive file.
> --    filenames: input files.
> --    len: number of input files.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Creates a new archive and puts files into a single zip archive.
> -+ *
> -+ * @param zipname zip archive file.
> -+ * @param filenames input files.
> -+ * @param len: number of input files.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_create(const char *zipname, const char *filenames[], size_t len);
> -
> --/*
> --  Extracts a zip archive file into directory.
> --
> --  If on_extract_entry is not NULL, the callback will be called after
> --  successfully extracted each zip entry.
> --  Returning a negative value from the callback will cause abort and return an
> --  error. The last argument (void *arg) is optional, which you can use to pass
> --  data to the on_extract_entry callback.
> --
> --  Args:
> --    zipname: zip archive file.
> --    dir: output directory.
> --    on_extract_entry: on extract callback.
> --    arg: opaque pointer.
> --
> --  Returns:
> --    The return code - 0 on success, negative number (< 0) on error.
> --*/
> -+/**
> -+ * Extracts a zip archive file into directory.
> -+ *
> -+ * If on_extract_entry is not NULL, the callback will be called after
> -+ * successfully extracted each zip entry.
> -+ * Returning a negative value from the callback will cause abort and return an
> -+ * error. The last argument (void *arg) is optional, which you can use to pass
> -+ * data to the on_extract_entry callback.
> -+ *
> -+ * @param zipname zip archive file.
> -+ * @param dir output directory.
> -+ * @param on_extract_entry on extract callback.
> -+ * @param arg opaque pointer.
> -+ *
> -+ * @return the return code - 0 on success, negative number (< 0) on error.
> -+ */
> - extern int zip_extract(const char *zipname, const char *dir,
> -                        int (*on_extract_entry)(const char *filename, void *arg),
> -                        void *arg);
> -
> -+/** @} */
> -+
> - #ifdef __cplusplus
> - }
> - #endif
> -diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt
> -index 9b2a8db1..cc060b00 100644
> ---- a/contrib/zip/test/CMakeLists.txt
> -+++ b/contrib/zip/test/CMakeLists.txt
> -@@ -1,19 +1,16 @@
> - cmake_minimum_required(VERSION 2.8)
> -
> --if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
> --  if(ENABLE_COVERAGE)
> --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ")
> --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
> --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs")
> --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage")
> --    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
> --  endif()
> --endif ()
> --
> - # test
> --include_directories(../src)
> --add_executable(test.exe test.c ../src/zip.c)
> --add_executable(test_miniz.exe test_miniz.c)
> -+set(test_out test.out)
> -+set(test_miniz_out test_miniz.out)
> -+
> -+add_executable(${test_out} test.c)
> -+target_link_libraries(${test_out} zip)
> -+add_executable(${test_miniz_out} test_miniz.c)
> -+target_link_libraries(${test_miniz_out} zip)
> -+
> -+add_test(NAME ${test_out} COMMAND ${test_out})
> -+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out})
> -
> --add_test(NAME test COMMAND test.exe)
> --add_test(NAME test_miniz COMMAND test_miniz.exe)
> -+set(test_out ${test_out} PARENT_SCOPE)
> -+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE)
> -diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c
> -index 45443053..a9b2ddab 100644
> ---- a/contrib/zip/test/test.c
> -+++ b/contrib/zip/test/test.c
> -@@ -29,6 +29,8 @@
> - #define XFILE "7.txt\0"
> - #define XMODE 0100777
> -
> -+#define UNIXMODE 0100644
> -+
> - #define UNUSED(x) (void)x
> -
> - static int total_entries = 0;
> -@@ -102,7 +104,8 @@ static void test_read(void) {
> -   assert(0 == zip_entry_close(zip));
> -   free(buf);
> -   buf = NULL;
> --
> -+  bufsize = 0;
> -+
> -   assert(0 == zip_entry_open(zip, "test/test-2.txt"));
> -   assert(strlen(TESTDATA2) == zip_entry_size(zip));
> -   assert(CRC32DATA2 == zip_entry_crc32(zip));
> -@@ -131,7 +134,8 @@ static void test_read(void) {
> -   assert(0 == zip_entry_close(zip));
> -   free(buf);
> -   buf = NULL;
> --
> -+  bufsize = 0;
> -+
> -   buftmp = strlen(TESTDATA1);
> -   buf = calloc(buftmp, sizeof(char));
> -   assert(0 == zip_entry_open(zip, "test/test-1.txt"));
> -@@ -433,6 +437,35 @@ static void test_mtime(void) {
> -   remove(ZIPNAME);
> - }
> -
> -+static void test_unix_permissions(void) {
> -+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__)
> -+#else
> -+  // UNIX or APPLE
> -+  struct MZ_FILE_STAT_STRUCT file_stats;
> -+
> -+  remove(ZIPNAME);
> -+
> -+  struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
> -+  assert(zip != NULL);
> -+
> -+  assert(0 == zip_entry_open(zip, RFILE));
> -+  assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1)));
> -+  assert(0 == zip_entry_close(zip));
> -+
> -+  zip_close(zip);
> -+
> -+  remove(RFILE);
> -+
> -+  assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL));
> -+
> -+  assert(0 == MZ_FILE_STAT(RFILE, &file_stats));
> -+  assert(UNIXMODE == file_stats.st_mode);
> -+
> -+  remove(RFILE);
> -+  remove(ZIPNAME);
> -+#endif
> -+}
> -+
> - int main(int argc, char *argv[]) {
> -   UNUSED(argc);
> -   UNUSED(argv);
> -@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) {
> -   test_write_permissions();
> -   test_exe_permissions();
> -   test_mtime();
> -+  test_unix_permissions();
> -
> -   remove(ZIPNAME);
> -   return 0;
> -diff --git a/contrib/zip/test/test_miniz.c b/contrib/zip/test/test_miniz.c
> -index ebc0564d..babcaecd 100644
> ---- a/contrib/zip/test/test_miniz.c
> -+++ b/contrib/zip/test/test_miniz.c
> -@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) {
> -   uint step = 0;
> -   int cmp_status;
> -   uLong src_len = (uLong)strlen(s_pStr);
> --  uLong cmp_len = compressBound(src_len);
> -   uLong uncomp_len = src_len;
> -+  uLong cmp_len;
> -   uint8 *pCmp, *pUncomp;
> -+  size_t sz;
> -   uint total_succeeded = 0;
> -   (void)argc, (void)argv;
> -
> -   printf("miniz.c version: %s\n", MZ_VERSION);
> -
> -   do {
> -+    pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, &cmp_len, 0);
> -+    if (!pCmp) {
> -+      printf("tdefl_compress_mem_to_heap failed\n");
> -+      return EXIT_FAILURE;
> -+    }
> -+    if (src_len <= cmp_len) {
> -+      printf("tdefl_compress_mem_to_heap failed: from %u to %u bytes\n",
> -+             (mz_uint32)uncomp_len, (mz_uint32)cmp_len);
> -+      free(pCmp);
> -+      return EXIT_FAILURE;
> -+    }
> -+
> -+    sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0);
> -+    if (sz != cmp_len) {
> -+      printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n",
> -+             (mz_uint32)cmp_len, (mz_uint32)sz);
> -+      free(pCmp);
> -+      return EXIT_FAILURE;
> -+    }
> -+
> -     // Allocate buffers to hold compressed and uncompressed data.
> -+    free(pCmp);
> -+    cmp_len = compressBound(src_len);
> -     pCmp = (mz_uint8 *)malloc((size_t)cmp_len);
> -     pUncomp = (mz_uint8 *)malloc((size_t)src_len);
> -     if ((!pCmp) || (!pUncomp)) {
> diff --git a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch b/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> deleted file mode 100644
> index e4f5b9ccbd..0000000000
> --- a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> +++ /dev/null
> @@ -1,257 +0,0 @@
> -From cbf94fd62ff831879d10f99aa7766d391ae8a9b7 Mon Sep 17 00:00:00 2001
> -From: =?UTF-8?q?Victor=20Matar=C3=A9?= <matare@fh-aachen.de>
> -Date: Tue, 31 Mar 2020 21:30:07 +0200
> -Subject: [PATCH] use GNUInstallDirs where possible
> -
> -Emulate the CMAKE_INSTALL_FULL_* variables on non-Unix systems and
> -disable redefining FHS-mandated install locations via user-editable
> -ASSIMP_*_INSTALL_DIR variables. Instead, if it REALLY proves necessary,
> -Unix users can edit the advanced, canonical CMAKE_INSTALL_* variables.
> ----
> - CMakeLists.txt                 | 36 ++++++++++++++++++++++------------
> - assimp.pc.in                   |  6 ++----
> - assimpTargets-debug.cmake.in   | 20 +++++++++----------
> - assimpTargets-release.cmake.in | 18 ++++++++---------
> - assimpTargets.cmake.in         | 15 +-------------
> - 5 files changed, 45 insertions(+), 50 deletions(-)
> -
> -Upstream-Status: Backport
> -Comment: Additionally remove setting of ASSIMP_LIBRARY_DIRS, ASSIMP_INCLUDE_DIRS
> -         and INTERFACE_INCLUDE_DIRECTORIES as default cross compile paths are enough
> -         and setting them manually adds non-existing paths to CMake modules
> -
> -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
> -
> -diff --git a/CMakeLists.txt b/CMakeLists.txt
> -index dcafb649f5..c23c0df33e 100644
> ---- a/CMakeLists.txt
> -+++ b/CMakeLists.txt
> -@@ -230,11 +230,6 @@ SET(LIBASSIMP-DEV_COMPONENT "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_M
> - SET(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev)
> - SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names")
> -
> --IF( UNIX )
> --  # Use GNUInstallDirs for Unix predefined directories
> --  INCLUDE(GNUInstallDirs)
> --ENDIF( UNIX )
> --
> - # Grouped compiler settings
> - IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW)
> -   IF(NOT HUNTER_ENABLED)
> -@@ -329,14 +324,6 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
> -   SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" )
> - ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
> -
> --# Cache these to allow the user to override them manually.
> --SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
> --  "Path the built library files are installed to." )
> --SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
> --  "Path the header files are installed to." )
> --SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
> --  "Path the tool executables are installed to." )
> --
> - get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
> -
> - IF (INJECT_DEBUG_POSTFIX AND (is_multi_config OR CMAKE_BUILD_TYPE STREQUAL "Debug"))
> -@@ -391,6 +378,29 @@ IF(HUNTER_ENABLED)
> -   )
> - ELSE(HUNTER_ENABLED)
> -   # cmake configuration files
> -+
> -+  IF( UNIX )
> -+    # Use GNUInstallDirs for Unix predefined directories
> -+    INCLUDE(GNUInstallDirs)
> -+
> -+    SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
> -+    SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
> -+    SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
> -+  ELSE( UNIX )
> -+    # Cache these to allow the user to override them on non-Unix platforms
> -+    SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
> -+      "Path the built library files are installed to." )
> -+    SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
> -+      "Path the header files are installed to." )
> -+    SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
> -+      "Path the tool executables are installed to." )
> -+
> -+    SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR})
> -+    SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR})
> -+    SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR})
> -+  ENDIF( UNIX )
> -+
> -+
> -   CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in"         "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
> -   CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in"         "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE)
> -   IF (is_multi_config)
> -diff --git a/assimp.pc.in b/assimp.pc.in
> -index c659e19f2c..555a3a1d3b 100644
> ---- a/assimp.pc.in
> -+++ b/assimp.pc.in
> -@@ -1,7 +1,5 @@
> --prefix=@CMAKE_INSTALL_PREFIX@
> --exec_prefix=@CMAKE_INSTALL_PREFIX@/
> --libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@
> --includedir=@CMAKE_INSTALL_PREFIX@/../include/@ASSIMP_INCLUDE_INSTALL_DIR@
> -+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
> -+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
> -
> - Name: @CMAKE_PROJECT_NAME@
> - Description: Import various well-known 3D model formats in an uniform manner.
> -diff --git a/assimpTargets-debug.cmake.in b/assimpTargets-debug.cmake.in
> -index 1ebe2a6081..f5034c9349 100644
> ---- a/assimpTargets-debug.cmake.in
> -+++ b/assimpTargets-debug.cmake.in
> -@@ -42,22 +42,22 @@ if(MSVC)
> -     # Import target "assimp::assimp" for configuration "Debug"
> -     set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
> -     set_target_properties(assimp::assimp PROPERTIES
> --      IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/${importLibraryName}"
> --      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
> -+      IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}"
> -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}")
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
> -   else()
> -     set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
> -
> -     # Import target "assimp::assimp" for configuration "Debug"
> -     set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
> -     set_target_properties(assimp::assimp PROPERTIES
> --      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
> -   endif()
> -
> - else()
> -@@ -66,17 +66,17 @@ else()
> -     set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
> -     set_target_properties(assimp::assimp PROPERTIES
> -       IMPORTED_SONAME_DEBUG "${sharedLibraryName}"
> --      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
> -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> -   else()
> -     set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
> -     set_target_properties(assimp::assimp PROPERTIES
> --      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
> -   endif()
> - endif()
> -
> -diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in
> -index f3db8f12cd..a416e8899b 100644
> ---- a/assimpTargets-release.cmake.in
> -+++ b/assimpTargets-release.cmake.in
> -@@ -42,12 +42,12 @@ if(MSVC)
> -     # Import target "assimp::assimp" for configuration "Release"
> -     set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
> -     set_target_properties(assimp::assimp PROPERTIES
> --      IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/${importLibraryName}"
> --      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
> -+      IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}"
> -+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}")
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
> -   else()
> -     set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
> -
> -@@ -57,7 +57,7 @@ if(MSVC)
> -       IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
> -   endif()
> -
> - else()
> -@@ -70,17 +70,17 @@ else()
> -     endif()
> -     set_target_properties(assimp::assimp PROPERTIES
> -       IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
> --      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
> -+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> -   else()
> -     set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
> -     set_target_properties(assimp::assimp PROPERTIES
> --      IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> -+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
> -     )
> -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
> -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
> -   endif()
> - endif()
> -
> -@@ -91,8 +91,6 @@ get_filename_component(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@" REALPATH)
> -
> - set( ASSIMP_CXX_FLAGS ) # dynamically linked library
> - set( ASSIMP_LINK_FLAGS "" )
> --set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
> --set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
> - if(ASSIMP_BUILD_SHARED_LIBS)
> -   set( ASSIMP_LIBRARIES ${sharedLibraryName})
> - else()
> -
> -diff --git a/assimpTargets.cmake.in b/assimpTargets.cmake.in
> -index ab1a8d2c7b..ef90c834a6 100644
> ---- a/assimpTargets.cmake.in
> -+++ b/assimpTargets.cmake.in
> -@@ -40,16 +40,6 @@ unset(_targetsDefined)
> - unset(_targetsNotDefined)
> - unset(_expectedTargets)
> -
> --
> --# Compute the installation prefix relative to this file.
> --get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
> --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
> --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
> --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
> --if(_IMPORT_PREFIX STREQUAL "/")
> --  set(_IMPORT_PREFIX "")
> --endif()
> --
> - # Create imported target assimp::assimp
> - if(@BUILD_SHARED_LIBS@)
> -   add_library(assimp::assimp SHARED IMPORTED)
> -@@ -60,7 +50,7 @@ endif()
> - set_target_properties(assimp::assimp PROPERTIES
> -   COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION"
> -   INTERFACE_assimp_MAJOR_VERSION "1"
> --  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include"
> -+  #INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@"
> -   #INTERFACE_LINK_LIBRARIES "TxtUtils::TxtUtils;MealyMachine::MealyMachine"
> - )
> -
> -@@ -75,9 +65,6 @@ foreach(f ${CONFIG_FILES})
> -   include(${f})
> - endforeach()
> -
> --# Cleanup temporary variables.
> --set(_IMPORT_PREFIX)
> --
> - # Loop over all imported files and verify that they actually exist
> - foreach(target ${_IMPORT_CHECK_TARGETS} )
> -   foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
> -
> diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> deleted file mode 100644
> index 89c555f08e..0000000000
> --- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -DESCRIPTION = "Open Asset Import Library is a portable Open Source library to import \
> -               various well-known 3D model formats in a uniform manner."
> -HOMEPAGE = "http://www.assimp.org/"
> -SECTION = "devel"
> -
> -LICENSE = "BSD-3-Clause"
> -LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271"
> -
> -DEPENDS = "zlib"
> -
> -SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release \
> -           file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \
> -           file://use-GNUInstallDirs-where-possible.patch \
> -           file://0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch \
> -           "
> -UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))"
> -
> -SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df"
> -
> -S = "${WORKDIR}/git"
> -
> -inherit cmake
> -
> -EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}"
> -
> -BBCLASSEXTEND = "native nativesdk"
> 
> 
> 
> 
> 


-- 
# Randy MacLeod
# Wind River Linux

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-07 12:04   ` [OE-core] " Randy MacLeod
@ 2021-09-07 12:10     ` Ross Burton
  2021-09-07 19:01       ` Khem Raj
  2021-09-08  8:55       ` Robert Yang
  2021-09-07 12:49     ` Alexander Kanavin
  1 sibling, 2 replies; 17+ messages in thread
From: Ross Burton @ 2021-09-07 12:10 UTC (permalink / raw)
  To: Randy MacLeod; +Cc: Robert Yang, OE-core

On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote:
> I'll look at the sections that you have pointed out later today.

Debian is always worth looking at when there's license issues.

https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source

Specifically:

https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81

They strip non-free components from the tarball before importing into
their git repository.  We can delete the same files during the build
so they don't get redistributed.

Ross

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-07 12:04   ` [OE-core] " Randy MacLeod
  2021-09-07 12:10     ` Ross Burton
@ 2021-09-07 12:49     ` Alexander Kanavin
  2021-09-08 10:08       ` Ross Burton
  1 sibling, 1 reply; 17+ messages in thread
From: Alexander Kanavin @ 2021-09-07 12:49 UTC (permalink / raw)
  To: Randy MacLeod; +Cc: Robert Yang, OE-core

[-- Attachment #1: Type: text/plain, Size: 88580 bytes --]

On Tue, 7 Sept 2021 at 14:04, Randy MacLeod <randy.macleod@windriver.com>
wrote:

> In master, it seems that vulkan* depends on assimp:
>
>
> https://layers.openembedded.org/layerindex/branch/master/recipes/?q=depends%3Aassimp
>
> and lots of recipes in meta-qt5 and meta-ros* so removing it here
> would just push the problem around.
>

I'm not sure why layerindex says otherewise, but neither vulkan nor
anything in meta-qt5 actually depend on assimp.
qt5/6 has an option, off by default, to use external assimp, vulkan has no
dependency at all.

This leaves basically meta-ros, so carrying assimp for the benefit of a
single layer is dubious at best.

Alex



>
> I'll look at the sections that you have pointed out later today.
>
> ../Randy
>
> >
> > Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
> > ---
> >   meta/conf/distro/include/maintainers.inc      |    1 -
> >   ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
> >   ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
> >   .../use-GNUInstallDirs-where-possible.patch   |  257 ---
> >   meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
> >   5 files changed, 1980 deletions(-)
> >   delete mode 100644
> meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> >   delete mode 100644
> meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> >   delete mode 100644
> meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> >   delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> >
> > diff --git a/meta/conf/distro/include/maintainers.inc
> b/meta/conf/distro/include/maintainers.inc
> > index 0e8185f4e3..e560ba39dd 100644
> > --- a/meta/conf/distro/include/maintainers.inc
> > +++ b/meta/conf/distro/include/maintainers.inc
> > @@ -46,7 +46,6 @@ RECIPE_MAINTAINER:pn-apt = "Aníbal Limón <
> limon.anibal@gmail.com>"
> >   RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>"
> >   RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>"
> >   RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>"
> > -RECIPE_MAINTAINER:pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>"
> >   RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>"
> >   RECIPE_MAINTAINER:pn-at-spi2-atk = "Tim Orling <
> timothy.t.orling@intel.com>"
> >   RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling <
> timothy.t.orling@intel.com>"
> > diff --git
> a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> b/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> > deleted file mode 100644
> > index 1078148d6b..0000000000
> > ---
> a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> > +++ /dev/null
> > @@ -1,32 +0,0 @@
> > -From: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
> > -Date: Fri, 13 Aug 2021 16:42:48 +0530
> > -Subject: [PATCH] assimp: remove shared lib from _IMPORT_CHECK_TARGETS
> > -
> > -In the target assimp::assimp shared library verification removed
> > -as it is giving configuration error when used by 3rd part component to
> > -configure itself using assimp::assimp target
> > -
> > -Upstream-Status: Inappropriate [oe specific]
> > -
> > -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
> > ----
> > - assimpTargets-release.cmake.in | 4 ++--
> > - 1 file changed, 2 insertions(+), 2 deletions(-)
> > -
> > -diff --git a/assimpTargets-release.cmake.in b/
> assimpTargets-release.cmake.in
> > -index cd2fac7e0..52edc7990 100644
> > ---- a/assimpTargets-release.cmake.in
> > -+++ b/assimpTargets-release.cmake.in
> > -@@ -72,8 +72,8 @@ else()
> > -       IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
> > -       IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@
> /${sharedLibraryName}"
> > -     )
> > --    list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> > -+    #list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > -+    #list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> > -   else()
> > -     set(staticLibraryName
> "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
> > -     set_target_properties(assimp::assimp PROPERTIES
> > ---
> > -2.17.1
> > diff --git
> a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> > deleted file mode 100644
> > index 87a1658710..0000000000
> > ---
> a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> > +++ /dev/null
> > @@ -1,1664 +0,0 @@
> > -From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001
> > -From: Kim Kulling <kim.kulling@googlemail.com>
> > -Date: Tue, 19 Nov 2019 20:30:40 +0100
> > -Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733:
> update
> > - of zlip to fix gcc build for v9.2.0 32 bit
> > -
> > -Upstream-Status: Backport [
> https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1
> ]
> > -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
> > ----
> > - contrib/zip/.gitignore          |   2 +
> > - contrib/zip/CMakeLists.txt      |  83 +++++-
> > - contrib/zip/README.md           |  12 +-
> > - contrib/zip/appveyor.yml        |   2 +-
> > - contrib/zip/src/miniz.h         | 457 ++++++++++++++++++++++++++++----
> > - contrib/zip/src/zip.c           |  62 +++--
> > - contrib/zip/src/zip.h           | 457 ++++++++++++++++----------------
> > - contrib/zip/test/CMakeLists.txt |  27 +-
> > - contrib/zip/test/test.c         |  38 ++-
> > - contrib/zip/test/test_miniz.c   |  25 +-
> > - 10 files changed, 821 insertions(+), 344 deletions(-)
> > -
> > -diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore
> > -index a7904a1e..49b2cb2f 100644
> > ---- a/contrib/zip/.gitignore
> > -+++ b/contrib/zip/.gitignore
> > -@@ -1,6 +1,7 @@
> > - /build/
> > - /test/build/
> > - /xcodeproj/
> > -+.vscode/
> > -
> > - # Object files
> > - *.o
> > -@@ -54,3 +55,4 @@ zip.dir/
> > - test/test.exe.vcxproj.filters
> > - test/test.exe.vcxproj
> > - test/test.exe.dir/
> > -+
> > -diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt
> > -index b46dbb1d..77916d2e 100644
> > ---- a/contrib/zip/CMakeLists.txt
> > -+++ b/contrib/zip/CMakeLists.txt
> > -@@ -1,10 +1,14 @@
> > --cmake_minimum_required(VERSION 2.8)
> > --project(zip)
> > --enable_language(C)
> > -+cmake_minimum_required(VERSION 3.0)
> > -+
> > -+project(zip
> > -+  LANGUAGES C
> > -+  VERSION "0.1.15")
> > - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake"
> ${CMAKE_MODULE_PATH})
> > -
> > -+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF)
> > -+
> > - if (MSVC)
> > --  # Use secure functions by defaualt and suppress warnings about
> "deprecated" functions
> > -+  # Use secure functions by default and suppress warnings about
> "deprecated" functions
> > -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D
> _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
> > -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D
> _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
> > -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D
> _CRT_SECURE_NO_WARNINGS=1")
> > -@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR
> > -         "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR
> > -         "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
> > -   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror
> -pedantic")
> > -+  if(ENABLE_COVERAGE)
> > -+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs
> -ftest-coverage")
> > -+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
> > -+  endif()
> > - endif (MSVC)
> > -
> > - # zip
> > - set(SRC src/miniz.h src/zip.h src/zip.c)
> > - add_library(${PROJECT_NAME} ${SRC})
> > --target_include_directories(${PROJECT_NAME} INTERFACE src)
> > -+target_include_directories(${PROJECT_NAME} PUBLIC
> > -+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
> > -+  $<INSTALL_INTERFACE:include>
> > -+)
> > -
> > - # test
> > - if (NOT CMAKE_DISABLE_TESTING)
> > -   enable_testing()
> > -   add_subdirectory(test)
> > -   find_package(Sanitizers)
> > --  add_sanitizers(${PROJECT_NAME} test.exe)
> > --  add_sanitizers(${PROJECT_NAME} test_miniz.exe)
> > -+  add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out})
> > - endif()
> > -
> > -+####
> > -+# Installation (https://github.com/forexample/package-example) {
> > -+
> > -+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
> > -+set(INCLUDE_INSTALL_DIR "include")
> > -+
> > -+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
> > -+
> > -+# Configuration
> > -+set(VERSION_CONFIG
> "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
> > -+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
> > -+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
> > -+set(NAMESPACE "${PROJECT_NAME}::")
> > -+
> > -+# Include module with fuction 'write_basic_package_version_file'
> > -+include(CMakePackageConfigHelpers)
> > -+
> > -+# Note: PROJECT_VERSION is used as a VERSION
> > -+write_basic_package_version_file(
> > -+    "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion
> > -+)
> > -+
> > -+# Use variables:
> > -+#   * TARGETS_EXPORT_NAME
> > -+#   * PROJECT_NAME
> > -+configure_package_config_file(
> > -+    "cmake/Config.cmake.in"
> > -+    "${PROJECT_CONFIG}"
> > -+    INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
> > -+)
> > -+
> > -+install(
> > -+    FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
> > -+    DESTINATION "${CONFIG_INSTALL_DIR}"
> > -+)
> > -+
> > -+install(
> > -+    EXPORT "${TARGETS_EXPORT_NAME}"
> > -+    NAMESPACE "${NAMESPACE}"
> > -+    DESTINATION "${CONFIG_INSTALL_DIR}"
> > -+)
> > -+
> > -+# }
> > -+
> > - install(TARGETS ${PROJECT_NAME}
> > -+        EXPORT ${TARGETS_EXPORT_NAME}
> > -         RUNTIME DESTINATION bin
> > -         ARCHIVE DESTINATION lib
> > -         LIBRARY DESTINATION lib
> > --        COMPONENT library)
> > --install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include)
> > -+        INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}
> > -+)
> > -+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION
> ${INCLUDE_INSTALL_DIR}/zip)
> > -
> > - # uninstall target (
> https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
> )
> > - if(NOT TARGET uninstall)
> > -@@ -45,3 +101,12 @@ if(NOT TARGET uninstall)
> > -     add_custom_target(uninstall
> > -         COMMAND ${CMAKE_COMMAND} -P
> ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)
> > - endif()
> > -+
> > -+find_package(Doxygen)
> > -+if(DOXYGEN_FOUND)
> > -+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
> > -+    add_custom_target(doc
> > -+        ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
> > -+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
> > -+        COMMENT "Generating API documentation with Doxygen" VERBATIM)
> > -+endif()
> > -diff --git a/contrib/zip/README.md b/contrib/zip/README.md
> > -index d5fb8cd2..14eb9a34 100644
> > ---- a/contrib/zip/README.md
> > -+++ b/contrib/zip/README.md
> > -@@ -71,7 +71,7 @@ int arg = 2;
> > - zip_extract("foo.zip", "/tmp", on_extract_entry, &arg);
> > - ```
> > -
> > --*   Extract a zip entry into memory.
> > -+* Extract a zip entry into memory.
> > - ```c
> > - void *buf = NULL;
> > - size_t bufsize;
> > -@@ -89,7 +89,7 @@ zip_close(zip);
> > - free(buf);
> > - ```
> > -
> > --*   Extract a zip entry into memory (no internal allocation).
> > -+* Extract a zip entry into memory (no internal allocation).
> > - ```c
> > - unsigned char *buf;
> > - size_t bufsize;
> > -@@ -110,7 +110,7 @@ zip_close(zip);
> > - free(buf);
> > - ```
> > -
> > --*   Extract a zip entry into memory using callback.
> > -+* Extract a zip entry into memory using callback.
> > - ```c
> > - struct buffer_t {
> > -     char *data;
> > -@@ -144,7 +144,7 @@ free(buf.data);
> > - ```
> > -
> > -
> > --*   Extract a zip entry into a file.
> > -+* Extract a zip entry into a file.
> > - ```c
> > - struct zip_t *zip = zip_open("foo.zip", 0, 'r');
> > - {
> > -@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r');
> > - zip_close(zip);
> > - ```
> > -
> > --*   List of all zip entries
> > -+* List of all zip entries
> > - ```c
> > - struct zip_t *zip = zip_open("foo.zip", 0, 'r');
> > - int i, n = zip_total_entries(zip);
> > -@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) {
> > - zip_close(zip);
> > - ```
> > -
> > --## Bindings
> > -+# Bindings
> > - Compile zip library as a dynamic library.
> > - ```shell
> > - $ mkdir build
> > -diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml
> > -index 0be6373c..ea17f5de 100644
> > ---- a/contrib/zip/appveyor.yml
> > -+++ b/contrib/zip/appveyor.yml
> > -@@ -1,4 +1,4 @@
> > --version: zip-0.1.9.{build}
> > -+version: zip-0.1.15.{build}
> > - build_script:
> > - - cmd: >-
> > -     cd c:\projects\zip
> > -diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h
> > -index 2c27a94d..c4fcfb83 100644
> > ---- a/contrib/zip/src/miniz.h
> > -+++ b/contrib/zip/src/miniz.h
> > -@@ -221,6 +221,7 @@
> > - #ifndef MINIZ_HEADER_INCLUDED
> > - #define MINIZ_HEADER_INCLUDED
> > -
> > -+#include <stdint.h>
> > - #include <stdlib.h>
> > -
> > - // Defines to completely disable specific portions of miniz.c:
> > -@@ -284,7 +285,8 @@
> > - /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */
> > - #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES)
> > - #if MINIZ_X86_OR_X64_CPU
> > --/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit
> efficient integer loads and stores from unaligned addresses. */
> > -+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit
> efficient
> > -+ * integer loads and stores from unaligned addresses. */
> > - #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
> > - #define MINIZ_UNALIGNED_USE_MEMCPY
> > - #else
> > -@@ -354,6 +356,44 @@ enum {
> > -   MZ_FIXED = 4
> > - };
> > -
> > -+/* miniz error codes. Be sure to update mz_zip_get_error_string() if
> you add or
> > -+ * modify this enum. */
> > -+typedef enum {
> > -+  MZ_ZIP_NO_ERROR = 0,
> > -+  MZ_ZIP_UNDEFINED_ERROR,
> > -+  MZ_ZIP_TOO_MANY_FILES,
> > -+  MZ_ZIP_FILE_TOO_LARGE,
> > -+  MZ_ZIP_UNSUPPORTED_METHOD,
> > -+  MZ_ZIP_UNSUPPORTED_ENCRYPTION,
> > -+  MZ_ZIP_UNSUPPORTED_FEATURE,
> > -+  MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
> > -+  MZ_ZIP_NOT_AN_ARCHIVE,
> > -+  MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
> > -+  MZ_ZIP_UNSUPPORTED_MULTIDISK,
> > -+  MZ_ZIP_DECOMPRESSION_FAILED,
> > -+  MZ_ZIP_COMPRESSION_FAILED,
> > -+  MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
> > -+  MZ_ZIP_CRC_CHECK_FAILED,
> > -+  MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
> > -+  MZ_ZIP_ALLOC_FAILED,
> > -+  MZ_ZIP_FILE_OPEN_FAILED,
> > -+  MZ_ZIP_FILE_CREATE_FAILED,
> > -+  MZ_ZIP_FILE_WRITE_FAILED,
> > -+  MZ_ZIP_FILE_READ_FAILED,
> > -+  MZ_ZIP_FILE_CLOSE_FAILED,
> > -+  MZ_ZIP_FILE_SEEK_FAILED,
> > -+  MZ_ZIP_FILE_STAT_FAILED,
> > -+  MZ_ZIP_INVALID_PARAMETER,
> > -+  MZ_ZIP_INVALID_FILENAME,
> > -+  MZ_ZIP_BUF_TOO_SMALL,
> > -+  MZ_ZIP_INTERNAL_ERROR,
> > -+  MZ_ZIP_FILE_NOT_FOUND,
> > -+  MZ_ZIP_ARCHIVE_TOO_LARGE,
> > -+  MZ_ZIP_VALIDATION_FAILED,
> > -+  MZ_ZIP_WRITE_CALLBACK_FAILED,
> > -+  MZ_ZIP_TOTAL_ERRORS
> > -+} mz_zip_error;
> > -+
> > - // Method
> > - #define MZ_DEFLATED 8
> > -
> > -@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque,
> mz_uint64 file_ofs,
> > -                                     void *pBuf, size_t n);
> > - typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs,
> > -                                      const void *pBuf, size_t n);
> > -+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque);
> > -
> > - struct mz_zip_internal_state_tag;
> > - typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
> > -@@ -707,13 +748,27 @@ typedef enum {
> > -   MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
> > - } mz_zip_mode;
> > -
> > --typedef struct mz_zip_archive_tag {
> > -+typedef enum {
> > -+  MZ_ZIP_TYPE_INVALID = 0,
> > -+  MZ_ZIP_TYPE_USER,
> > -+  MZ_ZIP_TYPE_MEMORY,
> > -+  MZ_ZIP_TYPE_HEAP,
> > -+  MZ_ZIP_TYPE_FILE,
> > -+  MZ_ZIP_TYPE_CFILE,
> > -+  MZ_ZIP_TOTAL_TYPES
> > -+} mz_zip_type;
> > -+
> > -+typedef struct {
> > -   mz_uint64 m_archive_size;
> > -   mz_uint64 m_central_directory_file_ofs;
> > --  mz_uint m_total_files;
> > -+
> > -+  /* We only support up to UINT32_MAX files in zip64 mode. */
> > -+  mz_uint32 m_total_files;
> > -   mz_zip_mode m_zip_mode;
> > -+  mz_zip_type m_zip_type;
> > -+  mz_zip_error m_last_error;
> > -
> > --  mz_uint m_file_offset_alignment;
> > -+  mz_uint64 m_file_offset_alignment;
> > -
> > -   mz_alloc_func m_pAlloc;
> > -   mz_free_func m_pFree;
> > -@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag {
> > -
> > -   mz_file_read_func m_pRead;
> > -   mz_file_write_func m_pWrite;
> > -+  mz_file_needs_keepalive m_pNeeds_keepalive;
> > -   void *m_pIO_opaque;
> > -
> > -   mz_zip_internal_state *m_pState;
> > -@@ -1263,6 +1319,9 @@ mz_uint
> tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
> > -                                                 int strategy);
> > - #endif // #ifndef MINIZ_NO_ZLIB_APIS
> > -
> > -+#define MZ_UINT16_MAX (0xFFFFU)
> > -+#define MZ_UINT32_MAX (0xFFFFFFFFU)
> > -+
> > - #ifdef __cplusplus
> > - }
> > - #endif
> > -@@ -1311,6 +1370,11 @@ typedef unsigned char
> mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
> > -    ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
> > - #endif
> > -
> > -+#define MZ_READ_LE64(p)
>         \
> > -+  (((mz_uint64)MZ_READ_LE32(p)) |
>         \
> > -+   (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) +
> sizeof(mz_uint32)))       \
> > -+    << 32U))
> > -+
> > - #ifdef _MSC_VER
> > - #define MZ_FORCEINLINE __forceinline
> > - #elif defined(__GNUC__)
> > -@@ -4160,6 +4224,17 @@ enum {
> > -   MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
> > -   MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
> > -   MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
> > -+
> > -+  /* ZIP64 archive identifier and record sizes */
> > -+  MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50,
> > -+  MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50,
> > -+  MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56,
> > -+  MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20,
> > -+  MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001,
> > -+  MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50,
> > -+  MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24,
> > -+  MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16,
> > -+
> > -   // Central directory header record offsets
> > -   MZ_ZIP_CDH_SIG_OFS = 0,
> > -   MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
> > -@@ -4199,6 +4274,31 @@ enum {
> > -   MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
> > -   MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
> > -   MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
> > -+
> > -+  /* ZIP64 End of central directory locator offsets */
> > -+  MZ_ZIP64_ECDL_SIG_OFS = 0,                    /* 4 bytes */
> > -+  MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4,          /* 4 bytes */
> > -+  MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8,  /* 8 bytes */
> > -+  MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */
> > -+
> > -+  /* ZIP64 End of central directory header offsets */
> > -+  MZ_ZIP64_ECDH_SIG_OFS = 0,                       /* 4 bytes */
> > -+  MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4,            /* 8 bytes */
> > -+  MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12,          /* 2 bytes */
> > -+  MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14,           /* 2 bytes */
> > -+  MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16,            /* 4 bytes */
> > -+  MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20,            /* 4 bytes */
> > -+  MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */
> > -+  MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32,       /* 8 bytes */
> > -+  MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40,                /* 8 bytes */
> > -+  MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48,                 /* 8 bytes */
> > -+  MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0,
> > -+  MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10,
> > -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1,
> > -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32,
> > -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64,
> > -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192,
> > -+  MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11
> > - };
> > -
> > - typedef struct {
> > -@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag {
> > -   mz_zip_array m_central_dir;
> > -   mz_zip_array m_central_dir_offsets;
> > -   mz_zip_array m_sorted_central_dir_offsets;
> > -+
> > -+  /* The flags passed in when the archive is initially opened. */
> > -+  uint32_t m_init_flags;
> > -+
> > -+  /* MZ_TRUE if the archive has a zip64 end of central directory
> headers, etc.
> > -+   */
> > -+  mz_bool m_zip64;
> > -+
> > -+  /* MZ_TRUE if we found zip64 extended info in the central directory
> (m_zip64
> > -+   * will also be slammed to true too, even if we didn't find a zip64
> end of
> > -+   * central dir header, etc.) */
> > -+  mz_bool m_zip64_has_extended_info_fields;
> > -+
> > -+  /* These fields are used by the file, FILE, memory, and memory/heap
> read/write
> > -+   * helpers. */
> > -   MZ_FILE *m_pFile;
> > -+  mz_uint64 m_file_archive_start_ofs;
> > -+
> > -   void *m_pMem;
> > -   size_t m_mem_size;
> > -   size_t m_mem_capacity;
> > -@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char
> *pFilename, time_t access_time,
> > - #endif /* #ifndef MINIZ_NO_STDIO */
> > - #endif /* #ifndef MINIZ_NO_TIME */
> > -
> > -+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip,
> > -+                                               mz_zip_error err_num) {
> > -+  if (pZip)
> > -+    pZip->m_last_error = err_num;
> > -+  return MZ_FALSE;
> > -+}
> > -+
> > - static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
> > -                                            mz_uint32 flags) {
> > -   (void)flags;
> > -@@ -4480,127 +4604,346 @@
> mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) {
> > -   }
> > - }
> > -
> > --static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
> > --                                              mz_uint32 flags) {
> > --  mz_uint cdir_size, num_this_disk, cdir_disk_index;
> > --  mz_uint64 cdir_ofs;
> > -+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip,
> > -+                                               mz_uint32 record_sig,
> > -+                                               mz_uint32 record_size,
> > -+                                               mz_int64 *pOfs) {
> > -   mz_int64 cur_file_ofs;
> > --  const mz_uint8 *p;
> > -   mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
> > -   mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
> > --  mz_bool sort_central_dir =
> > --      ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
> > --  // Basic sanity checks - reject files which are too small, and check
> the first
> > --  // 4 bytes of the file to make sure a local header is there.
> > --  if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
> > -+
> > -+  /* Basic sanity checks - reject files which are too small */
> > -+  if (pZip->m_archive_size < record_size)
> > -     return MZ_FALSE;
> > --  // Find the end of central directory record by scanning the file
> from the end
> > --  // towards the beginning.
> > -+
> > -+  /* Find the record by scanning the file from the end towards the
> beginning. */
> > -   cur_file_ofs =
> > -       MZ_MAX((mz_int64)pZip->m_archive_size -
> (mz_int64)sizeof(buf_u32), 0);
> > -   for (;;) {
> > -     int i,
> > -         n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size -
> cur_file_ofs);
> > -+
> > -     if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) !=
> (mz_uint)n)
> > -       return MZ_FALSE;
> > --    for (i = n - 4; i >= 0; --i)
> > --      if (MZ_READ_LE32(pBuf + i) ==
> MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
> > --        break;
> > -+
> > -+    for (i = n - 4; i >= 0; --i) {
> > -+      mz_uint s = MZ_READ_LE32(pBuf + i);
> > -+      if (s == record_sig) {
> > -+        if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size)
> > -+          break;
> > -+      }
> > -+    }
> > -+
> > -     if (i >= 0) {
> > -       cur_file_ofs += i;
> > -       break;
> > -     }
> > -+
> > -+    /* Give up if we've searched the entire file, or we've gone back
> "too far"
> > -+     * (~64kb) */
> > -     if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >=
> > --                            (0xFFFF +
> MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
> > -+                            (MZ_UINT16_MAX + record_size)))
> > -       return MZ_FALSE;
> > -+
> > -     cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
> > -   }
> > --  // Read and verify the end of central directory record.
> > -+
> > -+  *pOfs = cur_file_ofs;
> > -+  return MZ_TRUE;
> > -+}
> > -+
> > -+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
> > -+                                              mz_uint flags) {
> > -+  mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk
> = 0,
> > -+          cdir_disk_index = 0;
> > -+  mz_uint64 cdir_ofs = 0;
> > -+  mz_int64 cur_file_ofs = 0;
> > -+  const mz_uint8 *p;
> > -+
> > -+  mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
> > -+  mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
> > -+  mz_bool sort_central_dir =
> > -+      ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
> > -+  mz_uint32 zip64_end_of_central_dir_locator_u32
> > -+      [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) -
> 1) /
> > -+       sizeof(mz_uint32)];
> > -+  mz_uint8 *pZip64_locator = (mz_uint8
> *)zip64_end_of_central_dir_locator_u32;
> > -+
> > -+  mz_uint32 zip64_end_of_central_dir_header_u32
> > -+      [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) -
> 1) /
> > -+       sizeof(mz_uint32)];
> > -+  mz_uint8 *pZip64_end_of_central_dir =
> > -+      (mz_uint8 *)zip64_end_of_central_dir_header_u32;
> > -+
> > -+  mz_uint64 zip64_end_of_central_dir_ofs = 0;
> > -+
> > -+  /* Basic sanity checks - reject files which are too small, and check
> the first
> > -+   * 4 bytes of the file to make sure a local header is there. */
> > -+  if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
> > -+
> > -+  if (!mz_zip_reader_locate_header_sig(
> > -+          pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG,
> > -+          MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs))
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR);
> > -+
> > -+  /* Read and verify the end of central directory record. */
> > -   if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
> > -                     MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
> > -       MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
> > --    return MZ_FALSE;
> > --  if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
> > --       MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ||
> > --      ((pZip->m_total_files =
> > --            MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) !=
> > --       MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS)))
> > --    return MZ_FALSE;
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
> > -+
> > -+  if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
> > -+      MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
> > -+
> > -+  if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE +
> > -+                       MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) {
> > -+    if (pZip->m_pRead(pZip->m_pIO_opaque,
> > -+                      cur_file_ofs -
> MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE,
> > -+                      pZip64_locator,
> > -+                      MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) ==
> > -+        MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) {
> > -+      if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) ==
> > -+          MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) {
> > -+        zip64_end_of_central_dir_ofs = MZ_READ_LE64(
> > -+            pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS);
> > -+        if (zip64_end_of_central_dir_ofs >
> > -+            (pZip->m_archive_size -
> MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE))
> > -+          return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
> > -+
> > -+        if (pZip->m_pRead(pZip->m_pIO_opaque,
> zip64_end_of_central_dir_ofs,
> > -+                          pZip64_end_of_central_dir,
> > -+                          MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) ==
> > -+            MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) {
> > -+          if (MZ_READ_LE32(pZip64_end_of_central_dir +
> MZ_ZIP64_ECDH_SIG_OFS) ==
> > -+              MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) {
> > -+            pZip->m_pState->m_zip64 = MZ_TRUE;
> > -+          }
> > -+        }
> > -+      }
> > -+    }
> > -+  }
> > -
> > -+  pZip->m_total_files = MZ_READ_LE16(pBuf +
> MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS);
> > -+  cdir_entries_on_this_disk =
> > -+      MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
> > -   num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
> > -   cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
> > -+  cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS);
> > -+  cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
> > -+
> > -+  if (pZip->m_pState->m_zip64) {
> > -+    mz_uint32 zip64_total_num_of_disks =
> > -+        MZ_READ_LE32(pZip64_locator +
> MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS);
> > -+    mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(
> > -+        pZip64_end_of_central_dir +
> MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS);
> > -+    mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(
> > -+        pZip64_end_of_central_dir +
> MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
> > -+    mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(
> > -+        pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS);
> > -+    mz_uint64 zip64_size_of_central_directory =
> > -+        MZ_READ_LE64(pZip64_end_of_central_dir +
> MZ_ZIP64_ECDH_CDIR_SIZE_OFS);
> > -+
> > -+    if (zip64_size_of_end_of_central_dir_record <
> > -+        (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12))
> > -+      return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+
> > -+    if (zip64_total_num_of_disks != 1U)
> > -+      return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> > -+
> > -+    /* Check for miniz's practical limits */
> > -+    if (zip64_cdir_total_entries > MZ_UINT32_MAX)
> > -+      return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
> > -+
> > -+    pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries;
> > -+
> > -+    if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX)
> > -+      return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
> > -+
> > -+    cdir_entries_on_this_disk =
> > -+        (mz_uint32)zip64_cdir_total_entries_on_this_disk;
> > -+
> > -+    /* Check for miniz's current practical limits (sorry, this should
> be enough
> > -+     * for millions of files) */
> > -+    if (zip64_size_of_central_directory > MZ_UINT32_MAX)
> > -+      return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
> > -+
> > -+    cdir_size = (mz_uint32)zip64_size_of_central_directory;
> > -+
> > -+    num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir +
> > -+                                 MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS);
> > -+
> > -+    cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir +
> > -+                                   MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS);
> > -+
> > -+    cdir_ofs =
> > -+        MZ_READ_LE64(pZip64_end_of_central_dir +
> MZ_ZIP64_ECDH_CDIR_OFS_OFS);
> > -+  }
> > -+
> > -+  if (pZip->m_total_files != cdir_entries_on_this_disk)
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> > -+
> > -   if (((num_this_disk | cdir_disk_index) != 0) &&
> > -       ((num_this_disk != 1) || (cdir_disk_index != 1)))
> > --    return MZ_FALSE;
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> > -
> > --  if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) <
> > --      pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
> > --    return MZ_FALSE;
> > -+  if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -
> > --  cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
> > -   if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size)
> > --    return MZ_FALSE;
> > -+    return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -
> > -   pZip->m_central_directory_file_ofs = cdir_ofs;
> > -
> > -   if (pZip->m_total_files) {
> > -     mz_uint i, n;
> > --
> > --    // Read the entire central directory into a heap block, and
> allocate another
> > --    // heap block to hold the unsorted central dir file record
> offsets, and
> > --    // another to hold the sorted indices.
> > -+    /* Read the entire central directory into a heap block, and
> allocate another
> > -+     * heap block to hold the unsorted central dir file record
> offsets, and
> > -+     * possibly another to hold the sorted indices. */
> > -     if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir,
> cdir_size,
> > -                               MZ_FALSE)) ||
> > -         (!mz_zip_array_resize(pZip,
> &pZip->m_pState->m_central_dir_offsets,
> > -                               pZip->m_total_files, MZ_FALSE)))
> > --      return MZ_FALSE;
> > -+      return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
> > -
> > -     if (sort_central_dir) {
> > -       if (!mz_zip_array_resize(pZip,
> > -
> &pZip->m_pState->m_sorted_central_dir_offsets,
> > -                                pZip->m_total_files, MZ_FALSE))
> > --        return MZ_FALSE;
> > -+        return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
> > -     }
> > -
> > -     if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
> > -                       pZip->m_pState->m_central_dir.m_p,
> > -                       cdir_size) != cdir_size)
> > --      return MZ_FALSE;
> > -+      return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
> > -
> > --    // Now create an index into the central directory file records, do
> some
> > --    // basic sanity checking on each record, and check for zip64
> entries (which
> > --    // are not yet supported).
> > -+    /* Now create an index into the central directory file records, do
> some
> > -+     * basic sanity checking on each record */
> > -     p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p;
> > -     for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
> > --      mz_uint total_header_size, comp_size, decomp_size, disk_index;
> > -+      mz_uint total_header_size, disk_index, bit_flags, filename_size,
> > -+          ext_data_size;
> > -+      mz_uint64 comp_size, decomp_size, local_header_ofs;
> > -+
> > -       if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
> > -           (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
> > --        return MZ_FALSE;
> > -+        return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+
> > -       MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets,
> mz_uint32,
> > -                            i) =
> > -           (mz_uint32)(p - (const mz_uint8
> *)pZip->m_pState->m_central_dir.m_p);
> > -+
> > -       if (sort_central_dir)
> > -
>  MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets,
> > -                              mz_uint32, i) = i;
> > -+
> > -       comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
> > -       decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
> > --      if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
> > --           (decomp_size != comp_size)) ||
> > --          (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) ||
> > --          (comp_size == 0xFFFFFFFF))
> > --        return MZ_FALSE;
> > -+      local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
> > -+      filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
> > -+      ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS);
> > -+
> > -+      if ((!pZip->m_pState->m_zip64_has_extended_info_fields) &&
> > -+          (ext_data_size) &&
> > -+          (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) ==
> > -+           MZ_UINT32_MAX)) {
> > -+        /* Attempt to find zip64 extended information field in the
> entry's extra
> > -+         * data */
> > -+        mz_uint32 extra_size_remaining = ext_data_size;
> > -+
> > -+        if (extra_size_remaining) {
> > -+          const mz_uint8 *pExtra_data;
> > -+          void *buf = NULL;
> > -+
> > -+          if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size +
> ext_data_size >
> > -+              n) {
> > -+            buf = MZ_MALLOC(ext_data_size);
> > -+            if (buf == NULL)
> > -+              return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
> > -+
> > -+            if (pZip->m_pRead(pZip->m_pIO_opaque,
> > -+                              cdir_ofs +
> MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
> > -+                                  filename_size,
> > -+                              buf, ext_data_size) != ext_data_size) {
> > -+              MZ_FREE(buf);
> > -+              return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
> > -+            }
> > -+
> > -+            pExtra_data = (mz_uint8 *)buf;
> > -+          } else {
> > -+            pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
> filename_size;
> > -+          }
> > -+
> > -+          do {
> > -+            mz_uint32 field_id;
> > -+            mz_uint32 field_data_size;
> > -+
> > -+            if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
> > -+              MZ_FREE(buf);
> > -+              return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+            }
> > -+
> > -+            field_id = MZ_READ_LE16(pExtra_data);
> > -+            field_data_size = MZ_READ_LE16(pExtra_data +
> sizeof(mz_uint16));
> > -+
> > -+            if ((field_data_size + sizeof(mz_uint16) * 2) >
> > -+                extra_size_remaining) {
> > -+              MZ_FREE(buf);
> > -+              return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+            }
> > -+
> > -+            if (field_id ==
> MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
> > -+              /* Ok, the archive didn't have any zip64 headers but it
> uses a
> > -+               * zip64 extended information field so mark it as zip64
> anyway
> > -+               * (this can occur with infozip's zip util when it reads
> > -+               * compresses files from stdin). */
> > -+              pZip->m_pState->m_zip64 = MZ_TRUE;
> > -+              pZip->m_pState->m_zip64_has_extended_info_fields =
> MZ_TRUE;
> > -+              break;
> > -+            }
> > -+
> > -+            pExtra_data += sizeof(mz_uint16) * 2 + field_data_size;
> > -+            extra_size_remaining =
> > -+                extra_size_remaining - sizeof(mz_uint16) * 2 -
> field_data_size;
> > -+          } while (extra_size_remaining);
> > -+
> > -+          MZ_FREE(buf);
> > -+        }
> > -+      }
> > -+
> > -+      /* I've seen archives that aren't marked as zip64 that uses
> zip64 ext
> > -+       * data, argh */
> > -+      if ((comp_size != MZ_UINT32_MAX) && (decomp_size !=
> MZ_UINT32_MAX)) {
> > -+        if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
> > -+             (decomp_size != comp_size)) ||
> > -+            (decomp_size && !comp_size))
> > -+          return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+      }
> > -+
> > -       disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
> > --      if ((disk_index != num_this_disk) && (disk_index != 1))
> > --        return MZ_FALSE;
> > --      if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
> > --           MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) >
> pZip->m_archive_size)
> > --        return MZ_FALSE;
> > -+      if ((disk_index == MZ_UINT16_MAX) ||
> > -+          ((disk_index != num_this_disk) && (disk_index != 1)))
> > -+        return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
> > -+
> > -+      if (comp_size != MZ_UINT32_MAX) {
> > -+        if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
> > -+             MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) >
> pZip->m_archive_size)
> > -+          return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+      }
> > -+
> > -+      bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
> > -+      if (bit_flags &
> MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED)
> > -+        return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
> > -+
> > -       if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
> > -                                MZ_READ_LE16(p +
> MZ_ZIP_CDH_FILENAME_LEN_OFS) +
> > -                                MZ_READ_LE16(p +
> MZ_ZIP_CDH_EXTRA_LEN_OFS) +
> > -                                MZ_READ_LE16(p +
> MZ_ZIP_CDH_COMMENT_LEN_OFS)) >
> > -           n)
> > --        return MZ_FALSE;
> > -+        return mz_zip_set_error(pZip,
> MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
> > -+
> > -       n -= total_header_size;
> > -       p += total_header_size;
> > -     }
> > -diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c
> > -index ff3a8fe1..1abcfd8f 100644
> > ---- a/contrib/zip/src/zip.c
> > -+++ b/contrib/zip/src/zip.c
> > -@@ -24,7 +24,6 @@
> > -   ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <=
> 'z')) &&   \
> > -    (P)[1] == ':')
> > - #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0)
> > --#define ISSLASH(C) ((C) == '/' || (C) == '\\')
> > -
> > - #else
> > -
> > -@@ -48,7 +47,7 @@ int symlink(const char *target, const char
> *linkpath); // needed on Linux
> > - #endif
> > -
> > - #ifndef ISSLASH
> > --#define ISSLASH(C) ((C) == '/')
> > -+#define ISSLASH(C) ((C) == '/' || (C) == '\\')
> > - #endif
> > -
> > - #define CLEANUP(ptr)
>          \
> > -@@ -78,26 +77,34 @@ static const char *base_name(const char *name) {
> > -   return base;
> > - }
> > -
> > --static int mkpath(const char *path) {
> > --  char const *p;
> > -+static int mkpath(char *path) {
> > -+  char *p;
> > -   char npath[MAX_PATH + 1];
> > -   int len = 0;
> > -   int has_device = HAS_DEVICE(path);
> > -
> > -   memset(npath, 0, MAX_PATH + 1);
> > --
> > --#ifdef _WIN32
> > --  // only on windows fix the path
> > --  npath[0] = path[0];
> > --  npath[1] = path[1];
> > --  len = 2;
> > --#endif // _WIN32
> > --
> > -+  if (has_device) {
> > -+    // only on windows
> > -+    npath[0] = path[0];
> > -+    npath[1] = path[1];
> > -+    len = 2;
> > -+  }
> > -   for (p = path + len; *p && len < MAX_PATH; p++) {
> > -     if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len
> > 2))) {
> > --      if (MKDIR(npath) == -1)
> > --        if (errno != EEXIST)
> > -+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) ||
>         \
> > -+    defined(__MINGW32__)
> > -+#else
> > -+      if ('\\' == *p) {
> > -+        *p = '/';
> > -+      }
> > -+#endif
> > -+
> > -+      if (MKDIR(npath) == -1) {
> > -+        if (errno != EEXIST) {
> > -           return -1;
> > -+        }
> > -+      }
> > -     }
> > -     npath[len++] = *p;
> > -   }
> > -@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char
> *entryname) {
> > -   zip->entry.header_offset = zip->archive.m_archive_size;
> > -   memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE *
> sizeof(mz_uint8));
> > -   zip->entry.method = 0;
> > -+
> > -+  // UNIX or APPLE
> > -+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19
> > -+  // regular file with rw-r--r-- persmissions
> > -+  zip->entry.external_attr = (mz_uint32)(0100644) << 16;
> > -+#else
> > -   zip->entry.external_attr = 0;
> > -+#endif
> > -
> > -   num_alignment_padding_bytes =
> > -       mz_zip_writer_compute_padding_needed_for_file_alignment(pzip);
> > -@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip,
> void *buf, size_t bufsize) {
> > -   }
> > -
> > -   if (!mz_zip_reader_extract_to_mem_no_alloc(pzip,
> (mz_uint)zip->entry.index,
> > --  buf, bufsize, 0, NULL,  0)) {
> > -+                                             buf, bufsize, 0, NULL,
> 0)) {
> > -     return -1;
> > -   }
> > -
> > -@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip,
> void *buf, size_t bufsize) {
> > - int zip_entry_fread(struct zip_t *zip, const char *filename) {
> > -   mz_zip_archive *pzip = NULL;
> > -   mz_uint idx;
> > --#if defined(_MSC_VER)
> > --#else
> > -   mz_uint32 xattr = 0;
> > --#endif
> > -   mz_zip_archive_file_stat info;
> > -
> > -   if (!zip) {
> > -@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char
> *dir,
> > -       goto out;
> > -     }
> > -
> > --    if ((((info.m_version_made_by >> 8) == 3) ||
> ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or
> macOS (3 and 19 from section 4.4.2.2 of zip standard)
> > --        && info.m_external_attr & (0x20 << 24)) { // and has sym link
> attribute (0x80 is file, 0x40 is directory)
> > -+    if ((((info.m_version_made_by >> 8) == 3) ||
> > -+         ((info.m_version_made_by >> 8) ==
> > -+          19)) // if zip is produced on Unix or macOS (3 and 19 from
> > -+               // section 4.4.2.2 of zip standard)
> > -+        && info.m_external_attr &
> > -+               (0x20 << 24)) { // and has sym link attribute (0x80 is
> file, 0x40
> > -+                               // is directory)
> > - #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) ||
>         \
> > -     defined(__MINGW32__)
> > --#else
> > --      if (info.m_uncomp_size > MAX_PATH ||
> !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to,
> MAX_PATH, 0, NULL, 0)) {
> > -+#else
> > -+      if (info.m_uncomp_size > MAX_PATH ||
> > -+          !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i,
> symlink_to,
> > -+                                                 MAX_PATH, 0, NULL,
> 0)) {
> > -         goto out;
> > -       }
> > -       symlink_to[info.m_uncomp_size] = '\0';
> > -diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h
> > -index 5f39df50..a48d64d6 100644
> > ---- a/contrib/zip/src/zip.h
> > -+++ b/contrib/zip/src/zip.h
> > -@@ -20,241 +20,240 @@ extern "C" {
> > - #endif
> > -
> > - #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) &&
>          \
> > --    !defined(_SSIZE_T) && !defined(_SSIZE_T_) &&
> !defined(__ssize_t_defined)
> > --#define _SSIZE_T
> > -+    !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) &&
>         \
> > -+    !defined(_SSIZE_T) && !defined(_SSIZE_T_)
> > -+
> > - // 64-bit Windows is the only mainstream platform
> > - // where sizeof(long) != sizeof(void*)
> > - #ifdef _WIN64
> > --typedef long long  ssize_t;  /* byte count or error */
> > -+typedef long long ssize_t; /* byte count or error */
> > - #else
> > --typedef long  ssize_t;  /* byte count or error */
> > -+typedef long ssize_t; /* byte count or error */
> > - #endif
> > -+
> > -+#define _SSIZE_T_DEFINED
> > -+#define _SSIZE_T_DEFINED_
> > -+#define __DEFINED_ssize_t
> > -+#define __ssize_t_defined
> > -+#define _SSIZE_T
> > -+#define _SSIZE_T_
> > -+
> > - #endif
> > -
> > - #ifndef MAX_PATH
> > - #define MAX_PATH 32767 /* # chars in a path name including NULL */
> > - #endif
> > -
> > -+/**
> > -+ * @mainpage
> > -+ *
> > -+ * Documenation for @ref zip.
> > -+ */
> > -+
> > -+/**
> > -+ * @addtogroup zip
> > -+ * @{
> > -+ */
> > -+
> > -+/**
> > -+ * Default zip compression level.
> > -+ */
> > -+
> > - #define ZIP_DEFAULT_COMPRESSION_LEVEL 6
> > -
> > --/*
> > --  This data structure is used throughout the library to represent zip
> archive
> > --  - forward declaration.
> > --*/
> > -+/**
> > -+ * @struct zip_t
> > -+ *
> > -+ * This data structure is used throughout the library to represent zip
> archive -
> > -+ * forward declaration.
> > -+ */
> > - struct zip_t;
> > -
> > --/*
> > --  Opens zip archive with compression level using the given mode.
> > --
> > --  Args:
> > --    zipname: zip archive file name.
> > --    level: compression level (0-9 are the standard zlib-style levels).
> > --    mode: file access mode.
> > --        'r': opens a file for reading/extracting (the file must
> exists).
> > --        'w': creates an empty file for writing.
> > --        'a': appends to an existing archive.
> > --
> > --  Returns:
> > --    The zip archive handler or NULL on error
> > --*/
> > -+/**
> > -+ * Opens zip archive with compression level using the given mode.
> > -+ *
> > -+ * @param zipname zip archive file name.
> > -+ * @param level compression level (0-9 are the standard zlib-style
> levels).
> > -+ * @param mode file access mode.
> > -+ *        - 'r': opens a file for reading/extracting (the file must
> exists).
> > -+ *        - 'w': creates an empty file for writing.
> > -+ *        - 'a': appends to an existing archive.
> > -+ *
> > -+ * @return the zip archive handler or NULL on error
> > -+ */
> > - extern struct zip_t *zip_open(const char *zipname, int level, char
> mode);
> > -
> > --/*
> > --  Closes the zip archive, releases resources - always finalize.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --*/
> > -+/**
> > -+ * Closes the zip archive, releases resources - always finalize.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ */
> > - extern void zip_close(struct zip_t *zip);
> > -
> > --/*
> > --  Opens an entry by name in the zip archive.
> > --  For zip archive opened in 'w' or 'a' mode the function will append
> > --  a new entry. In readonly mode the function tries to locate the entry
> > --  in global dictionary.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    entryname: an entry name in local dictionary.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Opens an entry by name in the zip archive.
> > -+ *
> > -+ * For zip archive opened in 'w' or 'a' mode the function will append
> > -+ * a new entry. In readonly mode the function tries to locate the entry
> > -+ * in global dictionary.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param entryname an entry name in local dictionary.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_entry_open(struct zip_t *zip, const char *entryname);
> > -
> > --/*
> > --  Opens a new entry by index in the zip archive.
> > --  This function is only valid if zip archive was opened in 'r'
> (readonly) mode.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    index: index in local dictionary.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Opens a new entry by index in the zip archive.
> > -+ *
> > -+ * This function is only valid if zip archive was opened in 'r'
> (readonly) mode.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param index index in local dictionary.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_entry_openbyindex(struct zip_t *zip, int index);
> > -
> > --/*
> > --  Closes a zip entry, flushes buffer and releases resources.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Closes a zip entry, flushes buffer and releases resources.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_entry_close(struct zip_t *zip);
> > -
> > --/*
> > --  Returns a local name of the current zip entry.
> > --  The main difference between user's entry name and local entry name
> > --  is optional relative path.
> > --  Following .ZIP File Format Specification - the path stored MUST not
> contain
> > --  a drive or device letter, or a leading slash.
> > --  All slashes MUST be forward slashes '/' as opposed to backwards
> slashes '\'
> > --  for compatibility with Amiga and UNIX file systems etc.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The pointer to the current zip entry name, or NULL on error.
> > --*/
> > -+/**
> > -+ * Returns a local name of the current zip entry.
> > -+ *
> > -+ * The main difference between user's entry name and local entry name
> > -+ * is optional relative path.
> > -+ * Following .ZIP File Format Specification - the path stored MUST not
> contain
> > -+ * a drive or device letter, or a leading slash.
> > -+ * All slashes MUST be forward slashes '/' as opposed to backwards
> slashes '\'
> > -+ * for compatibility with Amiga and UNIX file systems etc.
> > -+ *
> > -+ * @param zip: zip archive handler.
> > -+ *
> > -+ * @return the pointer to the current zip entry name, or NULL on error.
> > -+ */
> > - extern const char *zip_entry_name(struct zip_t *zip);
> > -
> > --/*
> > --  Returns an index of the current zip entry.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The index on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Returns an index of the current zip entry.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ *
> > -+ * @return the index on success, negative number (< 0) on error.
> > -+ */
> > - extern int zip_entry_index(struct zip_t *zip);
> > -
> > --/*
> > --  Determines if the current zip entry is a directory entry.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The return code - 1 (true), 0 (false), negative number (< 0) on
> error.
> > --*/
> > -+/**
> > -+ * Determines if the current zip entry is a directory entry.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ *
> > -+ * @return the return code - 1 (true), 0 (false), negative number (<
> 0) on
> > -+ *         error.
> > -+ */
> > - extern int zip_entry_isdir(struct zip_t *zip);
> > -
> > --/*
> > --  Returns an uncompressed size of the current zip entry.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The uncompressed size in bytes.
> > --*/
> > -+/**
> > -+ * Returns an uncompressed size of the current zip entry.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ *
> > -+ * @return the uncompressed size in bytes.
> > -+ */
> > - extern unsigned long long zip_entry_size(struct zip_t *zip);
> > -
> > --/*
> > --  Returns CRC-32 checksum of the current zip entry.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The CRC-32 checksum.
> > --*/
> > -+/**
> > -+ * Returns CRC-32 checksum of the current zip entry.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ *
> > -+ * @return the CRC-32 checksum.
> > -+ */
> > - extern unsigned int zip_entry_crc32(struct zip_t *zip);
> > -
> > --/*
> > --  Compresses an input buffer for the current zip entry.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    buf: input buffer.
> > --    bufsize: input buffer size (in bytes).
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Compresses an input buffer for the current zip entry.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param buf input buffer.
> > -+ * @param bufsize input buffer size (in bytes).
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t
> bufsize);
> > -
> > --/*
> > --  Compresses a file for the current zip entry.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    filename: input file.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Compresses a file for the current zip entry.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param filename input file.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_entry_fwrite(struct zip_t *zip, const char *filename);
> > -
> > --/*
> > --  Extracts the current zip entry into output buffer.
> > --  The function allocates sufficient memory for a output buffer.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    buf: output buffer.
> > --    bufsize: output buffer size (in bytes).
> > --
> > --  Note:
> > --    - remember to release memory allocated for a output buffer.
> > --    - for large entries, please take a look at zip_entry_extract
> function.
> > --
> > --  Returns:
> > --    The return code - the number of bytes actually read on success.
> > --    Otherwise a -1 on error.
> > --*/
> > -+/**
> > -+ * Extracts the current zip entry into output buffer.
> > -+ *
> > -+ * The function allocates sufficient memory for a output buffer.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param buf output buffer.
> > -+ * @param bufsize output buffer size (in bytes).
> > -+ *
> > -+ * @note remember to release memory allocated for a output buffer.
> > -+ *       for large entries, please take a look at zip_entry_extract
> function.
> > -+ *
> > -+ * @return the return code - the number of bytes actually read on
> success.
> > -+ *         Otherwise a -1 on error.
> > -+ */
> > - extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t
> *bufsize);
> > -
> > --/*
> > --  Extracts the current zip entry into a memory buffer using no memory
> > --  allocation.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    buf: preallocated output buffer.
> > --    bufsize: output buffer size (in bytes).
> > --
> > --  Note:
> > --    - ensure supplied output buffer is large enough.
> > --    - zip_entry_size function (returns uncompressed size for the
> current entry)
> > --      can be handy to estimate how big buffer is needed.
> > --    - for large entries, please take a look at zip_entry_extract
> function.
> > --
> > --  Returns:
> > --    The return code - the number of bytes actually read on success.
> > --    Otherwise a -1 on error (e.g. bufsize is not large enough).
> > --*/
> > --extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf,
> size_t bufsize);
> > --
> > --/*
> > --  Extracts the current zip entry into output file.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    filename: output file.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Extracts the current zip entry into a memory buffer using no memory
> > -+ * allocation.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param buf preallocated output buffer.
> > -+ * @param bufsize output buffer size (in bytes).
> > -+ *
> > -+ * @note ensure supplied output buffer is large enough.
> > -+ *       zip_entry_size function (returns uncompressed size for the
> current
> > -+ *       entry) can be handy to estimate how big buffer is needed. for
> large
> > -+ * entries, please take a look at zip_entry_extract function.
> > -+ *
> > -+ * @return the return code - the number of bytes actually read on
> success.
> > -+ *         Otherwise a -1 on error (e.g. bufsize is not large enough).
> > -+ */
> > -+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf,
> > -+                                     size_t bufsize);
> > -+
> > -+/**
> > -+ * Extracts the current zip entry into output file.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param filename output file.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_entry_fread(struct zip_t *zip, const char *filename);
> > -
> > --/*
> > --  Extracts the current zip entry using a callback function
> (on_extract).
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --    on_extract: callback function.
> > --    arg: opaque pointer (optional argument,
> > --                         which you can pass to the on_extract callback)
> > --
> > --   Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > -+/**
> > -+ * Extracts the current zip entry using a callback function
> (on_extract).
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ * @param on_extract callback function.
> > -+ * @param arg opaque pointer (optional argument, which you can pass to
> the
> > -+ *        on_extract callback)
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -  */
> > - extern int
> > - zip_entry_extract(struct zip_t *zip,
> > -@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip,
> > -                                        const void *data, size_t size),
> > -                   void *arg);
> > -
> > --/*
> > --  Returns the number of all entries (files and directories) in the zip
> archive.
> > --
> > --  Args:
> > --    zip: zip archive handler.
> > --
> > --  Returns:
> > --    The return code - the number of entries on success,
> > --    negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Returns the number of all entries (files and directories) in the
> zip archive.
> > -+ *
> > -+ * @param zip zip archive handler.
> > -+ *
> > -+ * @return the return code - the number of entries on success,
> negative number
> > -+ *         (< 0) on error.
> > -+ */
> > - extern int zip_total_entries(struct zip_t *zip);
> > -
> > --/*
> > --  Creates a new archive and puts files into a single zip archive.
> > --
> > --  Args:
> > --    zipname: zip archive file.
> > --    filenames: input files.
> > --    len: number of input files.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Creates a new archive and puts files into a single zip archive.
> > -+ *
> > -+ * @param zipname zip archive file.
> > -+ * @param filenames input files.
> > -+ * @param len: number of input files.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_create(const char *zipname, const char *filenames[],
> size_t len);
> > -
> > --/*
> > --  Extracts a zip archive file into directory.
> > --
> > --  If on_extract_entry is not NULL, the callback will be called after
> > --  successfully extracted each zip entry.
> > --  Returning a negative value from the callback will cause abort and
> return an
> > --  error. The last argument (void *arg) is optional, which you can use
> to pass
> > --  data to the on_extract_entry callback.
> > --
> > --  Args:
> > --    zipname: zip archive file.
> > --    dir: output directory.
> > --    on_extract_entry: on extract callback.
> > --    arg: opaque pointer.
> > --
> > --  Returns:
> > --    The return code - 0 on success, negative number (< 0) on error.
> > --*/
> > -+/**
> > -+ * Extracts a zip archive file into directory.
> > -+ *
> > -+ * If on_extract_entry is not NULL, the callback will be called after
> > -+ * successfully extracted each zip entry.
> > -+ * Returning a negative value from the callback will cause abort and
> return an
> > -+ * error. The last argument (void *arg) is optional, which you can use
> to pass
> > -+ * data to the on_extract_entry callback.
> > -+ *
> > -+ * @param zipname zip archive file.
> > -+ * @param dir output directory.
> > -+ * @param on_extract_entry on extract callback.
> > -+ * @param arg opaque pointer.
> > -+ *
> > -+ * @return the return code - 0 on success, negative number (< 0) on
> error.
> > -+ */
> > - extern int zip_extract(const char *zipname, const char *dir,
> > -                        int (*on_extract_entry)(const char *filename,
> void *arg),
> > -                        void *arg);
> > -
> > -+/** @} */
> > -+
> > - #ifdef __cplusplus
> > - }
> > - #endif
> > -diff --git a/contrib/zip/test/CMakeLists.txt
> b/contrib/zip/test/CMakeLists.txt
> > -index 9b2a8db1..cc060b00 100644
> > ---- a/contrib/zip/test/CMakeLists.txt
> > -+++ b/contrib/zip/test/CMakeLists.txt
> > -@@ -1,19 +1,16 @@
> > - cmake_minimum_required(VERSION 2.8)
> > -
> > --if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR
> "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}"
> STREQUAL "AppleClang")
> > --  if(ENABLE_COVERAGE)
> > --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ")
> > --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
> > --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs")
> > --    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage")
> > --    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
> > --  endif()
> > --endif ()
> > --
> > - # test
> > --include_directories(../src)
> > --add_executable(test.exe test.c ../src/zip.c)
> > --add_executable(test_miniz.exe test_miniz.c)
> > -+set(test_out test.out)
> > -+set(test_miniz_out test_miniz.out)
> > -+
> > -+add_executable(${test_out} test.c)
> > -+target_link_libraries(${test_out} zip)
> > -+add_executable(${test_miniz_out} test_miniz.c)
> > -+target_link_libraries(${test_miniz_out} zip)
> > -+
> > -+add_test(NAME ${test_out} COMMAND ${test_out})
> > -+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out})
> > -
> > --add_test(NAME test COMMAND test.exe)
> > --add_test(NAME test_miniz COMMAND test_miniz.exe)
> > -+set(test_out ${test_out} PARENT_SCOPE)
> > -+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE)
> > -diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c
> > -index 45443053..a9b2ddab 100644
> > ---- a/contrib/zip/test/test.c
> > -+++ b/contrib/zip/test/test.c
> > -@@ -29,6 +29,8 @@
> > - #define XFILE "7.txt\0"
> > - #define XMODE 0100777
> > -
> > -+#define UNIXMODE 0100644
> > -+
> > - #define UNUSED(x) (void)x
> > -
> > - static int total_entries = 0;
> > -@@ -102,7 +104,8 @@ static void test_read(void) {
> > -   assert(0 == zip_entry_close(zip));
> > -   free(buf);
> > -   buf = NULL;
> > --
> > -+  bufsize = 0;
> > -+
> > -   assert(0 == zip_entry_open(zip, "test/test-2.txt"));
> > -   assert(strlen(TESTDATA2) == zip_entry_size(zip));
> > -   assert(CRC32DATA2 == zip_entry_crc32(zip));
> > -@@ -131,7 +134,8 @@ static void test_read(void) {
> > -   assert(0 == zip_entry_close(zip));
> > -   free(buf);
> > -   buf = NULL;
> > --
> > -+  bufsize = 0;
> > -+
> > -   buftmp = strlen(TESTDATA1);
> > -   buf = calloc(buftmp, sizeof(char));
> > -   assert(0 == zip_entry_open(zip, "test/test-1.txt"));
> > -@@ -433,6 +437,35 @@ static void test_mtime(void) {
> > -   remove(ZIPNAME);
> > - }
> > -
> > -+static void test_unix_permissions(void) {
> > -+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__)
> > -+#else
> > -+  // UNIX or APPLE
> > -+  struct MZ_FILE_STAT_STRUCT file_stats;
> > -+
> > -+  remove(ZIPNAME);
> > -+
> > -+  struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL,
> 'w');
> > -+  assert(zip != NULL);
> > -+
> > -+  assert(0 == zip_entry_open(zip, RFILE));
> > -+  assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1)));
> > -+  assert(0 == zip_entry_close(zip));
> > -+
> > -+  zip_close(zip);
> > -+
> > -+  remove(RFILE);
> > -+
> > -+  assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL));
> > -+
> > -+  assert(0 == MZ_FILE_STAT(RFILE, &file_stats));
> > -+  assert(UNIXMODE == file_stats.st_mode);
> > -+
> > -+  remove(RFILE);
> > -+  remove(ZIPNAME);
> > -+#endif
> > -+}
> > -+
> > - int main(int argc, char *argv[]) {
> > -   UNUSED(argc);
> > -   UNUSED(argv);
> > -@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) {
> > -   test_write_permissions();
> > -   test_exe_permissions();
> > -   test_mtime();
> > -+  test_unix_permissions();
> > -
> > -   remove(ZIPNAME);
> > -   return 0;
> > -diff --git a/contrib/zip/test/test_miniz.c
> b/contrib/zip/test/test_miniz.c
> > -index ebc0564d..babcaecd 100644
> > ---- a/contrib/zip/test/test_miniz.c
> > -+++ b/contrib/zip/test/test_miniz.c
> > -@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) {
> > -   uint step = 0;
> > -   int cmp_status;
> > -   uLong src_len = (uLong)strlen(s_pStr);
> > --  uLong cmp_len = compressBound(src_len);
> > -   uLong uncomp_len = src_len;
> > -+  uLong cmp_len;
> > -   uint8 *pCmp, *pUncomp;
> > -+  size_t sz;
> > -   uint total_succeeded = 0;
> > -   (void)argc, (void)argv;
> > -
> > -   printf("miniz.c version: %s\n", MZ_VERSION);
> > -
> > -   do {
> > -+    pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len,
> &cmp_len, 0);
> > -+    if (!pCmp) {
> > -+      printf("tdefl_compress_mem_to_heap failed\n");
> > -+      return EXIT_FAILURE;
> > -+    }
> > -+    if (src_len <= cmp_len) {
> > -+      printf("tdefl_compress_mem_to_heap failed: from %u to %u
> bytes\n",
> > -+             (mz_uint32)uncomp_len, (mz_uint32)cmp_len);
> > -+      free(pCmp);
> > -+      return EXIT_FAILURE;
> > -+    }
> > -+
> > -+    sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0);
> > -+    if (sz != cmp_len) {
> > -+      printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n",
> > -+             (mz_uint32)cmp_len, (mz_uint32)sz);
> > -+      free(pCmp);
> > -+      return EXIT_FAILURE;
> > -+    }
> > -+
> > -     // Allocate buffers to hold compressed and uncompressed data.
> > -+    free(pCmp);
> > -+    cmp_len = compressBound(src_len);
> > -     pCmp = (mz_uint8 *)malloc((size_t)cmp_len);
> > -     pUncomp = (mz_uint8 *)malloc((size_t)src_len);
> > -     if ((!pCmp) || (!pUncomp)) {
> > diff --git
> a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> b/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> > deleted file mode 100644
> > index e4f5b9ccbd..0000000000
> > ---
> a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> > +++ /dev/null
> > @@ -1,257 +0,0 @@
> > -From cbf94fd62ff831879d10f99aa7766d391ae8a9b7 Mon Sep 17 00:00:00 2001
> > -From: =?UTF-8?q?Victor=20Matar=C3=A9?= <matare@fh-aachen.de>
> > -Date: Tue, 31 Mar 2020 21:30:07 +0200
> > -Subject: [PATCH] use GNUInstallDirs where possible
> > -
> > -Emulate the CMAKE_INSTALL_FULL_* variables on non-Unix systems and
> > -disable redefining FHS-mandated install locations via user-editable
> > -ASSIMP_*_INSTALL_DIR variables. Instead, if it REALLY proves necessary,
> > -Unix users can edit the advanced, canonical CMAKE_INSTALL_* variables.
> > ----
> > - CMakeLists.txt                 | 36 ++++++++++++++++++++++------------
> > - assimp.pc.in                   |  6 ++----
> > - assimpTargets-debug.cmake.in   | 20 +++++++++----------
> > - assimpTargets-release.cmake.in | 18 ++++++++---------
> > - assimpTargets.cmake.in         | 15 +-------------
> > - 5 files changed, 45 insertions(+), 50 deletions(-)
> > -
> > -Upstream-Status: Backport
> > -Comment: Additionally remove setting of ASSIMP_LIBRARY_DIRS,
> ASSIMP_INCLUDE_DIRS
> > -         and INTERFACE_INCLUDE_DIRECTORIES as default cross compile
> paths are enough
> > -         and setting them manually adds non-existing paths to CMake
> modules
> > -
> > -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
> > -
> > -diff --git a/CMakeLists.txt b/CMakeLists.txt
> > -index dcafb649f5..c23c0df33e 100644
> > ---- a/CMakeLists.txt
> > -+++ b/CMakeLists.txt
> > -@@ -230,11 +230,6 @@ SET(LIBASSIMP-DEV_COMPONENT
> "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_M
> > - SET(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT}
> ${LIBASSIMP-DEV_COMPONENT} assimp-dev)
> > - SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library
> names")
> > -
> > --IF( UNIX )
> > --  # Use GNUInstallDirs for Unix predefined directories
> > --  INCLUDE(GNUInstallDirs)
> > --ENDIF( UNIX )
> > --
> > - # Grouped compiler settings
> > - IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT
> CMAKE_COMPILER_IS_MINGW)
> > -   IF(NOT HUNTER_ENABLED)
> > -@@ -329,14 +324,6 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
> > -   SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" )
> > - ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
> > -
> > --# Cache these to allow the user to override them manually.
> > --SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
> > --  "Path the built library files are installed to." )
> > --SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
> > --  "Path the header files are installed to." )
> > --SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
> > --  "Path the tool executables are installed to." )
> > --
> > - get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
> > -
> > - IF (INJECT_DEBUG_POSTFIX AND (is_multi_config OR CMAKE_BUILD_TYPE
> STREQUAL "Debug"))
> > -@@ -391,6 +378,29 @@ IF(HUNTER_ENABLED)
> > -   )
> > - ELSE(HUNTER_ENABLED)
> > -   # cmake configuration files
> > -+
> > -+  IF( UNIX )
> > -+    # Use GNUInstallDirs for Unix predefined directories
> > -+    INCLUDE(GNUInstallDirs)
> > -+
> > -+    SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
> > -+    SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
> > -+    SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
> > -+  ELSE( UNIX )
> > -+    # Cache these to allow the user to override them on non-Unix
> platforms
> > -+    SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
> > -+      "Path the built library files are installed to." )
> > -+    SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
> > -+      "Path the header files are installed to." )
> > -+    SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
> > -+      "Path the tool executables are installed to." )
> > -+
> > -+    SET(CMAKE_INSTALL_FULL_INCLUDEDIR
> ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR})
> > -+    SET(CMAKE_INSTALL_FULL_LIBDIR
> ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR})
> > -+    SET(CMAKE_INSTALL_FULL_BINDIR
> ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR})
> > -+  ENDIF( UNIX )
> > -+
> > -+
> > -   CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in"
>        "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
> > -   CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in"
>        "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE)
> > -   IF (is_multi_config)
> > -diff --git a/assimp.pc.in b/assimp.pc.in
> > -index c659e19f2c..555a3a1d3b 100644
> > ---- a/assimp.pc.in
> > -+++ b/assimp.pc.in
> > -@@ -1,7 +1,5 @@
> > --prefix=@CMAKE_INSTALL_PREFIX@
> > --exec_prefix=@CMAKE_INSTALL_PREFIX@/
> > --libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@
> > --includedir=@CMAKE_INSTALL_PREFIX@
> /../include/@ASSIMP_INCLUDE_INSTALL_DIR@
> > -+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
> > -+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
> > -
> > - Name: @CMAKE_PROJECT_NAME@
> > - Description: Import various well-known 3D model formats in an uniform
> manner.
> > -diff --git a/assimpTargets-debug.cmake.in b/
> assimpTargets-debug.cmake.in
> > -index 1ebe2a6081..f5034c9349 100644
> > ---- a/assimpTargets-debug.cmake.in
> > -+++ b/assimpTargets-debug.cmake.in
> > -@@ -42,22 +42,22 @@ if(MSVC)
> > -     # Import target "assimp::assimp" for configuration "Debug"
> > -     set_property(TARGET assimp::assimp APPEND PROPERTY
> IMPORTED_CONFIGURATIONS DEBUG)
> > -     set_target_properties(assimp::assimp PROPERTIES
> > --      IMPORTED_IMPLIB_DEBUG
> "${_IMPORT_PREFIX}/lib/${importLibraryName}"
> > --      IMPORTED_LOCATION_DEBUG
> "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
> > -+      IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@
> /${importLibraryName}"
> > -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@
> /${sharedLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${importLibraryName}")
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
> > -   else()
> > -     set(staticLibraryName
> "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX
> @@CMAKE_STATIC_LIBRARY_SUFFIX@")
> > -
> > -     # Import target "assimp::assimp" for configuration "Debug"
> > -     set_property(TARGET assimp::assimp APPEND PROPERTY
> IMPORTED_CONFIGURATIONS DEBUG)
> > -     set_target_properties(assimp::assimp PROPERTIES
> > --      IMPORTED_LOCATION_DEBUG
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> > -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@
> /${staticLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
> > -   endif()
> > -
> > - else()
> > -@@ -66,17 +66,17 @@ else()
> > -     set(sharedLibraryName
> "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX
> @@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
> > -     set_target_properties(assimp::assimp PROPERTIES
> > -       IMPORTED_SONAME_DEBUG "${sharedLibraryName}"
> > --      IMPORTED_LOCATION_DEBUG
> "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
> > -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@
> /${sharedLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> > -   else()
> > -     set(staticLibraryName
> "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX
> @@CMAKE_STATIC_LIBRARY_SUFFIX@")
> > -     set_target_properties(assimp::assimp PROPERTIES
> > --      IMPORTED_LOCATION_DEBUG
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> > -+      IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@
> /${staticLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
> > -   endif()
> > - endif()
> > -
> > -diff --git a/assimpTargets-release.cmake.in b/
> assimpTargets-release.cmake.in
> > -index f3db8f12cd..a416e8899b 100644
> > ---- a/assimpTargets-release.cmake.in
> > -+++ b/assimpTargets-release.cmake.in
> > -@@ -42,12 +42,12 @@ if(MSVC)
> > -     # Import target "assimp::assimp" for configuration "Release"
> > -     set_property(TARGET assimp::assimp APPEND PROPERTY
> IMPORTED_CONFIGURATIONS RELEASE)
> > -     set_target_properties(assimp::assimp PROPERTIES
> > --      IMPORTED_IMPLIB_RELEASE
> "${_IMPORT_PREFIX}/lib/${importLibraryName}"
> > --      IMPORTED_LOCATION_RELEASE
> "${_IMPORT_PREFIX}/bin/${sharedLibraryName}"
> > -+      IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@
> /${importLibraryName}"
> > -+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@
> /${sharedLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${importLibraryName}")
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" )
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
> > -   else()
> > -     set(staticLibraryName
> "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
> > -
> > -@@ -57,7 +57,7 @@ if(MSVC)
> > -       IMPORTED_LOCATION_RELEASE
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}")
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
> > -   endif()
> > -
> > - else()
> > -@@ -70,17 +70,17 @@ else()
> > -     endif()
> > -     set_target_properties(assimp::assimp PROPERTIES
> > -       IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
> > --      IMPORTED_LOCATION_RELEASE
> "${_IMPORT_PREFIX}/lib/${sharedLibraryName}"
> > -+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@
> /${sharedLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" )
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
> > -   else()
> > -     set(staticLibraryName
> "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
> > -     set_target_properties(assimp::assimp PROPERTIES
> > --      IMPORTED_LOCATION_RELEASE
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}"
> > -+      IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@
> /${staticLibraryName}"
> > -     )
> > -     list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
> > --    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "${_IMPORT_PREFIX}/lib/${staticLibraryName}" )
> > -+    list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp
> "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
> > -   endif()
> > - endif()
> > -
> > -@@ -91,8 +91,6 @@ get_filename_component(ASSIMP_ROOT_DIR
> "@CMAKE_INSTALL_PREFIX@" REALPATH)
> > -
> > - set( ASSIMP_CXX_FLAGS ) # dynamically linked library
> > - set( ASSIMP_LINK_FLAGS "" )
> > --set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@
> ")
> > --set( ASSIMP_INCLUDE_DIRS
> "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
> > - if(ASSIMP_BUILD_SHARED_LIBS)
> > -   set( ASSIMP_LIBRARIES ${sharedLibraryName})
> > - else()
> > -
> > -diff --git a/assimpTargets.cmake.in b/assimpTargets.cmake.in
> > -index ab1a8d2c7b..ef90c834a6 100644
> > ---- a/assimpTargets.cmake.in
> > -+++ b/assimpTargets.cmake.in
> > -@@ -40,16 +40,6 @@ unset(_targetsDefined)
> > - unset(_targetsNotDefined)
> > - unset(_expectedTargets)
> > -
> > --
> > --# Compute the installation prefix relative to this file.
> > --get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}"
> PATH)
> > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
> > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
> > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
> > --if(_IMPORT_PREFIX STREQUAL "/")
> > --  set(_IMPORT_PREFIX "")
> > --endif()
> > --
> > - # Create imported target assimp::assimp
> > - if(@BUILD_SHARED_LIBS@)
> > -   add_library(assimp::assimp SHARED IMPORTED)
> > -@@ -60,7 +50,7 @@ endif()
> > - set_target_properties(assimp::assimp PROPERTIES
> > -   COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION"
> > -   INTERFACE_assimp_MAJOR_VERSION "1"
> > --  INTERFACE_INCLUDE_DIRECTORIES
> "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include"
> > -+  #INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@"
> > -   #INTERFACE_LINK_LIBRARIES
> "TxtUtils::TxtUtils;MealyMachine::MealyMachine"
> > - )
> > -
> > -@@ -75,9 +65,6 @@ foreach(f ${CONFIG_FILES})
> > -   include(${f})
> > - endforeach()
> > -
> > --# Cleanup temporary variables.
> > --set(_IMPORT_PREFIX)
> > --
> > - # Loop over all imported files and verify that they actually exist
> > - foreach(target ${_IMPORT_CHECK_TARGETS} )
> > -   foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
> > -
> > diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> > deleted file mode 100644
> > index 89c555f08e..0000000000
> > --- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> > +++ /dev/null
> > @@ -1,26 +0,0 @@
> > -DESCRIPTION = "Open Asset Import Library is a portable Open Source
> library to import \
> > -               various well-known 3D model formats in a uniform manner."
> > -HOMEPAGE = "http://www.assimp.org/"
> > -SECTION = "devel"
> > -
> > -LICENSE = "BSD-3-Clause"
> > -LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271"
> > -
> > -DEPENDS = "zlib"
> > -
> > -SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release
> \
> > -
>  file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \
> > -           file://use-GNUInstallDirs-where-possible.patch \
> > -
>  file://0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch \
> > -           "
> > -UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))"
> > -
> > -SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df"
> > -
> > -S = "${WORKDIR}/git"
> > -
> > -inherit cmake
> > -
> > -EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF
> -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}"
> > -
> > -BBCLASSEXTEND = "native nativesdk"
> >
> >
> >
> >
> >
>
>
> --
> # Randy MacLeod
> # Wind River Linux
>
> 
>
>

[-- Attachment #2: Type: text/html, Size: 109224 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-07 12:10     ` Ross Burton
@ 2021-09-07 19:01       ` Khem Raj
  2021-09-08  8:55       ` Robert Yang
  1 sibling, 0 replies; 17+ messages in thread
From: Khem Raj @ 2021-09-07 19:01 UTC (permalink / raw)
  To: Ross Burton; +Cc: Randy MacLeod, Robert Yang, OE-core

On Tue, Sep 7, 2021 at 5:10 AM Ross Burton <ross@burtonini.com> wrote:
>
> On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote:
> > I'll look at the sections that you have pointed out later today.
>
> Debian is always worth looking at when there's license issues.
>
> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source
>
> Specifically:
>
> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81
>
> They strip non-free components from the tarball before importing into
> their git repository.  We can delete the same files during the build
> so they don't get redistributed.

yeah that seems a sensible approach to me.

>
> Ross
>
> 
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-07 12:10     ` Ross Burton
  2021-09-07 19:01       ` Khem Raj
@ 2021-09-08  8:55       ` Robert Yang
  2021-09-08  9:33         ` Mikko Rapeli
  1 sibling, 1 reply; 17+ messages in thread
From: Robert Yang @ 2021-09-08  8:55 UTC (permalink / raw)
  To: Ross Burton, Randy MacLeod; +Cc: OE-core

Hi Ross,

On 9/7/21 8:10 PM, Ross Burton wrote:
> On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote:
>> I'll look at the sections that you have pointed out later today.
> 
> Debian is always worth looking at when there's license issues.
> 
> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source
> 
> Specifically:
> 
> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81
> 
> They strip non-free components from the tarball before importing into
> their git repository.  We can delete the same files during the build
> so they don't get redistributed.

According to the license, those non-free files can't be saved anywhere such
as the mirrors, I think that we need a special do_fetch command for assimp to
make those files won't be saved to DL_DIR or the mirror?

// Robert

> 
> Ross
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-08  8:55       ` Robert Yang
@ 2021-09-08  9:33         ` Mikko Rapeli
  2021-09-08  9:41           ` Robert Yang
  0 siblings, 1 reply; 17+ messages in thread
From: Mikko Rapeli @ 2021-09-08  9:33 UTC (permalink / raw)
  To: liezhi.yang; +Cc: ross, randy.macleod, openembedded-core

Hi,

On Wed, Sep 08, 2021 at 04:55:35PM +0800, Robert Yang wrote:
> On 9/7/21 8:10 PM, Ross Burton wrote:
> > On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote:
> > > I'll look at the sections that you have pointed out later today.
> > 
> > Debian is always worth looking at when there's license issues.
> > 
> > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source
> > 
> > Specifically:
> > 
> > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81
> > 
> > They strip non-free components from the tarball before importing into
> > their git repository.  We can delete the same files during the build
> > so they don't get redistributed.
> 
> According to the license, those non-free files can't be saved anywhere such
> as the mirrors, I think that we need a special do_fetch command for assimp to
> make those files won't be saved to DL_DIR or the mirror?

Maybe just use the Debian original tarball, and possible patches to fix issues
in assimp?

That should be ok for all mirrors.

Cheers,

-Mikko

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-08  9:33         ` Mikko Rapeli
@ 2021-09-08  9:41           ` Robert Yang
  0 siblings, 0 replies; 17+ messages in thread
From: Robert Yang @ 2021-09-08  9:41 UTC (permalink / raw)
  To: Mikko.Rapeli; +Cc: ross, randy.macleod, openembedded-core



On 9/8/21 5:33 PM, Mikko.Rapeli@bmw.de wrote:
> Hi,
> 
> On Wed, Sep 08, 2021 at 04:55:35PM +0800, Robert Yang wrote:
>> On 9/7/21 8:10 PM, Ross Burton wrote:
>>> On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote:
>>>> I'll look at the sections that you have pointed out later today.
>>>
>>> Debian is always worth looking at when there's license issues.
>>>
>>> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source
>>>
>>> Specifically:
>>>
>>> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81
>>>
>>> They strip non-free components from the tarball before importing into
>>> their git repository.  We can delete the same files during the build
>>> so they don't get redistributed.
>>
>> According to the license, those non-free files can't be saved anywhere such
>> as the mirrors, I think that we need a special do_fetch command for assimp to
>> make those files won't be saved to DL_DIR or the mirror?
> 
> Maybe just use the Debian original tarball, and possible patches to fix issues
> in assimp?
> 
> That should be ok for all mirrors.

Yes, that's a good idea, thanks Debian.

// Robert

> 
> Cheers,
> 
> -Mikko
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-07 12:49     ` Alexander Kanavin
@ 2021-09-08 10:08       ` Ross Burton
  2021-09-08 10:34         ` Richard Purdie
  2021-09-09  5:05         ` Khem Raj
  0 siblings, 2 replies; 17+ messages in thread
From: Ross Burton @ 2021-09-08 10:08 UTC (permalink / raw)
  To: Alexander Kanavin; +Cc: Randy MacLeod, Robert Yang, OE-core

On Tue, 7 Sept 2021 at 13:50, Alexander Kanavin <alex.kanavin@gmail.com> wrote:
> I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp.
> qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all.
>
> This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best.

I thought Vulkan needed assimp so dug into the history.  vulkan-demos
used to need it, but that was replaced with vulkan-samples which does
not.

So, I say we drop assimp from core and move it to meta-oe.

Ross

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-08 10:08       ` Ross Burton
@ 2021-09-08 10:34         ` Richard Purdie
  2021-09-09  5:05         ` Khem Raj
  1 sibling, 0 replies; 17+ messages in thread
From: Richard Purdie @ 2021-09-08 10:34 UTC (permalink / raw)
  To: Ross Burton, Alexander Kanavin; +Cc: Randy MacLeod, Robert Yang, OE-core

On Wed, 2021-09-08 at 11:08 +0100, Ross Burton wrote:
> On Tue, 7 Sept 2021 at 13:50, Alexander Kanavin <alex.kanavin@gmail.com> wrote:
> > I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp.
> > qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all.
> > 
> > This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best.
> 
> I thought Vulkan needed assimp so dug into the history.  vulkan-demos
> used to need it, but that was replaced with vulkan-samples which does
> not.
> 
> So, I say we drop assimp from core and move it to meta-oe.

FWIW I agree, its looking like a pain from a few angles and it isn't worth that
in core.

Cheers,

Richard


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 1/1] assimp: Remove it
  2021-09-08 10:08       ` Ross Burton
  2021-09-08 10:34         ` Richard Purdie
@ 2021-09-09  5:05         ` Khem Raj
  1 sibling, 0 replies; 17+ messages in thread
From: Khem Raj @ 2021-09-09  5:05 UTC (permalink / raw)
  To: Ross Burton; +Cc: Alexander Kanavin, Randy MacLeod, Robert Yang, OE-core

On Wed, Sep 8, 2021 at 3:08 AM Ross Burton <ross@burtonini.com> wrote:
>
> On Tue, 7 Sept 2021 at 13:50, Alexander Kanavin <alex.kanavin@gmail.com> wrote:
> > I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp.
> > qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all.
> >
> > This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best.
>
> I thought Vulkan needed assimp so dug into the history.  vulkan-demos
> used to need it, but that was replaced with vulkan-samples which does
> not.
>
> So, I say we drop assimp from core and move it to meta-oe.

just drop it, there is nothing in meta-openembedded repos that need it
so I am not that interested to maintain it in meta-oe either.

>
> Ross
>
> 
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 0/1] assimp: Remove it
  2021-09-07  9:17 [PATCH 0/1] assimp: Remove it Robert Yang
  2021-09-07  9:17 ` [PATCH 1/1] " Robert Yang
@ 2021-09-09  5:06 ` Khem Raj
  2021-09-09 10:26   ` Robert Yang
  1 sibling, 1 reply; 17+ messages in thread
From: Khem Raj @ 2021-09-09  5:06 UTC (permalink / raw)
  To: Robert Yang; +Cc: Patches and discussions about the oe-core layer

also delete meta/lib/oeqa/sdk/cases/assimp.py

On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote:
>
> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a:
>
>   vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100)
>
> are available in the Git repository at:
>
>   git://git.openembedded.org/openembedded-core-contrib rbt/assimp
>   http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp
>
> Robert Yang (1):
>   assimp: Remove it
>
>  meta/conf/distro/include/maintainers.inc      |    1 -
>  ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
>  ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
>  .../use-GNUInstallDirs-where-possible.patch   |  257 ---
>  meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
>  5 files changed, 1980 deletions(-)
>  delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
>  delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
>  delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
>  delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
>
> --
> 2.17.1
>
>
> 
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 0/1] assimp: Remove it
  2021-09-09  5:06 ` [OE-core] [PATCH 0/1] " Khem Raj
@ 2021-09-09 10:26   ` Robert Yang
  2021-09-09 11:19     ` Alexander Kanavin
  2021-09-09 15:43     ` Khem Raj
  0 siblings, 2 replies; 17+ messages in thread
From: Robert Yang @ 2021-09-09 10:26 UTC (permalink / raw)
  To: Khem Raj; +Cc: Patches and discussions about the oe-core layer

Hi Khem,

On 9/9/21 1:06 PM, Khem Raj wrote:
> also delete meta/lib/oeqa/sdk/cases/assimp.py

It's a test case for testing cmake, it should be OK to keep it? Or we need add a
new one to replace it.

// Robert

> 
> On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote:
>>
>> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a:
>>
>>    vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100)
>>
>> are available in the Git repository at:
>>
>>    git://git.openembedded.org/openembedded-core-contrib rbt/assimp
>>    http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp
>>
>> Robert Yang (1):
>>    assimp: Remove it
>>
>>   meta/conf/distro/include/maintainers.inc      |    1 -
>>   ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
>>   ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
>>   .../use-GNUInstallDirs-where-possible.patch   |  257 ---
>>   meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
>>   5 files changed, 1980 deletions(-)
>>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
>>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
>>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
>>   delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
>>
>> --
>> 2.17.1
>>
>>
>> 
>>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 0/1] assimp: Remove it
  2021-09-09 10:26   ` Robert Yang
@ 2021-09-09 11:19     ` Alexander Kanavin
  2021-09-09 15:43     ` Khem Raj
  1 sibling, 0 replies; 17+ messages in thread
From: Alexander Kanavin @ 2021-09-09 11:19 UTC (permalink / raw)
  To: Robert Yang; +Cc: Khem Raj, Patches and discussions about the oe-core layer

[-- Attachment #1: Type: text/plain, Size: 1876 bytes --]

Right, that test is orthogonal and independent of the recipe, so should be
kept until there's a replacement.

Alex

On Thu, 9 Sept 2021 at 12:26, Robert Yang <liezhi.yang@windriver.com> wrote:

> Hi Khem,
>
> On 9/9/21 1:06 PM, Khem Raj wrote:
> > also delete meta/lib/oeqa/sdk/cases/assimp.py
>
> It's a test case for testing cmake, it should be OK to keep it? Or we need
> add a
> new one to replace it.
>
> // Robert
>
> >
> > On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com>
> wrote:
> >>
> >> The following changes since commit
> 70de1dbb660461bdf0613494f53ec4c78738ae2a:
> >>
> >>    vim: Add packageconfig for sound notification support (2021-09-06
> 09:49:13 +0100)
> >>
> >> are available in the Git repository at:
> >>
> >>    git://git.openembedded.org/openembedded-core-contrib rbt/assimp
> >>
> http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp
> >>
> >> Robert Yang (1):
> >>    assimp: Remove it
> >>
> >>   meta/conf/distro/include/maintainers.inc      |    1 -
> >>   ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
> >>   ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
> >>   .../use-GNUInstallDirs-where-possible.patch   |  257 ---
> >>   meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
> >>   5 files changed, 1980 deletions(-)
> >>   delete mode 100644
> meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> >>   delete mode 100644
> meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> >>   delete mode 100644
> meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> >>   delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> >>
> >> --
> >> 2.17.1
> >>
> >>
> >>
> >>
>
> 
>
>

[-- Attachment #2: Type: text/html, Size: 2935 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 0/1] assimp: Remove it
  2021-09-09 10:26   ` Robert Yang
  2021-09-09 11:19     ` Alexander Kanavin
@ 2021-09-09 15:43     ` Khem Raj
  2021-09-10  8:05       ` Robert Yang
  1 sibling, 1 reply; 17+ messages in thread
From: Khem Raj @ 2021-09-09 15:43 UTC (permalink / raw)
  To: Robert Yang; +Cc: Patches and discussions about the oe-core layer

On Thu, Sep 9, 2021 at 3:26 AM Robert Yang <liezhi.yang@windriver.com> wrote:
>
> Hi Khem,
>
> On 9/9/21 1:06 PM, Khem Raj wrote:
> > also delete meta/lib/oeqa/sdk/cases/assimp.py
>
> It's a test case for testing cmake, it should be OK to keep it? Or we need add a
> new one to replace it.

is it downloading assimp code etc. ? if so I would suggest to replace
it with something else too as a followup.

>
> // Robert
>
> >
> > On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote:
> >>
> >> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a:
> >>
> >>    vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100)
> >>
> >> are available in the Git repository at:
> >>
> >>    git://git.openembedded.org/openembedded-core-contrib rbt/assimp
> >>    http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp
> >>
> >> Robert Yang (1):
> >>    assimp: Remove it
> >>
> >>   meta/conf/distro/include/maintainers.inc      |    1 -
> >>   ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
> >>   ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
> >>   .../use-GNUInstallDirs-where-possible.patch   |  257 ---
> >>   meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
> >>   5 files changed, 1980 deletions(-)
> >>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
> >>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
> >>   delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
> >>   delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
> >>
> >> --
> >> 2.17.1
> >>
> >>
> >> 
> >>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [OE-core] [PATCH 0/1] assimp: Remove it
  2021-09-09 15:43     ` Khem Raj
@ 2021-09-10  8:05       ` Robert Yang
  0 siblings, 0 replies; 17+ messages in thread
From: Robert Yang @ 2021-09-10  8:05 UTC (permalink / raw)
  To: Khem Raj; +Cc: Patches and discussions about the oe-core layer



On 9/9/21 11:43 PM, Khem Raj wrote:
> On Thu, Sep 9, 2021 at 3:26 AM Robert Yang <liezhi.yang@windriver.com> wrote:
>>
>> Hi Khem,
>>
>> On 9/9/21 1:06 PM, Khem Raj wrote:
>>> also delete meta/lib/oeqa/sdk/cases/assimp.py
>>
>> It's a test case for testing cmake, it should be OK to keep it? Or we need add a
>> new one to replace it.
> 
> is it downloading assimp code etc. ? if so I would suggest to replace
> it with something else too as a followup.

Yes, it does, I've sent a patch to use expat to replace assimp for the test.

// Robert

> 
>>
>> // Robert
>>
>>>
>>> On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote:
>>>>
>>>> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a:
>>>>
>>>>     vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100)
>>>>
>>>> are available in the Git repository at:
>>>>
>>>>     git://git.openembedded.org/openembedded-core-contrib rbt/assimp
>>>>     http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp
>>>>
>>>> Robert Yang (1):
>>>>     assimp: Remove it
>>>>
>>>>    meta/conf/distro/include/maintainers.inc      |    1 -
>>>>    ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch |   32 -
>>>>    ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 -----------------
>>>>    .../use-GNUInstallDirs-where-possible.patch   |  257 ---
>>>>    meta/recipes-graphics/vulkan/assimp_5.0.1.bb  |   26 -
>>>>    5 files changed, 1980 deletions(-)
>>>>    delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch
>>>>    delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch
>>>>    delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch
>>>>    delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb
>>>>
>>>> --
>>>> 2.17.1
>>>>
>>>>
>>>> 
>>>>

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2021-09-10  8:05 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-07  9:17 [PATCH 0/1] assimp: Remove it Robert Yang
2021-09-07  9:17 ` [PATCH 1/1] " Robert Yang
2021-09-07 12:04   ` [OE-core] " Randy MacLeod
2021-09-07 12:10     ` Ross Burton
2021-09-07 19:01       ` Khem Raj
2021-09-08  8:55       ` Robert Yang
2021-09-08  9:33         ` Mikko Rapeli
2021-09-08  9:41           ` Robert Yang
2021-09-07 12:49     ` Alexander Kanavin
2021-09-08 10:08       ` Ross Burton
2021-09-08 10:34         ` Richard Purdie
2021-09-09  5:05         ` Khem Raj
2021-09-09  5:06 ` [OE-core] [PATCH 0/1] " Khem Raj
2021-09-09 10:26   ` Robert Yang
2021-09-09 11:19     ` Alexander Kanavin
2021-09-09 15:43     ` Khem Raj
2021-09-10  8:05       ` Robert Yang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.