cmake_minimum_required(VERSION 3.14)
project(limereport)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${CMAKE_MODULE_PATH}")
include(GenerateVersionHeader)

set(DEFAULT_ITEM_PADDING 0)

option(ENABLE_ZINT "Enable libzint build for barcode support" OFF)
option(LIMEREPORT_STATIC "Build LimeReport as static library" OFF)
option(LIMEREPORT_DEMO "Build LimeReport demos" OFF)
option(ENABLE_DIALOG_DESIGNER "Enable dialog designer" OFF)
option(HAVE_UI_LOADER "Enable ui loader" OFF)
option(USE_QT6 "Use Qt6" OFF)
option(UPDATE_TRANSLATIONS "Update TS files" OFF)

if (ENABLE_DIALOG_DESIGNER AND NOT HAVE_UI_LOADER)
    message(FATAL_ERROR "You need to enable HAVE_UI_LOADER")
endif()

if(USE_QT6)
    find_package(QT NAMES Qt6)
else()
    find_package(QT NAMES Qt5)
endif(USE_QT6)

find_package(
  Qt${QT_VERSION_MAJOR}
  COMPONENTS Core Widgets Sql Network Xml Svg Qml PrintSupport REQUIRED)

if(HAVE_UI_LOADER)
    find_package(
       Qt${QT_VERSION_MAJOR}
       COMPONENTS UiTools REQUIRED)
 endif()

if(ENABLE_DIALOG_DESIGNER)
    if(USE_QT6)
        find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Designer DesignerComponentsPrivate REQUIRED)
    else()
        find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Designer DesignerComponents REQUIRED)
    endif(USE_QT6)
 endif()

# Old Qt does not provide QT_VERSION_MAJOR
if (NOT QT_VERSION_MAJOR)
    string(SUBSTRING ${QT_VERSION} 0 1 QT_VERSION_MAJOR)
endif()

message(STATUS "Qt version: ${QT_VERSION_MAJOR}")
if (Qt${QT_VERSION_MAJOR}Widgets_FOUND)
    message(STATUS "QtGui found")
endif()
if (Qt${QT_VERSION_MAJOR}Widgets_FOUND)
    message(STATUS "QtWidgets found")
endif()

add_subdirectory(3rdparty)

if (LIMEREPORT_DEMO)
    add_subdirectory(console)
    add_subdirectory(designer)
    add_subdirectory(demo_r1)
    add_subdirectory(demo_r2)
endif()

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)


