blob: 19c3c697a1a1bf7310eb11ca864c50c58a5269a8 [file] [log] [blame] [edit]
set(AVIF_ZLIB_GIT_TAG v1.3.1)
set(AVIF_LIBPNG_GIT_TAG v1.6.50)
if(EXISTS "${AVIF_SOURCE_DIR}/ext/zlib")
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()
# 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 "")
if(NOT zlib_POPULATED)
avif_fetchcontent_populate_cmake(zlib)
endif()
set(CMAKE_DEBUG_POSTFIX "")
message(CHECK_PASS "complete")
if(EXISTS "${AVIF_SOURCE_DIR}/ext/libpng")
message(STATUS "libavif(AVIF_ZLIBPNG=LOCAL): ext/libpng found; using as FetchContent SOURCE_DIR")
set(FETCHCONTENT_SOURCE_DIR_LIBPNG "${AVIF_SOURCE_DIR}/ext/libpng")
message(CHECK_START "libavif(AVIF_ZLIBPNG=LOCAL): configuring libpng")
else()
message(CHECK_START "libavif(AVIF_ZLIBPNG=LOCAL): fetching and configuring libpng")
endif()
# This is the only way I could avoid libpng going crazy if it found awk.exe, seems benign otherwise
set(PREV_ANDROID ${ANDROID})
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 "")
set(LIBPNG_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libpng")
if(ANDROID_ABI)
set(LIBPNG_BINARY_DIR "${LIBPNG_BINARY_DIR}/${ANDROID_ABI}")
endif()
FetchContent_Declare(
libpng
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)
set(PNG_PNG_INCLUDE_DIR "${libpng_SOURCE_DIR}")
include_directories("${libpng_BINARY_DIR}")
set(ANDROID ${PREV_ANDROID})
set_target_properties(png_static ZLIB PROPERTIES AVIF_LOCAL ON)
add_library(PNG::PNG ALIAS png_static)
message(CHECK_PASS "complete")