]> git.pld-linux.org Git - packages/vcmi.git/commitdiff
- up to 1.3.0
authorJan Rękorajski <baggins@pld-linux.org>
Sat, 28 Oct 2023 20:56:06 +0000 (22:56 +0200)
committerJan Rękorajski <baggins@pld-linux.org>
Sat, 28 Oct 2023 20:56:06 +0000 (22:56 +0200)
boost-1.66.patch [deleted file]
erm.patch [new file with mode: 0644]
no-werror.patch [deleted file]
vcmi-boost.patch [deleted file]
vcmi.spec

diff --git a/boost-1.66.patch b/boost-1.66.patch
deleted file mode 100644 (file)
index 0a6f70a..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-From 83c6ffbda0f373848e11b81f128647bfcaed024f Mon Sep 17 00:00:00 2001
-From: Raphnalor <37222713+Raphnalor@users.noreply.github.com>
-Date: Sun, 11 Mar 2018 16:02:20 +0300
-Subject: [PATCH] Reflect changes in boost::asio released in Boost 1.66. (#428)
-
-The service template parameters are disabled by default for now.
-Use BOOST_ASIO_ENABLE_OLD_SERVICES macro to enable the old interface.
----
- lib/serializer/Connection.cpp | 3 +++
- lib/serializer/Connection.h   | 6 ++++++
- server/CVCMIServer.cpp        | 3 +++
- server/CVCMIServer.h          | 8 +++++++-
- 4 files changed, 19 insertions(+), 1 deletion(-)
-
-diff --git a/lib/serializer/Connection.cpp b/lib/serializer/Connection.cpp
-index 0a842d1d3..ae1810e8b 100644
---- a/lib/serializer/Connection.cpp
-+++ b/lib/serializer/Connection.cpp
-@@ -14,6 +14,9 @@
- #include "../mapping/CMap.h"
- #include "../CGameState.h"
-+#if BOOST_VERSION >= 106600
-+#define BOOST_ASIO_ENABLE_OLD_SERVICES
-+#endif
- #include <boost/asio.hpp>
- /*
-diff --git a/lib/serializer/Connection.h b/lib/serializer/Connection.h
-index b6ceee7a0..cb134e2b6 100644
---- a/lib/serializer/Connection.h
-+++ b/lib/serializer/Connection.h
-@@ -22,7 +22,13 @@ namespace boost
-               {
-                       class tcp;
-               }
-+
-+#if BOOST_VERSION >= 106600  // Boost version >= 1.66
-+              class io_context;
-+              typedef io_context io_service;
-+#else
-               class io_service;
-+#endif
-               template <typename Protocol> class stream_socket_service;
-               template <typename Protocol,typename StreamSocketService>
-diff --git a/server/CVCMIServer.cpp b/server/CVCMIServer.cpp
-index b077607be..d459a8e95 100644
---- a/server/CVCMIServer.cpp
-+++ b/server/CVCMIServer.cpp
-@@ -9,5 +9,8 @@
- #include "StdInc.h"\r
\r
-+#if BOOST_VERSION >= 106600
-+#define BOOST_ASIO_ENABLE_OLD_SERVICES
-+#endif\r
- #include <boost/asio.hpp>\r
\r
- #include "../lib/filesystem/Filesystem.h"\r
-diff --git a/server/CVCMIServer.h b/server/CVCMIServer.h
-index 6fa7ad5bb..ad9951f64 100644
---- a/server/CVCMIServer.h
-+++ b/server/CVCMIServer.h
-@@ -26,7 +26,13 @@ namespace boost
-               {\r
-                       class tcp;\r
-               }\r
--              class io_service;\r
-+\r
-+#if BOOST_VERSION >= 106600  // Boost version >= 1.66
-+              class io_context;
-+              typedef io_context io_service;
-+#else
-+              class io_service;
-+#endif\r
\r
-               template <typename Protocol> class stream_socket_service;\r
-               template <typename Protocol,typename StreamSocketService>\r
diff --git a/erm.patch b/erm.patch
new file mode 100644 (file)
index 0000000..5751cc2
--- /dev/null
+++ b/erm.patch
@@ -0,0 +1,576 @@
+From 6225d8585d215569c4a919171bea1915c306d1c8 Mon Sep 17 00:00:00 2001
+From: Andreas Grois <andi@grois.info>
+Date: Mon, 25 Sep 2023 21:26:23 +0200
+Subject: [PATCH] Make ERM compile again.
+
+This is not a proper clean up. It does not bring the code up to the
+current state of the rest of the codebase. However, the module now
+compiles again.
+---
+ scripting/erm/ERMInterpreter.cpp | 279 +++++++++++++++++--------------
+ scripting/erm/ERMInterpreter.h   |  13 +-
+ scripting/erm/ERMParser.h        |   1 +
+ 3 files changed, 151 insertions(+), 142 deletions(-)
+
+diff --git a/scripting/erm/ERMInterpreter.cpp b/scripting/erm/ERMInterpreter.cpp
+index 663cb35722..e4f60105ab 100644
+--- a/scripting/erm/ERMInterpreter.cpp
++++ b/scripting/erm/ERMInterpreter.cpp
+@@ -163,7 +163,7 @@ namespace ERMConverter
+               Variable operator()(const TVarExpNotMacro & val) const\r
+               {\r
+                       if(val.val.has_value())\r
+-                              return Variable(val.varsym, val.val.get());\r
++                              return Variable(val.varsym, *val.val);\r
+                       else\r
+                               return Variable(val.varsym, 0);\r
+               }\r
+@@ -392,7 +392,7 @@ namespace ERMConverter
\r
+                       if(trig.params.has_value())\r
+                       {\r
+-                              for(auto & p : trig.params.get())\r
++                              for(auto & p : *trig.params)\r
+                                       optionParams.push_back(std::visit(BodyOption(), p));\r
+                       }\r
\r
+@@ -572,7 +572,7 @@ namespace ERMConverter
+                               {\r
+                                       if(option.params.has_value())\r
+                                       {\r
+-                                              for(auto & p : option.params.get())\r
++                                              for(auto & p : *option.params)\r
+                                               {\r
+                                                       std::string macroName = std::visit(MC_S(), p);\r
\r
+@@ -739,7 +739,7 @@ namespace ERMConverter
\r
+                                       if(trig.params.has_value())\r
+                                       {\r
+-                                              for(auto & p : trig.params.get())\r
++                                              for(auto & p : *trig.params)\r
+                                                       optionParams.push_back(std::visit(BodyOption(), p));\r
+                                       }\r
\r
+@@ -759,10 +759,10 @@ namespace ERMConverter
+                               break;\r
+                       case 'H': //checking if string is empty\r
+                               {\r
+-                                      if(!trig.params.has_value() || trig.params.get().size() != 1)\r
++                                      if(!trig.params.has_value() || trig.params->size() != 1)\r
+                                               throw EScriptExecError("VR:H option takes exactly 1 parameter!");\r
\r
+-                                      std::string opt = std::visit(VR_H(), trig.params.get()[0]);\r
++                                      std::string opt = std::visit(VR_H(), (*trig.params)[0]);\r
+                                       boost::format fmt("ERM.VR(%s):H(%s)");\r
+                                       fmt % v.str() % opt;\r
+                                       putLine(fmt.str());\r
+@@ -770,10 +770,10 @@ namespace ERMConverter
+                               break;\r
+                       case 'U':\r
+                               {\r
+-                                      if(!trig.params.has_value() || trig.params.get().size() != 1)\r
++                                      if(!trig.params.has_value() || trig.params->size() != 1)\r
+                                               throw EScriptExecError("VR:H/U need 1 parameter!");\r
\r
+-                                      std::string opt = std::visit(VR_S(), trig.params.get()[0]);\r
++                                      std::string opt = std::visit(VR_S(), (*trig.params)[0]);\r
+                                       boost::format fmt("ERM.VR(%s):%c(%s)");\r
+                                       fmt % v.str() % (trig.optionCode) % opt;\r
+                                       putLine(fmt.str());\r
+@@ -781,10 +781,10 @@ namespace ERMConverter
+                               break;\r
+                       case 'M': //string operations\r
+                               {\r
+-                                      if(!trig.params.has_value() || trig.params.get().size() < 2)\r
++                                      if(!trig.params.has_value() || trig.params->size() < 2)\r
+                                               throw EScriptExecError("VR:M needs at least 2 parameters!");\r
\r
+-                                      std::string opt = std::visit(VR_X(), trig.params.get()[0]);\r
++                                      std::string opt = std::visit(VR_X(), (*trig.params)[0]);\r
+                                       int paramIndex = 1;\r
\r
+                                       if(opt == "3")\r
+@@ -795,16 +795,16 @@ namespace ERMConverter
+                                       }\r
+                                       else\r
+                                       {\r
+-                                              auto target = std::visit(VR_X(), trig.params.get()[paramIndex++]);\r
++                                              auto target = std::visit(VR_X(), (*trig.params)[paramIndex++]);\r
\r
+                                               boost::format fmt("%s = ERM.VR(%s):M%s(");\r
+                                               fmt % target % v.str() % opt;\r
+                                               put(fmt.str());\r
+                                       }\r
+                                       \r
+-                                      for(int i = paramIndex; i < trig.params.get().size(); i++)\r
++                                      for(int i = paramIndex; i < trig.params->size(); i++)\r
+                                       {\r
+-                                              opt = std::visit(VR_X(), trig.params.get()[i]);\r
++                                              opt = std::visit(VR_X(), (*trig.params)[i]);\r
+                                               if(i > paramIndex) put(",");\r
+                                               put(opt);\r
+                                       }\r
+@@ -814,10 +814,10 @@ namespace ERMConverter
+                               break;\r
+                       case 'X': //bit xor\r
+                               {\r
+-                                      if(!trig.params.has_value() || trig.params.get().size() != 1)\r
++                                      if(!trig.params.has_value() || trig.params->size() != 1)\r
+                                               throw EScriptExecError("VR:X option takes exactly 1 parameter!");\r
\r
+-                                      std::string opt = std::visit(VR_X(), trig.params.get()[0]);\r
++                                      std::string opt = std::visit(VR_X(), (*trig.params)[0]);\r
\r
+                                       boost::format fmt("%s = bit.bxor(%s, %s)");\r
+                                       fmt % v.str() % v.str() % opt;putLine(fmt.str());\r
+@@ -831,10 +831,10 @@ namespace ERMConverter
+                               break;\r
+                       case 'S': //setting variable\r
+                               {\r
+-                                      if(!trig.params.has_value() || trig.params.get().size() != 1)\r
++                                      if(!trig.params.has_value() || trig.params->size() != 1)\r
+                                               throw EScriptExecError("VR:S option takes exactly 1 parameter!");\r
\r
+-                                      std::string opt = std::visit(VR_S(), trig.params.get()[0]);\r
++                                      std::string opt = std::visit(VR_S(), (*trig.params)[0]);\r
+                                       put(v.str());\r
+                                       put(" = ");\r
+                                       put(opt);\r
+@@ -849,10 +849,10 @@ namespace ERMConverter
+                               break;\r
+                       case 'V': //convert string to value\r
+                               {\r
+-                                      if(!trig.params.has_value() || trig.params.get().size() != 1)\r
++                                      if(!trig.params.has_value() || trig.params->size() != 1)\r
+                                               throw EScriptExecError("VR:V option takes exactly 1 parameter!");\r
\r
+-                                      std::string opt = std::visit(VR_X(), trig.params.get()[0]);\r
++                                      std::string opt = std::visit(VR_X(), (*trig.params)[0]);\r
+                                       boost::format fmt("%s = tostring(%s)");\r
+                                       fmt % v.str() % opt;\r
+                                       putLine(fmt.str());\r
+@@ -877,7 +877,7 @@ namespace ERMConverter
+               {\r
+                       if(body.has_value())\r
+                       {\r
+-                              const ERM::Tbody & bo = body.get();\r
++                              const ERM::Tbody & bo = *body;\r
+                               for(int g=0; g<bo.size(); ++g)\r
+                               {\r
+                                       std::visit(visitor, bo[g]);\r
+@@ -975,7 +975,7 @@ namespace ERMConverter
\r
+                               if(body.has_value())\r
+                               {\r
+-                                      const ERM::Tbody & bo = body.get();\r
++                                      const ERM::Tbody & bo = *body;\r
+                                       if(bo.size() == 1)\r
+                                       {\r
+                                               boost::format fmt("ERM.%s(%s)");\r
+@@ -983,7 +983,7 @@ namespace ERMConverter
+                                               fmt % params;\r
\r
+                                               GenericReceiver gr(out, fmt.str(), (name == "DO"));\r
+-                                              bo[0].apply_visitor(gr);\r
++                                              std::visit(gr,bo[0]);\r
+                                       }\r
+                                       else\r
+                                       {\r
+@@ -1044,7 +1044,7 @@ namespace ERMConverter
+                                       break;\r
+                               }\r
\r
+-                              convertConditionInner(cond.rhs.get().get(), op);\r
++                              convertConditionInner(cond.rhs->get(), op);\r
+                       }\r
+               }\r
\r
+@@ -1067,7 +1067,7 @@ namespace ERMConverter
+                                       break;\r
+                               }\r
\r
+-                              convertConditionInner(cond.rhs.get().get(), cond.ctype);\r
++                              convertConditionInner(cond.rhs->get(), cond.ctype);\r
+                       }\r
\r
+                       putLine(" then ");\r
+@@ -1081,7 +1081,7 @@ namespace ERMConverter
+                       if(name=="if")\r
+                       {\r
+                               if(condition.has_value())\r
+-                                      convertCondition(condition.get());\r
++                                      convertCondition(*condition);\r
+                               else\r
+                                       putLine("if true then");\r
+                       }\r
+@@ -1097,7 +1097,7 @@ namespace ERMConverter
+                       {\r
+                               if(condition.has_value())\r
+                               {\r
+-                                      convertCondition(condition.get());\r
++                                      convertCondition(*condition);\r
+                                       convert(name, identifier, body);\r
+                                       putLine("end");\r
+                               }\r
+@@ -1181,7 +1181,7 @@ namespace ERMConverter
+               {\r
+                       (*out) << "{}";\r
+               }\r
+-              void operator()(const VNode & opt) const;\r
++              void operator()(const boost::recursive_wrapper<VNode> & opt) const;\r
\r
+               void operator()(const VSymbol & opt) const \r
+               {\r
+@@ -1192,7 +1192,7 @@ namespace ERMConverter
+                       TLiteralEval tmp;\r
+                       (*out) << std::visit(tmp, opt);\r
+               }\r
+-              void operator()(ERM const ::Tcommand & opt) const\r
++              void operator()(const ERM::Tcommand & opt) const\r
+               {\r
+                       //this is how FP works, evaluation == producing side effects\r
+                       //TODO: can we evaluate to smth more useful?\r
+@@ -1202,9 +1202,9 @@ namespace ERMConverter
+               }\r
+       };\r
\r
+-      void VOptionEval::operator()(const VNode & opt) const\r
++      void VOptionEval::operator()(const boost::recursive_wrapper<VNode> & opt) const\r
+       {\r
+-              VNode tmpn(opt);\r
++              VNode tmpn(opt.get());\r
\r
+               (*out) << "{";\r
\r
+@@ -1375,35 +1375,35 @@ struct ScriptScanner
+       }\r
+       void operator()(const TERMline & cmd) const\r
+       {\r
+-              if(cmd.which() == 0) //TCommand\r
++              if(std::holds_alternative<Tcommand>(cmd)) //TCommand\r
+               {\r
+                       Tcommand tcmd = std::get<Tcommand>(cmd);\r
+-                      switch (tcmd.cmd.which())\r
++                      struct Visitor\r
+                       {\r
+-                      case 0: //trigger\r
++                              void operator()(const ERM::Ttrigger& t) const\r
+                               {\r
+                                       Trigger trig;\r
+-                                      trig.line = lp;\r
+-                                      interpreter->triggers[ TriggerType(std::get<ERM::Ttrigger>(tcmd.cmd).name) ].push_back(trig);\r
++                                      trig.line = l;\r
++                                      i->triggers[ TriggerType(t.name) ].push_back(trig);\r
+                               }\r
+-                              break;\r
+-                      case 1: //instruction\r
++                              void operator()(const ERM::Tinstruction&) const\r
+                               {\r
+-                                      interpreter->instructions.push_back(lp);\r
++                                      i->instructions.push_back(l);\r
+                               }\r
+-                              break;\r
+-                      case 3: //post trigger\r
++                              void operator()(const ERM::Treceiver&) const {}\r
++                              void operator()(const ERM::TPostTrigger& pt) const\r
+                               {\r
+                                       Trigger trig;\r
+-                                      trig.line = lp;\r
+-                                      interpreter->postTriggers[ TriggerType(std::get<ERM::TPostTrigger>(tcmd.cmd).name) ].push_back(trig);\r
++                                      trig.line = l;\r
++                                      i->postTriggers[ TriggerType(pt.name) ].push_back(trig);\r
+                               }\r
+-                              break;\r
+-                      default:\r
+-                              break;\r
+-                      }\r
+-              }\r
++                              const decltype(interpreter)& i;\r
++                              const LinePointer& l;\r
++                      };\r
\r
++                      Visitor v{interpreter, lp};\r
++                      std::visit(v, tcmd.cmd);\r
++              }\r
+       }\r
+ };\r
\r
+@@ -1421,68 +1421,85 @@ ERMInterpreter::~ERMInterpreter()
\r
+ bool ERMInterpreter::isATrigger( const ERM::TLine & line )\r
+ {\r
+-      switch(line.which())\r
++      if(std::holds_alternative<ERM::TVExp>(line))\r
+       {\r
+-      case 0: //v-exp\r
+-              {\r
+-                      TVExp vexp = std::get<TVExp>(line);\r
+-                      if(vexp.children.empty())\r
+-                              return false;\r
++              TVExp vexp = std::get<TVExp>(line);\r
++              if(vexp.children.empty())\r
++                      return false;\r
\r
+-                      switch (getExpType(vexp.children[0]))\r
+-                      {\r
+-                      case SYMBOL:\r
+-                              return false;\r
+-                              break;\r
+-                      case TCMD:\r
+-                              return isCMDATrigger( std::get<ERM::Tcommand>(vexp.children[0]) );\r
+-                              break;\r
+-                      default:\r
+-                              return false;\r
+-                              break;\r
+-                      }\r
+-              }\r
+-              break;\r
+-      case 1: //erm\r
++              switch (getExpType(vexp.children[0]))\r
+               {\r
+-                      TERMline ermline = std::get<TERMline>(line);\r
+-                      switch(ermline.which())\r
+-                      {\r
+-                      case 0: //tcmd\r
+-                              return isCMDATrigger( std::get<ERM::Tcommand>(ermline) );\r
+-                              break;\r
+-                      default:\r
+-                              return false;\r
+-                              break;\r
+-                      }\r
++              case SYMBOL:\r
++                      return false;\r
++                      break;\r
++              case TCMD:\r
++                      return isCMDATrigger( std::get<ERM::Tcommand>(vexp.children[0]) );\r
++                      break;\r
++              default:\r
++                      return false;\r
++                      break;\r
+               }\r
+-              break;\r
+-      default:\r
+-              assert(0); //it should never happen\r
+-              break;\r
+       }\r
+-      assert(0);\r
++      else if(std::holds_alternative<TERMline>(line))\r
++      {\r
++              TERMline ermline = std::get<TERMline>(line);\r
++              return std::holds_alternative<ERM::Tcommand>(ermline) && isCMDATrigger( std::get<ERM::Tcommand>(ermline) );\r
++      }\r
++      else\r
++      {\r
++              assert(0);\r
++      }\r
+       return false;\r
+ }\r
\r
+ ERM::EVOtions ERMInterpreter::getExpType(const ERM::TVOption & opt)\r
+ {\r
+-      //MAINTENANCE: keep it correct!\r
+-      return static_cast<ERM::EVOtions>(opt.which());\r
++      struct Visitor\r
++      {\r
++              ERM::EVOtions operator()(const boost::recursive_wrapper<ERM::TVExp>&) const\r
++              {\r
++                      return ERM::EVOtions::VEXP;\r
++              }\r
++              ERM::EVOtions operator()(const ERM::TSymbol&) const\r
++              {\r
++                      return ERM::EVOtions::SYMBOL;\r
++              }\r
++              ERM::EVOtions operator()(char) const\r
++              {\r
++                      return ERM::EVOtions::CHAR;\r
++              }\r
++              ERM::EVOtions operator()(double) const\r
++              {\r
++                      return ERM::EVOtions::DOUBLE;\r
++              }\r
++              ERM::EVOtions operator()(int) const\r
++              {\r
++                      return ERM::EVOtions::INT;\r
++              }\r
++              ERM::EVOtions operator()(const ERM::Tcommand&) const\r
++              {\r
++                      return ERM::EVOtions::TCMD;\r
++              }\r
++              ERM::EVOtions operator()(const ERM::TStringConstant&) const\r
++              {\r
++                      return ERM::EVOtions::STRINGC;\r
++              }\r
++      };\r
++      const Visitor v;\r
++      return std::visit(v, opt);\r
+ }\r
\r
+ bool ERMInterpreter::isCMDATrigger(const ERM::Tcommand & cmd)\r
+ {\r
+-      switch (cmd.cmd.which())\r
++      struct Visitor\r
+       {\r
+-      case 0: //trigger\r
+-      case 3: //post trigger\r
+-              return true;\r
+-              break;\r
+-      default:\r
+-              return false;\r
+-              break;\r
+-      }\r
++              bool operator()(const ERM::Ttrigger&) const     { return true; }\r
++              bool operator()(const ERM::TPostTrigger&) const { return true; }\r
++              bool operator()(const ERM::Tinstruction&) const { return false; }\r
++              bool operator()(const ERM::Treceiver&) const    { return false; }\r
++      };\r
++      const Visitor v;\r
++      return std::visit(v, cmd.cmd);\r
+ }\r
\r
+ ERM::TLine & ERMInterpreter::retrieveLine(const LinePointer & linePtr)\r
+@@ -1492,17 +1509,17 @@ ERM::TLine & ERMInterpreter::retrieveLine(const LinePointer & linePtr)
\r
+ ERM::TTriggerBase & ERMInterpreter::retrieveTrigger(ERM::TLine & line)\r
+ {\r
+-      if(line.which() == 1)\r
++      if(std::holds_alternative<ERM::TERMline>(line))\r
+       {\r
+               ERM::TERMline &tl = std::get<ERM::TERMline>(line);\r
+-              if(tl.which() == 0)\r
++              if(std::holds_alternative<ERM::Tcommand>(tl))\r
+               {\r
+                       ERM::Tcommand &tcm = std::get<ERM::Tcommand>(tl);\r
+-                      if(tcm.cmd.which() == 0)\r
++                      if(std::holds_alternative<ERM::Ttrigger>(tcm.cmd))\r
+                       {\r
+                               return std::get<ERM::Ttrigger>(tcm.cmd);\r
+                       }\r
+-                      else if(tcm.cmd.which() == 3)\r
++                      else if(std::holds_alternative<ERM::TPostTrigger>(tcm.cmd))\r
+                       {\r
+                               return std::get<ERM::TPostTrigger>(tcm.cmd);\r
+                       }\r
+@@ -1569,6 +1586,40 @@ namespace VERMInterpreter
+ {\r
+       VOption convertToVOption(const ERM::TVOption & tvo)\r
+       {\r
++              struct OptionConverterVisitor\r
++              {\r
++                      VOption operator()(const boost::recursive_wrapper<ERM::TVExp>& cmd) const\r
++                      { \r
++                              return boost::recursive_wrapper<VNode>(VNode(cmd.get()));\r
++                      }\r
++                      VOption operator()(const ERM::TSymbol & cmd) const\r
++                      {\r
++                              if(cmd.symModifier.empty())\r
++                                      return VSymbol(cmd.sym);\r
++                              else\r
++                                      return boost::recursive_wrapper<VNode>(VNode(cmd));\r
++                      }\r
++                      VOption operator()(const char & cmd) const \r
++                      {\r
++                              return TLiteral(cmd);\r
++                      }\r
++                      VOption operator()(const double & cmd) const\r
++                      {\r
++                              return TLiteral(cmd);\r
++                      }\r
++                      VOption operator()(const int & cmd) const\r
++                      {\r
++                              return TLiteral(cmd);\r
++                      }\r
++                      VOption operator()(const ERM::Tcommand & cmd) const\r
++                      {\r
++                              return cmd;\r
++                      }\r
++                      VOption operator()(const ERM::TStringConstant & cmd) const\r
++                      {\r
++                              return TLiteral(cmd.str);\r
++                      }\r
++              };\r
+               return std::visit(OptionConverterVisitor(), tvo);\r
+       }\r
\r
+@@ -1706,38 +1757,6 @@ namespace VERMInterpreter
+               return ret;\r
+       }\r
\r
+-      VOption OptionConverterVisitor::operator()(ERM const ::TVExp & cmd) const\r
+-      {\r
+-              return VNode(cmd);\r
+-      }\r
+-      VOption OptionConverterVisitor::operator()(ERM const ::TSymbol & cmd) const\r
+-      {\r
+-              if(cmd.symModifier.empty())\r
+-                      return VSymbol(cmd.sym);\r
+-              else\r
+-                      return VNode(cmd);\r
+-      }\r
+-      VOption OptionConverterVisitor::operator()(const char & cmd) const\r
+-      {\r
+-              return TLiteral(cmd);\r
+-      }\r
+-      VOption OptionConverterVisitor::operator()(const double & cmd) const\r
+-      {\r
+-              return TLiteral(cmd);\r
+-      }\r
+-      VOption OptionConverterVisitor::operator()(const int & cmd) const\r
+-      {\r
+-              return TLiteral(cmd);\r
+-      }\r
+-      VOption OptionConverterVisitor::operator()(ERM const ::Tcommand & cmd) const\r
+-      {\r
+-              return cmd;\r
+-      }\r
+-      VOption OptionConverterVisitor::operator()(ERM const ::TStringConstant & cmd) const\r
+-      {\r
+-              return TLiteral(cmd.str);\r
+-      }\r
+-\r
+       VermTreeIterator VOptionList::cdr()\r
+       {\r
+               VermTreeIterator ret(*this);\r
+diff --git a/scripting/erm/ERMInterpreter.h b/scripting/erm/ERMInterpreter.h
+index baf3d317ee..ed25509777 100644
+--- a/scripting/erm/ERMInterpreter.h
++++ b/scripting/erm/ERMInterpreter.h
+@@ -134,7 +134,7 @@ namespace VERMInterpreter
+                               "TH", "TM"\r
+                       };\r
\r
+-                      for(int i=0; i<ARRAY_COUNT(validTriggers); ++i)\r
++                      for(int i=0; i<std::size(validTriggers); ++i)\r
+                       {\r
+                               if(validTriggers[i] == trig)\r
+                                       return static_cast<ETrigType>(i);\r
+@@ -278,17 +278,6 @@ namespace VERMInterpreter
+               VermTreeIterator cdr();\r
+       };\r
\r
+-      struct OptionConverterVisitor\r
+-      {\r
+-              VOption operator()(ERM const ::TVExp & cmd) const;\r
+-              VOption operator()(ERM const ::TSymbol & cmd) const;\r
+-              VOption operator()(const char & cmd) const;\r
+-              VOption operator()(const double & cmd) const;\r
+-              VOption operator()(const int & cmd) const;\r
+-              VOption operator()(ERM const ::Tcommand & cmd) const;\r
+-              VOption operator()(ERM const ::TStringConstant & cmd) const;\r
+-      };\r
+-\r
+       struct VNode\r
+       {\r
+       private:\r
+diff --git a/scripting/erm/ERMParser.h b/scripting/erm/ERMParser.h
+index 29d92e61b6..95b2ccbbf3 100644
+--- a/scripting/erm/ERMParser.h
++++ b/scripting/erm/ERMParser.h
+@@ -10,6 +10,7 @@
+ #pragma once\r
\r
+ #include <boost/spirit/home/support/unused.hpp>\r
++#include <boost/variant/recursive_wrapper.hpp>\r
\r
+ namespace spirit = boost::spirit;\r
\r
diff --git a/no-werror.patch b/no-werror.patch
deleted file mode 100644 (file)
index f49fdcf..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- vcmi-0.99/AI/FuzzyLite/fuzzylite/CMakeLists.txt.orig       2016-11-01 19:26:09.000000000 +0100
-+++ vcmi-0.99/AI/FuzzyLite/fuzzylite/CMakeLists.txt    2023-02-22 21:08:48.008335296 +0100
-@@ -62,7 +62,7 @@
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)
- if(NOT MSVC)
--    set(CMAKE_CXX_FLAGS "-pedantic -Werror -Wall -Wextra ${CMAKE_CXX_FLAGS}")
-+    set(CMAKE_CXX_FLAGS "-pedantic -Wall -Wextra ${CMAKE_CXX_FLAGS}")
-     set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
-     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
diff --git a/vcmi-boost.patch b/vcmi-boost.patch
deleted file mode 100644 (file)
index 765b44a..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
---- vcmi-0.99/lib/serializer/Connection.h.orig 2019-05-09 18:28:47.786130450 +0200
-+++ vcmi-0.99/lib/serializer/Connection.h      2019-05-09 20:37:32.790815761 +0200
-@@ -14,37 +14,20 @@
- #include "BinaryDeserializer.h"
- #include "BinarySerializer.h"
-+#include <boost/asio/basic_stream_socket.hpp>
-+#include <boost/asio/basic_socket_acceptor.hpp>
-+#include <boost/asio/io_service.hpp>
-+#include <boost/asio/ip/tcp.hpp>
-+
- struct CPack;
- namespace boost
- {
--      namespace asio
--      {
--              namespace ip
--              {
--                      class tcp;
--              }
--
--#if BOOST_VERSION >= 106600  // Boost version >= 1.66
--              class io_context;
--              typedef io_context io_service;
--#else
--              class io_service;
--#endif
--
--              template <typename Protocol> class stream_socket_service;
--              template <typename Protocol,typename StreamSocketService>
--              class basic_stream_socket;
--
--              template <typename Protocol> class socket_acceptor_service;
--              template <typename Protocol,typename SocketAcceptorService>
--              class basic_socket_acceptor;
--      }
-       class mutex;
- }
--typedef boost::asio::basic_stream_socket < boost::asio::ip::tcp , boost::asio::stream_socket_service<boost::asio::ip::tcp>  > TSocket;
--typedef boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > TAcceptor;
-+typedef boost::asio::basic_stream_socket<boost::asio::ip::tcp> TSocket;
-+typedef boost::asio::basic_socket_acceptor<boost::asio::ip::tcp> TAcceptor;
- /// Main class for network communication
- /// Allows establishing connection and bidirectional read-write
---- vcmi-0.99/lib/serializer/Connection.cpp.orig       2016-11-01 19:26:09.000000000 +0100
-+++ vcmi-0.99/lib/serializer/Connection.cpp    2019-05-10 15:40:32.325291811 +0200
-@@ -5,9 +5,6 @@
- #include "../mapping/CMap.h"
- #include "../CGameState.h"
--#if BOOST_VERSION >= 106600
--#define BOOST_ASIO_ENABLE_OLD_SERVICES
--#endif
- #include <boost/asio.hpp>
- /*
-@@ -120,7 +117,7 @@
-       throw std::runtime_error("Can't establish connection :(");
- }
- CConnection::CConnection(TSocket * Socket, std::string Name )
--      :iser(this), oser(this), socket(Socket),io_service(&Socket->get_io_service()), name(Name)//, send(this), rec(this)
-+      :iser(this), oser(this), socket(Socket),io_service(&Socket->get_executor().context()), name(Name)//, send(this), rec(this)
- {
-       init();
- }
---- vcmi-0.99/lib/CBattleCallback.cpp.orig     2016-11-01 19:26:09.000000000 +0100
-+++ vcmi-0.99/lib/CBattleCallback.cpp  2019-05-10 16:07:53.901237054 +0200
-@@ -499,7 +499,7 @@
-       else if(defender->owner != battleGetOwner(defender))\r
-               return true;//mind controlled unit is attackable for both sides\r
-       else\r
--              return (battleGetOwner(attacker) == battleGetOwner(defender)) == positivness;\r
-+              return (battleGetOwner(attacker) == battleGetOwner(defender)) == bool(positivness);\r
- }\r
\r
- si8 CBattleInfoCallback::battleHasWallPenalty( const CStack * stack, BattleHex destHex ) const\r
-@@ -1357,9 +1357,9 @@
\r
-       std::vector<DistStack> stackPairs;\r
\r
--      std::vector<const CStack *> possibleStacks = battleGetStacksIf([=](const CStack * s)\r
-+      std::vector<const CStack *> possibleStacks = battleGetStacksIf([=](const CStack * s) -> bool\r
-       {\r
--              return s->isValidTarget(false) && s != closest && (boost::logic::indeterminate(attackerOwned) || s->attackerOwned == attackerOwned);\r
-+              return s->isValidTarget(false) && s != closest && (boost::logic::indeterminate(attackerOwned) || s->attackerOwned == bool(attackerOwned));\r
-       });\r
\r
-       for(const CStack * st : possibleStacks)\r
---- vcmi-0.99/client/windows/CAdvmapInterface.cpp.orig 2016-11-01 19:26:09.000000000 +0100
-+++ vcmi-0.99/client/windows/CAdvmapInterface.cpp      2019-05-10 16:27:02.158039352 +0200
-@@ -781,7 +781,7 @@
-       if(boost::logic::indeterminate(hasPath))\r
-               hasPath = LOCPLINT->paths[h].nodes.size() ? true : false;\r
\r
--      moveHero->block(!hasPath || (h->movement == 0));\r
-+      moveHero->block(!bool(hasPath) || (h->movement == 0));\r
- }\r
\r
- void CAdvMapInt::updateSpellbook(const CGHeroInstance *h)\r
---- vcmi-0.99/server/CVCMIServer.h.orig        2019-05-09 18:28:47.786130450 +0200
-+++ vcmi-0.99/server/CVCMIServer.h     2019-05-10 17:00:46.894142311 +0200
-@@ -12,40 +12,19 @@
-  *\r
-  */\r
\r
-+#include <boost/asio/basic_stream_socket.hpp>\r
-+#include <boost/asio/basic_socket_acceptor.hpp>\r
-+#include <boost/asio/io_service.hpp>\r
-+#include <boost/asio/ip/tcp.hpp>\r
-+\r
- class CMapInfo;\r
\r
- class CConnection;\r
- struct CPackForSelectionScreen;\r
- class CGameHandler;\r
\r
--namespace boost\r
--{\r
--      namespace asio\r
--      {\r
--              namespace ip\r
--              {\r
--                      class tcp;\r
--              }\r
--\r
--#if BOOST_VERSION >= 106600  // Boost version >= 1.66
--              class io_context;
--              typedef io_context io_service;
--#else
--              class io_service;
--#endif\r
--\r
--              template <typename Protocol> class stream_socket_service;\r
--              template <typename Protocol,typename StreamSocketService>\r
--              class basic_stream_socket;\r
--\r
--              template <typename Protocol> class socket_acceptor_service;\r
--              template <typename Protocol,typename SocketAcceptorService>\r
--              class basic_socket_acceptor;\r
--      }\r
--};\r
--\r
--typedef boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > TAcceptor;\r
--typedef boost::asio::basic_stream_socket < boost::asio::ip::tcp , boost::asio::stream_socket_service<boost::asio::ip::tcp>  > TSocket;\r
-+typedef boost::asio::basic_socket_acceptor<boost::asio::ip::tcp> TAcceptor;\r
-+typedef boost::asio::basic_stream_socket<boost::asio::ip::tcp> TSocket;\r
\r
- class CVCMIServer\r
- {\r
---- vcmi-0.99/server/CVCMIServer.cpp.orig      2019-05-10 18:15:18.709042066 +0200
-+++ vcmi-0.99/server/CVCMIServer.cpp   2019-05-10 18:17:35.062864054 +0200
-@@ -1,8 +1,5 @@
- #include "StdInc.h"\r
\r
--#if BOOST_VERSION >= 106600
--#define BOOST_ASIO_ENABLE_OLD_SERVICES
--#endif\r
- #include <boost/asio.hpp>\r
\r
- #include "../lib/filesystem/Filesystem.h"\r
-@@ -168,8 +165,8 @@
\r
-                       if(acceptor)\r
-                       {\r
--                              acceptor->get_io_service().reset();\r
--                              acceptor->get_io_service().poll();\r
-+                              static_cast<boost::asio::io_context&>(acceptor->get_executor().context()).reset();\r
-+                              static_cast<boost::asio::io_context&>(acceptor->get_executor().context()).poll();\r
-                       }\r
-               } //frees lock\r
\r
-@@ -230,7 +227,7 @@
-       assert(!upcomingConnection);\r
-       assert(acceptor);\r
\r
--      upcomingConnection = new TSocket(acceptor->get_io_service());\r
-+      upcomingConnection = new TSocket(acceptor->get_executor());\r
-       acceptor->async_accept(*upcomingConnection, std::bind(&CPregameServer::connectionAccepted, this, _1));\r
- }\r
\r
-@@ -415,7 +412,7 @@
\r
-       boost::system::error_code error;\r
-       logNetwork->info("Listening for connections at port %d", acceptor->local_endpoint().port());\r
--      auto s = new boost::asio::ip::tcp::socket(acceptor->get_io_service());\r
-+      auto s = new boost::asio::ip::tcp::socket(acceptor->get_executor());\r
-       boost::thread acc(std::bind(vaccept,acceptor,s,&error));\r
- #ifndef VCMI_ANDROID\r
-       sr->setToTrueAndNotify();\r
-@@ -483,7 +480,7 @@
-               }\r
-               else\r
-               {\r
--                      auto s = new boost::asio::ip::tcp::socket(acceptor->get_io_service());\r
-+                      auto s = new boost::asio::ip::tcp::socket(acceptor->get_executor());\r
-                       acceptor->accept(*s,error);\r
-                       if(error) //retry\r
-                       {\r
---- vcmi-0.99/AI/VCAI/AIUtility.h.orig 2016-11-01 19:26:09.000000000 +0100
-+++ vcmi-0.99/AI/VCAI/AIUtility.h      2019-05-10 17:37:38.490708060 +0200
-@@ -167,5 +167,5 @@
- public:\r
-       CDistanceSorter(const CGHeroInstance * hero): hero(hero) {}\r
\r
--      bool operator ()(const CGObjectInstance *lhs, const CGObjectInstance *rhs);\r
-+      bool operator ()(const CGObjectInstance *lhs, const CGObjectInstance *rhs) const;\r
- };\r
---- vcmi-0.99/AI/VCAI/AIUtility.cpp.orig       2016-11-01 19:26:09.000000000 +0100
-+++ vcmi-0.99/AI/VCAI/AIUtility.cpp    2019-05-10 17:39:23.702884397 +0200
-@@ -179,7 +179,7 @@
-       return oss.str();\r
- }\r
\r
--bool CDistanceSorter::operator ()(const CGObjectInstance *lhs, const CGObjectInstance *rhs)\r
-+bool CDistanceSorter::operator ()(const CGObjectInstance *lhs, const CGObjectInstance *rhs) const\r
- {\r
-       const CGPathNode *ln = ai->myCb->getPathsInfo(hero)->getPathInfo(lhs->visitablePos()),\r
-                        *rn = ai->myCb->getPathsInfo(hero)->getPathInfo(rhs->visitablePos());\r
index 0948ac9110b8ae6391f58acd54747e256f3d298c..f8623d7d9c5fd0542199c9c3a2dc529fa61a0363 100644 (file)
--- a/vcmi.spec
+++ b/vcmi.spec
@@ -1,17 +1,15 @@
 Summary:       "Heroes 3: WoG recreated
 Summary(pl.UTF-8):     Gra "Heroes 3: WoG" stworzona od nowa
 Name:          vcmi
-Version:       0.99
-Release:       8
+Version:       1.3.0
+Release:       1
 License:       GPL v2+
 Group:         X11/Applications/Games
 Source0:       https://github.com/vcmi/vcmi/archive/%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 686c2a0283184add785d50b447db806f
+# Source0-md5: 6a657666e335bfde5f007b9542a08cfa
 Source1:       http://download.vcmi.eu/core.zip
 # Source1-md5: 5cf75d588cc53b93aceb809a6068ae37
-Patch0:                boost-1.66.patch
-Patch1:                %{name}-boost.patch
-Patch2:                no-werror.patch
+Patch0:                erm.patch
 URL:           http://www.vcmi.eu/
 BuildRequires: Qt5Network-devel >= 5
 BuildRequires: Qt5Widgets-devel >= 5
@@ -46,15 +44,13 @@ możliwościami.
 %prep
 %setup -q
 %patch0 -p1
-%patch1 -p1
-%patch2 -p1
 
 %build
 install -d build
 cd build
 %cmake .. \
-       -DENABLE_ERM=ON
-# -DENABLE_EDITOR=ON breaks build
+       -DENABLE_ERM=ON \
+       -DENABLE_EDITOR=ON
 
 %{__make}
 
@@ -67,14 +63,6 @@ install -d $RPM_BUILD_ROOT%{_datadir}/%{name} \
 %{__make} -C build install \
        DESTDIR=$RPM_BUILD_ROOT
 
-# not packaged
-%{__rm} -r $RPM_BUILD_ROOT{%{_libdir}/libfuzzylite-static.a,%{_includedir}/fl}
-
-install client/icons/vcmiclient.xpm $RPM_BUILD_ROOT%{_pixmapsdir}/vcmiclient.xpm
-install client/icons/vcmiclient.64x64.png $RPM_BUILD_ROOT%{_iconsdir}/hicolor/64x64/apps/vcmiclient.png
-install client/icons/vcmiclient.48x48.png $RPM_BUILD_ROOT%{_iconsdir}/hicolor/48x48/apps/vcmiclient.png
-install client/icons/vcmiclient.32x32.png $RPM_BUILD_ROOT%{_iconsdir}/hicolor/32x32/apps/vcmiclient.png
-
 %{__unzip} -o %{SOURCE1} -d $RPM_BUILD_ROOT%{_datadir}/%{name}
 
 %clean
@@ -82,9 +70,10 @@ rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(644,root,root,755)
-%doc AUTHORS ChangeLog README.md
+%doc AUTHORS ChangeLog.md README.md
 %attr(755,root,root) %{_bindir}/vcmibuilder
 %attr(755,root,root) %{_bindir}/vcmiclient
+%attr(755,root,root) %{_bindir}/vcmieditor
 %attr(755,root,root) %{_bindir}/vcmilauncher
 %attr(755,root,root) %{_bindir}/vcmiserver
 %dir %{_libdir}/%{name}
@@ -93,8 +82,12 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{_libdir}/%{name}/AI/lib*.so
 %dir %{_libdir}/%{name}/scripting
 %attr(755,root,root) %{_libdir}/%{name}/scripting/libvcmiERM.so
+%attr(755,root,root) %{_libdir}/%{name}/scripting/libvcmiLua.so
 %{_datadir}/%{name}
 %{_desktopdir}/vcmiclient.desktop
+%{_desktopdir}/vcmieditor.desktop
 %{_desktopdir}/vcmilauncher.desktop
-%{_pixmapsdir}/vcmiclient.xpm
 %{_iconsdir}/hicolor/*x*/apps/vcmiclient.png
+%{_iconsdir}/hicolor/*x*/apps/vcmieditor.png
+%{_iconsdir}/hicolor/scalable/apps/vcmiclient.svg
+%{_datadir}/metainfo/eu.vcmi.VCMI.metainfo.xml
This page took 1.025578 seconds and 4 git commands to generate.