Set CMP0169 to NEW (#3089)

FetchContent_Populate(${name}) cannot be used anymore.
Now use FetchContent_MakeAvailable and unify how _SOURCE_DIR
and _BINARY_DIR are set.
diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml
index 0bc2678..43b76f7 100644
--- a/.github/workflows/ci-windows.yml
+++ b/.github/workflows/ci-windows.yml
@@ -85,15 +85,15 @@
           -I.\apps\shared -I.\include -I.\third_party\iccjpeg
           -external:W0
           -external:I.\build\_deps\libpng-src
+          -external:I.\build\_deps\libpng-build
           -external:I.\build\libjpeg\src\libjpeg\src
           -external:I.\build\libjpeg\src\libjpeg-build
           -external:I.\build\_deps\zlib-src
-          -external:I.\build\_deps\libpng
-          -external:I.\build\_deps\zlib
+          -external:I.\build\_deps\zlib-build
           /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}zs.lib
+          build\_deps\libpng-build\${env:CONFIG_DIR}libpng16_static.lib
+          build\_deps\zlib-build\${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/CMakeLists.txt b/CMakeLists.txt
index 4a07fc3..ed2c17e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,7 +22,7 @@
 # New in CMake version 3.30. FetchContent_Populate(<name>) is deprecated, call
 # FetchContent_MakeAvailable(<name>) instead.
 if(POLICY CMP0169)
-    cmake_policy(SET CMP0169 OLD)
+    cmake_policy(SET CMP0169 NEW)
 endif()
 
 # Disallow MSVC for ASM.
diff --git a/cmake/Modules/AvifExternalProjectUtils.cmake b/cmake/Modules/AvifExternalProjectUtils.cmake
index f734408..45423d4 100644
--- a/cmake/Modules/AvifExternalProjectUtils.cmake
+++ b/cmake/Modules/AvifExternalProjectUtils.cmake
@@ -1,16 +1,20 @@
-macro(avif_fetchcontent_populate_cmake name)
+function(avif_fetchcontent_makeavailable_cmake name)
+    FetchContent_GetProperties(${name})
     if(NOT ${name}_POPULATED)
-        FetchContent_Populate(${name})
-
         # Force static build
-        set(BUILD_SHARED_LIBS_ORIG ${BUILD_SHARED_LIBS})
-        set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "")
-        set(BUILD_TESTING_ORIG ${BUILD_TESTING})
-        set(BUILD_TESTING OFF CACHE INTERNAL "")
+        set(BUILD_SHARED_LIBS OFF)
+        set(BUILD_TESTING OFF)
 
-        add_subdirectory(${${name}_SOURCE_DIR} ${${name}_BINARY_DIR} EXCLUDE_FROM_ALL)
+        FetchContent_MakeAvailable(${name})
 
-        set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_ORIG} CACHE BOOL "" FORCE)
-        set(BUILD_TESTING ${BUILD_TESTING_ORIG} CACHE BOOL "" FORCE)
+        if(ANDROID_ABI)
+            set(${name}_BINARY_DIR "${${name}_BINARY_DIR}/${ANDROID_ABI}")
+        endif()
+
+        # We must explicitly move the path variables to the parent scope
+        FetchContent_GetProperties(${name})
+        set(${name}_SOURCE_DIR ${${name}_SOURCE_DIR} PARENT_SCOPE)
+        set(${name}_BINARY_DIR ${${name}_BINARY_DIR} PARENT_SCOPE)
+        set(${name}_POPULATED ${${name}_POPULATED} PARENT_SCOPE)
     endif()
-endmacro()
+endfunction()
diff --git a/cmake/Modules/LocalAom.cmake b/cmake/Modules/LocalAom.cmake
index c2a0100..88fb596 100644
--- a/cmake/Modules/LocalAom.cmake
+++ b/cmake/Modules/LocalAom.cmake
@@ -67,14 +67,10 @@
         endforeach()
     endfunction()
 
