1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-19 00:17:56 +02:00

- gcc 4.5 / boost 1.46 compilation fixes

- configure will accept CXXFLAGS parameter correctly
- boost version check in ERMParser - to skip compilation with old boost
This commit is contained in:
Ivan Savenko
2011-03-29 17:16:10 +00:00
parent c6d0814062
commit 407acce4c6
7 changed files with 36 additions and 17 deletions

View File

@ -232,29 +232,37 @@ void CBattleLogic::MakeStatistics(int currentCreatureId)
{ {
m_bEnemyDominates = false; m_bEnemyDominates = false;
} }
//boost compile hack
typedef int const std::pair<int, int>::* IntPtr;
typedef int const SCreatureCasualties::* CreaPtr;
typedef SCreatureCasualties const std::pair<int, SCreatureCasualties>::* CreaPairPtr;
// sort max damage // sort max damage
std::sort(m_statMaxDamage.begin(), m_statMaxDamage.end(), std::sort(m_statMaxDamage.begin(), m_statMaxDamage.end(),
bind(&creature_stat::value_type::second, _1) > bind(&creature_stat::value_type::second, _2)); bind((IntPtr)&creature_stat::value_type::second, _1) > bind((IntPtr)&creature_stat::value_type::second, _2));
// sort min damage // sort min damage
std::sort(m_statMinDamage.begin(), m_statMinDamage.end(), std::sort(m_statMinDamage.begin(), m_statMinDamage.end(),
bind(&creature_stat::value_type::second, _1) > bind(&creature_stat::value_type::second, _2)); bind((IntPtr)&creature_stat::value_type::second, _1) > bind((IntPtr)&creature_stat::value_type::second, _2));
// sort max speed // sort max speed
std::sort(m_statMaxSpeed.begin(), m_statMaxSpeed.end(), std::sort(m_statMaxSpeed.begin(), m_statMaxSpeed.end(),
bind(&creature_stat::value_type::second, _1) > bind(&creature_stat::value_type::second, _2)); bind((IntPtr)&creature_stat::value_type::second, _1) > bind((IntPtr)&creature_stat::value_type::second, _2));
// sort distance // sort distance
std::sort(m_statDistance.begin(), m_statDistance.end(), std::sort(m_statDistance.begin(), m_statDistance.end(),
bind(&creature_stat::value_type::second, _1) < bind(&creature_stat::value_type::second, _2)); bind((IntPtr)&creature_stat::value_type::second, _1) < bind((IntPtr)&creature_stat::value_type::second, _2));
// sort distance from shooters // sort distance from shooters
std::sort(m_statDistanceFromShooters.begin(), m_statDistanceFromShooters.end(), std::sort(m_statDistanceFromShooters.begin(), m_statDistanceFromShooters.end(),
bind(&creature_stat::value_type::second, _1) < bind(&creature_stat::value_type::second, _2)); bind((IntPtr)&creature_stat::value_type::second, _1) < bind((IntPtr)&creature_stat::value_type::second, _2));
// sort hit points // sort hit points
std::sort(m_statHitPoints.begin(), m_statHitPoints.end(), std::sort(m_statHitPoints.begin(), m_statHitPoints.end(),
bind(&creature_stat::value_type::second, _1) > bind(&creature_stat::value_type::second, _2)); bind((IntPtr)&creature_stat::value_type::second, _1) > bind((IntPtr)&creature_stat::value_type::second, _2));
// sort casualties // sort casualties
std::sort(m_statCasualties.begin(), m_statCasualties.end(), std::sort(m_statCasualties.begin(), m_statCasualties.end(),
bind(&creature_stat_casualties::value_type::second_type::damage_max, bind(&creature_stat_casualties::value_type::second, _1)) bind((CreaPtr)&creature_stat_casualties::value_type::second_type::damage_max,
bind((CreaPairPtr)&creature_stat_casualties::value_type::second, _1))
> >
bind(&creature_stat_casualties::value_type::second_type::damage_max, bind(&creature_stat_casualties::value_type::second, _2))); bind((CreaPtr)&creature_stat_casualties::value_type::second_type::damage_max,
bind((CreaPairPtr)&creature_stat_casualties::value_type::second, _2)));
} }
BattleAction CBattleLogic::MakeDecision(int stackID) BattleAction CBattleLogic::MakeDecision(int stackID)

View File

