cmake_minimum_required(VERSION 3.4.1)
project(exifThumbnailAdderHelpers LANGUAGES C CXX)

set(PACKAGE "exifThumbnailAdderHelpers")

include(ExternalProject)

# Fetch source location of exiv2 and store in "EXIV2_SOURCE_DIR"
if (USE_PREBUILT_LIB)
    set(EXIV2_SOURCE_DIR ${CMAKE_SOURCE_DIR}/library/${EXIV2_SOURCE_DIRNAME})
else()
    ExternalProject_Get_Property(exiv2_external SOURCE_DIR)
    set(EXIV2_SOURCE_DIR ${SOURCE_DIR})
    unset(SOURCE_DIR)

    ExternalProject_Get_Property(exif_external BINARY_DIR)
    set (EXIF_BINARY_DIR ${BINARY_DIR})
    unset(BINARY_DIR)
endif()

if (USE_PREBUILT_LIB)
    set(FFMPEG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs.prebuilt/ffmpeg-${FFMPEG_VERSION_PREBUILT})
else()
    set(FFMPEG_INCLUDE_DIR ${CMAKE_BINARY_DIR})
endif()

set(SOURCES
        libexif-helper.c
        )

set(HEADERS
        libexif-helper.h
        )

set(SOURCES_Exiv2Helper
        Exiv2Helper.cpp
        )

set(HEADERS_Exiv2Helper
        Exiv2Helper.h
        )

set (SOURCES_exiv2
        ${EXIV2_SOURCE_DIR}/app/exiv2.cpp
        ${EXIV2_SOURCE_DIR}/app/exiv2app.hpp
        ${EXIV2_SOURCE_DIR}/app/actions.cpp ${EXIV2_SOURCE_DIR}/app/actions.hpp
        ${EXIV2_SOURCE_DIR}/app/getopt.cpp ${EXIV2_SOURCE_DIR}/app/getopt.hpp
        ${EXIV2_SOURCE_DIR}/app/app_utils.cpp ${EXIV2_SOURCE_DIR}/app/app_utils.hpp
        )

set (SOURCES_ffmpeg
        ffmpeg_helper.c
        )

set (HEADERS_ffmpeg
        ${FFMPEG_INCLUDE_DIR}/include/libswscale/swscale.h
        ${FFMPEG_INCLUDE_DIR}/include/libavutil/pixfmt.h
        )

set (SOURCES_exceptions
        exceptions.c
        exceptions.h
        )

set (SOURCES_timestamp
        timestamp.c
        )

# Since exiv2 source files are taken from the sources dir generated by
# "ExternalProject" we need to set them as "GENERATED" so that we don't try
# to access them before ExternalProject created the source dir
set_source_files_properties(${SOURCES_exiv2} PROPERTIES GENERATED TRUE)

# To be sure that we don't try to build ffmpeg_helper.c before the "include" it
# depends on are ready (ie. installed by ffmpeg), we need to mark them as GENERATED.
# See: https://stackoverflow.com/a/47813026/15401262
set_source_files_properties(${HEADERS_ffmpeg} PROPERTIES GENERATED TRUE)

# exifThumbnailAdderHelpers links to libavutil & libswscale
# we need to use link_directories so that target_link_libraries works.
# link_directories must be set before "add_library", otherwise the libs will not be found
#link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})

add_library(exifThumbnailAdderHelpers
        SHARED
        ${SOURCES} ${HEADERS}
        ${SOURCES_Exiv2Helper} ${HEADERS_Exiv2Helper}
        ${SOURCES_exiv2}
        ${SOURCES_ffmpeg} ${HEADERS_ffmpeg}
        ${SOURCES_exceptions}
        ${SOURCES_timestamp}
        tests.c
        )

target_include_directories(exifThumbnailAdderHelpers PRIVATE .)
#target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

# for libexif_helper
if (USE_PREBUILT_LIB)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/exif-${EXIF_VERSION_PREBUILT}/include)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/libexif-${LIBEXIF_VERSION_PREBUILT}/include)
else()
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_BINARY_DIR}/include/libexif_app)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${EXIF_BINARY_DIR}) # for config.h
endif()
target_link_libraries(exifThumbnailAdderHelpers libexifLib exifLib)

# for Exiv2Helper
if (USE_PREBUILT_LIB)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/expat-${EXPAT_VERSION_PREBUILT}/include)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/exiv2-${EXIV2_VERSION_PREBUILT}/include)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/exiv2-${EXIV2_VERSION_PREBUILT}/include/exiv2)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/exiv2-${EXIV2_VERSION_PREBUILT}/include/exiv2_for_app)
else()
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${EXIV2_SOURCE_DIR}/src) #for includes of ${EXIV2_SOURCE_DIR}/app/*
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_BINARY_DIR}/include)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_BINARY_DIR}/include/exiv2)
endif()
target_link_libraries(exifThumbnailAdderHelpers libexpatLib) # To be sure libexpat.so is added since it is needed by exiv2
target_link_libraries(exifThumbnailAdderHelpers libexiv2Lib)

# for ffmpeg_helper
if (USE_PREBUILT_LIB OR CMAKE_HOST_WIN32)
    target_include_directories(exifThumbnailAdderHelpers PRIVATE ${CMAKE_SOURCE_DIR}/libs.prebuilt/ffmpeg-${FFMPEG_VERSION_PREBUILT}/include)
endif()
foreach (lib IN LISTS ffmpegLibs)
    target_link_libraries(exifThumbnailAdderHelpers ${lib}Lib)
endforeach()
target_link_libraries(exifThumbnailAdderHelpers log)         # for __android_log_print
target_link_libraries(exifThumbnailAdderHelpers jnigraphics) # for android bitmap in jni/c
