cmake_minimum_required(VERSION 3.16)
project(flutter_image_compress_third_party C CXX)

# This CMakeLists builds vendored codec libraries from source.
# Used by the Docker build script and for Flatpak/Snap builds.
# Sources must be present in subdirectories (fetched by scripts/build_bundled_libs.sh).

include(ExternalProject)

set(INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Install prefix for vendored libs")
set(COMMON_CMAKE_ARGS
  -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  -DCMAKE_BUILD_TYPE=Release
  -DBUILD_SHARED_LIBS=ON
)

# --- zlib ---
ExternalProject_Add(zlib
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib
  CMAKE_ARGS ${COMMON_CMAKE_ARGS}
)

# --- libjpeg-turbo ---
ExternalProject_Add(libjpeg-turbo
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg-turbo
  CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DENABLE_SHARED=ON -DENABLE_STATIC=OFF
)

# --- libpng (depends on zlib) ---
ExternalProject_Add(libpng
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libpng
  CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DPNG_SHARED=ON -DPNG_STATIC=OFF -DPNG_TESTS=OFF
  DEPENDS zlib
)

# --- libwebp ---
ExternalProject_Add(libwebp
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libwebp
  CMAKE_ARGS ${COMMON_CMAKE_ARGS}
    -DWEBP_BUILD_EXTRAS=OFF -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_WEBPMUX=OFF
)

# --- libexif ---
ExternalProject_Add(libexif
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libexif
  CMAKE_ARGS ${COMMON_CMAKE_ARGS}
)

# --- libde265 ---
ExternalProject_Add(libde265
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libde265
  CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DENABLE_ENCODER=OFF -DENABLE_SDL=OFF
)

# --- kvazaar ---
ExternalProject_Add(kvazaar
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/kvazaar
  CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DBUILD_TESTS=OFF
)

# --- libheif (depends on libde265, kvazaar) ---
ExternalProject_Add(libheif
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libheif
  CMAKE_ARGS ${COMMON_CMAKE_ARGS}
    -DWITH_EXAMPLES=OFF -DWITH_GDK_PIXBUF=OFF
    -DWITH_DAV1D=OFF -DWITH_AOM_DECODER=OFF -DWITH_AOM_ENCODER=OFF
    -DWITH_X265=OFF -DWITH_KVAZAAR=ON -DWITH_DE265=ON
    -DCMAKE_PREFIX_PATH=${INSTALL_PREFIX}
  DEPENDS libde265 kvazaar
)
