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 octane . Évalué à 4.
Mais pourquoi? en vrai, pourquoi vouloir recompiler wesnoth en version 1.2 ?
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 alberic89 🐧 . Évalué à 3.
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.
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 octane . Évalué à 4.
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 alberic89 🐧 . É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 moi1392 . Évalué à 5.
pour la première erreur
tu vires le "const" de gauche (le premier mot de la ligne) qui ne sert à rien.
pour la seconde, tu ajoutes un
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 alberic89 🐧 . É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 alberic89 🐧 . É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 moi1392 . É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 :
ouclass unit {
et tu inclues le fichier correspondant à la place de utility.struct unit {
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 moi1392 . É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 alberic89 🐧 . É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 alberic89 🐧 . É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 moi1392 . É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 alberic89 🐧 . É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 moi1392 . É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…
[^] # Re: solutions ...mais
Posté par alberic89 🐧 . É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 moi1392 . Évalué à 3.
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…
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 moi1392 . É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 moi1392 . É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
qui manque dans src/campaign_server/campaign_server.cpp
[^] # Re: solutions ...mais
Posté par alberic89 🐧 . É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 alberic89 🐧 . É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 moi1392 . Évalué à 3.
bien joué :)
T'as fait comment pour libpng ? je l'ai fixé chez moi si tu as besoin.
ç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 alberic89 🐧 . É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 amotakuda . É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.