#############################################################
# locate native libs

if (IOS)
  # No native library for IOS
  return()
endif()


if(UNIX AND NOT APPLE AND NOT ANDROID)
  find_package(${QT_VERSION_BASE} COMPONENTS DBus REQUIRED)
endif()

#############################################################
# sources

set(QGIS_NATIVE_SRCS
  qgsnative.cpp
)

set(QGIS_NATIVE_HDRS
  qgsnative.h
)

if(APPLE)
  set(QGIS_APP_OBJC_SRCS
    mac/cocoainitializer.mm
    mac/qgsmacnative.mm
  )

  set_source_files_properties(${QGIS_APP_OBJC_SRCS} PROPERTIES COMPILE_FLAGS "-x objective-c++")

  set(QGIS_NATIVE_SRCS ${QGIS_NATIVE_SRCS}
    ${QGIS_APP_OBJC_SRCS}
  )
  set (QGIS_NATIVE_HDRS ${QGIS_NATIVE_HDRS}
    mac/qgsmacnative.h
    mac/cocoainitializer.h
  )
endif()

if(MSVC)
  set(QGIS_NATIVE_SRCS ${QGIS_NATIVE_SRCS}
    ../../external/wintoast/src/wintoastlib.cpp
    win/qgswinnative.cpp
  )
  set (QGIS_NATIVE_HDRS ${QGIS_NATIVE_HDRS}
     win/qgswinnative.h
  )
endif()

if(UNIX AND NOT APPLE AND NOT ANDROID)
  set(QGIS_NATIVE_SRCS ${QGIS_NATIVE_SRCS}
    linux/qgslinuxnative.cpp
  )
  set (QGIS_NATIVE_HDRS ${QGIS_NATIVE_HDRS}
     linux/qgslinuxnative.h
  )
endif()

#############################################################
# qgis_native library

add_library(qgis_native ${LIBRARY_TYPE} ${QGIS_NATIVE_SRCS} ${QGIS_NATIVE_HDRS})
if(QGISPOSTFIX)
  set_target_properties(qgis_native PROPERTIES
    RUNTIME_OUTPUT_NAME qgis_native${QGISPOSTFIX}
    LIBRARY_OUTPUT_NAME qgis_native${QGISPOSTFIX}
  )
endif()
set_property(TARGET qgis_native PROPERTY POSITION_INDEPENDENT_CODE ON)

# require c++20
target_compile_features(qgis_native PRIVATE cxx_std_20)

target_include_directories(qgis_native PUBLIC
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}
)

if(MSVC)
  target_include_directories(qgis_native SYSTEM PUBLIC
      ../../external/wintoast/src
  )
endif()

GENERATE_EXPORT_HEADER(
   qgis_native
   BASE_NAME NATIVE
   EXPORT_FILE_NAME qgis_native.h
)

set(QGIS_NATIVE_HDRS ${QGIS_NATIVE_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/qgis_native.h)

#generate unversioned libs for android
if(NOT ANDROID)
  set_target_properties(qgis_native PROPERTIES
    VERSION ${COMPLETE_VERSION}
    SOVERSION ${COMPLETE_VERSION}
  )
endif()

target_link_libraries(qgis_native ${QT_VERSION_BASE}::Core ${QT_VERSION_BASE}::Gui)

if (UNIX AND NOT APPLE AND NOT ANDROID)
  target_link_libraries(qgis_native ${QT_VERSION_BASE}::DBus)
endif()

if (MSVC AND NOT BUILD_WITH_QT6)
  find_package(${QT_VERSION_BASE}WinExtras)

  target_link_libraries(qgis_native shell32)
  target_link_libraries(qgis_native ${QT_VERSION_BASE}::Widgets ${QT_QTMAIN_LIBRARY})
  target_link_libraries(qgis_native ${QT_VERSION_BASE}::WinExtras)

endif()
# install
if(NOT QGIS_MAC_BUNDLE)
  install(FILES ${QGIS_NATIVE_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
endif()


install(TARGETS qgis_native
  RUNTIME DESTINATION ${QGIS_BIN_DIR}
  LIBRARY DESTINATION ${QGIS_LIB_DIR}
  ARCHIVE DESTINATION ${QGIS_LIB_DIR})
