Skip to main content

Changelog - Fixes de Compilation

2026-02-08 - Correction des erreurs de compilation Epic​

Problème​

Le plugin compilait localement mais échouait sur les serveurs d'Epic/FAB avec des erreurs de types non définis.

Cause Racine​

Unreal Engine 5.5+ a retiré les "transitive includes" (includes implicites). Les headers qui étaient automatiquement inclus via d'autres headers ne le sont plus.

Erreurs Rencontrées​

1. error C2065: 'GEngine': undeclared identifier​

Fichier: ElysMusicEngineBPLibrary.cpp Solution: Ajout de #include "Engine/Engine.h"

2. error C2027: use of undefined type 'UWorld'​

Fichiers: ERP_MusicSubsystem.cpp, ERP_MusicVolume.cpp, ERP_StingerVolume.cpp Solution: Ajout de #include "Engine/World.h"

3. error C2027: use of undefined type 'UGameInstance'​

Fichiers: ERP_MusicVolume.cpp, ERP_StingerVolume.cpp, ERP_MusicSubsystem.cpp Solution: Ajout de #include "Engine/GameInstance.h"

4. error C2027: use of undefined type 'FTimerManager'​

Fichier: ERP_MusicSubsystem.cpp Solution: Ajout de #include "TimerManager.h"

Fichiers Modifiés​

  1. ElysMusicEngineBPLibrary.cpp

    • Ajout: #include "Engine/Engine.h"
  2. ERP_MusicSubsystem.cpp

    • Ajout: #include "Engine/GameInstance.h"
    • Ajout: #include "Engine/World.h"
    • Ajout: #include "TimerManager.h"
  3. ERP_MusicVolume.cpp

    • Ajout: #include "Engine/GameInstance.h"
  4. ERP_StingerVolume.cpp

    • Ajout: #include "Engine/GameInstance.h"

Outils Ajoutés​

1. Script de Test de Compilation (test_compilation.ps1)​

Script PowerShell pour tester la compilation localement avant soumission.

Utilisation:

# Test une version
.\test_compilation.ps1 -UEVersion 5.4

# Test plusieurs versions
.\test_compilation.ps1 -TestVersions @("5.0", "5.4", "5.5", "5.6", "5.7")

# Build propre
.\test_compilation.ps1 -UEVersion 5.6 -CleanOutput

Fonctionnalités:

  • ✅ Détecte automatiquement les installations UE
  • ✅ Compile avec RunUAT BuildPlugin
  • ✅ Génère des logs détaillés
  • ✅ Affiche les dernières 50 lignes d'erreur
  • ✅ Vérifie les binaires générés
  • ✅ Support de multiples versions UE

2. Workflow CI/CD GitHub Actions​

Fichiers:

  • .github/workflows/unreal-build.yml - Workflow principal
  • .github/workflows/ci.yml - Mise à jour (validation structure)

Validations:

  • ✅ Structure du plugin (.uplugin, dossiers requis)
  • ✅ Pas de binaires dans le repo
  • ✅ Conventions de nommage ERP
  • ✅ Vérification des includes manquants
  • ✅ Dépendances de module
  • ✅ Linting Markdown

Note: La CI ne compile PAS le plugin (UE est trop lourd). Utiliser test_compilation.ps1 localement.

Documentation Ajoutée​

  1. Documentation/CompilationTesting.md

    • Guide complet d'utilisation du script
    • Résolution des problèmes courants
    • Checklist de pré-soumission
  2. CONTRIBUTING.md

    • Guidelines pour les contributeurs
    • Conventions de code et nommage
    • Process de PR avec tests de compilation obligatoires
  3. README.md

    • Section "Pour les développeurs" ajoutée
    • Lien vers le guide de compilation

Tests de Validation​

✅ UE 5.6 - Compilation réussie
✅ UE 5.7 - Compilation réussie

Checklist pour la Prochaine Soumission​

  • Tester avec test_compilation.ps1 sur UE 5.0-5.7
  • Vérifier qu'il n'y a pas de warnings
  • Tester en jeu dans chaque version
  • Vérifier que les binaires sont dans .gitignore
  • Valider avec prepare_fab_package.py --validate
  • Soumettre à Epic/FAB

Leçons Apprises​

  1. Toujours inclure les headers explicitement

    • Ne jamais compter sur les includes transitifs
    • UE 5.5+ est strict sur les includes
  2. Tester localement avant soumission

    • Epic utilise potentiellement des versions UE différentes
    • Le script de compilation local reproduit leur build
  3. CI != Compilation

    • La CI GitHub Actions valide la structure, pas la compilation
    • Les tests de compilation doivent être locaux
  4. Règles d'or pour les includes:

    // Utilisez GEngine? -> #include "Engine/Engine.h"
    // Utilisez UWorld? -> #include "Engine/World.h"
    // Utilisez UGameInstance? -> #include "Engine/GameInstance.h"
    // Utilisez FTimerManager? -> #include "TimerManager.h"

Prochaines Étapes​

  1. Installer UE 5.0-5.5 pour tests complets
  2. Tester le plugin dans chaque version
  3. Mettre à jour le numéro de version dans .uplugin
  4. Soumettre avec confiance à Epic/FAB

Date: 2026-02-08
Auteur: Elys Allesiardo
Status: ✅ Résolu et validé