# ArcGIS Build Requirements Analysis ## Overview This document analyzes the requirements for building full ArcGIS-enabled Qt6 applications in the Qt6 migration pipeline. **Date:** 2026-09-24 **Branch:** feature/lts-viewer-validation-testing-phase **Submodule:** qt6-migration-pipeline/qt-migration-legatus/qt6-after/qt6-migrated-legatus --- ## SDK Structure **Location:** `./external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/` ### Components Status | Component | Status | Location | |-----------|--------|----------| | **Headers** | ✅ Present | `sdk/include/` (37K+ header files) | | **Linux x64 Libraries** | ✅ Present | `sdk/linux/x64/lib/` | | - libruntimecore.so | ✅ 162MB | Core runtime engine | | - libEsriCommonQt.so | ✅ 27MB | Common Qt bindings | | - libEsriRuntimeQt.a | ✅ 86MB | Static C++ API library | | **CMake Config** | ✅ Present | `sdk/ideintegration/ArcGISRuntime.cmake` | ### CMake Targets Defined The `ArcGISRuntime.cmake` module defines the following imported targets: - `ArcGIS::Core` - Core runtime (shared library) - `ArcGIS::Cpp` - C++ API (static library) --- ## Missing Requirements for Full Builds ### 1. ArcGIS Runtime SDK License ⚠️ The ArcGIS Maps SDK for Qt is **proprietary software** from Esri: - Requires a valid license for production use - Must be obtained separately from Esri - Not included in this repository ### 2. Runtime Dependencies For deployment, the following are needed: - No `bin/` or `plugins/` directory in SDK (Qt plugins not bundled) - Application must bundle required Qt plugins separately - Runtime library path must include `/sdk/linux/x64/lib/` ### 3. Docker Build Integration The SDK must be **mounted into Docker container** during build: ```bash -v /path/to/sdk:/workspace/external/ArcGIS ``` The `install_arcgis.sh` script: - Expects SDK at `/workspace/external/ArcGIS` - Creates symlink to `/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/...` --- ## Build Configuration ### Enable ArcGIS Builds ```bash ./new_docker_build.sh --arcgis --group5 ``` This will: - Set `BUILD_ARCGIS=ON` - Add ArcGIS SDK to `CMAKE_PREFIX_PATH` - Enable `advancedSymbology` library build - Link against `ArcGIS::ArcGIS` target ### CMake Configuration CMake expects the following prefix path: ```cmake -DCMAKE_PREFIX_PATH="...;/workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk;/usr/local" ``` --- ## Dependency Chain ``` advancedSymbology (Lts/Viewer/SituationMap/Symbology/) └── ArcGIS::ArcGIS (ArcGIS Runtime SDK) ├── libruntimecore.so (162MB) ├── libEsriCommonQt.so (27MB) └── libEsriRuntimeQt.a (86MB) Lts/Plugins/AdvancedSymbology/ ├── AsbDataPlugin → advancedSymbology ├── AsbSymbolProxyGuiPlugin → advancedSymbology └── AsbData → advancedSymbology ``` ### Key CMake Files | File | Purpose | |------|---------| | `Lts/Viewer/SituationMap/Symbology/CMakeLists.txt` | Contains `BUILD_ARCGIS` conditional for advancedSymbology | | `Lts/Plugins/AdvancedSymbology/Data/CMakeLists.txt` | Links AsbData, AsbDataPlugin against advancedSymbology | | `Lts/Plugins/AdvancedSymbology/Gui/SymbolProxy/CMakeLists.txt` | Links AsbSymbolProxyGuiPlugin against advancedSymbology | | `cmake/FindArcGISRuntime.cmake` | Locates ArcGIS SDK (via ArcGISRuntime.cmake) | --- ## Current Status ### Viewer-Only Builds (Without ArcGIS) | Component | Status | |-----------|--------| | LtsDataView | ✅ Builds successfully | | LtsDataViewTest | ✅ Passes CTest (headless) | | LtsReportDisplay | ✅ Builds with KDReports | | situationMapCommon | ✅ Builds successfully | | advancedSymbology | ⚠️ NOT built (requires ArcGIS license) | | Qt6 Deprecation Warnings | ✅ Zero warnings | ### Full ArcGIS-Enabled Builds To enable full ArcGIS functionality: 1. ✅ SDK folder structure is complete 2. ⚠️ Obtain ArcGIS Runtime SDK for Qt license from Esri 3. ⚠️ Mount SDK into Docker build environment 4. ⚠️ Build with `--arcgis` flag 5. ⚠️ Ensure runtime library path includes ArcGIS libraries --- ## Verification Commands ### Check SDK Libraries ```bash find ./external/ArcGIS -name "*.so" -o -name "*.a" ``` ### Build with ArcGIS Support ```bash ./new_docker_build.sh --arcgis --group5 ``` ### Verify advancedSymbology Build ```bash # Check if library was built ls -la build4/lib/libadvancedSymbology.so # Check CMake configure output for ArcGIS grep -i "arcgis" build4/CMakeCache.txt ``` --- ## Conclusion The SDK folder structure is **complete** for building ArcGIS-enabled applications. The only missing pieces are: 1. **Valid ArcGIS Runtime SDK license** (must be obtained from Esri) 2. **Docker mount configuration** for CI/CD pipelines For viewer-only validation testing, ArcGIS is **optional** — the core Viewer module (LtsDataView, LtsReportDisplay, situationMapCommon) builds and tests successfully without it.