VCMI on Linux

Maybe you are using outdated instructions from this thread? Correct version is here:
vcmi.svn.sourceforge.net/svnroo … ADME.linux

Can somebody edit 1st post to add this link?

1st post updated. Let me know if it’s fine.

I have same trouble like Arhat and mati865. I trying to compile vcmi rev.1931 under Ubuntu 10.10.

g++: @SDL_CXXFLAGS@: No such file or directory 

In Russian:
У меня та же беда, что и у Arhat и mati865. Пытаюсь скомпилировать vcmi ревизии 1931 под Убунту 10.10.
2 Ivan и всем русскоговорящим форумчанам, может, стоит открыть тему для обсуждения проекта на родном языке? :smiley:

Something is wrong with build system. Try revert all changes and recompile.
Что-то не так с системой сборки. Попробуйте откатить все изменения и пересобрать:

svn revert -R . 
./configure 
make 

Если без изменений - выложите файл config.log
По поводу русской темы - неплохая идея. Думаю создам такую сегодня-завтра. Как раз хотел пособирать оставшиеся проблемы с локализацией.

It seems that your advice has helped with the previous error, but the assembly stops at vcmi_client.

In russian:
Похоже, что ваш совет помог с предыдущей ошибкой, однако на сборка останавливается на vcmi_client.
dl.dropbox.com/u/19480975/config.log

Making all in client
make[1]: Вход в каталог /home/konrad/vcmi/client' CXX vcmiclient-CMusicHandler.o ../hch/CMusicHandler.cpp:8: fatal error: SDL_mixer.h: Нет такого файла или каталога compilation terminated. make[1]: *** [vcmiclient-CMusicHandler.o] Ошибка 1 make[1]: Выход из каталога/home/konrad/vcmi/client’
make: *** [all-recursive] Ошибка 1

libsdl-mixer1.2-dev установлено.