@ -207,7 +207,7 @@ static CApplier<CBaseForPGApply> *applier = NULL;
CMenuScreen::CMenuScreen( EState which ) CMenuScreen::CMenuScreen( EState which )
{ {
OBJ_CONSTRUCTION;//FIXME: Memory leak in buttons? Images on them definitely were not freed after game start OBJ_CONSTRUCTION;
bgAd = NULL; bgAd = NULL;
switch(which) switch(which)
@ -220,7 +220,7 @@ CMenuScreen::CMenuScreen( EState which )
bind(&CMenuScreen::moveTo, this, ref(CGP->scrs[loadGame])), 532, 132, "ZMENULG.DEF", SDLK_l); bind(&CMenuScreen::moveTo, this, ref(CGP->scrs[loadGame])), 532, 132, "ZMENULG.DEF", SDLK_l);
buttons[2] = new AdventureMapButton("", CGI->generaltexth->zelp[5].second, 0, 524, 251, "ZMENUHS.DEF", SDLK_h); // Highscore buttons[2] = new AdventureMapButton("", CGI->generaltexth->zelp[5].second, 0, 524, 251, "ZMENUHS.DEF", SDLK_h); // Highscore
buttons[3] = new AdventureMapButton("", CGI->generaltexth->zelp[6].second, 0 /*cb*/, 557, 359, "ZMENUCR.DEF", SDLK_c); // Credits buttons[3] = new AdventureMapButton("", CGI->generaltexth->zelp[6].second, 0 /*cb*/, 557, 359, "ZMENUCR.DEF", SDLK_c); // Credits
boost::function<void()> confWindow = bind(CInfoWindow::showYesNoDialog, ref(CGI->generaltexth->allTexts[69]), (const std::vector<SComponent*>*)0, do_quit, 0, false, 1); boost::function<void()> confWindow = bind(CInfoWindow::showYesNoDialog, boost::ref(CGI->generaltexth->allTexts[69]), (const std::vector<SComponent*>*)0, do_quit, 0, false, 1);
buttons[4] = new AdventureMapButton("", CGI->generaltexth->zelp[7].second, confWindow, 586, 468, "ZMENUQT.DEF", SDLK_ESCAPE); // Exit buttons[4] = new AdventureMapButton("", CGI->generaltexth->zelp[7].second, confWindow, 586, 468, "ZMENUQT.DEF", SDLK_ESCAPE); // Exit
} }
break; break;

View File

@ -909,12 +909,12 @@ unsigned char CMapHandler::getHeroFrameNum(unsigned char dir, bool isMoving) con
{ {
if(isMoving) if(isMoving)
{ {
static const unsigned char frame [] = {-1, 10, 5, 6, 7, 8, 9, 12, 11}; static const unsigned char frame [] = {0xff, 10, 5, 6, 7, 8, 9, 12, 11};
return frame[dir]; return frame[dir];
} }
else //if(isMoving) else //if(isMoving)
{ {
static const unsigned char frame [] = {-1, 13, 0, 1, 2, 3, 4, 15, 14}; static const unsigned char frame [] = {0xff, 13, 0, 1, 2, 3, 4, 15, 14};
return frame[dir]; return frame[dir];
} }
} }

2
configure vendored
View File

@ -14497,7 +14497,7 @@ else
enable_debug="yes" enable_debug="yes"
fi fi
if test "x$GXX" = "xyes" -a "x$enable_debug" = "xyes" ; then if test "x$GXX" = "xyes" -a "x$enable_debug" = "xyes" ; then
CXXFLAGS="$CXXFLAGS -O0 -ggdb" CXXFLAGS="$CXXFLAGS -O0 -ggdb"
fi fi

View File

@ -25,7 +25,7 @@ AC_ARG_ENABLE(debug,
fi], fi],
[ enable_debug="yes" ]) [ enable_debug="yes" ])
if test "x$GXX" = "xyes" -a "x$enable_debug" = "xyes" ; then if test "x$GXX" = "xyes" -a "x$enable_debug" = "xyes" ; then
CXXFLAGS="-O0 -ggdb" CXXFLAGS="$CXXFLAGS -O0 -ggdb"
fi fi
if test "x$GXX" = "xyes" ; then if test "x$GXX" = "xyes" ; then

View File

@ -1,4 +1,9 @@
#include "ERMParser.h" #include "ERMParser.h"
#include <boost/version.hpp>
//To make compilation with older boost versions possible
//Don't know exact version - 1.46 works while 1.42 not
#if BOOST_VERSION >= 104600
#include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/qi.hpp>
#include <boost/bind.hpp> #include <boost/bind.hpp>
#include <boost/spirit/include/phoenix_core.hpp> #include <boost/spirit/include/phoenix_core.hpp>
@ -873,3 +878,9 @@ void ERMParser::repairEncoding( char * str, int len ) const
if(str[g] & 0x80) if(str[g] & 0x80)
str[g] = '|'; str[g] = '|';
} }
#else
ERMParser::ERMParser(std::string file){}
void ERMParser::parseFile(){}
#endif

View File

@ -57,9 +57,9 @@ DLL_EXPORT void initDLL(CConsoleHandler *Console, std::ostream *Logfile)
using namespace boost::filesystem; using namespace boost::filesystem;
//parser checking //parser checking
if(!exists("./Data/s/")) if(!exists(DATA_DIR "/Data/s/"))
{ {
tlog3 << "Warning: Folder ./Data/s/ doesn't exist!\n"; tlog3 << "Warning: Folder " DATA_DIR "/Data/s/ doesn't exist!\n";
return; return;
} }
directory_iterator enddir; directory_iterator enddir;