Forum Programmation.c++ [RĂ©solu] Compiler wesnoth-1.2

Posté par  . Licence CC By‑SA.
2
31
oct.
2022

Bonjour Ă  tous,
Je vous parle Ă  vous, barbus assis dans vos fauteuils.
J'ai comme projet de compiler toutes les versions de la Bataille pour Wesnoth pour l'architecture arm64. Je fais tout sur un Raspberry Pi 4B 4Go, et ça marche pas trop mal pour l'instant.

- Mais, si ça marche, pourquoi tu postes dans le forum ?

Parce que ça marchait bien pour les derniÚres versions, soit 1.16-1.17.
J'ai décidé ensuite de commencer du début, avec la 1.0. Pour l'instant tout va bien.
Du coup, je tente naïvement la 1.2. Ça foire monumentalement.
C'est Ă©crit en c++, un langage auquel je ne comprends goutte.
J'ai donc ouvert une entrée sur le forum du jeu, là, ici.
Comme vous pouvez le voir, on s'émerveille de l'évolution des langages, on tente un patch, on propose des solutions. La meilleure pour l'instant est je trouve de compiler le bazar avec un g++ d'époque (soit fin 2007 début 2008).
Vous vous doutez bien que c'est compliquĂ© de trouver un truc aussi vieux, compilĂ© pour l'arm64 (ou mĂȘme armhf).
Je me tourne donc vers vous, chers linuxiens, pour trouver une solution.
Si vous avez une idĂ©e, arrivez Ă  corriger le bug de maniĂšre 'propre', ou que sais-je encore, merci de nous le partager ici mĂȘme.

