cmake_minimum_required(VERSION 3.13)

project(libalmond VERSION 1.0.0 DESCRIPTION "almond functionality")

option(LIBALMOND_LIBJPEG "use libjpeg to export jpeg images" ON)
option(LIBALMOND_LIBPNG "use libpng to export png images" ON)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../CMakeModules)

find_package(FFmpeg COMPONENTS AVCODEC AVDEVICE AVFORMAT AVUTIL SWSCALE REQUIRED)

add_subdirectory(../libmandel ./libmandel)

#set(Boost_DEBUG 1)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.65 REQUIRED)
find_package(PNG)
find_package (JPEG)

set(CMAKE_CXX_STANDARD 17)


FILE(GLOB libalmondsources src/*.cpp)
FILE(GLOB libalmondheaders include/*.h)

add_library(libalmond STATIC ${libalmondsources})
target_include_directories(libalmond PUBLIC "include")
target_link_libraries(libalmond PUBLIC mandel)
set_target_properties(libalmond PROPERTIES OUTPUT_NAME almond)

target_include_directories(libalmond SYSTEM PUBLIC ${FFMPEG_INCLUDE_DIRS})
target_link_libraries(libalmond PUBLIC ${FFMPEG_LIBRARIES})

if (PNG_FOUND AND LIBALMOND_LIBPNG)
    target_link_libraries(libalmond PUBLIC PNG::PNG)
    target_compile_definitions(libalmond PUBLIC WITH_LIBPNG)
elseif(LIBALMOND_LIBPNG)
    set(PNG_BUILD_ZLIB ON CACHE BOOL "build zlib ourselves")
    add_subdirectory(zlib-1.2.11)
    set(ZLIB_LIBRARY zlibstatic)
    foreach(header ${ZLIB_PUBLIC_HDRS})
        get_filename_component(the_incluude ${header} DIRECTORY)
        list(APPEND ZLIB_PUB_INCLUDE ${the_incluude})
    endforeach()
    set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib-1.2.11 ${ZLIB_PUB_INCLUDE} )
    
    set(SKIP_INSTALL_ALL ON)
    add_subdirectory(lpng1637)
    foreach(header ${libpng_public_hdrs})
        get_filename_component(the_incluude ${header} DIRECTORY)
        list(APPEND PNG_PUB_INCLUDE ${the_incluude})
    endforeach()
    #target_link_libraries(png_static PRIVATE zlibstatic)
    target_include_directories(libalmond PRIVATE ${PNG_PUB_INCLUDE})
    target_include_directories(libalmond PRIVATE ${ZLIB_INCLUDE_DIR})
    target_link_libraries(libalmond PRIVATE png_static)
    target_compile_definitions(libalmond PUBLIC WITH_LIBPNG)
endif()

if (JPEG_FOUND AND LIBALMOND_LIBJPEG)
    target_link_libraries(libalmond PUBLIC JPEG::JPEG)
    target_compile_definitions(libalmond PUBLIC WITH_LIBJPEG)
endif()