Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/cmake/FindArcGIS.cmake
T
torstenandCopilot e84c59e033 Add GRAPHICSVIEW_SUPPORTED compile definition for MapGraphicsView
- MapGraphicsView.h requires GRAPHICSVIEW_SUPPORTED macro to be defined
- Macro is normally defined in ArcGISQt_global.h based on Q_OS_LINUX
- Explicitly define GRAPHICSVIEW_SUPPORTED in ArcGIS::ArcGIS target
- Fixes QPointer<MapGraphicsView> incomplete type error in Qt6 builds

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-13 12:06:36 +02:00

167 lines
7.1 KiB
CMake
Executable File

IF(ARCGIS_INCLUDE_DIR AND ARCGIS_LIBRARY)
SET(ARCGIS_FOUND TRUE)
ELSE()
INCLUDE(FindLibraryWithDebug)
INCLUDE(FindPackageHandleStandardArgs)
SET(QT_MIN_VERSION 6.0.0)
# Qt6 may already be found by main CMakeLists.txt - check for existing targets first
IF(NOT TARGET Qt6::Core)
FIND_PACKAGE(Qt6 COMPONENTS Core Network)
IF(NOT Qt6_FOUND OR NOT Qt6Core_FOUND OR NOT Qt6Network_FOUND)
MESSAGE(WARNING "Qt6 Core/Network not found; skipping ArcGIS")
SET(BUILD_ARCGIS OFF CACHE BOOL "Build ArcGIS SDK dependent modules" FORCE)
RETURN()
ENDIF()
ENDIF()
# Gui is optional - ArcGIS can work without it in some configurations
FIND_PACKAGE(Qt6Gui QUIET)
FIND_PACKAGE(Qt6Location QUIET)
FIND_PACKAGE(Qt6Sensors QUIET)
SET(_arcgis_include_hint "${CMAKE_SOURCE_DIR}/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/include")
SET(_arcgis_library_hint "${CMAKE_SOURCE_DIR}/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/linux/x64/lib")
# Check if paths exist, if not try alternative paths
IF(NOT EXISTS "${_arcgis_include_hint}")
SET(_arcgis_include_hint "${CMAKE_SOURCE_DIR}/../../external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/include")
SET(_arcgis_library_hint "${CMAKE_SOURCE_DIR}/../../external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/linux/x64/lib")
ENDIF()
SET(_arcgis_lib_dir $ENV{ARCGIS_LIB_DIR})
SET(_arcgis_inc_dir $ENV{ARCGIS_INC_DIR})
IF (NOT ${_arcgis_lib_dir} STREQUAL "")
SET(_arcgis_library_hint "${_arcgis_lib_dir}")
ENDIF()
IF (NOT ${_arcgis_inc_dir} STREQUAL "")
SET(_arcgis_include_hint "${_arcgis_inc_dir}")
ENDIF()
IF(WIN32)
GET_FILENAME_COMPONENT(_arcgis_root_path "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\ESRI\\ArcGISRuntimeQt100.0.0;InstallDir]" ABSOLUTE)
IF(_arcgis_root_path)
SET(_arcgis_include_hint "${_arcgis_root_path}/sdk/windows/include/")
SET(_arcgis_library_hint "${_arcgis_root_path}/sdk/windows/x86/lib/")
ELSE()
SET(_root "$ENV{KDEROOT}")
FILE(TO_CMAKE_PATH "${_root}" _root)
IF(NOT EXISTS "${_root}" OR NOT IS_DIRECTORY "${_root}")
SET(_root $ENV{WORKSPACE})
FILE(TO_CMAKE_PATH "${_root}" _root)
ENDIF()
IF(NOT EXISTS "${_root}" OR NOT IS_DIRECTORY "${_root}")
SET(_root ${EXTERNAL_LIBRARY_DIR})
FILE(TO_CMAKE_PATH "${_root}" _root)
ENDIF()
SET(_arcgis_include_hint "${_root}/include/")
SET(_arcgis_library_hint "${_root}/lib/")
ENDIF()
ENDIF()
FIND_PATH(ARCGIS_INCLUDE_DIR ArcGISQt_global.h HINTS ${_arcgis_include_hint})
FIND_LIBRARY(ARCGIS_LIBRARY NAMES EsriRuntimeQt HINTS ${_arcgis_library_hint})
FIND_LIBRARY(ARCGIS_COMMON_LIBRARY NAMES EsriCommonQt HINTS ${_arcgis_library_hint})
IF (UNIX)
FIND_LIBRARY(ARCGIS_CPP_LIBRARY NAMES runtimecore HINTS ${_arcgis_library_hint})
ENDIF()
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ArcGIS DEFAULT_MSG ARCGIS_LIBRARY ARCGIS_INCLUDE_DIR)
MARK_AS_ADVANCED(ARCGIS_INCLUDE_DIR ARCGIS_LIBRARY)
IF(NOT ARCGIS_FOUND)
SET(BUILD_ARCGIS OFF CACHE BOOL "Build ArcGIS SDK dependent modules" FORCE)
ENDIF()
ENDIF()
IF(NOT TARGET ArcGIS::ArcGIS)
ADD_LIBRARY(ArcGIS::ArcGIS UNKNOWN IMPORTED)
SET_PROPERTY(TARGET ArcGIS::ArcGIS PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${ARCGIS_INCLUDE_DIR}")
SET_PROPERTY(TARGET ArcGIS::ArcGIS PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${ARCGIS_INCLUDE_DIR}")
# GRAPHICSVIEW_SUPPORTED is required for MapGraphicsView class to be available
# It's defined in ArcGISQt_global.h based on Q_OS_LINUX, but we ensure it explicitly
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS GRAPHICSVIEW_SUPPORTED)
IF(ARCGIS_LIBRARY_RELEASE)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
SET_PROPERTY(TARGET ArcGIS::ArcGIS PROPERTY IMPORTED_LOCATION_RELEASE "${ARCGIS_LIBRARY_RELEASE}")
ENDIF()
IF(ARCGIS_LIBRARY_DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS PROPERTY IMPORTED_LOCATION_DEBUG "${ARCGIS_LIBRARY_DEBUG}")
ENDIF()
IF(NOT ARCGIS_LIBRARY_RELEASE AND NOT ARCGIS_LIBRARY_DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS PROPERTY IMPORTED_LOCATION "${ARCGIS_LIBRARY}")
ENDIF()
# APPEND (not replace): line 95 above set the ArcGIS SDK include dir; a plain
# SET_PROPERTY here overwrote it, so consumers (e.g. advancedSymbology) never
# saw <Symbol.h> etc. Base-state defect carried over from the legacy Qt5 file
# (identical overwrite of the Qt5 include dirs), never surfaced because the
# ArcGIS-ON GROUP5 path was never validated in this pipeline.
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
$<TARGET_PROPERTY:Qt6::Core,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Qt6::Network,INTERFACE_INCLUDE_DIRECTORIES>
)
IF(TARGET Qt6::Gui)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
$<TARGET_PROPERTY:Qt6::Gui,INTERFACE_INCLUDE_DIRECTORIES>)
ENDIF()
IF(TARGET Qt6::Location)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
$<TARGET_PROPERTY:Qt6::Location,INTERFACE_INCLUDE_DIRECTORIES>)
ENDIF()
IF(TARGET Qt6::Sensors)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
$<TARGET_PROPERTY:Qt6::Sensors,INTERFACE_INCLUDE_DIRECTORIES>)
ENDIF()
IF (UNIX)
IF(ARCGIS_COMMON_LIBRARY_RELEASE)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:Release>:"${ARCGIS_COMMON_LIBRARY_RELEASE}">)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:Release>:"${ARCGIS_CPP_LIBRARY_RELEASE}">)
ENDIF()
IF(ARCGIS_COMMON_LIBRARY_DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:Debug>:"${ARCGIS_COMMON_LIBRARY_DEBUG}">)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:Debug>:"${ARCGIS_CPP_LIBRARY_DEBUG}">)
ENDIF()
IF(ARCGIS_COMMON_LIBRARY AND NOT ARCGIS_COMMON_LIBRARY_RELEASE AND NOT ARCGIS_COMMON_LIBRARY_DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${ARCGIS_COMMON_LIBRARY}" "${ARCGIS_CPP_LIBRARY}")
ENDIF()
ELSE()
IF(ARCGIS_COMMON_LIBRARY_RELEASE)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:Release>:${ARCGIS_COMMON_LIBRARY_RELEASE}>)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:RelWithDebInfo>:${ARCGIS_COMMON_LIBRARY_RELEASE}>)
ENDIF()
IF(ARCGIS_COMMON_LIBRARY_DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<$<CONFIG:Debug>:${ARCGIS_COMMON_LIBRARY_DEBUG}>)
ENDIF()
IF(ARCGIS_COMMON_LIBRARY AND NOT ARCGIS_COMMON_LIBRARY_RELEASE AND NOT ARCGIS_COMMON_LIBRARY_DEBUG)
SET_PROPERTY(TARGET ArcGIS::ArcGIS APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${ARCGIS_COMMON_LIBRARY}")
ENDIF()
ENDIF()
ENDIF()