set ( LIMEREPORT_SOURCES
${PROJECT_NAME}/bands/lrdataband.cpp
${PROJECT_NAME}/bands/lrgroupbands.cpp
${PROJECT_NAME}/bands/lrpagefooter.cpp
${PROJECT_NAME}/bands/lrpageheader.cpp
${PROJECT_NAME}/bands/lrreportfooter.cpp
${PROJECT_NAME}/bands/lrreportheader.cpp
${PROJECT_NAME}/bands/lrsubdetailband.cpp
${PROJECT_NAME}/bands/lrtearoffband.cpp
${PROJECT_NAME}/databrowser/lrconnectiondialog.cpp
${PROJECT_NAME}/databrowser/lrdatabrowser.cpp
${PROJECT_NAME}/databrowser/lrdatabrowsertree.cpp
${PROJECT_NAME}/databrowser/lrsqleditdialog.cpp
${PROJECT_NAME}/databrowser/lrvariabledialog.cpp
${PROJECT_NAME}/exporters/lrpdfexporter.cpp
${PROJECT_NAME}/items/charts/lrhorizontalbarchart.cpp
${PROJECT_NAME}/items/charts/lrlineschart.cpp
${PROJECT_NAME}/items/charts/lrgridlineschart.cpp
${PROJECT_NAME}/items/charts/lrpiechart.cpp
${PROJECT_NAME}/items/charts/lrverticalbarchart.cpp
${PROJECT_NAME}/items/editors/lrfonteditorwidget.cpp
${PROJECT_NAME}/items/editors/lritemeditorwidget.cpp
${PROJECT_NAME}/items/editors/lritemsaligneditorwidget.cpp
${PROJECT_NAME}/items/editors/lritemsborderseditorwidget.cpp
${PROJECT_NAME}/items/editors/lrtextalignmenteditorwidget.cpp
${PROJECT_NAME}/items/lrabstractlayout.cpp
${PROJECT_NAME}/items/lralignpropitem.cpp
${PROJECT_NAME}/items/lrborderframeeditor.cpp
${PROJECT_NAME}/items/lrbordereditor.cpp
${PROJECT_NAME}/items/lrchartitem.cpp
${PROJECT_NAME}/items/lrchartaxiseditor.cpp
${PROJECT_NAME}/items/lrchartitemeditor.cpp
${PROJECT_NAME}/items/lrhorizontallayout.cpp
${PROJECT_NAME}/items/lrimageitem.cpp
${PROJECT_NAME}/items/lrimageitemeditor.cpp
${PROJECT_NAME}/items/lrlayoutmarker.cpp
${PROJECT_NAME}/items/lrpageeditor.cpp
${PROJECT_NAME}/items/lrshapeitem.cpp
${PROJECT_NAME}/items/lrsubitemparentpropitem.cpp
${PROJECT_NAME}/items/lrsvgitem.cpp
${PROJECT_NAME}/items/lrtextitem.cpp
${PROJECT_NAME}/items/lrtextitemeditor.cpp
${PROJECT_NAME}/items/lrverticallayout.cpp
${PROJECT_NAME}/lraboutdialog.cpp
${PROJECT_NAME}/lraxisdata.cpp
${PROJECT_NAME}/lrbanddesignintf.cpp
${PROJECT_NAME}/lrbandsmanager.cpp
${PROJECT_NAME}/lrbasedesignintf.cpp
${PROJECT_NAME}/lrcolorindicator.cpp
${PROJECT_NAME}/lrdatadesignintf.cpp
${PROJECT_NAME}/lrdatasourcemanager.cpp
${PROJECT_NAME}/lrglobal.cpp
${PROJECT_NAME}/lrgraphicsviewzoom.cpp
${PROJECT_NAME}/lrgroupfunctions.cpp
${PROJECT_NAME}/lritemdesignintf.cpp
${PROJECT_NAME}/lritemscontainerdesignitf.cpp
${PROJECT_NAME}/lrpagedesignintf.cpp
${PROJECT_NAME}/lrpageitemdesignintf.cpp
${PROJECT_NAME}/lrpreparedpages.cpp
${PROJECT_NAME}/lrpreviewreportwidget.cpp
${PROJECT_NAME}/lrpreviewreportwindow.cpp
${PROJECT_NAME}/lrreportdesignwidget.cpp
${PROJECT_NAME}/lrreportdesignwindow.cpp
${PROJECT_NAME}/lrreportengine.cpp
${PROJECT_NAME}/lrreportrender.cpp
${PROJECT_NAME}/lrreporttranslation.cpp
${PROJECT_NAME}/lrscriptenginemanager.cpp
${PROJECT_NAME}/lrsettingdialog.cpp
${PROJECT_NAME}/lrsimplecrypt.cpp
${PROJECT_NAME}/lrvariablesholder.cpp
${PROJECT_NAME}/objectinspector/editors/lrbuttonlineeditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrcheckboxeditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrcoloreditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrcomboboxeditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrfonteditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrimageeditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrsvgeditor.cpp
${PROJECT_NAME}/objectinspector/editors/lrtextitempropertyeditor.cpp
${PROJECT_NAME}/objectinspector/lrbasedesignobjectmodel.cpp
${PROJECT_NAME}/objectinspector/lrobjectinspectorwidget.cpp
${PROJECT_NAME}/objectinspector/lrobjectitemmodel.cpp
${PROJECT_NAME}/objectinspector/lrobjectpropitem.cpp
${PROJECT_NAME}/objectinspector/lrpropertydelegate.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrboolpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrcolorpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrcontentpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrdatasourcepropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrenumpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrflagspropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrfontpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrgroupfieldpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrimagepropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrintpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrmarginpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrqrealpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrrectproptem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrseriespropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrstringpropitem.cpp
${PROJECT_NAME}/objectinspector/propertyItems/lrsvgpropitem.cpp
${PROJECT_NAME}/objectsbrowser/lrobjectbrowser.cpp
${PROJECT_NAME}/scriptbrowser/lrscriptbrowser.cpp
${PROJECT_NAME}/scripteditor/lrcodeeditor.cpp
${PROJECT_NAME}/scripteditor/lrscripteditor.cpp
${PROJECT_NAME}/scripteditor/lrscripthighlighter.cpp
${PROJECT_NAME}/scripteditor/lrcompletermodel.cpp
${PROJECT_NAME}/serializators/lrxmlbasetypesserializators.cpp
${PROJECT_NAME}/serializators/lrxmlqrectserializator.cpp
${PROJECT_NAME}/serializators/lrxmlreader.cpp
${PROJECT_NAME}/serializators/lrxmlwriter.cpp
${PROJECT_NAME}/translationeditor/languageselectdialog.cpp
${PROJECT_NAME}/translationeditor/translationeditor.cpp


${PROJECT_NAME}/bands/lrdataband.h
${PROJECT_NAME}/bands/lrgroupbands.h
${PROJECT_NAME}/bands/lrpagefooter.h
${PROJECT_NAME}/bands/lrpageheader.h
${PROJECT_NAME}/bands/lrreportfooter.h
${PROJECT_NAME}/bands/lrreportheader.h
${PROJECT_NAME}/bands/lrsubdetailband.h
${PROJECT_NAME}/bands/lrtearoffband.h
${PROJECT_NAME}/base/lrattribsabstractfactory.h
${PROJECT_NAME}/base/lrsimpleabstractfactory.h
${PROJECT_NAME}/base/lrsingleton.h
${PROJECT_NAME}/databrowser/lrconnectiondialog.h
${PROJECT_NAME}/databrowser/lrdatabrowser.h
${PROJECT_NAME}/databrowser/lrdatabrowsertree.h
${PROJECT_NAME}/databrowser/lrsqleditdialog.h
${PROJECT_NAME}/databrowser/lrvariabledialog.h
${PROJECT_NAME}/exporters/lrpdfexporter.h
${PROJECT_NAME}/items/charts/lrhorizontalbarchart.h
${PROJECT_NAME}/items/charts/lrlineschart.h
${PROJECT_NAME}/items/charts/lrgridlineschart.h
${PROJECT_NAME}/items/charts/lrpiechart.h
${PROJECT_NAME}/items/charts/lrverticalbarchart.h
${PROJECT_NAME}/items/editors/lrfonteditorwidget.h
${PROJECT_NAME}/items/editors/lritemeditorwidget.h
${PROJECT_NAME}/items/editors/lritemsaligneditorwidget.h
${PROJECT_NAME}/items/editors/lritemsborderseditorwidget.h
${PROJECT_NAME}/items/editors/lrtextalignmenteditorwidget.h
${PROJECT_NAME}/items/lrabstractlayout.h
${PROJECT_NAME}/items/lralignpropitem.h
${PROJECT_NAME}/items/lrborderframeeditor.h
${PROJECT_NAME}/items/lrbordereditor.h
${PROJECT_NAME}/items/lrchartitem.h
${PROJECT_NAME}/items/lrchartaxiseditor.h
${PROJECT_NAME}/items/lrchartitemeditor.h
${PROJECT_NAME}/items/lreditableimageitemintf.h
${PROJECT_NAME}/items/lrhorizontallayout.h
${PROJECT_NAME}/items/lrimageitem.h
${PROJECT_NAME}/items/lrimageitemeditor.h
${PROJECT_NAME}/items/lrlayoutmarker.h
${PROJECT_NAME}/items/lrpageeditor.h
${PROJECT_NAME}/items/lrshapeitem.h
${PROJECT_NAME}/items/lrsubitemparentpropitem.h
${PROJECT_NAME}/items/lrsvgitem.h
${PROJECT_NAME}/items/lrtextitem.h
${PROJECT_NAME}/items/lrtextitemeditor.h
${PROJECT_NAME}/items/lrverticallayout.h
${PROJECT_NAME}/lraboutdialog.h
${PROJECT_NAME}/lraxisdata.h
${PROJECT_NAME}/lrbanddesignintf.h
${PROJECT_NAME}/lrbandsmanager.h
${PROJECT_NAME}/lrbasedesignintf.h
${PROJECT_NAME}/lrcollection.h
${PROJECT_NAME}/lrcolorindicator.h
${PROJECT_NAME}/lrdatadesignintf.h
${PROJECT_NAME}/lrdatasourcemanager.h
${PROJECT_NAME}/lrdesignelementsfactory.h
${PROJECT_NAME}/lrdesignerplugininterface.h
${PROJECT_NAME}/lrexporterintf.h
${PROJECT_NAME}/lrexportersfactory.h
${PROJECT_NAME}/lrgraphicsviewzoom.h
${PROJECT_NAME}/lrgroupfunctions.h
${PROJECT_NAME}/lritemdesignintf.h
${PROJECT_NAME}/lritemscontainerdesignitf.h
${PROJECT_NAME}/lrpagedesignintf.h
${PROJECT_NAME}/lrpageinitintf.h
${PROJECT_NAME}/lrpageitemdesignintf.h
${PROJECT_NAME}/lrpreparedpages.h
${PROJECT_NAME}/lrpreviewreportwidget_p.h
${PROJECT_NAME}/lrpreviewreportwindow.h
${PROJECT_NAME}/lrreportdesignwidget.h
${PROJECT_NAME}/lrreportdesignwindow.h
${PROJECT_NAME}/lrreportengine_p.h
${PROJECT_NAME}/lrreportrender.h
${PROJECT_NAME}/lrreporttranslation.h
${PROJECT_NAME}/lrscriptenginemanager.h
${PROJECT_NAME}/lrsettingdialog.h
${PROJECT_NAME}/lrsimplecrypt.h
${PROJECT_NAME}/lrvariablesholder.h
${PROJECT_NAME}/objectinspector/editors/lrbuttonlineeditor.h
${PROJECT_NAME}/objectinspector/editors/lrcheckboxeditor.h
${PROJECT_NAME}/objectinspector/editors/lrcoloreditor.h
${PROJECT_NAME}/objectinspector/editors/lrcomboboxeditor.h
${PROJECT_NAME}/objectinspector/editors/lrfonteditor.h
${PROJECT_NAME}/objectinspector/editors/lrimageeditor.h
${PROJECT_NAME}/objectinspector/editors/lrsvgeditor.h
${PROJECT_NAME}/objectinspector/editors/lrtextitempropertyeditor.h
${PROJECT_NAME}/objectinspector/lrbasedesignobjectmodel.h
${PROJECT_NAME}/objectinspector/lrobjectinspectorwidget.h
${PROJECT_NAME}/objectinspector/lrobjectitemmodel.h
${PROJECT_NAME}/objectinspector/lrobjectpropitem.h
${PROJECT_NAME}/objectinspector/lrpropertydelegate.h
${PROJECT_NAME}/objectinspector/propertyItems/lrboolpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrcolorpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrcontentpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrdatasourcepropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrenumpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrflagspropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrfontpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrgroupfieldpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrimagepropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrintpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrmarginpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrqrealpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrrectproptem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrseriespropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrstringpropitem.h
${PROJECT_NAME}/objectinspector/propertyItems/lrsvgpropitem.h
${PROJECT_NAME}/objectsbrowser/lrobjectbrowser.h
${PROJECT_NAME}/scriptbrowser/lrscriptbrowser.h
${PROJECT_NAME}/scripteditor/lrcodeeditor.h
${PROJECT_NAME}/scripteditor/lrscripteditor.h
${PROJECT_NAME}/scripteditor/lrscripthighlighter.h
${PROJECT_NAME}/scripteditor/lrcompletermodel.h
${PROJECT_NAME}/serializators/lrserializatorintf.h
${PROJECT_NAME}/serializators/lrstorageintf.h
${PROJECT_NAME}/serializators/lrxmlbasetypesserializators.h
${PROJECT_NAME}/serializators/lrxmlqrectserializator.h
${PROJECT_NAME}/serializators/lrxmlreader.h
${PROJECT_NAME}/serializators/lrxmlserializatorsfactory.h
${PROJECT_NAME}/serializators/lrxmlwriter.h
${PROJECT_NAME}/translationeditor/languageselectdialog.h
${PROJECT_NAME}/translationeditor/translationeditor.h


${PROJECT_NAME}/databrowser/lrconnectiondialog.ui
${PROJECT_NAME}/databrowser/lrdatabrowser.ui
${PROJECT_NAME}/databrowser/lrsqleditdialog.ui
${PROJECT_NAME}/databrowser/lrvariabledialog.ui
${PROJECT_NAME}/dialogdesigner/templates/Dialog.ui
${PROJECT_NAME}/items/lrborderframeeditor.ui
${PROJECT_NAME}/items/lrbordereditor.ui
${PROJECT_NAME}/items/lrchartitemeditor.ui
${PROJECT_NAME}/items/lrchartaxiseditor.ui
${PROJECT_NAME}/items/lrimageitemeditor.ui
${PROJECT_NAME}/items/lrpageeditor.ui
${PROJECT_NAME}/items/lrtextitemeditor.ui
${PROJECT_NAME}/lraboutdialog.ui
${PROJECT_NAME}/lrpreviewreportwidget.ui
${PROJECT_NAME}/lrpreviewreportwindow.ui
${PROJECT_NAME}/lrsettingdialog.ui
${PROJECT_NAME}/objectinspector/editors/ltextitempropertyeditor.ui
${PROJECT_NAME}/scriptbrowser/lrscriptbrowser.ui
${PROJECT_NAME}/scripteditor/lrscripteditor.ui
${PROJECT_NAME}/translationeditor/languageselectdialog.ui
${PROJECT_NAME}/translationeditor/translationeditor.ui


${PROJECT_NAME}/databrowser/lrdatabrowser.qrc
${PROJECT_NAME}/items/items.qrc
${PROJECT_NAME}/objectinspector/lobjectinspector.qrc
${PROJECT_NAME}/report.qrc
${PROJECT_NAME}/scriptbrowser/lrscriptbrowser.qrc
${PROJECT_NAME}/translationeditor/translationeditor.qrc
)

