Hi rdb, sorry about the delay in replying, here are my work arounds
Small change in librocket. I believe this line may have been present in an earlier version of librocket so it wasn’t a problem before even though there is a panda Factory class:
--- Include/Rocket/Core/Decorator.h
+++ Include/Rocket/Core/Decorator.h
@@ -39,6 +39,7 @@
class DecoratorInstancer;
class Element;
+class Factory;
class PropertyDictionary;
class Property;
struct Texture;
================
Second issue was the following. In boost/python/detail/wrap_python.hpp on line 50 we have “# include <pyconfig.h>” which defines HAVE_LONG_LONG.
However at some point earlier in panda pyconfig.h has already been included and afterwards HAVA_LONG_LONG is undefined.
So when we reach the following on line 197 of wrap_python.hpp, BOOST_PYTHON_LONG does not get defined:
#if defined(HAVE_LONG_LONG)
# if defined(PY_LONG_LONG)
# define BOOST_PYTHON_LONG_LONG PY_LONG_LONG
# elif defined(LONG_LONG)
# define BOOST_PYTHON_LONG_LONG LONG_LONG
# else
# error "HAVE_LONG_LONG defined but not PY_LONG_LONG or LONG_LONG"
# endif
#endif
Then in boost\python\converter\builtin_converters.hpp at line 125 it assumes that BOOST_PYTHON_LONG_LONG has been defined
# if defined(_MSC_VER) && defined(_WIN64) && PY_VERSION_HEX < 0x03000000
/* Under 64-bit Windows std::size_t is "unsigned long long". To avoid
getting a Python long for each std::size_t the value is checked before
the conversion. A std::size_t is converted to a simple Python int
if possible; a Python long appears only if the value is too small or
too large to fit into a simple int. */
BOOST_PYTHON_TO_PYTHON_BY_VALUE(
signed BOOST_PYTHON_LONG_LONG,
( x < static_cast<signed BOOST_PYTHON_LONG_LONG>(
(std::numeric_limits<long>::min)())
|| x > static_cast<signed BOOST_PYTHON_LONG_LONG>(
(std::numeric_limits<long>::max)()))
? ::PyLong_FromLongLong(x)
: ::PyInt_FromLong(static_cast<long>(x)), &PyInt_Type)
BOOST_PYTHON_TO_PYTHON_BY_VALUE(
unsigned BOOST_PYTHON_LONG_LONG,
x > static_cast<unsigned BOOST_PYTHON_LONG_LONG>(
(std::numeric_limits<long>::max)())
? ::PyLong_FromUnsignedLongLong(x)
: ::PyInt_FromLong(static_cast<long>(x)), &PyInt_Type)
//
# elif defined(HAVE_LONG_LONG) // using Python's macro instead of Boost's
// - we don't seem to get the config right
// all the time.
BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed BOOST_PYTHON_LONG_LONG, ::PyLong_FromLongLong(x), &PyLong_Type)
BOOST_PYTHON_TO_PYTHON_BY_VALUE(unsigned BOOST_PYTHON_LONG_LONG, ::PyLong_FromUnsignedLongLong(x), &PyLong_Type)
# endif
My fix was just setting BOOST_PYTHON_LONG_LONG
+#if defined(PY_LONG_LONG)
+# define BOOST_PYTHON_LONG_LONG PY_LONG_LONG
+#elif defined(LONG_LONG)
+# define BOOST_PYTHON_LONG_LONG LONG_LONG
+#else
+# error "Neither PY_LONG_LONG nor LONG_LONG defined"
+#endif