#
# SPDX-FileCopyrightText: 2010-2024, Gilles Caulier, <caulier dot gilles at gmail dot com>
# SPDX-FileCopyrightText: 2011-2016, Benjamin Girault, <benjamin dot girault at gmail dot com>
#
# SPDX-License-Identifier: BSD-3-Clause
# For details see the accompanying PANO_COPYING-CMAKE-SCRIPTS file.

APPLY_COMMON_POLICIES()

include(MacroDPlugins)

include_directories($<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Widgets,INTERFACE_INCLUDE_DIRECTORIES>
                    $<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Concurrent,INTERFACE_INCLUDE_DIRECTORIES>
                    $<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Core,INTERFACE_INCLUDE_DIRECTORIES>

                    $<TARGET_PROPERTY:KF${QT_VERSION_MAJOR}::ConfigCore,INTERFACE_INCLUDE_DIRECTORIES>
                    $<TARGET_PROPERTY:KF${QT_VERSION_MAJOR}::I18n,INTERFACE_INCLUDE_DIRECTORIES>
                    $<TARGET_PROPERTY:KF${QT_VERSION_MAJOR}::ThreadWeaver,INTERFACE_INCLUDE_DIRECTORIES>

                    ${CMAKE_CURRENT_SOURCE_DIR}/manager
                    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptoparser
                    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptotype
                    ${CMAKE_CURRENT_SOURCE_DIR}/tasks
                    ${CMAKE_CURRENT_SOURCE_DIR}/tools
                    ${CMAKE_CURRENT_SOURCE_DIR}/wizard

)

# =======================================================

# Rules to prevent broken compilation or warnings with C code generated by Flex
while(CMAKE_C_FLAGS MATCHES "-std=iso9899:1990")
    string(REPLACE "-std=iso9899:1990" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
endwhile()

FLEX_TARGET(PTOScanner panoparser/ptoparser/panoScanner.l ${CMAKE_CURRENT_BINARY_DIR}/panoScanner.c)
BISON_TARGET(PTOParser panoparser/ptoparser/panoParser.y  ${CMAKE_CURRENT_BINARY_DIR}/panoParser.c)
ADD_FLEX_BISON_DEPENDENCY(PTOScanner PTOParser)

if(MSVC)

    set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/panoScanner.c
                                PROPERTIES COMPILE_FLAGS "/w")

else()

    set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/panoScanner.c
                                PROPERTIES COMPILE_FLAGS "-w")

endif()

set_property(SOURCE panoParser.h PROPERTY SKIP_AUTOMOC ON)

# Don't process automoc on panoparser headers

file(GLOB_RECURSE panoparser_headers ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/*.h)

foreach(_file ${panoparser_headers})
    set_property(SOURCE ${_file} PROPERTY SKIP_AUTOMOC ON)
endforeach()

set(libpanoparser_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptotype/ptotype.cpp
    ${FLEX_PTOScanner_OUTPUTS}
    ${BISON_PTOParser_OUTPUTS}
    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptoparser/tparser.c
    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptoparser/tparserprivate.c
    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptoparser/tparsergetters.c
    ${CMAKE_CURRENT_SOURCE_DIR}/panoparser/ptoparser/ptofile.cpp
)

# For unit-tests and plugin
add_library(panoparser STATIC ${libpanoparser_SRCS})

if(MSVC)

    target_compile_definitions(panoparser
                               PRIVATE
                               YY_NO_UNISTD_H
    )

endif()

target_link_libraries(panoparser
                      PRIVATE
                      digikamcore
)

# =======================================================

set(panoramaplugin_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/panotask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/commandtask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/createfinalptotask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/cpfindtask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/cpcleantask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/optimisationtask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/autocroptask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/huginexecutortask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/copyfilestask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/createpreviewtask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/createptotask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tasks/preprocesstask.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tools/autooptimiserbinary.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tools/cpcleanbinary.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tools/cpfindbinary.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tools/huginexecutorbinary.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/tools/panomodifybinary.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/manager/panoactionthread.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/manager/panomanager.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panointropage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panoitemspage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panolastpage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panooptimizepage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panopreprocesspage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panopreviewpage.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/wizard/panowizard.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/panoramaplugin.cpp
)

DIGIKAM_ADD_GENERIC_PLUGIN(NAME    Panorama
                           SOURCES ${panoramaplugin_SRCS}
                           DEPENDS panoparser
                                   KF${QT_VERSION_MAJOR}::ThreadWeaver
)

add_subdirectory(icons)