if(ENABLE_DIALOG_DESIGNER)
    set(DIALOG_DESIGNER_SOURCES
        ${PROJECT_NAME}/dialogdesigner/lrdialogdesigner.h
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/namespace_global.h
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/formresizer.h
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/sizehandlerect.h
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/widgethost.h
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/widgethostconstants.h

        ${PROJECT_NAME}/dialogdesigner/lrdialogdesigner.cpp
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/formresizer.cpp
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/sizehandlerect.cpp
        ${PROJECT_NAME}/dialogdesigner/3rdparty/qtcreator/designerintegrationv2/widgethost.cpp

        ${PROJECT_NAME}/dialogdesigner/templates/Dialog.ui
        ${PROJECT_NAME}/dialogdesigner/dialogdesigner.qrc)

    message(STATUS "DesignerComponents found")
    list( APPEND LIMEREPORT_SOURCES ${DIALOG_DESIGNER_SOURCES} )

endif()

if (ENABLE_ZINT)
    list(APPEND LIMEREPORT_SOURCES ${PROJECT_NAME}/items/lrbarcodeitem.cpp)
    list(APPEND LIMEREPORT_SOURCES ${PROJECT_NAME}/items/lrbarcodeitem.h)
endif(ENABLE_ZINT)

if (LIMEREPORT_STATIC)
    list(APPEND LIMEREPORT_SOURCES ${PROJECT_NAME}/lrfactoryinitializer.cpp)
    list(APPEND LIMEREPORT_SOURCES ${PROJECT_NAME}/lrfactoryinitializer.h)