Sinon, vous pouvez toujours aller voir des jolies nimages. (et en plus c'est drÎle !)

  • # mais?

    Posté par  . Évalué à 4.

    Mais pourquoi? en vrai, pourquoi vouloir recompiler wesnoth en version 1.2 ?

    La meilleure pour l'instant est je trouve de compiler le bazar avec un g++ d'époque (soit fin 2007 début 2008).

    bin, euh, oui. Tu compiles avec les libs d'Ă©poque et les compilos d'Ă©poque.

    Mais en vrai, je comprends pas bien le but du truc???

    Ensuite, si tu veux vraiment faire ce genre de choses, tu prends une distro linux qui date de l'Ă©poque du logiciel (genre une debian de 2007), tu l'installes sans mettre Ă  jour, tu compiles le bazar.

    • [^] # Re: mais?

      Posté par  . Évalué à 3.

      Mais pourquoi? en vrai, pourquoi vouloir recompiler wesnoth en version 1.2 ?

      Voyons voir, quelles pourrait ĂȘtre les raisons ?
      - c'est utile !
      - ça sert à une large communauté !
      - c'est fun !
      Déjà, redécouvrir le plaisir de jouer sur un bon vieux jeu, plonger dans les origines du gaming, c'est une expérience extraordinaire !
      Et, plus concrÚtement, ça pourrait aussi permettre de jouer sur du vieux matériel qui ne supporte pas forcément les derniÚres versions.

      En gros, ça ne sert à rien.

      Ensuite, si tu veux vraiment faire ce genre de choses, tu prends une distro linux qui date de l'Ă©poque du logiciel (genre une debian de 2007), tu l'installes sans mettre Ă  jour, tu compiles le bazar.

      L'objectif, ne l'oublions pas, et de compiler pour l'architecture arm64. Les premiers OS arm64 datent d'il y a Ă  peine un an.
      MĂȘme si on se rabat sur de l'armhf, la premiĂšre version de Raspbian date de 2013. La Debian qu'il nous faudrait est etch (4.0), mais je n'arrive pas Ă  trouver l'image dans le serveur d'archive : http://archive.debian.org/debian/dists/etch/. Si quelqu'un arrivait Ă  trouver oĂč est cachĂ©e l'image, ça pourrait en effet faire bien avancer le schmilblick.

      On pourrait aussi tenter de compiler un vieux g++, mais quand je vois le ramdam qu'il faut faire pour compiler une version récente, je crains le pire pour un truc qui date d'il y a 15 ans.

      L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

      • [^] # Re: mais?

        Posté par  . Évalué à 4.

        Voyons voir, quelles pourrait ĂȘtre les raisons ?
        - c'est utile !
        - ça sert à une large communauté !
        - c'est fun !
        Déjà, redécouvrir le plaisir de jouer sur un bon vieux jeu, plonger dans les origines du gaming, c'est une expérience extraordinaire !

        alors, c'est une noble motivation :D

        ceci dit, je pense vraiment que compiler un vieux truc sur une distrib rĂ©cente, c'est chercher plein d'ennuis. Surtout que tu changes de CPU
. Rien que compiler des softs prĂ©vu pour intel 32 bits en 64 bits ça peut ĂȘtre tristouille, je te recommande plutĂŽt de tout faire en Ă©mulation:

        un KVM est raisonnablement rapide, tu installes une debian d'Ă©poque, et tu joues sur la distrib d'Ă©poque.

        • [^] # Re: mais?

          Posté par  . Évalué à 2.

          Si on utilise un Ă©mulateur, alors autant passer par wine et utiliser l'installeur exe comme tout le monde.
          Non, mon but est vraiment de chercher le maximum d'ennuis :)
          Notons néanmoins que si ça marche (c'est beau les conditions) ça permettrait de jouer nativement sur arm avec bon gain de perfs car compilateur plus récent, et le jeu pourrait tourner ainsi sur des systÚmes atrophiés !

          L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

  • # solutions ...mais

    Posté par  . Évalué à 5.

    pour la premiĂšre erreur

    const type get_type() const { return val_.type_; };
    

    tu vires le "const" de gauche (le premier mot de la ligne) qui ne sert Ă  rien.

    pour la seconde, tu ajoutes un

    #include <utility>
    

    en tĂȘte du fichier unit_map.hpp, en fin des autres "#include"

    ça va résoudre les 2 soucis de compilation que j'ai vu postés par ton pseudo sur le forum (tu aurais pu les mettre ici au passage)
    Par contre tu risques d'en avoir plein d'autres. Le C++ évolue, mais pas seulement, les compilateurs aussi, et deviennent de plus en plus strictes avec les versions, ce qui fait que du code qui compilait avec un ancien compilateur se retrouve souvent avec des tas d'erreurs de compilation "triviales" (pour un habitué) mais parfois un peu plus complexes avec un compilateur récent.

    Cela Ă©tant dit, je ne pense pas que ce soit une bonne idĂ©e de te lancer la dedans si tu n'es pas un dĂ©veloppeur c++ et que tu ne comptes pas soumettre un patch. Et mĂȘme dans ce cas, si la version 1.2 n'est plus maintenue, ton patch risque simplement de ne pas ĂȘtre acceptĂ©.

    • [^] # Re: solutions ...mais

      Posté par  . Évalué à 2.

      Merci beaucoup pour ces indications et ton aide, je teste tout ça et remets un post dÚs que c'est fait.

      J'ai préféré ne pas remettre le bug ici pour vous obliger à aller voir les réponses déjà apportées. (je vous manipule)

      Si jamais j'arrive Ă  une solution qui marche, je mettrai une PR sur la branche 1.2 et advienne que pourra, mais je pense qu'elle sera plutĂŽt bien accueillie.

      J'avais déjà essayé de m'intéresser au C++, mais j'ai du mal à trouver des cours bien faits qui ne repartent pas de zéros et me refassent toute la partie algorithmique générale commune à tous les langages.

      L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

      • [^] # Re: solutions ...mais

        Posté par  . Évalué à 2.

        Re-bonjour,
        Désolé, mais ta suggestion ne résout pas la deuxiÚme erreur affichée par le compilateur (la premiÚre erreur n'est qu'une goutte d'eau dans une mer de warnings violets).
        Merci quand mĂȘme d'avoir essayĂ©.

        L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

        • [^] # Re: solutions ...mais

          Posté par  . Évalué à 4.

          en effet, c'est le type "unit" qui n'est pas défini, j'ai lu un peu vite désolé.
          Du coup il faut les sources pour résoudre ça, tu trouves dans quel fichier "unit" est défini, cherche un truc du genre :

          class unit {
          ou

          struct unit {
          et tu inclues le fichier correspondant Ă  la place de utility.
          J'avais prévenu que ça n'étais pas une bonne idée de se lancer dedans si tu n'as pas l'habitude de faire du c++

          • [^] # Re: solutions ...mais

            Posté par  . Évalué à 4. DerniĂšre modification le 31 octobre 2022 Ă  20:34.

            ok, je suis allé voir le code comme un grand, et il y a une dependance circulaire, je me demande comment ce code a pu compiler un jour


            Si demain j'ai la motiv je me lance dans la correction et je le fais compiler. Bien noter le gros SI au début de la phrase


            • [^] # Re: solutions ...mais

              Posté par  . Évalué à 2.

              La magie des compilateurs


              Ne t'embĂȘte pas Ă  compiler le code, il faut les bonnes libs, l'envirronnement kivabien, freetype2 pas celui du dĂ©pot mais un que tu a compilĂ© toi-mĂȘme avec les options kivonbiens s'il vous plait
etc.
              Envoie-moi juste les fichirers modifiĂ©s (ou un patch) et je le testerai. Je t'envoie demain les commandes pour bien dĂ©marrer ta compil si jamais tu veux quand mĂȘme essayer, je les ais pas sous la main ce soir.

              Que la nuit nous porte conseil.

              L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

              • [^] # Re: solutions ...mais

                Posté par  . Évalué à 2.

                Voici quelques commandes qui devraient t'aider Ă  compiler si tu veux :
                sudo apt update && sudo apt install libsdl1.2debian libsdl-image1.2 libsdl-mixer1.2 libsdl-net1.2 libfreetype6 libvorbis-dev cmake g++ make gettext autoconf automake libzipios++-dev -y

                echo installing freetype-2.12.1
                cd ~/
                wget http://downloads.sourceforge.net/freetype/freetype-2.12.1.tar.xz && tar -xf freetype-2.12.1.tar.xz && cd freetype-2.12.1/ && sed -ri "s:.*(AUX_MODULES.*valid):\1:" modules.cfg && sed -r "s:.*(#.*SUBPIXEL_RENDERING) .*:\1:" -i include/freetype/config/ftoption.h && ./configure --prefix=/usr --enable-freetype-config --disable-static && make && sudo make install
                cd ~/
                sudo mkdir /usr/include/freetype/
                sudo mkdir /usr/include/freetype/internal/
                sudo cp -r freetype-2.12.1/include/freetype/internal/* /usr/include/freetype/internal/
                echo done.

                L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

                • [^] # Re: solutions ...mais

                  Posté par  . Évalué à 4.

                  j'ai réussi à m'emmerder plus de 10 minutes, du coup j'ai fait compiler, au moins une partie, je me suis arreté au soucis de compatibilité avec freetype2 car un peu la flemme de le compiler (et pas plus de 10 minutes à investir)
                  oĂč est ce que je peux te poster un patch sans avoir Ă  crĂ©er de compte ?

                  • [^] # Re: solutions ...mais

                    Posté par  . Évalué à 2.

                    Tu peux me l'envoyer à alberic89ATgmx.com (AT=@ pour tromper les bots), je m'occuperait de le tester et le publier en te créditant si ça marche.
                    Merci beaucoup d'essayer en tout cas.

                    L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

                    • [^] # Re: solutions ...mais

                      Posté par  . Évalué à 4.

                      Finalement je te mets le patch ici, ne me crédite pas tu peux mettre ton nom ça me va, (il est en licence "BCET" : Balec Complet Et Total)
                      c'est un patch git sur le tag 1.2.8
                      Si tu as d'autres soucis de compilation aprùs ça, je compilerai freetype2 pour alle rau bout du build et les fixer aussi. Quand j'aurais la motiv


                      From fecd2c59ddf91d47901a90ecc7d81d353374cef8 Mon Sep 17 00:00:00 2001
                      From: plop <plop>
                      Date: Tue, 1 Nov 2022 19:04:04 +0100
                      Subject: [PATCH] Fix unit/unit_map include circular dependency
                      
                      ---
                       src/actions.hpp        |  1 +
                       src/ai_dfool.hpp       |  1 +
                       src/config_adapter.cpp |  1 +
                       src/game_events.hpp    |  1 +
                       src/pathfind.cpp       |  1 +
                       src/preferences.cpp    |  1 +
                       src/unit.hpp           | 13 ++-----------
                       src/unit_abilities.cpp |  1 +
                       src/unit_map.hpp       | 11 +++++++++++
                       src/upload_log.cpp     |  1 +
                       10 files changed, 21 insertions(+), 11 deletions(-)
                      
                      diff --git a/src/actions.hpp b/src/actions.hpp
                      index 0191f8b05f6..0a9a287a3ef 100644
                      --- a/src/actions.hpp
                      +++ b/src/actions.hpp
                      @@ -23,6 +23,7 @@ struct combatant;
                      
                       #include "map.hpp"
                       #include "unit.hpp"
                      +#include "unit_map.hpp"
                      
                       #include <deque>
                      
                      diff --git a/src/ai_dfool.hpp b/src/ai_dfool.hpp
                      index ec043c470ca..d0f407669b3 100644
                      --- a/src/ai_dfool.hpp
                      +++ b/src/ai_dfool.hpp
                      @@ -5,6 +5,7 @@
                      
                       #include "ai_interface.hpp"
                       #include "map.hpp"
                      +#include "unit_map.hpp"
                       #include <vector>
                       #include <map>
                       #include <string>
                      diff --git a/src/config_adapter.cpp b/src/config_adapter.cpp
                      index 9fd56aef144..2726804948b 100644
                      --- a/src/config_adapter.cpp
                      +++ b/src/config_adapter.cpp
                      @@ -12,6 +12,7 @@
                       */
                      
                       #include "global.hpp"
                      +#include "unit_map.hpp"
                      
                       #include <sstream>
                       #include "config_adapter.hpp"
                      diff --git a/src/game_events.hpp b/src/game_events.hpp
                      index 4e0280d57a4..dd2b8cc38cb 100644
                      --- a/src/game_events.hpp
                      +++ b/src/game_events.hpp
                      @@ -21,6 +21,7 @@ class display;
                       #include "map.hpp"
                       #include "team.hpp"
                       #include "unit.hpp"
                      +#include "unit_map.hpp"
                       #include "variable.hpp"
                      
                       #include <vector>
                      diff --git a/src/pathfind.cpp b/src/pathfind.cpp
                      index 6a61b4b5483..4f2c841ccbf 100644
                      --- a/src/pathfind.cpp
                      +++ b/src/pathfind.cpp
                      @@ -19,6 +19,7 @@ See the COPYING file for more details.
                       #include "log.hpp"
                       #include "pathfind.hpp"
                       #include "util.hpp"
                      +#include "unit_map.hpp"
                       #include "wassert.hpp"
                      
                       class gamestatus;
                      diff --git a/src/preferences.cpp b/src/preferences.cpp
                      index c71ffeffc32..e3f8d8515ed 100644
                      --- a/src/preferences.cpp
                      +++ b/src/preferences.cpp
                      @@ -24,6 +24,7 @@
                       #include "preferences.hpp"
                       #include "sound.hpp"
                       #include "util.hpp"
                      +#include "unit_map.hpp"
                       #include "video.hpp" // non_interactive()
                       #include "wassert.hpp"
                       #include "wesconfig.h"
                      diff --git a/src/unit.hpp b/src/unit.hpp
                      index c23006d32d0..dbc31cf7fe7 100644
                      --- a/src/unit.hpp
                      +++ b/src/unit.hpp
                      @@ -19,9 +19,9 @@
                       #include "team.hpp"
                       #include "unit_types.hpp"
                       #include "image.hpp"
                      -#include "unit_map.hpp"
                      
                       class unit;
                      +class unit_map;
                       class display;
                       class gamestatus;
                      
                      @@ -396,16 +396,7 @@ void sort_units(std::vector< unit > &);
                      
                       int team_units(const unit_map& units, unsigned int team_num);
                       int team_upkeep(const unit_map& units, unsigned int team_num);
                      -unit_map::const_iterator team_leader(unsigned int side, const unit_map& units);
                      -std::string team_name(int side, const unit_map& units);
                      -unit_map::iterator find_visible_unit(unit_map& units,
                      -       const gamemap::location loc,
                      -       const gamemap& map,
                      -       const std::vector<team>& teams, const team& current_team);
                      -unit_map::const_iterator find_visible_unit(const unit_map& units,
                      -       const gamemap::location loc,
                      -       const gamemap& map,
                      -       const std::vector<team>& teams, const team& current_team);
                      +
                      
                       struct team_data
                       {
                      diff --git a/src/unit_abilities.cpp b/src/unit_abilities.cpp
                      index 4fa0f6a12ef..8bd4460a056 100644
                      --- a/src/unit_abilities.cpp
                      +++ b/src/unit_abilities.cpp
                      @@ -12,6 +12,7 @@
                       */
                      
                       #include "unit.hpp"
                      +#include "unit_map.hpp"
                       #include "unit_abilities.hpp"
                      
                       #include "wassert.hpp"
                      diff --git a/src/unit_map.hpp b/src/unit_map.hpp
                      index e71203af275..555271fd0f0 100644
                      --- a/src/unit_map.hpp
                      +++ b/src/unit_map.hpp
                      @@ -149,4 +149,15 @@ private:
                          std::map<gamemap::location,std::pair<gamemap::location,unit>*> map_;
                       };
                      
                      +unit_map::const_iterator team_leader(unsigned int side, const unit_map& units);
                      +std::string team_name(int side, const unit_map& units);
                      +unit_map::iterator find_visible_unit(unit_map& units,
                      +       const gamemap::location loc,
                      +       const gamemap& map,
                      +       const std::vector<team>& teams, const team& current_team);
                      +unit_map::const_iterator find_visible_unit(const unit_map& units,
                      +       const gamemap::location loc,
                      +       const gamemap& map,
                      +       const std::vector<team>& teams, const team& current_team);
                      +
                       #endif // UNIT_MAP_H_INCLUDED
                      diff --git a/src/upload_log.cpp b/src/upload_log.cpp
                      index 0718249e9e9..bcf38fcc0d2 100644
                      --- a/src/upload_log.cpp
                      +++ b/src/upload_log.cpp
                      @@ -23,6 +23,7 @@
                       #include "upload_log.hpp"
                       #include "wesconfig.h"
                       #include "wml_separators.hpp"
                      +#include "unit_map.hpp"
                      
                       #include "SDL_net.h"
                      
                      -- 
                      2.37.2
                      
                      • [^] # Re: solutions ...mais

                        Posté par  . Évalué à 2.

                        Merci beaucoup pour ce patch.
                        D'aprÚs git, le fichier patch est corromput, il faut passer manuelement la section qui coince et aprÚs ça va.
                        Je l'ai testé à l'instant, et il y a une nouvelle erreur (mais ç'a compilé beaucoup plus longtemps, donc je pense plus une erreur cachée qui a été révélée par la résolution de la premiÚre).
                        Je te met le log :
                        make[2]: Entering directory '/home/pi/wesnoth-1.2.8/src'
                        depbase=`echo server/game.o | sed 's|[^/]*`{mathjax} |.deps/&|;s|\.o`||'`;\
                        g++ -DHAVE_CONFIG_H -I. -I.. -I/usr/include/freetype2 -I/usr/include/libpng16 -I ./sdl_ttf -I../intl -I../intl -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DWESNOTH_PATH=\"/usr/local/share/wesnoth\" -DLOCALEDIR=\"translations\" -DHAS_RELATIVE_LOCALEDIR=1 -DFIFODIR=\"/usr/local/var/run/wesnothd\" -O2 -W -Wall -ansi -D_X11 -MT server/game.o -MD -MP -MF $depbase.Tpo -c -o server/game.o server/game.cpp &&\
                        mv -f $depbase.Tpo $depbase.Po
                        server/game.cpp: In member function ‘bool game::is_observer(network::connection) const’:
                        server/game.cpp:53:25: error: no matching function for call to ‘find(std::vector<int>::const_iterator, std::vector<int>::const_iterator, network::connection&)’
                        53 | return std::find(observers_.begin(),observers_.end(),player) != observers_.end();
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        In file included from /usr/include/c++/12/bits/locale_facets.h:48,
                        from /usr/include/c++/12/bits/basic_ios.h:37,
                        from /usr/include/c++/12/ios:44,
                        from /usr/include/c++/12/istream:38,
                        from /usr/include/c++/12/sstream:38,
                        from server/../util.hpp:18,
                        from server/game.cpp:18:
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: candidate: ‘template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, const _CharT2&)’
                        434 | find(istreambuf_iterator<_CharT> __first,
                        | ^~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: template argument deduction/substitution failed:
                        server/game.cpp:53:25: note: ‘__gnu_cxx::__normal_iterator<const int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >’
                        53 | return std::find(observers_.begin(),observers_.end(),player) != observers_.end();
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        server/game.cpp: In member function ‘bool game::is_muted_observer(network::connection) const’:
                        server/game.cpp:58:25: error: no matching function for call to ‘find(std::vector<int>::const_iterator, std::vector<int>::const_iterator, network::connection&)’
                        58 | return std::find(muted_observers_.begin(), muted_observers_.end(), player) != muted_observers_.end();
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: candidate: ‘template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, const _CharT2&)’
                        434 | find(istreambuf_iterator<_CharT> __first,
                        | ^~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: template argument deduction/substitution failed:
                        server/game.cpp:58:25: note: ‘__gnu_cxx::__normal_iterator<const int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >’
                        58 | return std::find(muted_observers_.begin(), muted_observers_.end(), player) != muted_observers_.end();
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        server/game.cpp: In member function ‘bool game::is_player(network::connection) const’:
                        server/game.cpp:63:25: error: no matching function for call to ‘find(std::vector<int>::const_iterator, std::vector<int>::const_iterator, network::connection&)’
                        63 | return std::find(players_.begin(),players_.end(),player) != players_.end();
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: candidate: ‘template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, const _CharT2&)’
                        434 | find(istreambuf_iterator<_CharT> __first,
                        | ^~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: template argument deduction/substitution failed:
                        server/game.cpp:63:25: note: ‘__gnu_cxx::__normal_iterator<const int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >’
                        63 | return std::find(players_.begin(),players_.end(),player) != players_.end();
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        server/game.cpp: In member function ‘void game::add_player(network::connection, bool)’:
                        server/game.cpp:652:21: error: no matching function for call to ‘find(std::vector<int>::iterator, std::vector<int>::iterator, network::connection&)’
                        652 | if(std::find(users.begin(),users.end(),player) != users.end()) {
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: candidate: ‘template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, const _CharT2&)’
                        434 | find(istreambuf_iterator<_CharT> __first,
                        | ^~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: template argument deduction/substitution failed:
                        server/game.cpp:652:21: note: ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >’
                        652 | if(std::find(users.begin(),users.end(),player) != users.end()) {
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        server/game.cpp: In member function ‘void game::remove_player(network::connection, bool)’:
                        server/game.cpp:704:61: error: no matching function for call to ‘find(std::vector<int>::iterator, std::vector<int>::iterator, network::connection&)’
                        704 | const user_vector::iterator itor = std::find(players_.begin(),players_.end(),player);
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: candidate: ‘template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, const _CharT2&)’
                        434 | find(istreambuf_iterator<_CharT> __first,
                        | ^~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: template argument deduction/substitution failed:
                        server/game.cpp:704:61: note: ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >’
                        704 | const user_vector::iterator itor = std::find(players_.begin(),players_.end(),player);
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        server/game.cpp:711:61: error: no matching function for call to ‘find(std::vector<int>::iterator, std::vector<int>::iterator, network::connection&)’
                        711 | const user_vector::iterator itor = std::find(observers_.begin(),observers_.end(),player);
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: candidate: ‘template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT, std::char_traits<_CharT> > >::__type std::find(istreambuf_iterator<_CharT, char_traits<_CharT> >, istreambuf_iterator<_CharT, char_traits<_CharT> >, const _CharT2&)’
                        434 | find(istreambuf_iterator<_CharT> __first,
                        | ^~~~
                        /usr/include/c++/12/bits/streambuf_iterator.h:434:5: note: template argument deduction/substitution failed:
                        server/game.cpp:711:61: note: ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT, std::char_traits<_CharT> >’
                        711 | const user_vector::iterator itor = std::find(observers_.begin(),observers_.end(),player);
                        | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        make[2]: *** [Makefile:1428: server/game.o] Error 1
                        make[2]: Leaving directory '/home/pi/wesnoth-1.2.8/src'
                        make[1]: *** [Makefile:536: all-recursive] Error 1
                        make[1]: Leaving directory '/home/pi/wesnoth-1.2.8'
                        make: *** [Makefile:442: all] Error 2

                        ou un asciinema si tu préfÚre les couleurs : https://asciinema.org/a/534202.

                        Si tu veux compiler toi-mĂȘme, j'ai mis plus haut les commandes pour compiler et installer freetype2.
                        Pour le reste, il faut faire ./autogen.sh && ./configure --build=<ça dépend du pc. moi ç'est aarch64-unknown-linux-gnu. si tu teste à vide, il te donne des pistes> --enable-campaign-server --enable-editor --enable-tools --enable-server --enable-dummy-locales && make

                        L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

                        • [^] # Re: solutions ...mais

                          Posté par  . Évalué à 3.

                          #inclide <algorithm>
                          

                          au début du fichier src/server/game.cpp (avec les autres #includes, mets le en dernier)
                          Sérieux quel message d'erreur à la con, j'ai buggué 10 minutes avant de comprendre


                          Si tu veux compiler toi-mĂȘme,

                          je résiste encore et toujours à l'envahisseur freetype2 des années 2000, tu ne m'auras pas si facilement :p

                          • [^] # Re: solutions ...mais

                            Posté par  . Évalué à 4.

                            au passage, il manque aussi un #include dans src/campaign_server/campaign_server.cpp et un #include "../unit_map.hpp" dans src/editor/editor_main.cpp (à ajouter au premier patch, j'avais pas activé les tools à la compilation du coup je ne l'avais pas vu)

                            Une fois ces problĂšmes fixĂ©s, je tombe sur un souci d'api avec la libpng de ma machine, et pas trop le temps de creuser là
 tu peux toujours compiler une vieille libpng comme tu as fait pour freetype2, mais Ă  mon avis c'est simplement fixable avec une libpng plus rĂ©cente (mais est-ce que c'est ce que tu veux faire ?)

                            • [^] # Re: solutions ...mais

                              Posté par  . Évalué à 4. DerniĂšre modification le 02 novembre 2022 Ă  11:05.

                              je m'auto-auto répond (pour une auto-auto-satisfaction récursive !)
                              c'est un

                              #include <algoritm>
                              

                              qui manque dans src/campaign_server/campaign_server.cpp

                              • [^] # Re: solutions ...mais

                                Posté par  . Évalué à 1.

                                Salut,
                                J'ai testĂ©, le code compile, mais on a un nombre incroyable de bugs qui ne draient pas y ĂȘtre. Pour arriver Ă  un rĂ©sultat potable, je pense qu'il faudrait rĂ©soudre tous les warnings que signale g++ et peut-ĂȘtre aussi les notes.
                                J'avais l'impression que clang-tidy permettait de mettre à niveau un code c++ automatiquement, mais il faut faire tous les paliers pour passer de c03 à c20, et je n'arrive déjà pas à faire une premiÚre passe.
                                Quelqu'un connaitrait-il un outil qui permettrait de faire tout ça tout seul ? Un peu comme 2to3 pour python.

                                L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

                                • [^] # Re: Solution !!! 🎉

                                  Posté par  . Évalué à 1.

                                  ÇA MARCHE !!! AllĂ©luia ! Gloire au manchot tout-puissant !
                                  J'ai fini par réussir à compiler une version correcte. Globalement, tout a l'air de fonctionner à part les traductions. J'ai eu des messages bizarres à la compilation, voir ici.
                                  J'ai tout compilé sur une version 32 bit du RPi OS, avec juste les libsdl1.2-dev, en appliquant préalablement le patch ci-dessous. Il faut lancer le fichier src/wesnoth depuis la racine du dossier du jeu pour qu'il trouve tous les dossiers de ressources et de config.
                                  Seuls petits points négatifs, il faut un environnement graphique, et quand j'essaie de le lancer sur un systÚme 64-bit, le terminal m'informe gentiment que mon fichier n'existe pas (alors qu'il l'a sous les yeux !).
                                  Voici le patch pour ceux que ça intéresse :
                                  ```diff --git a/Makefile.am b/Makefile.am
                                  index 0d878c4..2950977 100644
                                  --- a/Makefile.am
                                  +++ b/Makefile.am
                                  @@ -1,3 +1,4 @@
                                  +CXXFLAGS=-std=c++03
                                  ISUBDIRS = icons
                                  SUBDIRS = po m4 src doc $(ISUBDIRS)
                                  pkgdatadir=$(datadir)/@DATADIR@
                                  diff --git a/src/actions.hpp b/src/actions.hpp
                                  index 0191f8b..0a9a287 100644
                                  --- a/src/actions.hpp
                                  +++ b/src/actions.hpp
                                  @@ -23,6 +23,7 @@ struct combatant;

                                  #include "map.hpp"
                                  #include "unit.hpp"
                                  +#include "unit_map.hpp"

                                  #include

                                  diff --git a/src/ai_dfool.hpp b/src/ai_dfool.hpp
                                  index ec043c4..d0f4076 100644
                                  --- a/src/ai_dfool.hpp
                                  +++ b/src/ai_dfool.hpp
                                  @@ -5,6 +5,7 @@

                                  #include "ai_interface.hpp"
                                  #include "map.hpp"
                                  +#include "unit_map.hpp"
                                  #include
                                  #include
                                  #include
                                  diff --git a/src/config_adapter.cpp b/src/config_adapter.cpp
                                  index 9fd56ae..2726804 100644
                                  --- a/src/config_adapter.cpp
                                  +++ b/src/config_adapter.cpp
                                  @@ -12,6 +12,7 @@
                                  */

                                  #include "global.hpp"
                                  +#include "unit_map.hpp"

                                  #include
                                  #include "config_adapter.hpp"
                                  diff --git a/src/game_events.hpp b/src/game_events.hpp
                                  index 4e0280d..dd2b8cc 100644
                                  --- a/src/game_events.hpp
                                  +++ b/src/game_events.hpp
                                  @@ -21,6 +21,7 @@ class display;
                                  #include "map.hpp"
                                  #include "team.hpp"
                                  #include "unit.hpp"
                                  +#include "unit_map.hpp"
                                  #include "variable.hpp"

                                  #include
                                  diff --git a/src/pathfind.cpp b/src/pathfind.cpp
                                  index 6a61b4b..4f2c841 100644
                                  --- a/src/pathfind.cpp
                                  +++ b/src/pathfind.cpp
                                  @@ -19,6 +19,7 @@ See the COPYING file for more details.
                                  #include "log.hpp"
                                  #include "pathfind.hpp"
                                  #include "util.hpp"
                                  +#include "unit_map.hpp"
                                  #include "wassert.hpp"

                                  class gamestatus;
                                  diff --git a/src/preferences.cpp b/src/preferences.cpp
                                  index c71ffef..e3f8d85 100644
                                  --- a/src/preferences.cpp
                                  +++ b/src/preferences.cpp
                                  @@ -24,6 +24,7 @@
                                  #include "preferences.hpp"
                                  #include "sound.hpp"
                                  #include "util.hpp"
                                  +#include "unit_map.hpp"
                                  #include "video.hpp" // non_interactive()
                                  #include "wassert.hpp"
                                  #include "wesconfig.h"
                                  diff --git a/src/unit.hpp b/src/unit.hpp
                                  index c23006d..dbc31cf 100644
                                  --- a/src/unit.hpp
                                  +++ b/src/unit.hpp
                                  @@ -19,9 +19,9 @@
                                  #include "team.hpp"
                                  #include "unit_types.hpp"
                                  #include "image.hpp"
                                  -#include "unit_map.hpp"

                                  class unit;
                                  +class unit_map;
                                  class display;
                                  class gamestatus;

                                  @@ -396,16 +396,7 @@ void sort_units(std::vector< unit > &);

                                  int team_units(const unit_map& units, unsigned int team_num);
                                  int team_upkeep(const unit_map& units, unsigned int team_num);
                                  -unit_map::const_iterator team_leader(unsigned int side, const unit_map& units);
                                  -std::string team_name(int side, const unit_map& units);
                                  -unit_map::iterator find_visible_unit(unit_map& units,
                                  - const gamemap::location loc,
                                  - const gamemap& map,
                                  - const std::vector& teams, const team& current_team);
                                  -unit_map::const_iterator find_visible_unit(const unit_map& units,
                                  - const gamemap::location loc,
                                  - const gamemap& map,
                                  - const std::vector& teams, const team& current_team);
                                  +

                                  struct team_data
                                  {
                                  diff --git a/src/unit_abilities.cpp b/src/unit_abilities.cpp
                                  index 4fa0f6a..8bd4460 100644
                                  --- a/src/unit_abilities.cpp
                                  +++ b/src/unit_abilities.cpp
                                  @@ -12,6 +12,7 @@
                                  */

                                  #include "unit.hpp"
                                  +#include "unit_map.hpp"
                                  #include "unit_abilities.hpp"

                                  #include "wassert.hpp"
                                  diff --git a/src/unit_map.hpp b/src/unit_map.hpp
                                  index e71203a..d8b8059 100644
                                  --- a/src/unit_map.hpp
                                  +++ b/src/unit_map.hpp
                                  @@ -14,6 +14,7 @@
                                  #define UNIT_MAP_H_INCLUDED

                                  #include
                                  +#include
                                  #include "map.hpp"
                                  #include "unit.hpp"

                                  @@ -149,4 +150,15 @@ private:
                                  std::mapgamemap::location,std::pair<gamemap::location,unit*> map_;
                                  };

                                  +unit_map::const_iterator team_leader(unsigned int side, const unit_map& units);
                                  +std::string team_name(int side, const unit_map& units);
                                  +unit_map::iterator find_visible_unit(unit_map& units,
                                  + const gamemap::location loc,
                                  + const gamemap& map,
                                  + const std::vector& teams, const team& current_team);
                                  +unit_map::const_iterator find_visible_unit(const unit_map& units,
                                  + const gamemap::location loc,
                                  + const gamemap& map,
                                  + const std::vector& teams, const team& current_team);
                                  +
                                  #endif // UNIT_MAP_H_INCLUDED
                                  diff --git a/src/upload_log.cpp b/src/upload_log.cpp
                                  index 0718249..bcf38fc 100644
                                  --- a/src/upload_log.cpp
                                  +++ b/src/upload_log.cpp
                                  @@ -23,6 +23,7 @@
                                  #include "upload_log.hpp"
                                  #include "wesconfig.h"
                                  #include "wml_separators.hpp"
                                  +#include "unit_map.hpp"

                                  #include "SDL_net.h"

                                  L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

                                  • [^] # Re: Solution !!! 🎉

                                    Posté par  . Évalué à 3.

                                    bien joué :)
                                    T'as fait comment pour libpng ? je l'ai fixé chez moi si tu as besoin.

                                    quand j'essaie de le lancer sur un systĂšme 64-bit, le terminal m'informe gentiment que mon fichier n'existe pas

                                    ça c'est une erreur classique pas classique du tout, c'est généralement quand tu fais l'édition de lien dans un environnement chelou, et que la lib ld.so référencée par ton executable n'est pas trouvée ou n'est pas de la bonne plateforme (32 vs 64 bits).

                                    tu peux essayer de l'ouvrir (l'executable, pour toi le fichier "wesnoth") avec un éditeur de texte (évite les trucs graphique, less est trÚs bien pour ça) et pas loin du début tu vas voir le chemin en dur vers la lib "ld.so.quelquechose" (par exemple /lib64/ld-linux-x86-64.so.2 pour les binaires de ma distribution)
                                    vérifie que le chemin existe et qu'il pointe bien vers un loader 64 bits (c'est souvent un lien symbolique)
                                    s'il n'existe pas, facile, tu crées un lien symbolique vers le bon fichier, s'il existe et pointe vers du 32 bits
 hheeuu
 bonne chance. Je te déconseille fortement de le remplacer, tu auras juste TOUS tes binaires 32bits qui ne démarrerons plus, y compris les outils standards (ls, cp, 
) ton systÚme deviendra juste complÚtement inutilisable.

                                    • [^] # Re: Solution !!! 🎉

                                      Posté par  . Évalué à 1.

                                      Merci, si j'ai réussi, c'est aussi grùce à toi !

                                      En utilisant le code source sur la branche 1.2 plutÎt que des tar-balles, et ne mettant aucune option aprÚs ./configure, je n'ai eu besoin d'installer ni freetype ni aucune autre lib bizarre. Apparemment, le bug freetype avait été fixé en 2018.

                                      Mais je vais refaire une sĂ©rie de compilations en activant diverses options, donc je vais peut-ĂȘtre avoir besoin de ta solution pour libpng. Mets-la ici au cas oĂč.

                                      En effet, j'ai au début de l'exécutable (pour arm32) une ligne qui fait référence à un ld-linux-armhf.so.3, inexistant dans mon systÚme arm64. Un lien symbolique génÚre une erreur encore plus bizarre, donc je vais laisser tout ça tranquille et attendre que RPi OS gÚre nativement les deux architectures.

                                      Si tu veux toi aussi faire des tests divers sur le jeu, le patch a été mergé dans une pull-request, donc il suffit de récupérer le code en .zip déjà patché sur github à la branche 1.2.

                                      L'informatique n'est pas une science exacte, on n'est jamais Ă  l'abri d'un succĂšs

  • # Commentaire supprimĂ©

    Posté par  . Évalué à 0. DerniĂšre modification le 17 novembre 2022 Ă  17:38.

    Ce commentaire a Ă©tĂ© supprimĂ© par l’équipe de modĂ©ration.

Suivre le flux des commentaires

Note : les commentaires appartiennent Ă  celles et ceux qui les ont postĂ©s. Nous n’en sommes pas responsables.