#
# $Id$
# $HeadURL$
# $Author$
#

# LIBRARY

# Make ${Qt6_Widgets} optional
if(QT6_GUI_AVAILABLE AND TARGET Qt6::Widgets)
  set(Qt6_Widgets ${Qt6_Widgets})
else()
  set(Qt6_Widgets "")
endif()

# Build this target as separate translation units (NOT a unity build). The Esri ArcGIS
# SDK header MapTypes.h does Q_DECLARE_METATYPE(Esri::ArcGISRuntime::LoadStatus) at line
# 525; when this target's sources + moc are concatenated into one unity TU, the moc's
# meta-object code instantiates QMetaTypeId<Esri::ArcGISRuntime::LoadStatus> before that
# declaration, so the vendor Q_DECLARE_METATYPE becomes a "specialization after
# instantiation" redefinition (a Qt6 error). Legacy (Qt5, separate TUs) never hit this.
# Disabling unity restores the legacy per-TU structure for this target (behavior-neutral).
set(CMAKE_UNITY_BUILD FALSE)


SET(Symbology_SRCS
  sidc_codec.cpp

  symbol_dictionary.cpp
  property_result.cpp
  symbol_data_to_render.cpp
  symbol_result.cpp
  symbol_properties.cpp
  sidc_definitions.cpp
  sidc_builder_base.cpp
  sidc_builder.cpp
#  sidc2525_delta.cpp
)
SET(Symbology_HDRS
  advanced_symbology_export.h
  bulk_renderer.h
  symbology_type.h
  symbol_dictionary_types.h
  symbol_dictionary.h
  property_result.h
  symbol_data_to_render.h
  symbol_result.h
  symbol_properties.h
  sidc_codec.h
  sidc_definitions.h
  sidc_builder_base.h
  sidc_builder.h
#  sidc2525_delta.h
  result_watcher.h
)

SET(SymbologyImpl_SRCS
  ../SymbologyImpl/advanced_symbology_logging.cpp
  ../SymbologyImpl/symbol_extension_renderer.cpp
  ../SymbologyImpl/symbol_dictionary_impl.cpp
  ../SymbologyImpl/esri_dictionary_processor.cpp
  ../SymbologyImpl/esri_dictionary_processor_mil2525d.cpp
  ../SymbologyImpl/esri_dictionary_processor_app6.cpp
  ../SymbologyImpl/esri_dictionary_processor_app6d.cpp
  ../SymbologyImpl/base_symbol_model.cpp
)
SET(SymbologyImpl_HDRS
  ../SymbologyImpl/advanced_symbology_logging.h
  ../SymbologyImpl/symbol_extension_renderer.h
  ../SymbologyImpl/symbol_dictionary_impl.h
  ../SymbologyImpl/esri_dictionary_processor.h
  ../SymbologyImpl/esri_dictionary_processor_mil2525d.h
  ../SymbologyImpl/esri_dictionary_processor_app6.h
  ../SymbologyImpl/esri_dictionary_processor_app6d.h
  ../SymbologyImpl/base_symbol_model.h
)

QT6_ADD_RESOURCES(Symbology_SRCS ../SymbologyImpl/Resources/symbols.qrc)

SOURCE_GROUP(Symbology        FILES ${Symbology_SRCS} ${Symbology_HDRS} ${SymbologyImpl_SRCS} ${SymbologyImpl_HDRS})

IF(BUILD_ARCGIS)

NGL_ADD_LIBRARY(WS advancedSymbology SHARED ${Symbology_SRCS} ${Symbology_HDRS} ${SymbologyImpl_SRCS} ${SymbologyImpl_HDRS})

NGL_TARGET_INCLUDE_DIRECTORIES(advancedSymbology
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/..
)

if(QT6_GUI_AVAILABLE)
  NGL_TARGET_LINK_LIBRARIES(advancedSymbology
    PRIVATE
      ArcGIS::ArcGIS
      Qt6::Concurrent
      ngltools # DTG
      situationMapCommon
      LtsDataView
      LtsSessionData
      LtsUtilsCoreHeaderOnly
  
    PUBLIC
      advancedSymbologyXML
      NGLLogger
      Qt6::Core
      ${Qt6_Widgets}
  )
endif()


IF(BUILD_TESTING AND BUILD_SITMAP_UNIT_TESTS AND TARGET situationMapCommon)

  NGL_ADD_LIBRARY(WS NO_TRANSLATION advancedSymbology_static STATIC ${Symbology_SRCS} ${Symbology_HDRS} ${SymbologyImpl_SRCS} ${SymbologyImpl_HDRS})
  NGL_TARGET_COMPILE_DEFINITIONS(advancedSymbology_static PUBLIC "ADVANCED_SYMBOLOGY_EXPORT=")

  NGL_TARGET_INCLUDE_DIRECTORIES(advancedSymbology_static
  PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/..
#  INTERFACE
#    ${CMAKE_CURRENT_SOURCE_DIR}
  )
if(QT6_GUI_AVAILABLE)
    NGL_TARGET_LINK_LIBRARIES(advancedSymbology_static
      PRIVATE
        NGLLogger
        ArcGIS::ArcGIS
        Qt6::Concurrent
      PUBLIC
        advancedSymbologyXML
        Qt6::Core
        ${Qt6_Widgets}
  
        LtsDataView
        LtsSessionData
        LtsUtilsCoreHeaderOnly
  
    )
endif()

ENDIF()

NGL_INSTALL_TARGET(advancedSymbology)

ENDIF() # BUILD_ARCGIS