endif(LIMEREPORT_STATIC)


set(EXTRA_FILES
   ${PROJECT_NAME}/lrglobal.h
   ${PROJECT_NAME}/lrdatasourcemanagerintf.h
   ${PROJECT_NAME}/lrdatasourceintf.h
   ${PROJECT_NAME}/lrreportengine.h
   ${PROJECT_NAME}/lrscriptenginemanagerintf.h
   ${PROJECT_NAME}/lrcallbackdatasourceintf.h
   ${PROJECT_NAME}/lrpreviewreportwidget.h
   ${PROJECT_NAME}/lrreportdesignwindowintrerface.h
   ${PROJECT_NAME}/lrpreparedpagesintf.h
)

set(GLOBAL_HEADERS
    ${PROJECT_NAME}/LimeReport
    ${PROJECT_NAME}/LRCallbackDS
    ${PROJECT_NAME}/LRDataManager
    ${PROJECT_NAME}/LRScriptManager
    ${CMAKE_CURRENT_BINARY_DIR}/limereport/version.h
    )

set(PROJECT_NAME ${PROJECT_NAME}-qt${QT_VERSION_MAJOR})

if (LIMEREPORT_STATIC)
    message(STATUS "STATIC LIBRARY")
    add_library(${PROJECT_NAME} STATIC  ${EXTRA_FILES} ${LIMEREPORT_SOURCES})
    target_compile_definitions( ${PROJECT_NAME} PUBLIC -DHAVE_STATIC_BUILD)