-    set(AOM_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/aom-build")
-
-    if(ANDROID_ABI)
-        set(AOM_BINARY_DIR "${AOM_BINARY_DIR}/${ANDROID_ABI}")
-    endif()
-
     FetchContent_Declare(
-        libaom URL "https://aomedia.googlesource.com/aom/+archive/${AVIF_AOM_GIT_TAG}.tar.gz" BINARY_DIR "${AOM_BINARY_DIR}"
+        libaom
+        EXCLUDE_FROM_ALL
+        URL "https://aomedia.googlesource.com/aom/+archive/${AVIF_AOM_GIT_TAG}.tar.gz"
         UPDATE_COMMAND ""
     )
 
@@ -109,7 +105,7 @@
             endforeach()
         endforeach()
 
-        avif_fetchcontent_populate_cmake(libaom)
+        avif_fetchcontent_makeavailable_cmake(libaom)
 
         set(_aom_config RELEASE)
         if(CMAKE_BUILD_TYPE)
@@ -139,10 +135,10 @@
     # linked against this project's target. Here we update the value in aom_config.h and add libyuv
     # to AOM's link libraries
     if(libyuv_FOUND)
-        file(READ ${AOM_BINARY_DIR}/config/aom_config.h AOM_CONFIG_H)
+        file(READ ${libaom_BINARY_DIR}/config/aom_config.h AOM_CONFIG_H)
         if("${AOM_CONFIG_H}" MATCHES "CONFIG_LIBYUV 0")
             string(REPLACE "CONFIG_LIBYUV 0" "CONFIG_LIBYUV 1" AOM_CONFIG_H "${AOM_CONFIG_H}")
-            file(WRITE ${AOM_BINARY_DIR}/config/aom_config.h "${AOM_CONFIG_H}")
+            file(WRITE ${libaom_BINARY_DIR}/config/aom_config.h "${AOM_CONFIG_H}")
         endif()
         target_link_libraries(aom PRIVATE $<TARGET_FILE:yuv::yuv>)
     endif()
diff --git a/cmake/Modules/LocalAvm.cmake b/cmake/Modules/LocalAvm.cmake
index 6a5a3da..1fa3080 100644
--- a/cmake/Modules/LocalAvm.cmake
+++ b/cmake/Modules/LocalAvm.cmake
@@ -25,16 +25,10 @@
     endforeach()
 endfunction()
 
-set(AVM_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/avm-build")
-
-if(ANDROID_ABI)
-    set(AVM_BINARY_DIR "${AVM_BINARY_DIR}/${ANDROID_ABI}")
-endif()
-
 FetchContent_Declare(
     libavm
+    EXCLUDE_FROM_ALL
     GIT_REPOSITORY "https://gitlab.com/AOMediaCodec/avm.git"
-    BINARY_DIR "${AVM_BINARY_DIR}"
     GIT_TAG ${AVIF_AVM_GIT_TAG}
     GIT_PROGRESS ON
     GIT_SHALLOW ON
@@ -83,7 +77,7 @@
         endforeach()
     endforeach()
 
-    avif_fetchcontent_populate_cmake(libavm)
+    avif_fetchcontent_makeavailable_cmake(libavm)
 
     set(_avm_config RELEASE)
     if(CMAKE_BUILD_TYPE)
@@ -113,10 +107,10 @@
 # linked against this project's target. Here we update the value in avm_config.h and add libyuv
 # to AVM's link libraries
 if(libyuv_FOUND)
-    file(READ ${AVM_BINARY_DIR}/config/avm_config.h AVM_CONFIG_H)
+    file(READ ${libavm_BINARY_DIR}/config/avm_config.h AVM_CONFIG_H)
     if("${AVM_CONFIG_H}" MATCHES "CONFIG_LIBYUV 0")
         string(REPLACE "CONFIG_LIBYUV 0" "CONFIG_LIBYUV 1" AVM_CONFIG_H "${AVM_CONFIG_H}")
-        file(WRITE ${AVM_BINARY_DIR}/config/avm_config.h "${AVM_CONFIG_H}")
+        file(WRITE ${libavm_BINARY_DIR}/config/avm_config.h "${AVM_CONFIG_H}")
     endif()
     target_link_libraries(avm PRIVATE $<TARGET_FILE:yuv::yuv>)
 endif()
@@ -126,6 +120,6 @@
 set_property(TARGET avm PROPERTY AVIF_LOCAL ON)
 target_include_directories(avm INTERFACE $<BUILD_INTERFACE:$<PATH:ABSOLUTE_PATH,${libavm_SOURCE_DIR},/>>)
 # libavm-src/avm/avm_encoder.h includes config/avm_config.h which is generated by the local build of avm.
-target_include_directories(avm INTERFACE $<BUILD_INTERFACE:${AVM_BINARY_DIR}>)
+target_include_directories(avm INTERFACE $<BUILD_INTERFACE:${libavm_BINARY_DIR}>)
 
 message(CHECK_PASS "complete")
diff --git a/cmake/Modules/LocalFuzztest.cmake b/cmake/Modules/LocalFuzztest.cmake
index 8e19886..732d8bb 100644
--- a/cmake/Modules/LocalFuzztest.cmake
+++ b/cmake/Modules/LocalFuzztest.cmake
@@ -11,12 +11,10 @@
 
     message(CHECK_START "libavif(AVIF_FUZZTEST=LOCAL): configuring fuzztest")
 
-    set(FUZZTEST_SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/fuzztest-src")
-    set(FUZZTEST_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/fuzztest-build")
     FetchContent_Declare(
         fuzztest
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY "https://github.com/google/fuzztest.git"
-        BINARY_DIR "${FUZZTEST_BINARY_DIR}"
         GIT_TAG "${AVIF_FUZZTEST_TAG}"
         # Fixes for https://github.com/google/fuzztest/issues/1124
         PATCH_COMMAND
@@ -27,7 +25,7 @@
             && sed -i.bak -e "s/set(GTEST_HAS_ABSL ON)/set(GTEST_HAS_ABSL OFF)/" cmake/BuildDependencies.cmake
     )
 
-    avif_fetchcontent_populate_cmake(fuzztest)
+    avif_fetchcontent_makeavailable_cmake(fuzztest)
 
     message(CHECK_PASS "complete")
 endif()
diff --git a/cmake/Modules/LocalGTest.cmake b/cmake/Modules/LocalGTest.cmake
index 5850e6d..390ab7a 100644
--- a/cmake/Modules/LocalGTest.cmake
+++ b/cmake/Modules/LocalGTest.cmake
@@ -34,6 +34,7 @@
 
     FetchContent_Declare(
         googletest
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY https://github.com/google/googletest.git
         GIT_TAG ${AVIF_GTEST_GIT_TAG}
         GIT_SHALLOW ON
@@ -41,7 +42,7 @@
     set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
     set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
 
-    avif_fetchcontent_populate_cmake(googletest)
+    avif_fetchcontent_makeavailable_cmake(googletest)
 
     set_target_properties(gtest gtest_main PROPERTIES AVIF_LOCAL ON)
 
diff --git a/cmake/Modules/LocalLibXml2.cmake b/cmake/Modules/LocalLibXml2.cmake
index dcc223f..ea2c65a 100644
--- a/cmake/Modules/LocalLibXml2.cmake
+++ b/cmake/Modules/LocalLibXml2.cmake
@@ -42,21 +42,16 @@
 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
+    EXCLUDE_FROM_ALL
     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)
+avif_fetchcontent_makeavailable_cmake(libxml2)
 
 set_property(TARGET LibXml2 PROPERTY AVIF_LOCAL ON)
 get_target_property(VAR1 LibXml2 LINKER_LANGUAGE)
diff --git a/cmake/Modules/LocalLibargparse.cmake b/cmake/Modules/LocalLibargparse.cmake
index 964cafa..84fb193 100644
--- a/cmake/Modules/LocalLibargparse.cmake
+++ b/cmake/Modules/LocalLibargparse.cmake
@@ -21,11 +21,12 @@
 
     FetchContent_Declare(
         libargparse
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY "https://github.com/kmurray/libargparse.git"
         GIT_TAG ${AVIF_LIBARGPARSE_GIT_TAG}
         UPDATE_COMMAND ""
     )
-    avif_fetchcontent_populate_cmake(libargparse)
+    avif_fetchcontent_makeavailable_cmake(libargparse)
 
     message(CHECK_PASS "complete")
 endif()
diff --git a/cmake/Modules/LocalLibgav1.cmake b/cmake/Modules/LocalLibgav1.cmake
index eb0858c..8194a5e 100644
--- a/cmake/Modules/LocalLibgav1.cmake
+++ b/cmake/Modules/LocalLibgav1.cmake
@@ -23,11 +23,6 @@
         message(CHECK_START "libavif(AVIF_CODEC_LIBGAV1=LOCAL): fetching and configuring libgav1")
     endif()
 
-    set(LIBGAV1_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libgav1-build")
-    if(ANDROID_ABI)
-        set(LIBGAV1_BINARY_DIR "${LIBGAV1_BINARY_DIR}/${ANDROID_ABI}")
-    endif()
-
     set(LIBGAV1_THREADPOOL_USE_STD_MUTEX 1 CACHE INTERNAL "")
     set(LIBGAV1_ENABLE_EXAMPLES OFF CACHE INTERNAL "")
     set(LIBGAV1_ENABLE_TESTS OFF CACHE INTERNAL "")
@@ -35,14 +30,14 @@
 
     FetchContent_Declare(
         libgav1
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY "https://chromium.googlesource.com/codecs/libgav1"
-        BINARY_DIR "${LIBGAV1_BINARY_DIR}"
         GIT_TAG "${AVIF_LIBGAV1_GIT_TAG}"
         GIT_SHALLOW ON
         UPDATE_COMMAND ""
     )
 
-    avif_fetchcontent_populate_cmake(libgav1)
+    avif_fetchcontent_makeavailable_cmake(libgav1)
     message(CHECK_PASS "complete")
 endif()
 
diff --git a/cmake/Modules/LocalLibsharpyuv.cmake b/cmake/Modules/LocalLibsharpyuv.cmake
index 37e66d7..7d6507c 100644
--- a/cmake/Modules/LocalLibsharpyuv.cmake
+++ b/cmake/Modules/LocalLibsharpyuv.cmake
@@ -30,21 +30,16 @@
     set(WEBP_BUILD_WEBPMUX OFF CACHE BOOL "")
     set(WEBP_BUILD_EXTRAS OFF CACHE BOOL "")
 
-    set(LIBSHARPYUV_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libwebp")
-    if(ANDROID_ABI)
-        set(LIBSHARPYUV_BINARY_DIR "${LIBSHARPYUV_BINARY_DIR}/${ANDROID_ABI}")
-    endif()
-
     FetchContent_Declare(
         libwebp
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY "https://chromium.googlesource.com/webm/libwebp"
-        BINARY_DIR "${LIBSHARPYUV_BINARY_DIR}"
         GIT_TAG "${AVIF_LIBSHARPYUV_GIT_TAG}"
         GIT_SHALLOW ON
         UPDATE_COMMAND ""
     )
 
-    avif_fetchcontent_populate_cmake(libwebp)
+    avif_fetchcontent_makeavailable_cmake(libwebp)
 
     set_property(TARGET sharpyuv PROPERTY POSITION_INDEPENDENT_CODE ON)
     set_property(TARGET sharpyuv PROPERTY AVIF_LOCAL ON)
diff --git a/cmake/Modules/LocalLibyuv.cmake b/cmake/Modules/LocalLibyuv.cmake
index 516eeab..094d01a 100644
--- a/cmake/Modules/LocalLibyuv.cmake
+++ b/cmake/Modules/LocalLibyuv.cmake
@@ -25,11 +25,6 @@
         message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): fetching and configuring libyuv")
     endif()
 
-    set(LIBYUV_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libyuv-build")
-    if(ANDROID_ABI)
-        set(LIBYUV_BINARY_DIR "${LIBYUV_BINARY_DIR}/${ANDROID_ABI}")
-    endif()
-
     # unset JPEG_FOUND so that libyuv does not find it
     set(JPEG_FOUND_ORIG ${JPEG_FOUND})
     unset(JPEG_FOUND CACHE)
@@ -37,13 +32,13 @@
 
     FetchContent_Declare(
         libyuv
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY "https://chromium.googlesource.com/libyuv/libyuv"
-        BINARY_DIR "${LIBYUV_BINARY_DIR}"
         GIT_TAG "${AVIF_LIBYUV_TAG}"
         UPDATE_COMMAND ""
     )
 
-    avif_fetchcontent_populate_cmake(libyuv)
+    avif_fetchcontent_makeavailable_cmake(libyuv)
 
     set(JPEG_FOUND ${JPEG_FOUND_ORIG})
     unset(JPEG_FOUND_ORIG CACHE)
diff --git a/cmake/Modules/LocalRav1e.cmake b/cmake/Modules/LocalRav1e.cmake
index 641b36f..5bff957 100644
--- a/cmake/Modules/LocalRav1e.cmake
+++ b/cmake/Modules/LocalRav1e.cmake
@@ -25,6 +25,7 @@
 
     FetchContent_Declare(
         Corrosion
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git
         GIT_TAG ${AVIF_CORROSION_GIT_TAG}
         GIT_SHALLOW ON
@@ -48,6 +49,7 @@
     if(NOT TARGET cargo-cinstall)
         FetchContent_Declare(
             cargoc
+            EXCLUDE_FROM_ALL
             GIT_REPOSITORY https://github.com/lu-zero/cargo-c.git
             GIT_TAG "${AVIF_CARGOC_GIT_TAG}"
             GIT_SHALLOW ON
@@ -64,6 +66,7 @@
 
     FetchContent_Declare(
         rav1e
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY https://github.com/xiph/rav1e.git
         GIT_TAG "${AVIF_RAV1E_GIT_TAG}"
         GIT_SHALLOW ON
diff --git a/cmake/Modules/LocalSvt.cmake b/cmake/Modules/LocalSvt.cmake
index b6b0201..1ef3e09 100644
--- a/cmake/Modules/LocalSvt.cmake
+++ b/cmake/Modules/LocalSvt.cmake
@@ -17,11 +17,6 @@
         message(CHECK_START "libavif(AVIF_CODEC_SVT=LOCAL): fetching and configuring SVT-AV1")
     endif()
 
-    set(SVT_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/svt-build")
-    if(ANDROID_ABI)
-        set(SVT_BINARY_DIR "${SVT_BINARY_DIR}/${ANDROID_ABI}")
-    endif()
-
     if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64|amd64)")
         # NASM is only used on x86.
         if(NOT CMAKE_ASM_NASM_COMPILER)
@@ -42,8 +37,8 @@
 
     FetchContent_Declare(
         svt
+        EXCLUDE_FROM_ALL
         GIT_REPOSITORY "https://gitlab.com/AOMediaCodec/SVT-AV1.git"
-        BINARY_DIR "${SVT_BINARY_DIR}"
         GIT_TAG "${AVIF_SVT_GIT_TAG}"
         UPDATE_COMMAND ""
         GIT_SHALLOW ON
@@ -57,7 +52,7 @@
     set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "")
 
     set(CMAKE_OUTPUT_DIRECTORY_ORIG "${CMAKE_OUTPUT_DIRECTORY}")
-    set(CMAKE_OUTPUT_DIRECTORY "${SVT_BINARY_DIR}" CACHE INTERNAL "")
+    set(CMAKE_OUTPUT_DIRECTORY "${svt_BINARY_DIR}" CACHE INTERNAL "")
 
     if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
         set(SVT_AV1_LTO ON)
@@ -65,12 +60,12 @@
         set(SVT_AV1_LTO OFF)
     endif()
 
-    avif_fetchcontent_populate_cmake(svt)
+    avif_fetchcontent_makeavailable_cmake(svt)
 
     set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_ORIG} CACHE STRING "" FORCE)
     set(CMAKE_OUTPUT_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY_ORIG} CACHE STRING "" FORCE)
 
-    set(SVT_INCLUDE_DIR ${SVT_BINARY_DIR}/include)
+    set(SVT_INCLUDE_DIR ${svt_BINARY_DIR}/include)
     file(MAKE_DIRECTORY ${SVT_INCLUDE_DIR}/svt-av1)
 
     file(GLOB _svt_header_files ${svt_SOURCE_DIR}/Source/API/*.h)
diff --git a/cmake/Modules/LocalZlibpng.cmake b/cmake/Modules/LocalZlibpng.cmake
index a87bdab..7101c0f 100644
--- a/cmake/Modules/LocalZlibpng.cmake
+++ b/cmake/Modules/LocalZlibpng.cmake
@@ -5,21 +5,14 @@
     message(STATUS "libavif(AVIF_ZLIBPNG=LOCAL): ext/zlib found; using as FetchContent SOURCE_DIR")
     set(FETCHCONTENT_SOURCE_DIR_ZLIB "${AVIF_SOURCE_DIR}/ext/zlib")
     message(CHECK_START "libavif(AVIF_ZLIBPNG=LOCAL): configuring zlib")
-    set(ZLIB_SOURCE_DIR "${FETCHCONTENT_SOURCE_DIR_ZLIB}")
 else()
     message(CHECK_START "libavif(AVIF_ZLIBPNG=LOCAL): fetching and configuring zlib")
-    set(ZLIB_SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/zlib-src")
-endif()
-
-set(ZLIB_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/zlib")
-if(ANDROID_ABI)
-    set(ZLIB_BINARY_DIR "${ZLIB_BINARY_DIR}/${ANDROID_ABI}")
 endif()
 
 FetchContent_Declare(
     zlib
+    EXCLUDE_FROM_ALL
     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
     UPDATE_COMMAND ""
@@ -29,9 +22,7 @@
 set(ZLIB_BUILD_SHARED OFF CACHE BOOL "")
 set(ZLIB_BUILD_STATIC ON CACHE BOOL "")
 
-if(NOT zlib_POPULATED)
-    avif_fetchcontent_populate_cmake(zlib)
-endif()
+avif_fetchcontent_makeavailable_cmake(zlib)
 
 if(NOT TARGET ZLIB::ZLIB)
     add_library(ZLIB::ZLIB ALIAS zlibstatic)
@@ -58,21 +49,16 @@
 set(PNG_TESTS OFF CACHE BOOL "")
 set(PNG_TOOLS OFF CACHE BOOL "")
 
-set(LIBPNG_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libpng")
-if(ANDROID_ABI)
-    set(LIBPNG_BINARY_DIR "${LIBPNG_BINARY_DIR}/${ANDROID_ABI}")
-endif()
-
 FetchContent_Declare(
     libpng
+    EXCLUDE_FROM_ALL
     GIT_REPOSITORY "https://github.com/glennrp/libpng.git"
-    BINARY_DIR "${LIBPNG_BINARY_DIR}"
     GIT_TAG "${AVIF_LIBPNG_GIT_TAG}"
     GIT_SHALLOW ON
     UPDATE_COMMAND ""
 )
 
-avif_fetchcontent_populate_cmake(libpng)
+avif_fetchcontent_makeavailable_cmake(libpng)
 
 set(PNG_PNG_INCLUDE_DIR "${libpng_SOURCE_DIR}")
 include_directories("${libpng_BINARY_DIR}")