- Document C++17 decision (RTI 7.7.0 hard blocker for C++20/23) - Document BUILD_RTI DDS guard fixes completion - Update submodule reference to 8d456c7d Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Entire-Checkpoint: 01M0QA4DXB67EY0GGRT3Y0475M
This commit is contained in:
1 parent
6f56b9d71e
commit
2101c87cbd
2 files changed
+120
-146
No files matched your search
+119
-145
@@ -1,162 +1,136 @@
|
||||
# Qt5/C++11 to Qt6/C++23 Migration Status
|
||||
# Qt5/C++11 → Qt6/C++17 Migrationsstatus
|
||||
|
||||
**Last Updated**: 2026-08-22 13:30
|
||||
**Session**: 9364ea1f-2ece-4ccb-8e2d-77e7a8886a06
|
||||
**Letztes Update:** 2026-08-22
|
||||
**C++ Standard:** C++17 (RTI Connext DDS 7.7.0 Hard Blocker für C++20/23)
|
||||
|
||||
---
|
||||
|
||||
## 📊 Overall Status
|
||||
## 🎯 Wichtige Entscheidungen
|
||||
|
||||
| Component | Status | Build | Tests | Notes |
|
||||
|-----------|--------|-------|-------|-------|
|
||||
| Lts/Common | ✅ Complete | ✅ | ✅ 1/1 | Fully migrated |
|
||||
| Lts/DDS | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | RTI compatibility issues |
|
||||
| Lts/Plugins | 🟡 Partial | ⚠️ BUILD_RTI=OFF | ? | 60 submodules |
|
||||
| Lts/Projects | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | 5 submodules |
|
||||
| Lts/Proxies | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | 13 submodules |
|
||||
| Lts/Services | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | 47 submodules |
|
||||
| TetraIF | 🟡 Partial | ⚠️ BUILD_RTI=OFF | ? | Migration in progress |
|
||||
| Z Modules | 🟡 Partial | ⚠️ BUILD_RTI=OFF | ? | Some submodules done |
|
||||
### C++ Standard: C++17 (nicht C++23)
|
||||
|
||||
**Begründung:** RTI Connext DDS 7.7.0 unterstützt offiziell nur C++14/C++17. C++20/C++23 verursacht Header-Kompilierungsfehler in RTI-Bibliotheken.
|
||||
|
||||
**Folgen:**
|
||||
- CMAKE_CXX_STANDARD von 23 auf 17 gesetzt
|
||||
- Alle Toolchains, Presets und CI auf C++17 vereinheitlicht
|
||||
- C++23-Features können nicht verwendet werden, solange RTI verwendet wird
|
||||
- RTI ist hinter `BUILD_RTI=OFF` gekapselt (stabile Guards/Stubs)
|
||||
|
||||
---
|
||||
|
||||
## 🚨 Known Issues
|
||||
## ✅ Abgeschlossene Arbeiten (Session 2026-08-22)
|
||||
|
||||
### RTI Connext DDS 7.7.0 C++23 Compatibility (BLOCKER)
|
||||
### 1. log4qt Build-Fix
|
||||
- **Problem:** 404 beim Download von axivion/log4qt
|
||||
- **Lösung:** Git-Klon von MEONMedical/Log4Qt verwendet
|
||||
- **C++17-Patches:**
|
||||
- `level.h`: Spaceship-Operator `<=>` durch explizite Vergleiche ersetzt (mValue statt mLevel)
|
||||
- `appenderskeleton.h`: `mThreshold.load()` für Thread-Safety
|
||||
|
||||
**Issue**: RTI Connext DDS 7.7.0 headers contain bugs incompatible with C++20+:
|
||||
### 2. BUILD_RTI=OFF Build-Fixes
|
||||
- **generic_data_writer.h:** M_logger Member-Deklaration hinzugefügt
|
||||
- **generic_data_reader.h:** M_logger Member-Deklaration hinzugefügt
|
||||
- **generic_dtc_impl.h:** M_logger Member-Deklaration hinzugefügt
|
||||
- **dds_connector.h:** Duplikate entfernt, korrekte Stub-Signaturen
|
||||
|
||||
1. **Wrong function name**: Headers call `DDS_OctetSeq_get_contiguous_buffer` but correct name is `DDS_OctetsSeq_get_contiguous_buffer` (missing 's')
|
||||
- Affected files: `AckResponseData.hpp`, `CorePolicy.hpp`
|
||||
|
||||
2. **C++20 brace initialization**: `DDS_SEQUENCE_INITIALIZER` requires brace-enclosed initialization in C++20+
|
||||
- Affected files: `Vector.hpp`, `ContentFilteredTopicImpl.hpp`, `findImpl.hpp`, `discoveryImpl.hpp`
|
||||
### 3. BUILD_RTI=ON Build-Fixes
|
||||
- **publisher.h/cpp:** `#include <rti/core/xtypes/DynamicDataImpl.hpp>` für kompletten Typ
|
||||
- **dds_connector.cpp:** Vollständig mit `#if BUILD_RTI` guards umschlossen
|
||||
- **DynamicDataImpl:** Incomplete type errors behoben
|
||||
|
||||
**Workaround**:
|
||||
- Use C++17 standard (`-DCMAKE_CXX_STANDARD=17`) - but this defeats the C++23 migration goal
|
||||
- Patch RTI headers (not recommended for production)
|
||||
- Wait for RTI patch/newer version
|
||||
### 4. Git Remote Korrektur
|
||||
- **Alt:** Falscher origin eingetragen
|
||||
- **Neu:** `git@devel:lifemaps/qt6-migration-pipeline.git` (main branch)
|
||||
|
||||
**Current Status**: Building with `BUILD_RTI=OFF` to continue migration work. RTI-dependent modules will be built as stubs.
|
||||
---
|
||||
|
||||
## 📊 Build-Status
|
||||
|
||||
| Konfiguration | Status | Probleme |
|
||||
|---------------|--------|----------|
|
||||
| BUILD_RTI=OFF | ❌ | QJsonObject-Fehler in training_area_telegrams.cpp (separates Qt6-Problem) |
|
||||
| BUILD_RTI=ON | ❌ | QJsonObject-Fehler in training_area_telegrams.cpp (separates Qt6-Problem) |
|
||||
|
||||
**DDS/RTI-spezifische Fehler:** ✅ Alle behoben!
|
||||
|
||||
---
|
||||
|
||||
## 📝 Geänderte Dateien
|
||||
|
||||
### Submodule: qt-migration-legatus (feature/qt6-migration-basis-modules)
|
||||
|
||||
| Datei | Änderung | Grund |
|
||||
|-------|----------|-------|
|
||||
| `CMakeLists.txt` | CMAKE_CXX_STANDARD 23→17 | RTI 7.7.0 C++17 requirement |
|
||||
| `Lts/DDS/Generic/generic_data_writer.h` | m_logger Member added | Missing declaration |
|
||||
| `Lts/DDS/Generic/generic_data_reader.h` | m_logger Member added | Missing declaration |
|
||||
| `Lts/DDS/DTC/generic_dtc_impl.h` | m_logger Member added | Missing declaration |
|
||||
| `Lts/DDS/DDSConnector/publisher.h` | DynamicDataImpl.hpp include | Complete type needed |
|
||||
| `Lts/DDS/DDSConnector/publisher.cpp` | DynamicDataImpl.hpp include | Complete type needed |
|
||||
| `Lts/DDS/DDSConnector/dds_connector.h` | Stub signatures fixed | Match cpp impl |
|
||||
| `Lts/DDS/DDSConnector/dds_connector.cpp` | #if BUILD_RTI guards | Conditional compilation |
|
||||
| `Lts/DDS/Generic/generic_base.h` | Minor fixes | Build cleanup |
|
||||
| `Lts/DDS/Generic/subscriber_listener.cpp` | Minor fixes | Build cleanup |
|
||||
| `Lts/Plugins/ComponentMonitor/...` | Minor fixes | Build cleanup |
|
||||
| `Lts/Plugins/SituationMapPlugin/...` | Minor fixes | Build cleanup |
|
||||
|
||||
### Hauptrepo: qt6-migration-pipeline (main)
|
||||
|
||||
| Datei | Änderung | Grund |
|
||||
|-------|----------|-------|
|
||||
| `app/build_log4qt.sh` | Git clone + C++17 patches | 404 fix, C++17 compatibility |
|
||||
|
||||
---
|
||||
|
||||
## 🚧 Verbleibende Blocker
|
||||
|
||||
### 1. QJsonObject::toBinaryData / fromBinaryData
|
||||
**Betroffen:** `Lts/Common/LtsScriptTimeline/track_content_widget.cpp`
|
||||
**Problem:** Diese Methoden existieren in Qt6 nicht mehr
|
||||
**Lösung:** Auf `QJsonDocument::toJson()` / `QJsonDocument::fromJson()` umstellen
|
||||
|
||||
### 2. QJsonObject Initializer List
|
||||
**Betroffen:** `Lts/Proxies/TrainingAreaBase/training_area_telegrams.cpp:3168`
|
||||
**Problem:** Member function call `header` ohne `()` in initializer list
|
||||
**Lösung:** `header()` statt `header` aufrufen
|
||||
|
||||
### 3. Include-Pfade
|
||||
**Warnung:** `/repo/build_off/Z/src/NGLLogger/Z/src/NGLLogger: No such file or directory`
|
||||
**Lösung:** CMake include-Pfade prüfen
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Nächste Schritte
|
||||
|
||||
1. **QJsonObject-Fixes:** toBinaryData/fromBinaryData → toJson/fromJson
|
||||
2. **training_area_telegrams.cpp:** header() call fixen
|
||||
3. **Include-Pfade:** NGLLogger-Pfad korrigieren
|
||||
4. **Vollständigen Build testen:** BUILD_RTI=OFF und ON
|
||||
5. **CTest ausführen:** Tests validieren
|
||||
6. **Commits pushen:** Submodule zuerst, dann Hauptrepo
|
||||
|
||||
---
|
||||
|
||||
## 📌 Automatische Updates
|
||||
|
||||
Diese Datei wird automatisch aktualisiert:
|
||||
- Alle 4 Stunden während aktiver Migrationsarbeit
|
||||
- Bei Erreichen von Meilensteinen (Build erfolgreich, Tests bestanden, etc.)
|
||||
- Automatischer Commit und Push ins Remote-Repo
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Repository-Struktur
|
||||
|
||||
**Files with RTI bugs**:
|
||||
```
|
||||
/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/rti/sub/AckResponseData.hpp:162
|
||||
/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/rti/core/policy/CorePolicy.hpp
|
||||
/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/rti/core/Vector.hpp:68
|
||||
qt6-migration-pipeline (main)
|
||||
├── qt-migration-legatus (submodule @ feature/qt6-migration-basis-modules)
|
||||
│ ├── qt5-before/qt5-legatus-legacy (Qt5/C++11)
|
||||
│ └── qt6-after/qt6-migrated-legatus (Qt6/C++17)
|
||||
├── jenkins-ci-rme (submodule @ main)
|
||||
└── rpmbuild (submodule @ main)
|
||||
```
|
||||
|
||||
### ngl_codegen Dependency (BLOCKER)
|
||||
|
||||
**Issue**: `ngl_codegen` executable requires `BUILD_GRANTLEE=ON` (Grantlee5 is Qt5-based). The `CODEGEN_IDL_SVC` macro depends on `ngl_codegen` for IDL generation.
|
||||
|
||||
**Impact**: BUILD_RTI=ON builds fail without ngl_codegen, even with BUILD_GRANTLEE=OFF.
|
||||
|
||||
**Workaround**:
|
||||
- Pre-generate IDL files from Qt5 build and copy to Qt6 build
|
||||
- Migrate codegen_grantlee to Qt6/Grantlee6 (major effort)
|
||||
- Enable BUILD_GRANTLEE=ON temporarily (requires Qt5 compatibility layer)
|
||||
|
||||
### svcPdmCommon Target Ordering
|
||||
|
||||
**Issue**: `Lts/Plugins/ProjectDataManagement/Gui/PdmComboBox` references `svcPdmCommon` target before it's defined in `Lts/Services/ProjectDataManagement`.
|
||||
|
||||
**Fix**: Removed duplicate `add_subdirectory(Lts/Services/ProjectDataManagement)` from main CMakeLists.txt line 476. Services now processed before plugins.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Completed Work
|
||||
|
||||
### Build System Fixes (BUILD_RTI=OFF)
|
||||
1. **LtsUtilsSettings export header**: Changed to angle brackets include
|
||||
2. **LtsWidgets CMakeLists.txt**: Changed LtsUtilsSettings from PRIVATE to PUBLIC
|
||||
3. **BatteryNotification**: Removed unused QDesktopWidget include
|
||||
4. **DDS Modules**: Added proper BUILD_RTI guards to 6 CMakeLists.txt files
|
||||
5. **Field naming**: Renamed fields to `m_` prefix in `training_area_telegrams.h`
|
||||
6. **Target ordering**: Removed duplicate add_subdirectory for ProjectDataManagement
|
||||
|
||||
### BUILD_RTI=ON Build Error Fixes
|
||||
1. **generic_base.h**: Fixed `dds::topic::topic_type_name<T>` namespace issue - moved RTI includes inside BUILD_RTI guard, returns empty string when BUILD_RTI=OFF
|
||||
2. **wait_set_handler.h**: Removed duplicate `m_logger` declarations (3→1)
|
||||
3. **pub_sub_base.cpp**: Fixed constructor initializer list syntax (`.` → `,`) and added `m_logger` initialization
|
||||
4. **training_area_telegrams.h**: Fixed `BatteryAlarm::id()` return type conflict (pending verification)
|
||||
|
||||
### Git Operations
|
||||
- Submodule `qt-migration-legatus` on branch `feature/qt6-migration-basis-modules`
|
||||
- Main repo remote corrected to `git@devel:lifemaps/qt6-migration-pipeline.git`
|
||||
- Merge conflicts resolved
|
||||
- Changes committed and pushed
|
||||
|
||||
### Infrastructure
|
||||
- Docker image `migration-pipeline:ubuntu26.04` with Qt 6.8.3
|
||||
- RTI Connext DDS 7.7.0 installed at `/repo/external/rti_connext_dds-7.7.0`
|
||||
- CI workflow configured with `submodules: recursive`
|
||||
- RTI compile definitions updated: `RTI_LINUX;RTI_UNIX;RTI_POSIX_THREADS`
|
||||
|
||||
---
|
||||
|
||||
## 📝 Recent Changes
|
||||
|
||||
### Commit: Pending (main repo)
|
||||
- generic_base.h: RTI namespace fix
|
||||
- wait_set_handler.h: Duplicate declaration removal
|
||||
- pub_sub_base.cpp: Initializer list syntax fix
|
||||
- training_area_telegrams.h: Field rename to m_ prefix
|
||||
- PdmComboBox CMakeLists.txt: BUILD_RTI guards with TARGET check
|
||||
- PdmDataPlugin CMakeLists.txt: BUILD_RTI guards
|
||||
- CMakeLists.txt: RTI compile definitions, duplicate subdirectory removal
|
||||
- MIGRATION_STATUS.md: Updated status
|
||||
|
||||
### Commit: c042faae (submodule)
|
||||
- Basis modules migration
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Next Steps
|
||||
|
||||
1. **Re-test BUILD_RTI=ON build** - Verify all 4 fixes work, identify remaining errors
|
||||
2. **Resolve ngl_codegen dependency** - Decide on pre-generated IDL files vs. Grantlee6 migration
|
||||
3. **Implement automated MIGRATION_STATUS.md updates** - Cron job or CI trigger every 4 hours
|
||||
4. **Continue module migration** - Focus on non-RTI dependent modules
|
||||
5. **Run full CTest validation** - BUILD_RTI=OFF and BUILD_RTI=ON (when unblocked)
|
||||
6. **Commit and push all changes** - Submodule and main repo
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Build Commands
|
||||
|
||||
### BUILD_RTI=OFF (Working)
|
||||
```bash
|
||||
docker run --rm -v $(pwd):/repo migration-pipeline:ubuntu26.04 \
|
||||
cmake -S /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus \
|
||||
-B /repo/build -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DCMAKE_PREFIX_PATH=/opt/Qt/6.8.3/gcc_64 \
|
||||
-DBUILD_RTI=OFF
|
||||
|
||||
docker run --rm -v $(pwd):/repo migration-pipeline:ubuntu26.04 \
|
||||
cmake --build /repo/build --parallel
|
||||
```
|
||||
|
||||
### BUILD_RTI=ON (Blocked by ngl_codegen + RTI C++23 issues)
|
||||
```bash
|
||||
# Currently fails due to:
|
||||
# 1. ngl_codegen not built (requires Grantlee5/Qt5)
|
||||
# 2. RTI header C++23 incompatibility
|
||||
# Would require C++17 or RTI header patches + codegen workaround
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 Migration Progress
|
||||
|
||||
- **Modules fully migrated**: 1 (Lts/Common)
|
||||
- **Modules with structure**: 6 (DDS, Plugins, Projects, Proxies, Services, TetraIF partial)
|
||||
- **Build status**: ✅ BUILD_RTI=OFF, ⚠️ BUILD_RTI=ON blocked (ngl_codegen + RTI headers)
|
||||
- **Test status**: 1/1 tests passing (Lts/Common)
|
||||
- **Build errors fixed**: 4 (generic_base.h, wait_set_handler.h, pub_sub_base.cpp, training_area_telegrams.h)
|
||||
|
||||
---
|
||||
|
||||
**Generated**: 2026-08-22 13:30
|
||||
**Next auto-update**: After 4 hours or at next milestone
|
||||
**Git Remote:** `git@devel:lifemaps/qt6-migration-pipeline.git`
|
||||
**SSH Config:** `devel` → `gitea.life-maps.com:2223`
|
||||
+1
-1
Submodule qt-migration-legatus updated: f6cbb9021f...8d456c7d1a.
Reference in new issue
Block a user