else()
    add_library(${PROJECT_NAME} SHARED  ${EXTRA_FILES} ${LIMEREPORT_SOURCES})
    target_compile_definitions( ${PROJECT_NAME} PRIVATE -DLIMEREPORT_EXPORTS)
    target_compile_definitions( ${PROJECT_NAME} INTERFACE -DLIMEREPORT_IMPORTS)
endif()

if(HAVE_UI_LOADER)
    target_compile_definitions( ${PROJECT_NAME} PRIVATE -DHAVE_UI_LOADER)
    target_link_libraries( ${PROJECT_NAME} PUBLIC
        Qt${QT_VERSION_MAJOR}::UiTools)
 endif()

target_link_libraries( ${PROJECT_NAME} PUBLIC
	Qt${QT_VERSION_MAJOR}::Core
	Qt${QT_VERSION_MAJOR}::Widgets
	Qt${QT_VERSION_MAJOR}::Qml
	Qt${QT_VERSION_MAJOR}::Xml
	Qt${QT_VERSION_MAJOR}::Sql
	Qt${QT_VERSION_MAJOR}::PrintSupport
	Qt${QT_VERSION_MAJOR}::Svg)

if(ENABLE_DIALOG_DESIGNER)
    target_compile_definitions(${PROJECT_NAME} PUBLIC -DHAVE_QTDESIGNER_INTEGRATION)
    if(${QT_VERSION_MAJOR} STREQUAL 5)
        target_link_libraries( ${PROJECT_NAME} PUBLIC
            Qt${QT_VERSION_MAJOR}::Designer
            Qt${QT_VERSION_MAJOR}::DesignerComponents)
    endif()

    if(${QT_VERSION_MAJOR} STREQUAL 6)
        target_link_libraries( ${PROJECT_NAME} PUBLIC
            Qt${QT_VERSION_MAJOR}::Designer
            Qt${QT_VERSION_MAJOR}::DesignerComponentsPrivate)
    endif()

    target_include_directories( ${PROJECT_NAME} PRIVATE
        limereport/dialogdesigner/3rdparty/qtcreator
        limereport/dialogdesigner/3rdparty/designer
        limereport/dialogdesigner/3rdparty/qtcreator/designerintegrationv2)

    target_include_directories( ${PROJECT_NAME} PRIVATE
        ${CMAKE_PREFIX_PATH}/include/QtDesigner/${QT_VERSION}/QtDesigner/private)

