Files
qt6-migration-pipeline/move_dds_headers.py
T
torstenandCopilot 342ffd3e5c Update submodule to latest BUILD_RTI fixes
- HandlerMinelayerData: BUILD_RTI Guards für RTI-Abhängigkeiten
- svcTabCommon: Export-Header-Fix via Fallback-Target
- TrainingAreaBase: Stub-Header für BUILD_RTI=OFF
- ddsfts: Include-Pfad und Dependency-Fixes
- BUILD_RTI=OFF Compilation vollständig unterstützt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0JNZA586SACX1PRZ2DJAE5S
2026-08-21 19:30:20 +02:00

155 lines
5.7 KiB
Python

#!/usr/bin/env python3
"""
Verschiebt DDS-Stub-Header in den korrekten include-Pfad.
DDS-Header werden mit <ModulName/file_dtc.h> oder <ModulName/file_enums.hpp> included.
Diese müssen im include/ModulName/ Ordner liegen.
"""
import os
import shutil
from pathlib import Path
BASE_DIR = Path("/home/torsten/swy/sandbox/qt-migration-legatus/qt6-after/qt6-migrated-legatus")
INCLUDE_DIR = BASE_DIR / "include"
# Mapping von Ordner zu Modul-Namen für Include-Pfade
# Beispiel: Lts/Services/AreaEffectSimulation -> AreaEffectSimulation
FOLDER_TO_MODULE = {
"InfrastructureManagement": "InfrastructureManagement",
"Services/InfrastructureManagement": "InfrastructureManagement",
"AreaEffectSimulation": "AreaEffectSimulation",
"Services/AreaEffectSimulation": "AreaEffectSimulation",
"CentralEffectSimulation": "CentralEffectSimulation",
"Services/CentralEffectSimulation": "CentralEffectSimulation",
"ProjectDataManagement": "ProjectDataManagement",
"PresentationManagement": "PresentationManagement",
"Services/PresentationManagement": "PresentationManagement",
"WarehouseGuez": "WarehouseGuez",
"SoundManagement": "SoundManagement",
"SituationReplayManagement": "SituationReplayManagement",
"Services/SituationReplayManagement": "SituationReplayManagement",
"TargetManagement": "TargetManagement",
"Services/TargetManagement": "TargetManagement",
"AudioVideoManagement": "AudioVideoManagement",
"Services/AudioVideoManagement": "AudioVideoManagement",
"OperatorManagement": "OperatorManagement",
"Services/OperatorManagement": "OperatorManagement",
"ParticipantManagement": "ParticipantManagement",
"Services/ParticipantManagement": "ParticipantManagement",
"MissionManagement": "MissionManagement",
"Services/MissionManagement": "MissionManagement",
"SensorManagement": "SensorManagement",
"Services/SensorManagement": "SensorManagement",
"Skeleton": "Skeleton",
"Services/Skeleton": "Skeleton",
"AlarmManagement": "AlarmManagement",
"Services/AlarmManagement": "AlarmManagement",
"LogManagement": "LogManagement",
"Services/LogManagement": "LogManagement",
"CommunicationManagement": "CommunicationManagement",
"Services/CommunicationManagement": "CommunicationManagement",
"DeviceManagement": "DeviceManagement",
"Services/DeviceManagement": "DeviceManagement",
"PlatformManagement": "PlatformManagement",
"Services/PlatformManagement": "PlatformManagement",
"ScenarioManagement": "ScenarioManagement",
"Services/ScenarioManagement": "ScenarioManagement",
"SimulationManagement": "SimulationManagement",
"Services/SimulationManagement": "SimulationManagement",
"SystemManagement": "SystemManagement",
"Services/SystemManagement": "SystemManagement",
"TrainingAreaManagement": "TrainingAreaManagement",
"Services/TrainingAreaManagement": "TrainingAreaManagement",
"WeatherManagement": "WeatherManagement",
"Services/WeatherManagement": "WeatherManagement",
}
def find_dds_headers():
"""Finde alle DDS-Header im Projekt."""
dds_headers = []
for pattern in ["*_dtc.h", "*_enums.hpp"]:
for header in BASE_DIR.rglob(pattern):
# Skip include directory itself
if "include" in header.parts:
continue
dds_headers.append(header)
return dds_headers
# Prefix zu Modul-Namen Mapping
PREFIX_TO_MODULE = {
"ism": "InfrastructureManagement",
"aes": "AreaEffectSimulation",
"ces": "CentralEffectSimulation",
"pdm": "ProjectDataManagement",
"pre": "PresentationManagement",
"whg": "WarehouseGuez",
"som": "SoundManagement",
"srm": "SituationReplayManagement",
"tgt": "TargetManagement",
"avm": "AudioVideoManagement",
"opm": "OperatorManagement",
"ppm": "ParticipantManagement",
"msm": "MissionManagement",
"sem": "SensorManagement",
"skl": "Skeleton",
"alm": "AlarmManagement",
"lom": "LogManagement",
"com": "CommunicationManagement",
"dvm": "DeviceManagement",
"plm": "PlatformManagement",
"scm": "ScenarioManagement",
"sim": "SimulationManagement",
"sym": "SystemManagement",
"tam": "TrainingAreaManagement",
"wem": "WeatherManagement",
"flm": "FileManagement",
"flt": "FilterManagement",
}
def get_module_name(header_path):
"""Extrahiere Modul-Namen aus dem Dateinamen-Prefix."""
filename = header_path.name
# Extrahiere Prefix (z.B. "ism" aus "ism_dtc.h" oder "ism_enums.hpp")
prefix = filename.split("_")[0].lower()
if prefix in PREFIX_TO_MODULE:
return PREFIX_TO_MODULE[prefix], filename
# Fallback: Nimm den Elternordner-Namen
rel_path = header_path.relative_to(BASE_DIR)
parts = rel_path.parts
if len(parts) > 1:
return parts[-2], filename
return "DDS", filename
def move_headers():
"""Verschiebe alle DDS-Header in den include-Ordner."""
headers = find_dds_headers()
print(f"Gefunden: {len(headers)} DDS-Header")
moved = 0
for header in headers:
module_name, filename = get_module_name(header)
target_dir = INCLUDE_DIR / module_name
target_dir.mkdir(parents=True, exist_ok=True)
target_path = target_dir / filename
# Skip if already in correct location
if header == target_path:
continue
# Copy file
if target_path.exists():
print(f"Skip (exists): {target_path}")
continue
shutil.copy2(header, target_path)
print(f"Kopiert: {header.name} -> {target_path}")
moved += 1
print(f"\nFertig: {moved} Header kopiert")
if __name__ == "__main__":
move_headers()