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.

      Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

      • [^] # 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 !

          Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

  • # 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.

      Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

      • [^] # 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é.

        Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

        • [^] # 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/10/22 √† 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.

              Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

              • [^] # 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.

                Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

                • [^] # 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.

                    Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

                    • [^] # 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

                        Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

                        • [^] # 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/11/22 √† 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.

                                Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

                                • [^] # 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"

                                  Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

                                  • [^] # 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.

                                      Il y a 10 sortes de gens dans le monde ‚Äď ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

  • # Commentaire supprim√©

    Post√©¬†par¬† . √Čvalu√©¬†√†¬†0. Derni√®re modification le 17/11/22 √† 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.