endif(ENABLE_DIALOG_DESIGNER)

if(ENABLE_ZINT)
    target_link_libraries( ${PROJECT_NAME} PRIVATE QZint)
endif(ENABLE_ZINT)

target_compile_definitions( ${PROJECT_NAME} PRIVATE
    -DDEFAULT_ITEM_PADDING=${DEFAULT_ITEM_PADDING}
    -DHAVE_QT${QT_VERSION_MAJOR}
    -DHAVE_REPORT_DESIGNER
    -DUSE_QJSENGINE
    -D_CRT_SECURE_NO_WARNINGS)

target_include_directories( ${PROJECT_NAME} PRIVATE
    limereport/
	limereport/base
	limereport/bands
	limereport/databrowser
	limereport/items/editors
	limereport/items
	limereport/objectinspector
	limereport/scriptbrowser
	limereport/serializators
	limereport/scripteditor )

target_include_directories( ${PROJECT_NAME} PUBLIC
    ${CMAKE_CURRENT_BINARY_DIR}/limereport )

target_include_directories( ${PROJECT_NAME} INTERFACE
        ${CMAKE_CURRENT_SOURCE_DIR}/include)

list (APPEND GLOBAL_HEADERS ${EXTRA_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${GLOBAL_HEADERS}")


message(STATUS "${PROJECT_NAME} UPDATE_TRANSLATIONS: ${UPDATE_TRANSLATIONS}")
list(APPEND LANGUAGES ru es fr pl zh ar)
foreach(lang ${LANGUAGES})
    list(APPEND TS_FILES translations/limereport_${lang}.ts)
endforeach()

if (${QT_VERSION} GREATER_EQUAL 6.7.0)

    qt_add_lrelease(
        TS_FILES ${TS_FILES}
        EXCLUDE_FROM_ALL
        LRELEASE_TARGET ${PROJECT_NAME}_lrelease
        OPTIONS -removeidentical
    )

    if (UPDATE_TRANSLATIONS)
        qt_add_lupdate(
            TS_FILES ${TS_FILES}
            SOURCES ${LIMEREPORT_SOURCES}
            LUPDATE_TARGET ${PROJECT_NAME}_lupdate
            OPTIONS -noobsolete
        )
        add_dependencies(${PROJECT_NAME}_lrelease ${PROJECT_NAME}_lupdate)
    endif()

elseif (${QT_VERSION} GREATER_EQUAL 6.2.0)

    qt_add_lrelease(
       ${PROJECT_NAME}
       TS_FILES ${TS_FILES}
       OPTIONS -removeidentical
   )

   if (UPDATE_TRANSLATIONS)
        qt_add_lupdate(
            ${PROJECT_NAME}
            TS_FILES ${TS_FILES}
            SOURCES ${LIMEREPORT_SOURCES}
            OPTIONS -noobsolete
        )
        add_dependencies(${PROJECT_NAME}_lrelease ${PROJECT_NAME}_lupdate)
    endif()

else()

    if (UPDATE_TRANSLATIONS)
        qt5_create_translation(
            QM_FILES
            ${LIMEREPORT_SOURCES}
            ${TS_FILES}
            OPTIONS -noobsolete -locations relative
        )
    else()
        qt5_add_translation(QM_FILES ${TS_FILES} OPTIONS -removeidentical)
    endif()

    add_custom_target(${PROJECT_NAME}_lrelease DEPENDS ${QM_FILES})

endif()

add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_lrelease)


install(TARGETS
	${PROJECT_NAME}
	ARCHIVE DESTINATION lib
	LIBRARY DESTINATION lib
	RUNTIME DESTINATION bin
	PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/limereport)