#!/usr/bin/env python3 """ Verschiebt DDS-Stub-Header in den korrekten include-Pfad. DDS-Header werden mit oder 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()