Bump libjpeg, libpng, libsharpyuv, libxml2, libyuv and zlib (#2923)

Bump libjpeg to 3.1.3
Bump libpng to 1.6.51
Bump libsharpyuv to v1.6.0
Bump libxml2 to v2.15.1
BUmp zlib to 1.3.1.2
diff --git a/.github/workflows/ci-windows-installed.yml b/.github/workflows/ci-windows-installed.yml
index 368ffa4..3562012 100644
--- a/.github/workflows/ci-windows-installed.yml
+++ b/.github/workflows/ci-windows-installed.yml
@@ -47,8 +47,8 @@
 
       - name: Install rav1e
         run: |
-          $LINK = "https://github.com/xiph/rav1e/releases/download/v0.7.1"
-          $FILE = "rav1e-0.7.1-windows-msvc-generic"
+          $LINK = "https://github.com/xiph/rav1e/releases/download/v0.8.1"
+          $FILE = "rav1e-0.8.1-windows-msvc-generic"
           curl -LO "$LINK/$FILE.zip"
           mkdir -p ${{ github.workspace }}\tmp
           7z x -y "$FILE.zip" -o"${{ github.workspace }}\tmp"
diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml
index 4572a11..002c258 100644
--- a/.github/workflows/ci-windows.yml
+++ b/.github/workflows/ci-windows.yml
@@ -45,16 +45,6 @@
           codec-rav1e: "LOCAL"
           extra-cache-key: ${{ matrix.generator }}
 
-      - name: Build libyuv
-        if: steps.setup.outputs.ext-cache-hit != 'true'
-        working-directory: ./ext
-        run: ./libyuv.cmd
-        # Use clang-cl to build libyuv. The assembly code in libyuv is written in the
-        # GCC inline assembly format. Visual C++ doesn't support GCC inline assembly.
-        env:
-          CC: clang-cl
-          CXX: clang-cl
-
       - name: Prepare libavif (cmake)
         run: >
           cmake -G "${{ matrix.generator }}" -S . -B build
@@ -97,7 +87,7 @@
           /link
           build\libjpeg\src\libjpeg-build\${env:CONFIG_DIR}jpeg-static.lib
           build\_deps\libpng\${env:CONFIG_DIR}libpng16_static.lib
-          build\_deps\zlib\${env:CONFIG_DIR}zlibstatic.lib
+          build\_deps\zlib\${env:CONFIG_DIR}zs.lib
           build\${env:CONFIG_DIR}avif.lib
           ws2_32.lib ntdll.lib userenv.lib bcrypt.lib advapi32.lib
           /out:avifenc.exe
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c0c489e..0df061d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,12 @@
   AVIF specification.
 * Add an optional argument to the --depth flag of avifenc used to enable a bit
   depth extension scheme in the encoded file.
+* Update libjpeg.cmd/LocalJpeg.cmake: 3.1.3
+* Update libsharpyuv.cmd/LocalLibsharpyuv.cmake: v1.6.0
+* Update libxml2.cmd/LocalLibXml2.cmake: v2.15.1
+* Update libyuv.cmd/LocalLibyuv.cmake: deeb764bb (1922)
+* Update LocalRav1e.cmake: cargo-c v0.10.14, corrosion v0.5.2,
+* Update zlibpng.cmd/LocalZlibpng.cmake: libpng 1.6.51, zlib 1.3.1.2
 
 ### Changed since 1.3.0
 
diff --git a/cmake/Modules/LocalJpeg.cmake b/cmake/Modules/LocalJpeg.cmake
index 8696a30..e109a16 100644
--- a/cmake/Modules/LocalJpeg.cmake
+++ b/cmake/Modules/LocalJpeg.cmake
@@ -1,4 +1,4 @@
-set(AVIF_JPEG_TAG "3.1.1")
+set(AVIF_JPEG_TAG "3.1.3")
 
 add_library(JPEG::JPEG STATIC IMPORTED GLOBAL)
 
diff --git a/cmake/Modules/LocalLibXml2.cmake b/cmake/Modules/LocalLibXml2.cmake
index 436a93c..66111db 100644
--- a/cmake/Modules/LocalLibXml2.cmake
+++ b/cmake/Modules/LocalLibXml2.cmake
@@ -1,46 +1,69 @@
-set(AVIF_LIBXML_GIT_TAG "v2.14.4")
+set(AVIF_LIBXML_GIT_TAG "v2.15.1")
 
-set(LIB_FILENAME "${AVIF_SOURCE_DIR}/ext/libxml2/install.libavif/lib/${AVIF_LIBRARY_PREFIX}xml2${CMAKE_STATIC_LIBRARY_SUFFIX}")
-if(EXISTS "${LIB_FILENAME}")
-    message(STATUS "libavif(AVIF_LIBXML2=LOCAL): compiled library found at ${LIB_FILENAME}")
-    add_library(LibXml2 STATIC IMPORTED GLOBAL)
-    set_target_properties(LibXml2 PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON)
-    target_include_directories(LibXml2 INTERFACE "${AVIF_SOURCE_DIR}/ext/libxml2/install.libavif/include/libxml2")
-    add_library(LibXml2::LibXml2 ALIAS LibXml2)
-else()
-    message(STATUS "libavif(AVIF_LIBXML2=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
-    if(EXISTS "${AVIF_SOURCE_DIR}/ext/libxml2")
-        message(STATUS "libavif(AVIF_LIBXML2=LOCAL): ext/libxml2 found; using as FetchContent SOURCE_DIR")
-        set(FETCHCONTENT_SOURCE_DIR_LIBXML2 "${AVIF_SOURCE_DIR}/ext/libxml2")
-        message(CHECK_START "libavif(AVIF_LIBXML2=LOCAL): configuring libxml2")
-    else()
-        message(CHECK_START "libavif(AVIF_LIBXML2=LOCAL): fetching and configuring libxml2")
-    endif()
+# First, whether the library exists.
+set(PREFIXES lib ${AVIF_LIBRARY_PREFIX})
+set(SUFFIXES "s" "sd" " ")
+foreach(PREFIX IN LISTS PREFIXES)
+    foreach(SUFFIX IN LISTS SUFFIXES)
+        set(LIB_FILENAME
+            "${AVIF_SOURCE_DIR}/ext/libxml2/install.libavif/lib/${PREFIX}xml2${SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        )
+        if(EXISTS "${LIB_FILENAME}")
+            message(INFO ${CMAKE_LINK_LIBRARY_FLAG})
+            message(STATUS "libavif(AVIF_LIBXML2=LOCAL): compiled library found at ${LIB_FILENAME}")
+            add_library(LibXml2 STATIC IMPORTED GLOBAL)
+            set_target_properties(LibXml2 PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON)
+            if(WIN32)
+                target_link_libraries(LibXml2 INTERFACE bcrypt.lib)
+            endif()
+            target_compile_definitions(LibXml2 INTERFACE LIBXML_STATIC)
+            target_include_directories(LibXml2 INTERFACE "${AVIF_SOURCE_DIR}/ext/libxml2/install.libavif/include/libxml2")
+            add_library(LibXml2::LibXml2 ALIAS LibXml2)
+        endif()
+    endforeach()
+endforeach()
 
-    set(LIBXML2_WITH_PYTHON OFF CACHE INTERNAL "-")
-    set(LIBXML2_WITH_ZLIB OFF CACHE INTERNAL "-")
-    set(LIBXML2_WITH_LZMA OFF CACHE INTERNAL "-")
-    set(LIBXML2_WITH_ICONV OFF CACHE INTERNAL "-")
-    set(LIBXML2_WITH_TESTS OFF CACHE INTERNAL "-")
-    set(LIBXML2_WITH_PROGRAMS OFF CACHE INTERNAL "-")
-
-    set(LIBXML2_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libxml2-build")
-    if(ANDROID_ABI)
-        set(LIBXML2_BINARY_DIR "${LIBXML2_BINARY_DIR}/${ANDROID_ABI}")
-    endif()
-
-    FetchContent_Declare(
-        libxml2
-        GIT_REPOSITORY "https://github.com/GNOME/libxml2.git"
-        BINARY_DIR "${LIBXML2_BINARY_DIR}"
-        GIT_TAG "${AVIF_LIBXML_GIT_TAG}"
-        GIT_SHALLOW ON
-        UPDATE_COMMAND ""
-    )
-
-    avif_fetchcontent_populate_cmake(libxml2)
-
-    set_property(TARGET LibXml2 PROPERTY AVIF_LOCAL ON)
-
-    message(CHECK_PASS "complete")
+if(TARGET LibXml2::LibXml2)
+    return()
 endif()
+
+message(STATUS "libavif(AVIF_LIBXML2=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
+if(EXISTS "${AVIF_SOURCE_DIR}/ext/libxml2")
+    message(STATUS "libavif(AVIF_LIBXML2=LOCAL): ext/libxml2 found; using as FetchContent SOURCE_DIR")
+    set(FETCHCONTENT_SOURCE_DIR_LIBXML2 "${AVIF_SOURCE_DIR}/ext/libxml2")
+    message(CHECK_START "libavif(AVIF_LIBXML2=LOCAL): configuring libxml2")
+else()
+    message(CHECK_START "libavif(AVIF_LIBXML2=LOCAL): fetching and configuring libxml2")
+endif()
+
+set(LIBXML2_WITH_ICONV OFF CACHE INTERNAL "-")
+set(LIBXML2_WITH_PROGRAMS OFF CACHE INTERNAL "-")
+set(LIBXML2_WITH_PYTHON OFF CACHE INTERNAL "-")
+set(LIBXML2_WITH_TESTS OFF CACHE INTERNAL "-")
+set(LIBXML2_WITH_ZLIB OFF CACHE INTERNAL "-")
+
+set(LIBXML2_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libxml2-build")
+if(ANDROID_ABI)
+    set(LIBXML2_BINARY_DIR "${LIBXML2_BINARY_DIR}/${ANDROID_ABI}")
+endif()
+
+FetchContent_Declare(
+    libxml2
+    GIT_REPOSITORY "https://github.com/GNOME/libxml2.git"
+    BINARY_DIR "${LIBXML2_BINARY_DIR}"
+    GIT_TAG "${AVIF_LIBXML_GIT_TAG}"
+    GIT_SHALLOW ON
+    UPDATE_COMMAND ""
+)
+
+avif_fetchcontent_populate_cmake(libxml2)
+
+set_property(TARGET LibXml2 PROPERTY AVIF_LOCAL ON)
+get_target_property(VAR1 LibXml2 LINKER_LANGUAGE)
+get_target_property(VAR2 LibXml2 LINK_LIBRARIES)
+get_target_property(VAR3 LibXml2 LINK_DIRECTORIES)
+get_target_property(VAR4 LibXml2 LINKER_TYPE)
+get_target_property(VAR5 LibXml2 LINK_FLAGS)
+get_target_property(VAR6 LibXml2 LINK_OPTIONS)
+
+message(CHECK_PASS "complete")
diff --git a/cmake/Modules/LocalLibsharpyuv.cmake b/cmake/Modules/LocalLibsharpyuv.cmake
index f093d61..37e66d7 100644
--- a/cmake/Modules/LocalLibsharpyuv.cmake
+++ b/cmake/Modules/LocalLibsharpyuv.cmake
@@ -1,4 +1,4 @@
-set(AVIF_LIBSHARPYUV_GIT_TAG v1.5.0)
+set(AVIF_LIBSHARPYUV_GIT_TAG v1.6.0)
 
 set(LIB_FILENAME "${CMAKE_CURRENT_SOURCE_DIR}/ext/libwebp/build/libsharpyuv${CMAKE_STATIC_LIBRARY_SUFFIX}")
 if(EXISTS "${LIB_FILENAME}")
diff --git a/cmake/Modules/LocalLibyuv.cmake b/cmake/Modules/LocalLibyuv.cmake
index d8730c5..516eeab 100644
--- a/cmake/Modules/LocalLibyuv.cmake
+++ b/cmake/Modules/LocalLibyuv.cmake
@@ -1,4 +1,4 @@
-set(AVIF_LIBYUV_TAG "4db2af62dab48895226be6b52737247e898ebe36")
+set(AVIF_LIBYUV_TAG "deeb764bb92b6305ee0cb5dae7a5940fdb457fa9")
 
 set(AVIF_LIBYUV_BUILD_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/build")
 # If ${ANDROID_ABI} is set, look for the library under that subdirectory.
diff --git a/cmake/Modules/LocalRav1e.cmake b/cmake/Modules/LocalRav1e.cmake
index dfeec14..2bc6b24 100644
--- a/cmake/Modules/LocalRav1e.cmake
+++ b/cmake/Modules/LocalRav1e.cmake
@@ -1,6 +1,6 @@
 set(AVIF_RAV1E_GIT_TAG v0.8.1)
-set(AVIF_CORROSION_GIT_TAG v0.5.2)
-set(AVIF_CARGOC_GIT_TAG v0.10.14)
+set(AVIF_CORROSION_GIT_TAG v0.6.0)
+set(AVIF_CARGOC_GIT_TAG v0.10.18)
 
 set(RAV1E_LIB_FILENAME
     "${AVIF_SOURCE_DIR}/ext/rav1e/build.libavif/usr/lib/${AVIF_LIBRARY_PREFIX}rav1e${CMAKE_STATIC_LIBRARY_SUFFIX}"
diff --git a/cmake/Modules/LocalZlibpng.cmake b/cmake/Modules/LocalZlibpng.cmake
index 19c3c69..8268bdd 100644
--- a/cmake/Modules/LocalZlibpng.cmake
+++ b/cmake/Modules/LocalZlibpng.cmake
@@ -1,5 +1,6 @@
-set(AVIF_ZLIB_GIT_TAG v1.3.1)
-set(AVIF_LIBPNG_GIT_TAG v1.6.50)
+set(AVIF_ZLIB_GIT_TAG v1.3.1.2)
+# v1.6.51 and v1.6.53 confuse CMake by giving Unix flags with MSVC on ci-windows.yml
+set(AVIF_LIBPNG_GIT_TAG v1.6.51)
 
 if(EXISTS "${AVIF_SOURCE_DIR}/ext/zlib")
     message(STATUS "libavif(AVIF_ZLIBPNG=LOCAL): ext/zlib found; using as FetchContent SOURCE_DIR")
@@ -16,28 +17,27 @@
     set(ZLIB_BINARY_DIR "${ZLIB_BINARY_DIR}/${ANDROID_ABI}")
 endif()
 
-# The patch is taken from Google's or-tools
-# https://github.com/google/or-tools/blob/73bef34d95768a0fc0676023bd68111946deb417/cmake/dependencies/CMakeLists.txt
 FetchContent_Declare(
     zlib
     GIT_REPOSITORY "https://github.com/madler/zlib.git"
     SOURCE_DIR "${ZLIB_SOURCE_DIR}" BINARY_DIR "${ZLIB_BINARY_DIR}"
     GIT_TAG "${AVIF_ZLIB_GIT_TAG}"
     GIT_SHALLOW ON
-    PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_SOURCE_DIR}/ext/zlib.patch"
     UPDATE_COMMAND ""
 )
 
-# Put the value of ZLIB_INCLUDE_DIR in the cache. This works around cmake behavior that has been updated by
-# cmake policy CMP0102 in cmake 3.17. Remove the CACHE workaround when we require cmake 3.17 or later. See
-# https://gitlab.kitware.com/cmake/cmake/-/issues/21343.
-set(ZLIB_INCLUDE_DIR "${ZLIB_SOURCE_DIR}" CACHE PATH "zlib include dir")
-set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "")
+set(ZLIB_BUILD_TESTING OFF CACHE BOOL "")
+set(ZLIB_BUILD_SHARED OFF CACHE BOOL "")
+set(ZLIB_BUILD_STATIC ON CACHE BOOL "")
 
 if(NOT zlib_POPULATED)
     avif_fetchcontent_populate_cmake(zlib)
 endif()
 
+if(NOT TARGET ZLIB::ZLIB)
+    add_library(ZLIB::ZLIB ALIAS zlibstatic)
+endif()
+
 set(CMAKE_DEBUG_POSTFIX "")
 
 message(CHECK_PASS "complete")
@@ -55,7 +55,6 @@
 set(ANDROID TRUE)
 set(ZLIB_LIBRARY ZLIB)
 set(ZLIB_ROOT "${zlib_SOURCE_DIR}" CACHE STRING "" FORCE)
-set(ZLIB_USE_STATIC_LIBS ON CACHE BOOL "")
 set(PNG_SHARED OFF CACHE BOOL "")
 set(PNG_TESTS OFF CACHE BOOL "")
 set(PNG_TOOLS OFF CACHE BOOL "")
@@ -80,7 +79,7 @@
 include_directories("${libpng_BINARY_DIR}")
 set(ANDROID ${PREV_ANDROID})
 
-set_target_properties(png_static ZLIB PROPERTIES AVIF_LOCAL ON)
+set_target_properties(png_static zlibstatic PROPERTIES AVIF_LOCAL ON)
 add_library(PNG::PNG ALIAS png_static)
 
 message(CHECK_PASS "complete")
diff --git a/ext/libjpeg.cmd b/ext/libjpeg.cmd
index 7d57601..f7c3ff1 100755
--- a/ext/libjpeg.cmd
+++ b/ext/libjpeg.cmd
@@ -4,7 +4,7 @@
 
 : # The odd choice of comment style in this file is to try to share this script between *nix and win32.
 
-git clone -b 3.1.1 --depth 1 https://github.com/libjpeg-turbo/libjpeg-turbo.git
+git clone -b 3.1.3 --depth 1 https://github.com/libjpeg-turbo/libjpeg-turbo.git
 
 # Set WITH_CRT_DLL to ON to compile libjpeg-turbo with /MD (use the DLL
 # version of the run-time library) instead of /MT (use the static version
diff --git a/ext/libsharpyuv.cmd b/ext/libsharpyuv.cmd
index 4c7c348..304b925 100755
--- a/ext/libsharpyuv.cmd
+++ b/ext/libsharpyuv.cmd
@@ -9,7 +9,7 @@
 : #     "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"
 
 : # libsharpyuv is part of the libwebp repo.
-git clone -b v1.5.0 --depth 1 https://chromium.googlesource.com/webm/libwebp
+git clone -b v1.6.0 --depth 1 https://chromium.googlesource.com/webm/libwebp
 
 cmake -G Ninja -S libwebp -B libwebp/build -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF -DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_LIBWEBPMUX=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF
 cmake --build libwebp/build --config Release --target sharpyuv --parallel
diff --git a/ext/libxml2.cmd b/ext/libxml2.cmd
index 76e92fd..e564a31 100755
--- a/ext/libxml2.cmd
+++ b/ext/libxml2.cmd
@@ -5,9 +5,8 @@
 
 : # libxml2 is released under the MIT License.
 
-git clone -b v2.14.4 --depth 1 https://github.com/GNOME/libxml2.git
+git clone -b v2.15.1 --depth 1 https://github.com/GNOME/libxml2.git
 
-cmake -G Ninja -S libxml2 -B libxml2/build.libavif/ -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=libxml2/install.libavif \
-    -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_LZMA=OFF
+cmake -G Ninja -S libxml2 -B libxml2/build.libavif/ -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=libxml2/install.libavif -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_PROGRAMS=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_ZLIB=OFF
 cmake --build libxml2/build.libavif --config Release --parallel
 cmake --install libxml2/build.libavif
diff --git a/ext/libyuv.cmd b/ext/libyuv.cmd
index 8c56c08..7bbe66e 100755
--- a/ext/libyuv.cmd
+++ b/ext/libyuv.cmd
@@ -17,7 +17,7 @@
 : # When changing the commit below to a newer version of libyuv, it is best to make sure it is being used by chromium,
 : # because the test suite of chromium provides additional test coverage of libyuv.
 : # It can be looked up at https://source.chromium.org/chromium/chromium/src/+/main:DEPS?q=libyuv.
-git checkout 4db2af62d
+git checkout deeb764bb
 cd ..
 
 cmake -G Ninja -S libyuv -B libyuv/build -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON
diff --git a/ext/zlib.patch b/ext/zlib.patch
deleted file mode 100644
index 3722ef9..0000000
--- a/ext/zlib.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 15ceebe..03825a2 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,23 +1,21 @@
--cmake_minimum_required(VERSION 2.4.4...3.15.0)
--set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
-+cmake_minimum_required(VERSION 3.15)
- 
--project(zlib C)
--
--set(VERSION "1.3.1")
-+project(zlib VERSION 1.3.1 LANGUAGES C)
- 
- option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" ON)
- 
--set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
--set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
--set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
--set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
--set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
-+include(GNUInstallDirs)
-+set(INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "Installation directory for executables")
-+set(INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation directory for libraries")
-+set(INSTALL_INC_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "Installation directory for headers")
-+set(INSTALL_MAN_DIR "${CMAKE_INSTALL_MANDIR}" CACHE PATH "Installation directory for manual pages")
-+set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_DATADIR}/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
- 
- include(CheckTypeSize)
- include(CheckFunctionExists)
- include(CheckIncludeFile)
- include(CheckCSourceCompiles)
--enable_testing()
-+include(CTest)
- 
- check_include_file(sys/types.h HAVE_SYS_TYPES_H)
- check_include_file(stdint.h    HAVE_STDINT_H)
-@@ -149,12 +147,21 @@ if(MINGW)
-     set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
- endif(MINGW)
- 
--add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
--target_include_directories(zlib PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
--add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
--target_include_directories(zlibstatic PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
--set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
--set_target_properties(zlib PROPERTIES SOVERSION 1)
-+if(BUILD_SHARED_LIBS)
-+  add_library(ZLIB SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
-+  set_target_properties(ZLIB PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
-+  set_target_properties(ZLIB PROPERTIES SOVERSION 1)
-+else()
-+  add_library(ZLIB STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
-+endif()
-+
-+target_include_directories(ZLIB PUBLIC
-+  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
-+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-+  $<INSTALL_INTERFACE:include>)
-+
-+add_library(ZLIB::ZLIB ALIAS ZLIB)
-+
- 
- if(NOT CYGWIN)
-     # This property causes shared libraries on Linux to have the full version
-@@ -164,26 +171,49 @@ if(NOT CYGWIN)
-     #
-     # This has no effect with MSVC, on that platform the version info for
-     # the DLL comes from the resource file win32/zlib1.rc
--    set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
-+    set_target_properties(ZLIB PROPERTIES VERSION ${ZLIB_FULL_VERSION})
- endif()
- 
- if(UNIX)
-     # On unix-like platforms the library is almost always called libz
--   set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)
--   if(NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX))
--     set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"")
-+   set_target_properties(ZLIB PROPERTIES OUTPUT_NAME z)
-+   if(NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX) AND BUILD_SHARED_LIBS)
-+     set_target_properties(ZLIB PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"")
-    endif()
- elseif(BUILD_SHARED_LIBS AND WIN32)
-     # Creates zlib1.dll when building shared library version
--    set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
-+    set_target_properties(ZLIB PROPERTIES SUFFIX "1.dll")
-+endif()
-+
-+if(NOT UNIX)
-+  if(BUILD_SHARED_LIBS)
-+    set_target_properties(ZLIB PROPERTIES OUTPUT_NAME zlib)
-+  else()
-+    set_target_properties(ZLIB PROPERTIES OUTPUT_NAME zlibstatic)
-+  endif()
- endif()
- 
--if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
--    install(TARGETS zlib zlibstatic
--        RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
--        ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
--        LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
-+if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
-+  install(TARGETS ZLIB
-+    EXPORT ZLIBTargets
-+    RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
-+    ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
-+    LIBRARY DESTINATION "${INSTALL_LIB_DIR}")
-+  install(EXPORT ZLIBTargets
-+    NAMESPACE ZLIB::
-+    DESTINATION lib/cmake/ZLIB)
-+  include(CMakePackageConfigHelpers)
-+  write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfigVersion.cmake"
-+    VERSION ${PROJECT_VERSION}
-+    COMPATIBILITY SameMajorVersion)
-+  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfig.cmake"
-+    "include(\"\${CMAKE_CURRENT_LIST_DIR}/ZLIBTargets.cmake\")"
-+  )
-+  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfig.cmake"
-+    "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfigVersion.cmake"
-+    DESTINATION lib/cmake/ZLIB)
- endif()
-+
- if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
-     install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}")
- endif()
-@@ -199,20 +229,20 @@ endif()
- #============================================================================
- if(ZLIB_BUILD_EXAMPLES)
-     add_executable(example test/example.c)
--    target_link_libraries(example zlib)
-+    target_link_libraries(example ZLIB)
-     add_test(example example)
- 
-     add_executable(minigzip test/minigzip.c)
--    target_link_libraries(minigzip zlib)
-+    target_link_libraries(minigzip ZLIB)
- 
-     if(HAVE_OFF64_T)
-         add_executable(example64 test/example.c)
--        target_link_libraries(example64 zlib)
-+        target_link_libraries(example64 ZLIB)
-         set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
-         add_test(example64 example64)
- 
-         add_executable(minigzip64 test/minigzip.c)
--        target_link_libraries(minigzip64 zlib)
-+        target_link_libraries(minigzip64 ZLIB)
-         set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
-     endif()
- endif()
diff --git a/ext/zlibpng.cmd b/ext/zlibpng.cmd
index 64c7684..c6927df 100755
--- a/ext/zlibpng.cmd
+++ b/ext/zlibpng.cmd
@@ -4,8 +4,8 @@
 
 : # The odd choice of comment style in this file is to try to share this script between *nix and win32.
 
-git clone -b v1.3.1 --depth 1 https://github.com/madler/zlib.git
+git clone -b v1.3.1.2 --depth 1 https://github.com/madler/zlib.git
 cd zlib
 git apply --ignore-whitespace ../zlib.patch
 cd ..
-git clone -b v1.6.50 --depth 1 https://github.com/glennrp/libpng.git
+git clone -b v1.6.51 --depth 1 https://github.com/glennrp/libpng.git