From 7c080db59f34ad7b22454082e3f9b59ae037811c Mon Sep 17 00:00:00 2001 From: Copilot Date: Mon, 20 Jul 2026 12:48:23 +0200 Subject: [PATCH] migration: prefer ./external for RTI/ArcGIS; detect RTI arch in FindRTI; install/unpack ArcGIS into ./external --- app/Dockerfile | 9 ++++++--- app/install_arcgis.sh | 12 +++++++++--- app/run_docker.sh | 4 ++-- cmake/FindRTI.cmake | 35 +++++++++++++++++++++++++---------- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/app/Dockerfile b/app/Dockerfile index 1761e1283..180b7f1e8 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -10,7 +10,8 @@ ENV DEBIAN_FRONTEND=noninteractive \ QT_BASE_DIR=/opt/Qt \ QT_ROOT=/opt/Qt/6.8.3/gcc_64 \ Qt6_ROOT=/opt/Qt/6.8.3/gcc_64 \ - CMAKE_PREFIX_PATH=/usr/local:/opt/Qt/6.8.3/gcc_64 \ + EXTERNAL_DIR=/repo/external \ + CMAKE_PREFIX_PATH=/usr/local:/opt/Qt/6.8.3/gcc_64:/repo/external \ PATH=/opt/Qt/6.8.3/gcc_64/bin:$PATH SHELL ["/bin/bash", "-o", "pipefail", "-c"] @@ -42,6 +43,8 @@ RUN apt-get update \ libbz2-dev \ libpoppler-dev \ libpoppler-qt6-dev \ + libboost-dev \ + unzip \ python3 \ python3-venv \ python3-pip \ @@ -85,8 +88,8 @@ RUN set -eux; \ /app/build_kdreports.sh || true; \ # If libgtest-dev provided sources, build+install them via script /app/build_gtest.sh || true; \ - # geographiclib already installed via apt; RTI (Proprietary) cannot be installed automatically - echo "Note: RTI Connext (RTI) is proprietary and must be installed manually into /opt/RTI if required." + # geographiclib already installed via apt; RTI and ArcGIS are proprietary and installed externally + echo "Note: RTI Connext and ArcGIS Maps SDK are expected to be provided under /repo/external (e.g. /repo/external/rti_connext_dds-7.7.0 and /repo/external/ArcGIS)." # Add RPM/rpmbuild tools so make_rpm.py can run inside the image when requested RUN set -eux; \ diff --git a/app/install_arcgis.sh b/app/install_arcgis.sh index c85007925..ba0f105b8 100755 --- a/app/install_arcgis.sh +++ b/app/install_arcgis.sh @@ -6,7 +6,8 @@ set -euo pipefail # Expects the zip at ../ArcGIS_Maps_SDK_Qt_linux_300.0.0.zip relative to repo root ZIP_PATH="${1:-../ArcGIS_Maps_SDK_Qt_linux_300.0.0.zip}" -TARGET_DIR="/opt/ArcGIS/MapsSDK_Qt_300.0.0" +# Install into repo-local external by default so SDKs are colocated with RTI under ./external +TARGET_DIR="${2:-./external/ArcGIS/MapsSDK_Qt_300.0.0}" if [[ ! -f "$ZIP_PATH" ]]; then echo "ArcGIS zip not found at $ZIP_PATH" @@ -14,8 +15,13 @@ if [[ ! -f "$ZIP_PATH" ]]; then exit 1 fi -sudo mkdir -p "$TARGET_DIR" -sudo chown $(id -u):$(id -g) "$TARGET_DIR" +# Create target dir, prefer non-root but fall back to sudo when necessary +if ! mkdir -p "$TARGET_DIR" 2>/dev/null; then + sudo mkdir -p "$TARGET_DIR" +fi +if ! chown $(id -u):$(id -g) "$TARGET_DIR" 2>/dev/null; then + sudo chown $(id -u):$(id -g) "$TARGET_DIR" || true +fi echo "Extracting $ZIP_PATH to $TARGET_DIR..." unzip -q "$ZIP_PATH" -d "$TARGET_DIR" diff --git a/app/run_docker.sh b/app/run_docker.sh index b16798442..53768f393 100755 --- a/app/run_docker.sh +++ b/app/run_docker.sh @@ -225,8 +225,8 @@ docker run --rm $DOCKER_TTY_FLAG \ -e WORKDIR_IN_CONTAINER="$WORKDIR_IN_CONTAINER" \ -e QT_ROOT="$QT_ROOT_OVERRIDE" \ -e Qt6_ROOT="$QT_ROOT_OVERRIDE" \ - -e CMAKE_PREFIX_PATH="$QT_ROOT_OVERRIDE" \ - -e PROJECT_BASE_DIR="${PROJECT_BASE_DIR:-./}" \ + -e EXTERNAL_DIR="/repo/external" \ + -e CMAKE_PREFIX_PATH="$QT_ROOT_OVERRIDE:/repo/external" \ -e PROJECT_BASE_DIR="${PROJECT_BASE_DIR:-./}" \ "$IMAGE_NAME" \ bash -s -- "${CMD_ARGS[@]}" <<'DOCKER_SCRIPT' diff --git a/cmake/FindRTI.cmake b/cmake/FindRTI.cmake index aba751a94..c586b0443 100755 --- a/cmake/FindRTI.cmake +++ b/cmake/FindRTI.cmake @@ -71,16 +71,31 @@ IF(NOT RTI_DIR) set(_RTI_DIR_NOT_FOUND TRUE) set(_RTI_DIR "") ENDIF() - SET(_rti_gcc_arch "x64Linux3gcc4.8.2") - IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0.0) - SET(_rti_gcc_arch "x64Linux3gcc5.4.0") - SET(_tmp "${_RTI_DIR}/lib/${_rti_gcc_arch}") - IF (NOT EXISTS ${_tmp}) - SET(_rti_gcc_arch "x64Linux4gcc7.3.0") - ENDIF() - ENDIF() - ENDIF() + SET(_rti_gcc_arch "x64Linux3gcc4.8.2") + IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0.0) + # Prefer newer gcc-based RTI builds; try a sequence then fall back to any x64Linux4gcc* dir found under RTI lib + SET(_preferred_archs "x64Linux4gcc8.5.0;x64Linux4gcc7.3.0;x64Linux3gcc5.4.0") + SET(_found_arch "") + foreach(_cand IN LISTS _preferred_archs) + if(EXISTS "${_RTI_DIR}/lib/${_cand}") + SET(_found_arch "${_cand}") + break() + endif() + endforeach() + if(_found_arch STREQUAL "") + # fallback: pick any x64Linux* directory under lib + file(GLOB _rti_arch_dirs RELATIVE "${_RTI_DIR}/lib" "${_RTI_DIR}/lib/x64Linux*") + list(GET _rti_arch_dirs 0 _found_arch) + endif() + if(NOT _found_arch STREQUAL "") + SET(_rti_gcc_arch "${_found_arch}") + else() + # final fallbacks + SET(_rti_gcc_arch "x64Linux4gcc7.3.0") + endif() + ENDIF() + ENDIF() SET(_arch "${_rti_gcc_arch}") ENDIF() SET(RTI_DIR "${_RTI_DIR}" CACHE STRING "RTI base path" FORCE)