Теперь чтот не так с SDL
Посмотрите куда был установлен этот файл:
dpkg -L libsdl-mixer1.2-dev
В выводе должна быть строка вида
**/usr/include/SDL/**SDL_mixer.h

Судя по логу он ищется в папке /usr/local/include/SDL
Если этой папки нет или пустая - создаем ссылку на папку с SDL_mixer.h:
sudo ln -fs /usr/include/SDL /usr/local/include
и пробуем собрать клиент:
make

Если же папка не пустая - кроме как попробовать переустановить все dev-пакеты связанные с SDL идей больше нет.

Думаю лучше перебратся в отдельную тему - хватит тут на русском оффтопить.
[forum.vcmi.eu/t/russian-thread/357/1)

Can’t compile from trunk(r2002) on ubuntu 10.10 x64.

  CXX    libvcmi_la-BattleAction.lo
  CXX    libvcmi_la-BattleState.lo
BattleState.cpp: In member function ‘CStack* BattleInfo::generateNewStack(const CStackInstance&, int, bool, int, THex) const’:
BattleState.cpp:731: warning: suggest parentheses around ‘&&’ within ‘||’
BattleState.cpp: In member function ‘void BattleInfo::getStackQueue(std::vector<const CStack*, std::allocator<const CStack*> >&, int, int, int) const’:
BattleState.cpp:971: warning: suggest parentheses around ‘&&’ within ‘||’
BattleState.cpp:972: warning: suggest parentheses around ‘&&’ within ‘||’
BattleState.cpp: In member function ‘SpellCasting::ESpellCastProblem BattleInfo::battleCanCastThisSpell(int, const CSpell*, SpellCasting::ECastingMode) const’:
BattleState.cpp:1619: warning: label ‘HERO_CASTING’ defined but not used
BattleState.cpp: In member function ‘SpellCasting::ESpellCastProblem BattleInfo::battleIsImmune(int, const CSpell*, SpellCasting::ECastingMode, THex) const’:
BattleState.cpp:1746: error: no matching function for call to ‘remove_if(std::_List_iterator<Bonus*>, std::_List_iterator<Bonus*>, BattleInfo::battleIsImmune(int, const CSpell*, SpellCasting::ECastingMode, THex) const::NegateRemover)’
make[1]: *** [libvcmi_la-BattleState.lo] Error 1
make[1]: Leaving directory `/home/1/game/0inst/homm3/vcmi/lib'
make: *** [all-recursive] Error 1

Any suggestions?

Sorry. Ccan’t edit guest post and register too: [forum.vcmi.eu/t/new-login-security-measures/354/2)
Correct log:

  CXX    libvcmi_la-BattleAction.lo
  CXX    libvcmi_la-BattleState.lo
BattleState.cpp: In member function 'CStack* BattleInfo::generateNewStack(const CStackInstance&, int, bool, int, THex) const':
BattleState.cpp:731: warning: suggest parentheses around '&&' within '||'
BattleState.cpp: In member function 'void BattleInfo::getStackQueue(std::vector<const CStack*, std::allocator<const CStack*> >&, int, int, int) const':
BattleState.cpp:971: warning: suggest parentheses around '&&' within '||'
BattleState.cpp:972: warning: suggest parentheses around '&&' within '||'
BattleState.cpp: In member function 'SpellCasting::ESpellCastProblem BattleInfo::battleCanCastThisSpell(int, const CSpell*, SpellCasting::ECastingMode) const':
BattleState.cpp:1619: warning: label 'HERO_CASTING' defined but not used
BattleState.cpp: In member function 'SpellCasting::ESpellCastProblem BattleInfo::battleIsImmune(int, const CSpell*, SpellCasting::ECastingMode, THex) const':
BattleState.cpp:1746: error: no matching function for call to 'remove_if(std::_List_iterator<Bonus*>, std::_List_iterator<Bonus*>, BattleInfo::battleIsImmune(int, const CSpell*, SpellCasting::ECastingMode, THex) const::NegateRemover)'
make[1]: *** [libvcmi_la-BattleState.lo] Error 1
make[1]: Leaving directory `/home/1/game/0inst/homm3/vcmi/lib'
make: *** [all-recursive] Error 1

q4a
Got this one too, should be fine now (revision 2008)

Thx. r2015 compiles too, but r2018 not:

CCreatureWindow.cpp: In member function 'void CCreatureWindow::init(const CStackInstance*, const CBonusSystemNode*, const CGHeroInstance*)':
CCreatureWindow.cpp:83: warning: '>>' operator will be treated as two right angle brackets in C++0x
CCreatureWindow.cpp:83: warning: suggest parentheses around '>>' expression
CCreatureWindow.cpp:83: error: 'descriptions' was not declared in this scope
CCreatureWindow.cpp:83: error: '>>' should be '> >' within a nested template argument list
make[1]: *** [vcmiclient-CCreatureWindow.o] Error 1
make[1]: Leaving directory `/home/1/game/vcmi/client'
make: *** [all-recursive] Error

I fixed it by replacing ‘>>’ to ‘> >’.
PS i submited bug: bugs.vcmi.eu/view.php?id=703
and this is my first one. So should i add VCMI_Client_log.txt and VCMI_Server_log.txt every time? or it’s better to add full console output?

PSS Hi Ivan from Russia. Nice to see that VCMI has devs from our country =)

Here is a hierarchy of what’s the most desired for a developer:

  1. (most desired) a map with list of steps needed to reproduce the bug
  2. savegame with list of steps to reproduce the bug
  3. (least desired) VCMI_Client_log.txt, VCMI_Server_log.txt and crashdump (you should use this option only when bug is not reproducible but then remember to back logs up before trying to reproduce it).

In cases 1 and 2 logs can be used just for quick evaluation of possible causes of bugs so you can attach them too but they are not as crucial as in third case. We don’t need console output because everything VCMI prints there is logged too.

Well, that’s not true. There is also output not coming directly from VCMI, like warnings/errors messages printed by libraries directly to stdout and not using our logging system.
The most significant example may be failed assertion — it prints location on the console but doesn’t leave any trace in log file. [It’s annoying, I think about replacing it with my own macro. Or find a convenient way to capture stdout.]

So the console output (in txt or screenshot form) is an element not less important than logfiles. And always it’s good to have as much info as possible, especially if the bug is not easily reproducible.

Otherwise I agree with the list, the best thing is to show us how can we show the issue to ourseleves :slight_smile:

Starting from revision 2044 there are compilation errors in ERM parser which I can’t fix:

../../vcmi/lib/ERMParser.cpp:219: error: no matching function for call to boost::variant<boost::variant<ERM::triggerT, ERM::instructionT, ERM::receiverT, ERM::postOBtriggerT, boost::fusion::unused_type, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, boost::fusion::unused_type, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>::apply_visitor(ERM::ERMprinter) const

/usr/include/boost/variant/variant.hpp:1800: note: candidates are: typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::apply_visitor(Visitor&) [with Visitor = ERM::ERMprinter, T0_ = boost::variant<ERM::triggerT, ERM::instructionT, ERM::receiverT, ERM::postOBtriggerT, boost::fusion::unused_type, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, T1 = boost::fusion::unused_type, T2 = boost::detail::variant::void_, T3 = boost::detail::variant::void_, T4 = boost::detail::variant::void_, T5 = boost::detail::variant::void_, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_]

/usr/include/boost/variant/variant.hpp:1810: note:                 typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::apply_visitor(Visitor&) const [with Visitor = ERM::ERMprinter, T0_ = boost::variant<ERM::triggerT, ERM::instructionT, ERM::receiverT, ERM::postOBtriggerT, boost::fusion::unused_type, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, T1 = boost::fusion::unused_type, T2 = boost::detail::variant::void_, T3 = boost::detail::variant::void_, T4 = boost::detail::variant::void_, T5 = boost::detail::variant::void_, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_]

Another error occurs several times for different structs (mpl_::void_, ERM::conditionT, ERM::triggerT, ERM::instructionT, ERM::receiverT)

../../vcmi/lib/ERMParser.cpp:279:   instantiated from ERM::ERM_grammar<Iterator>::ERM_grammar() [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >];

../../vcmi/lib/ERMParser.cpp:356:   instantiated from here

/usr/include/boost/spirit/home/support/attributes.hpp:409: error: no matching function for call to ERM::conditionT::conditionT(boost::recursive_wrapper<ERM::conditionT>&);

../../vcmi/lib/ERMParser.cpp:85: note: candidates are: ERM::conditionT::conditionT()
../../vcmi/lib/ERMParser.cpp:85: note:                 ERM::conditionT::conditionT(const ERM::conditionT&)

Any ideas how to fix? Too much of boost magic to handle this one myself.

Which version of boost do you have? I have 1.46.0 and no problems with compilation.

Same isse. boost version is 1.42.
If this file is not vital to vcmi, we could not compile it.

I got a similar error earlier today. I now installed Boost 1.46.1. I’m on Ubuntu Maverick.

This is the error I get now:

janus@Fugl:~/build/trunk$ make Making all in lib make[1]: Entering directory `/home/janus/build/trunk/lib' CXX libvcmi_la-ERMParser.lo ERMParser.cpp: In function ‘void ERM::printLineAST(const ERM::lineT&)’: ERMParser.cpp:219:33: error: no matching function for call to ‘boost::variant<boost::variant<ERM::triggerT, ERM::instructionT, ERM::receiverT, ERM::postOBtriggerT, boost::spirit::unused_type>, boost::spirit::unused_type>::apply_visitor(ERM::ERMprinter) const’ /home/janus/boost-1.46.1-build//include/boost/variant/variant.hpp:1807:5: note: candidates are: typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::apply_visitor(Visitor&) [with Visitor = ERM::ERMprinter, T0_ = boost::variant<ERM::triggerT, ERM::instructionT, ERM::receiverT, ERM::postOBtriggerT, boost::spirit::unused_type>, T1 = boost::spirit::unused_type, T2 = boost::detail::variant::void_, T3 = boost::detail::variant::void_, T4 = boost::detail::variant::void_, T5 = boost::detail::variant::void_, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void] /home/janus/boost-1.46.1-build//include/boost/variant/variant.hpp:1817:5: note: typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::apply_visitor(Visitor&) const [with Visitor = ERM::ERMprinter, T0_ = boost::variant<ERM::triggerT, ERM::instructionT, ERM::receiverT, ERM::postOBtriggerT, boost::spirit::unused_type>, T1 = boost::spirit::unused_type, T2 = boost::detail::variant::void_, T3 = boost::detail::variant::void_, T4 = boost::detail::variant::void_, T5 = boost::detail::variant::void_, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void] make[1]: *** [libvcmi_la-ERMParser.lo] Error 1 make[1]: Leaving directory `/home/janus/build/trunk/lib' make: *** [all-recursive] Error 1

I don’t know if it’s related or not. If not, sorry for posting here.

I’ve just changed a few things in ERM parser, does it compile now for you?

Still no success but output is much more readable:

  CXX    libvcmi_la-ERMParser.lo
../../vcmi/lib/ERMParser.cpp: In member function void ERM::printLineAST(const ERM::lineT&)::psa::operator()(const ERM::commandT&) const:
../../vcmi/lib/ERMParser.cpp:242:4: error: no matching function for call to apply_visitor(ERM::printLineAST(const ERM::lineT&)::psa::operator()(const ERM::commandT&) const::cmt, const ERM::commandTcmd&)
../../vcmi/lib/ERMParser.cpp: In function void ERM::printLineAST(const ERM::lineT&):
../../vcmi/lib/ERMParser.cpp:251:3: error: no matching function for call to apply_visitor(ERM::printLineAST(const ERM::lineT&)::psa, const ERM::lineT&)

Compiled with gcc 4.5.1, boost 1.46.1

Object of local classes as template arguments… I wish it were standard-compliant for years. It looks like I can either make syntax for AST browsing a bit uglier or force everybody to use GCC 4.5+ and compile VCMI in C++0x compatibility mode… I’ll commit a patch soon.

I also can’t compile VCMI. All packages updated, Ubuntu 10.04 64-bit, VCMI revision 2054. My libboost-dev here is at version 1.40.0.1. Here’s the code:

$ make

  CXX    libvcmi_la-ERMParser.lo
ERMParser.cpp:187: error: ‘unused_type’ is not a member of ‘qi’
ERMParser.cpp:187: error: ‘unused_type’ is not a member of ‘qi’
ERMParser.cpp:187: error: template argument 9 is invalid
ERMParser.cpp:187: error: invalid type in declaration before ‘;’ token
ERMParser.cpp:278: error: ‘unused_type’ is not a member of ‘qi’
ERMParser.cpp:278: error: ‘unused_type’ is not a member of ‘qi’
ERMParser.cpp:278: error: template argument 3 is invalid
ERMParser.cpp:278: error: invalid type in declaration before ‘;’ token
ERMParser.cpp:447: error: ‘qi::unused_type’ has not been declared
ERMParser.cpp:530: error: ‘qi::unused_type’ has not been declared
ERMParser.cpp: In constructor ‘ERM::ERM_grammar<Iterator>::ERM_grammar()’:
ERMParser.cpp:676: error: ‘lexeme’ is not a member of ‘qi’
ERMParser.cpp:676: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:676: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:676: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:677: error: ‘lexeme’ is not a member of ‘qi’
ERMParser.cpp:677: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:677: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:677: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:678: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:678: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:678: error: ‘int_’ is not a member of ‘qi’
ERMParser.cpp:679: error: ‘lexeme’ is not a member of ‘qi’
ERMParser.cpp:679: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:679: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:679: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:681: error: ‘int_’ is not a member of ‘qi’
ERMParser.cpp:683: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:684: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:684: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:684: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:685: error: ‘lexeme’ is not a member of ‘qi’
ERMParser.cpp:685: error: ‘repeat’ is not a member of ‘qi’
ERMParser.cpp:685: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:686: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:688: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:689: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:690: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:690: error: ‘int_’ is not a member of ‘qi’
ERMParser.cpp:692: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:693: error: ‘lexeme’ is not a member of ‘qi’
ERMParser.cpp:693: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:695: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:696: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:697: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:699: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:700: error: ‘eps’ is not a member of ‘qi’
ERMParser.cpp:701: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:702: error: ‘char_’ is not a member of ‘qi’
ERMParser.cpp:704: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:704: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:708: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:710: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:712: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:713: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:714: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:715: error: ‘lit’ is not a member of ‘qi’
ERMParser.cpp:746: error: ‘_4’ is not a member of ‘qi’
ERMParser.cpp:748: error: ‘_3’ is not a member of ‘qi’
ERMParser.cpp:748: error: ‘_2’ is not a member of ‘qi’
ERMParser.cpp: In member function ‘void ERMParser::parseLine(const std::string&)’:
ERMParser.cpp:796: warning: unused variable ‘AST’
In file included from /usr/include/boost/variant/apply_visitor.hpp:16,
                 from /usr/include/boost/variant.hpp:23,
                 from /usr/include/boost/spirit/home/support/detail/values.hpp:18,
                 from /usr/include/boost/spirit/home/support/attribute_transform.hpp:14,
                 from /usr/include/boost/spirit/home/qi/operator/sequence_base.hpp:11,
                 from /usr/include/boost/spirit/home/qi/operator/sequence.hpp:10,
                 from /usr/include/boost/spirit/home/qi/operator.hpp:10,
                 from /usr/include/boost/spirit/home/qi.hpp:13,
                 from /usr/include/boost/spirit/include/qi.hpp:11,
                 from ERMParser.cpp:2:
/usr/include/boost/variant/detail/apply_visitor_unary.hpp: In function ‘typename Visitor::result_type boost::apply_visitor(const Visitor&, Visitable&) [with Visitor = ERM::BodyOptionItemPrinterVisitor, Visitable = ERM::TBodyOptionItem]’:
ERMParser.cpp:470:   instantiated from here
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: request for member ‘apply_visitor’ in ‘visitable’, which is of non-class type ‘int’
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: return-statement with a value, in function returning 'void'
/usr/include/boost/variant/detail/apply_visitor_unary.hpp: In function ‘typename Visitor::result_type boost::apply_visitor(const Visitor&, Visitable&) [with Visitor = ERM::LinePrinterVisitor, Visitable = const int]’:
ERMParser.cpp:539:   instantiated from here
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: request for member ‘apply_visitor’ in ‘visitable’, which is of non-class type ‘const int’
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: return-statement with a value, in function returning 'void'
In file included from /usr/include/boost/spirit/home/qi/operator/alternative.hpp:11,
                 from /usr/include/boost/spirit/home/qi/operator.hpp:12,
                 from /usr/include/boost/spirit/home/qi.hpp:13,
                 from /usr/include/boost/spirit/include/qi.hpp:11,
                 from ERMParser.cpp:2:
/usr/include/boost/spirit/home/qi/detail/alternative_function.hpp: In member function ‘bool boost::spirit::qi::detail::alternative_function<Iterator, Context, Skipper, Attribute>::operator()(const Component&) [with Component = boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::nonterminal_director, boost::fusion::cons<boost::spirit::nonterminal_holder<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, ERM::TVarExpNotMacro(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, boost::fusion::unused_type>*, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, ERM::TVarExpNotMacro(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, boost::fusion::unused_type> >, boost::fusion::nil> >, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Context = boost::fusion::vector<boost::fusion::vector<ERM::TVarpExp&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::fusion::vector<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Skipper = boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::char_class<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, boost::fusion::nil>, Attribute = ERM:]’:

/usr/include/boost/spirit/home/qi/nonterminal/detail/rule.hpp:126:   instantiated from ‘bool boost::spirit::qi::detail::virtual_component<Iterator, Component, Context, Skipper, Auto>::parse(Iterator&, const Iterator&, Context&, boost::spirit::qi::no_skipper) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Component = boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::expect, boost::fusion::cons<boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::alternative, boost::fusion::cons<boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::nonterminal_director, boost::fusion::cons<boost::spirit::nonterminal_holder<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, ERM::Tcommand(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, boost::fusion::unused_type>*, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, ERM::Tcommand(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, boost::fusion::unused_type> >, boost::fusion::nil> >, boost::fusion::cons<boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::nonterminal_director, boost::fusion::cons<boost::spirit::nonterminal_holder<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::string(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, boost::fusion::unused_type>*, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::string(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, boost::fusion::unused_type> >, boost::fusion::nil> >, boost::fusion::cons<boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::eps_parser, boost::fusion::nil>, boost::fusion::nil> > > >, boost::fusion::cons<boost::spirit::component<boost::spirit::qi::domain, boost::spirit::qi::eoi_director, boost::fusion::cons<boost::spirit::tag::eoi, boost::fusion::nil> >, boost::fusion::nil> > >, Context = boost::fusion::vector<boost::fusion::vector<int&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::fusion::vector<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Skipper = boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::char_class::key<boost::spirit::char_class::ascii, boost::spirit::char_class::tag::space> >, 0l>, Auto = mpl_::bool_<true>]’
ERMParser.cpp:875:   instantiated from here
/usr/include/boost/spirit/home/qi/detail/alternative_function.hpp:41: error: cannot convert ‘boost::spirit::unused_type’ to ‘int’ in assignment
make[1]: *** [libvcmi_la-ERMParser.lo] Error 1
make[1]: Leaving directory `/home/mgol/Programs/vcmi/lib'
make: *** [all-recursive] Error 1