cmake_minimum_required(VERSION 4.2)

project(FreeImageRe)

set(FREEIMAGERE_MAJOR_VERSION "4")
set(FREEIMAGERE_MINOR_VERSION "2")
set(FREEIMAGERE_PATCH_VERSION "1")

if (PROJECT_IS_TOP_LEVEL)
    set_property(GLOBAL PROPERTY USE_FOLDERS ON)

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

    set(CMAKE_INSTALL_DOCDIR doc)
endif()


set(CMAKE_POLICY_DEFAULT_CMP0077 "NEW")
cmake_policy(SET CMP0079 NEW) # -> target_link_libraries() allows use with targets in other directories.

if (UNIX)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif()

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# External dependencies
set(EXTERNALPROJECT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

option(USE_SYSTEM_LIBS "Use system-provided libraries" OFF)

option(USE_SYSTEM_ZLIB "Use system-provided ZLib library" OFF)
include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.zlib.cmake)

option(USE_SYSTEM_YATO "Use system-provided Yato library" OFF)
include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.yato.cmake)

option(USE_SYSTEM_LIBJPEG "Use system-provided LibJPEG library" OFF)
option(FREEIMAGE_WITH_LIBJPEG "Compile with the LibJPEG backend" ON)
option(FREEIMAGE_WITH_LIBJPEG_TRANSFORMS "LibJPEG lossless transforms" ON)

if (FREEIMAGE_WITH_LIBJPEG)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.jpeg.cmake)
endif()

option(FREEIMAGE_WITH_LIBOPENJPEG "Compile with the LibOpenJPEG backend" ON)
if (FREEIMAGE_WITH_LIBOPENJPEG)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.openjpeg.cmake)
endif()

option(USE_SYSTEM_LIBOPENEXR "Use system-provided OpenEXR library" OFF)
option(FREEIMAGE_WITH_LIBOPENEXR "Compile with the LibOpenEXR backend" ON)
if (FREEIMAGE_WITH_LIBOPENEXR)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.openexr.cmake)
endif()

option(USE_SYSTEM_LIBPNG "Use system-provided LibPNG library" OFF)
option(FREEIMAGE_WITH_LIBPNG "Compile with the LibPNG backend" ON)
if (FREEIMAGE_WITH_LIBPNG)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.png.cmake)
endif()

option(USE_SYSTEM_LIBTIFF "Use system-provided LibTIFF library" OFF)
option(FREEIMAGE_WITH_LIBTIFF "Compile with the LibTIFF backend" ON)
if (FREEIMAGE_WITH_LIBTIFF)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.tiff.cmake)
endif()

option(USE_SYSTEM_LIBWEBP "Use system-provided LibWEBP library" OFF)
option(FREEIMAGE_WITH_LIBWEBP "Compile with the LibWEBP backend" ON)
if (FREEIMAGE_WITH_LIBWEBP)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.webp.cmake)
endif()

option(USE_SYSTEM_LIBRAW "Use system-provided LibRAW library" OFF)
option(FREEIMAGE_WITH_LIBRAW "Compile with the LibRAW backend" ON)
if (FREEIMAGE_WITH_LIBRAW)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.raw.cmake)
endif()

option(USE_SYSTEM_LIBHEIF "Use system-provided LibHEIF library" OFF)
option(FREEIMAGE_WITH_LIBHEIF "Compile with the LibHEIF backend" ON)
if (FREEIMAGE_WITH_LIBHEIF)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.heif.cmake)
endif()

option(FREEIMAGE_WITH_LIBJPEGXL "Compile with the LibJpegXL backend" ON)
if (FREEIMAGE_WITH_LIBJPEGXL)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.jpegxl.cmake)
endif()

option(FREEIMAGE_WITH_PYTHON_BINDINGS "Build pythin bindings" OFF)
if (FREEIMAGE_WITH_PYTHON_BINDINGS)
    find_package(Python3 COMPONENTS Development REQUIRED)
    include(${EXTERNALPROJECT_INCLUDE_DIR}/dependency.pybind.cmake)
endif()

# Internal dependencies
option(FREEIMAGE_WITH_LIBJXR "Compile with the LibJXR backend" ON)
if (FREEIMAGE_WITH_LIBJXR)
    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/LibJXR ${CMAKE_CURRENT_BINARY_DIR}/LibJXR)
endif()

set(FREEIMAGE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Source)

add_definitions("-DFREEIMAGERE_MAJOR_VERSION=${FREEIMAGERE_MAJOR_VERSION}")
add_definitions("-DFREEIMAGERE_MINOR_VERSION=${FREEIMAGERE_MINOR_VERSION}")
add_definitions("-DFREEIMAGERE_PATCH_VERSION=${FREEIMAGERE_PATCH_VERSION}")

add_subdirectory(Source)

option(FREEIMAGE_BUILD_TESTS "Build test executables" OFF)
if(FREEIMAGE_BUILD_TESTS)
    add_subdirectory(TestAPI)
endif()


# ===========================
# CPack

if(WIN32)
    if(CMAKE_VS_PLATFORM_NAME STREQUAL "ARM64") # cross-compilation
        set(CPACK_SYSTEM_NAME "win-arm64")
    endif()
elseif(UNIX)
    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
        set(CPACK_SYSTEM_NAME "linux64")
    endif()
endif()

set(CPACK_GENERATOR "ZIP")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "FreeImageRe - image codecs library")
set(CPACK_PACKAGE_NAME "FreeImageRe")
set(CPACK_PACKAGE_VENDOR "Alexey Gruzdev")
set(CPACK_PACKAGE_VERSION_MAJOR "${FREEIMAGERE_MAJOR_VERSION}")
set(CPACK_PACKAGE_VERSION_MINOR "${FREEIMAGERE_MINOR_VERSION}")
set(CPACK_PACKAGE_VERSION_PATCH "${FREEIMAGERE_PATCH_VERSION}")
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY OFF)

include(CPack)



