diff options
Diffstat (limited to 'source/gameengine/Expressions')
-rw-r--r-- | source/gameengine/Expressions/BoolValue.cpp | 4 | ||||
-rw-r--r-- | source/gameengine/Expressions/BoolValue.h | 2 | ||||
-rw-r--r-- | source/gameengine/Expressions/CMakeLists.txt | 7 | ||||
-rw-r--r-- | source/gameengine/Expressions/FloatValue.cpp | 4 | ||||
-rw-r--r-- | source/gameengine/Expressions/FloatValue.h | 2 | ||||
-rw-r--r-- | source/gameengine/Expressions/IntValue.cpp | 3 | ||||
-rw-r--r-- | source/gameengine/Expressions/IntValue.h | 3 | ||||
-rw-r--r-- | source/gameengine/Expressions/KX_Python.h | 4 | ||||
-rw-r--r-- | source/gameengine/Expressions/ListValue.cpp | 526 | ||||
-rw-r--r-- | source/gameengine/Expressions/ListValue.h | 3 | ||||
-rw-r--r-- | source/gameengine/Expressions/PyObjectPlus.cpp | 95 | ||||
-rw-r--r-- | source/gameengine/Expressions/PyObjectPlus.h | 48 | ||||
-rw-r--r-- | source/gameengine/Expressions/SConscript | 10 | ||||
-rw-r--r-- | source/gameengine/Expressions/StringValue.h | 2 | ||||
-rw-r--r-- | source/gameengine/Expressions/Value.cpp | 14 | ||||
-rw-r--r-- | source/gameengine/Expressions/Value.h | 22 |
16 files changed, 389 insertions, 360 deletions
diff --git a/source/gameengine/Expressions/BoolValue.cpp b/source/gameengine/Expressions/BoolValue.cpp index 6779c2ea780..62e43da335b 100644 --- a/source/gameengine/Expressions/BoolValue.cpp +++ b/source/gameengine/Expressions/BoolValue.cpp @@ -205,9 +205,9 @@ CValue* CBoolValue::GetReplica() return replica; } - - +#ifndef DISABLE_PYTHON PyObject* CBoolValue::ConvertValueToPython() { return PyBool_FromLong(m_bool != 0); } +#endif // DISABLE_PYTHON diff --git a/source/gameengine/Expressions/BoolValue.h b/source/gameengine/Expressions/BoolValue.h index 4d0103ec1dd..baec6bdee69 100644 --- a/source/gameengine/Expressions/BoolValue.h +++ b/source/gameengine/Expressions/BoolValue.h @@ -45,7 +45,9 @@ public: void Configure(CValue* menuvalue); virtual CValue* GetReplica(); +#ifndef DISABLE_PYTHON virtual PyObject* ConvertValueToPython(); +#endif private: bool m_bool; diff --git a/source/gameengine/Expressions/CMakeLists.txt b/source/gameengine/Expressions/CMakeLists.txt index ec3738d1fe8..db7d12f313d 100644 --- a/source/gameengine/Expressions/CMakeLists.txt +++ b/source/gameengine/Expressions/CMakeLists.txt @@ -34,8 +34,13 @@ SET(INC ../../../intern/moto/include ../../../source/gameengine/SceneGraph ../../../source/blender/blenloader - ${PYTHON_INC} ) +IF(WITH_PYTHON) + SET(INC ${INC} ${PYTHON_INC}) +ELSE(WITH_PYTHON) + ADD_DEFINITIONS(-DDISABLE_PYTHON) +ENDIF(WITH_PYTHON) + BLENDERLIB(bf_expressions "${SRC}" "${INC}") #env.BlenderLib ( 'bf_expressions', sources, Split(incs), [], libtype=['game','player'], priority = [45,125] ) diff --git a/source/gameengine/Expressions/FloatValue.cpp b/source/gameengine/Expressions/FloatValue.cpp index 4de685a82c1..b1ac0e1ea9a 100644 --- a/source/gameengine/Expressions/FloatValue.cpp +++ b/source/gameengine/Expressions/FloatValue.cpp @@ -314,9 +314,9 @@ CValue* CFloatValue::GetReplica() } - +#ifndef DISABLE_PYTHON PyObject* CFloatValue::ConvertValueToPython() { return PyFloat_FromDouble(m_float); } - +#endif // DISABLE_PYTHON diff --git a/source/gameengine/Expressions/FloatValue.h b/source/gameengine/Expressions/FloatValue.h index 442f0eb6cf8..f1469734a1f 100644 --- a/source/gameengine/Expressions/FloatValue.h +++ b/source/gameengine/Expressions/FloatValue.h @@ -36,7 +36,9 @@ public: virtual CValue* GetReplica(); virtual CValue* Calc(VALUE_OPERATOR op, CValue *val); virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val); +#ifndef DISABLE_PYTHON virtual PyObject* ConvertValueToPython(); +#endif protected: float m_float; diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp index b782de4bef6..badba8ead63 100644 --- a/source/gameengine/Expressions/IntValue.cpp +++ b/source/gameengine/Expressions/IntValue.cpp @@ -326,7 +326,7 @@ void CIntValue::SetValue(CValue* newval) } - +#ifndef DISABLE_PYTHON PyObject* CIntValue::ConvertValueToPython() { if((m_int > INT_MIN) && (m_int < INT_MAX)) @@ -334,3 +334,4 @@ PyObject* CIntValue::ConvertValueToPython() else return PyLong_FromLongLong(m_int); } +#endif // DISABLE_PYTHON diff --git a/source/gameengine/Expressions/IntValue.h b/source/gameengine/Expressions/IntValue.h index 0513026c4cf..26150674c93 100644 --- a/source/gameengine/Expressions/IntValue.h +++ b/source/gameengine/Expressions/IntValue.h @@ -47,7 +47,10 @@ public: void Configure(CValue* menuvalue); void AddConfigurationData(CValue* menuvalue); virtual CValue* GetReplica(); + +#ifndef DISABLE_PYTHON virtual PyObject* ConvertValueToPython(); +#endif protected: virtual ~CIntValue(); diff --git a/source/gameengine/Expressions/KX_Python.h b/source/gameengine/Expressions/KX_Python.h index f41accec730..ecbd1b9b6b0 100644 --- a/source/gameengine/Expressions/KX_Python.h +++ b/source/gameengine/Expressions/KX_Python.h @@ -40,11 +40,13 @@ #undef _POSIX_C_SOURCE #endif - +#ifndef DISABLE_PYTHON #include "Python.h" #define USE_MATHUTILS // Blender 2.5x api will use mathutils, for a while we might want to test without it +#endif + #ifdef __FreeBSD__ #include <osreldate.h> #if __FreeBSD_version > 500039 diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp index 002674450d1..6e47ed913db 100644 --- a/source/gameengine/Expressions/ListValue.cpp +++ b/source/gameengine/Expressions/ListValue.cpp @@ -14,6 +14,8 @@ * */ +#include <stdio.h> + #include "ListValue.h" #include "StringValue.h" #include "VoidValue.h" @@ -26,9 +28,255 @@ #include <config.h> #endif -#if ((PY_MAJOR_VERSION == 2) &&(PY_MINOR_VERSION < 5)) -#define Py_ssize_t int -#endif + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CListValue::CListValue() +: CPropValue() +{ + m_bReleaseContents=true; +} + + + +CListValue::~CListValue() +{ + + if (m_bReleaseContents) { + for (unsigned int i=0;i<m_pValueArray.size();i++) { + m_pValueArray[i]->Release(); + } + } +} + + +static STR_String gstrListRep=STR_String("List"); + +const STR_String & CListValue::GetText() +{ + gstrListRep = "["; + STR_String commastr = ""; + + for (int i=0;i<GetCount();i++) + { + gstrListRep += commastr; + gstrListRep += GetValue(i)->GetText(); + commastr = ","; + } + gstrListRep += "]"; + + return gstrListRep; +} + + + +CValue* CListValue::GetReplica() { + CListValue* replica = new CListValue(*this); + + replica->ProcessReplica(); + + replica->m_bReleaseContents=true; // for copy, complete array is copied for now... + // copy all values + int numelements = m_pValueArray.size(); + unsigned int i=0; + replica->m_pValueArray.resize(numelements); + for (i=0;i<m_pValueArray.size();i++) + replica->m_pValueArray[i] = m_pValueArray[i]->GetReplica(); + + + return replica; +}; + + + +void CListValue::SetValue(int i, CValue *val) +{ + assertd(i < m_pValueArray.size()); + m_pValueArray[i]=val; +} + + + +void CListValue::Resize(int num) +{ + m_pValueArray.resize(num); +} + + + +void CListValue::Remove(int i) +{ + assertd(i<m_pValueArray.size()); + m_pValueArray.erase(m_pValueArray.begin()+i); +} + + + +void CListValue::ReleaseAndRemoveAll() +{ + for (unsigned int i=0;i<m_pValueArray.size();i++) + m_pValueArray[i]->Release(); + m_pValueArray.clear();//.Clear(); +} + + + +CValue* CListValue::FindValue(const STR_String & name) +{ + for (int i=0; i < GetCount(); i++) + if (GetValue(i)->GetName() == name) + return GetValue(i); + + return NULL; +} + +CValue* CListValue::FindValue(const char * name) +{ + for (int i=0; i < GetCount(); i++) + if (GetValue(i)->GetName() == name) + return GetValue(i); + + return NULL; +} + +bool CListValue::SearchValue(CValue *val) +{ + for (int i=0;i<GetCount();i++) + if (val == GetValue(i)) + return true; + return false; +} + + + +void CListValue::SetReleaseOnDestruct(bool bReleaseContents) +{ + m_bReleaseContents = bReleaseContents; +} + + + +bool CListValue::RemoveValue(CValue *val) +{ + bool result=false; + + for (int i=GetCount()-1;i>=0;i--) + if (val == GetValue(i)) + { + Remove(i); + result=true; + } + return result; +} + + + +void CListValue::MergeList(CListValue *otherlist) +{ + + int numelements = this->GetCount(); + int numotherelements = otherlist->GetCount(); + + + Resize(numelements+numotherelements); + + for (int i=0;i<numotherelements;i++) + { + SetValue(i+numelements,otherlist->GetValue(i)->AddRef()); + } +} + +bool CListValue::CheckEqual(CValue* first,CValue* second) +{ + bool result = false; + + CValue* eqval = ((CValue*)first)->Calc(VALUE_EQL_OPERATOR,(CValue*)second); + + if (eqval==NULL) + return false; + const STR_String& text = eqval->GetText(); + if (&text==&CBoolValue::sTrueString) + { + result = true; + } + eqval->Release(); + return result; + +} + + +/* --------------------------------------------------------------------- + * Some stuff taken from the header + * --------------------------------------------------------------------- */ +CValue* CListValue::Calc(VALUE_OPERATOR op,CValue *val) +{ + //assert(false); // todo: implement me! + static int error_printed = 0; + if (error_printed==0) { + fprintf(stderr, "CValueList::Calc not yet implimented\n"); + error_printed = 1; + } + return NULL; +} + +CValue* CListValue::CalcFinal(VALUE_DATA_TYPE dtype, + VALUE_OPERATOR op, + CValue* val) +{ + //assert(false); // todo: implement me! + static int error_printed = 0; + if (error_printed==0) { + fprintf(stderr, "CValueList::CalcFinal not yet implimented\n"); + error_printed = 1; + } + return NULL; +} + + + +void CListValue::Add(CValue* value) +{ + m_pValueArray.push_back(value); +} + + + +double CListValue::GetNumber() +{ + return -1; +} + + + +void CListValue::SetModified(bool bModified) +{ + CValue::SetModified(bModified); + int numels = GetCount(); + + for (int i=0;i<numels;i++) + GetValue(i)->SetModified(bModified); +} + + + +bool CListValue::IsModified() +{ + bool bmod = CValue::IsModified(); //normal own flag + int numels = GetCount(); + + for (int i=0;i<numels;i++) + bmod = bmod || GetValue(i)->IsModified(); + + return bmod; +} + +#ifndef DISABLE_PYTHON + +/* --------------------------------------------------------------------- */ +/* Python interface ---------------------------------------------------- */ +/* --------------------------------------------------------------------- */ Py_ssize_t listvalue_bufferlen(PyObject* self) { @@ -297,13 +545,13 @@ PyMethodDef CListValue::Methods[] = { {"reverse", (PyCFunction)CListValue::sPyreverse,METH_NOARGS}, {"index", (PyCFunction)CListValue::sPyindex,METH_O}, {"count", (PyCFunction)CListValue::sPycount,METH_O}, - + /* Dict style access */ {"get", (PyCFunction)CListValue::sPyget,METH_VARARGS}, - + /* Own cvalue funcs */ {"from_id", (PyCFunction)CListValue::sPyfrom_id,METH_O}, - + {NULL,NULL} //Sentinel }; @@ -311,213 +559,29 @@ PyAttributeDef CListValue::Attributes[] = { { NULL } //Sentinel }; -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - -CListValue::CListValue() -: CPropValue() -{ - m_bReleaseContents=true; -} - - - -CListValue::~CListValue() -{ - - if (m_bReleaseContents) { - for (unsigned int i=0;i<m_pValueArray.size();i++) { - m_pValueArray[i]->Release(); - } - } -} - - -static STR_String gstrListRep=STR_String("List"); - -const STR_String & CListValue::GetText() -{ - gstrListRep = "["; - STR_String commastr = ""; - - for (int i=0;i<GetCount();i++) - { - gstrListRep += commastr; - gstrListRep += GetValue(i)->GetText(); - commastr = ","; - } - gstrListRep += "]"; - - return gstrListRep; -} - - - -CValue* CListValue::GetReplica() { - CListValue* replica = new CListValue(*this); - - replica->ProcessReplica(); - - replica->m_bReleaseContents=true; // for copy, complete array is copied for now... - // copy all values - int numelements = m_pValueArray.size(); - unsigned int i=0; - replica->m_pValueArray.resize(numelements); - for (i=0;i<m_pValueArray.size();i++) - replica->m_pValueArray[i] = m_pValueArray[i]->GetReplica(); - - - return replica; -}; - - - -void CListValue::SetValue(int i, CValue *val) -{ - assertd(i < m_pValueArray.size()); - m_pValueArray[i]=val; -} - - - -void CListValue::Resize(int num) -{ - m_pValueArray.resize(num); -} - - - -void CListValue::Remove(int i) -{ - assertd(i<m_pValueArray.size()); - m_pValueArray.erase(m_pValueArray.begin()+i); -} - - - -void CListValue::ReleaseAndRemoveAll() -{ - for (unsigned int i=0;i<m_pValueArray.size();i++) - m_pValueArray[i]->Release(); - m_pValueArray.clear();//.Clear(); -} - - - -CValue* CListValue::FindValue(const STR_String & name) -{ - for (int i=0; i < GetCount(); i++) - if (GetValue(i)->GetName() == name) - return GetValue(i); - - return NULL; -} - -CValue* CListValue::FindValue(const char * name) -{ - for (int i=0; i < GetCount(); i++) - if (GetValue(i)->GetName() == name) - return GetValue(i); - - return NULL; -} - -bool CListValue::SearchValue(CValue *val) -{ - for (int i=0;i<GetCount();i++) - if (val == GetValue(i)) - return true; - return false; -} - - - -void CListValue::SetReleaseOnDestruct(bool bReleaseContents) -{ - m_bReleaseContents = bReleaseContents; -} - - - -bool CListValue::RemoveValue(CValue *val) -{ - bool result=false; - - for (int i=GetCount()-1;i>=0;i--) - if (val == GetValue(i)) - { - Remove(i); - result=true; - } - return result; -} - - - -void CListValue::MergeList(CListValue *otherlist) -{ - - int numelements = this->GetCount(); - int numotherelements = otherlist->GetCount(); - - - Resize(numelements+numotherelements); - - for (int i=0;i<numotherelements;i++) - { - SetValue(i+numelements,otherlist->GetValue(i)->AddRef()); - } -} - - PyObject* CListValue::Pyappend(PyObject* value) { CValue* objval = ConvertPythonToValue(value, "CList.append(i): CValueList, "); if (!objval) /* ConvertPythonToValue sets the error */ return NULL; - + if (!BGE_PROXY_PYOWNS(m_proxy)) { PyErr_SetString(PyExc_TypeError, "CList.append(i): this CValueList is used internally for the game engine and can't be modified"); return NULL; } - + Add(objval); - + Py_RETURN_NONE; } - - PyObject* CListValue::Pyreverse() { std::reverse(m_pValueArray.begin(),m_pValueArray.end()); Py_RETURN_NONE; } - - -bool CListValue::CheckEqual(CValue* first,CValue* second) -{ - bool result = false; - - CValue* eqval = ((CValue*)first)->Calc(VALUE_EQL_OPERATOR,(CValue*)second); - - if (eqval==NULL) - return false; - const STR_String& text = eqval->GetText(); - if (&text==&CBoolValue::sTrueString) - { - result = true; - } - eqval->Release(); - return result; - -} - - - PyObject* CListValue::Pyindex(PyObject *value) { PyObject* result = NULL; @@ -542,7 +606,7 @@ PyObject* CListValue::Pyindex(PyObject *value) PyErr_SetString(PyExc_ValueError, "CList.index(x): x not in CListValue"); } return result; - + } @@ -552,7 +616,7 @@ PyObject* CListValue::Pycount(PyObject* value) int numfound = 0; CValue* checkobj = ConvertPythonToValue(value, ""); /* error ignored */ - + if (checkobj==NULL) { /* in this case just return that there are no items in the list */ PyErr_Clear(); return PyLong_FromSsize_t(0); @@ -580,9 +644,9 @@ PyObject* CListValue::Pyget(PyObject *args) if (!PyArg_ParseTuple(args, "s|O:get", &key, &def)) return NULL; - + CValue *item = FindValue((const char *)key); - if (item) { + if (item) { PyObject* pyobj = item->ConvertValueToPython(); if (pyobj) return pyobj; @@ -597,7 +661,7 @@ PyObject* CListValue::Pyget(PyObject *args) PyObject* CListValue::Pyfrom_id(PyObject* value) { uintptr_t id= (uintptr_t)PyLong_AsVoidPtr(value); - + if (PyErr_Occurred()) return NULL; @@ -608,72 +672,8 @@ PyObject* CListValue::Pyfrom_id(PyObject* value) return GetValue(i)->GetProxy(); } PyErr_SetString(PyExc_IndexError, "from_id(#): id not found in CValueList"); - return NULL; - -} - - -/* --------------------------------------------------------------------- - * Some stuff taken from the header - * --------------------------------------------------------------------- */ -CValue* CListValue::Calc(VALUE_OPERATOR op,CValue *val) -{ - //assert(false); // todo: implement me! - static int error_printed = 0; - if (error_printed==0) { - fprintf(stderr, "CValueList::Calc not yet implimented\n"); - error_printed = 1; - } return NULL; -} - -CValue* CListValue::CalcFinal(VALUE_DATA_TYPE dtype, - VALUE_OPERATOR op, - CValue* val) -{ - //assert(false); // todo: implement me! - static int error_printed = 0; - if (error_printed==0) { - fprintf(stderr, "CValueList::CalcFinal not yet implimented\n"); - error_printed = 1; - } - return NULL; -} - - - -void CListValue::Add(CValue* value) -{ - m_pValueArray.push_back(value); -} - - -double CListValue::GetNumber() -{ - return -1; } - - -void CListValue::SetModified(bool bModified) -{ - CValue::SetModified(bModified); - int numels = GetCount(); - - for (int i=0;i<numels;i++) - GetValue(i)->SetModified(bModified); -} - - - -bool CListValue::IsModified() -{ - bool bmod = CValue::IsModified(); //normal own flag - int numels = GetCount(); - - for (int i=0;i<numels;i++) - bmod = bmod || GetValue(i)->IsModified(); - - return bmod; -} +#endif // DISABLE_PYTHON diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h index 2dc458e0148..8f3b9dcda0b 100644 --- a/source/gameengine/Expressions/ListValue.h +++ b/source/gameengine/Expressions/ListValue.h @@ -60,6 +60,7 @@ public: bool CheckEqual(CValue* first,CValue* second); +#ifndef DISABLE_PYTHON virtual PyObject* py_repr(void) { PyObject *py_proxy= this->GetProxy(); PyObject *py_list= PySequence_List(py_proxy); @@ -75,7 +76,7 @@ public: KX_PYMETHOD_O(CListValue,count); KX_PYMETHOD_VARARGS(CListValue,get); KX_PYMETHOD_O(CListValue,from_id); - +#endif private: diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp index 7adbf5ac651..54a33b76efd 100644 --- a/source/gameengine/Expressions/PyObjectPlus.cpp +++ b/source/gameengine/Expressions/PyObjectPlus.cpp @@ -30,8 +30,6 @@ #include <config.h> #endif -#ifndef NO_EXP_PYTHON_EMBEDDING - /*------------------------------ * PyObjectPlus cpp * @@ -52,6 +50,56 @@ #include "STR_String.h" #include "MT_Vector3.h" #include "MEM_guardedalloc.h" + +PyObjectPlus::~PyObjectPlus() +{ +#ifndef DISABLE_PYTHON + if(m_proxy) { + BGE_PROXY_REF(m_proxy)= NULL; + Py_DECREF(m_proxy); /* Remove own reference, python may still have 1 */ + } +// assert(ob_refcnt==0); +#endif +} + +PyObjectPlus::PyObjectPlus() : SG_QList() // constructor +{ +#ifndef DISABLE_PYTHON + m_proxy= NULL; +#endif +}; + +void PyObjectPlus::ProcessReplica() +{ +#ifndef DISABLE_PYTHON + /* Clear the proxy, will be created again if needed with GetProxy() + * otherwise the PyObject will point to the wrong reference */ + m_proxy= NULL; +#endif +} + +/* Sometimes we might want to manually invalidate a BGE type even if + * it hasnt been released by the BGE, say for example when an object + * is removed from a scene, accessing it may cause problems. + * + * In this case the current proxy is made invalid, disowned, + * and will raise an error on access. However if python can get access + * to this class again it will make a new proxy and work as expected. + */ +void PyObjectPlus::InvalidateProxy() // check typename of each parent +{ +#ifndef DISABLE_PYTHON + if(m_proxy) { + BGE_PROXY_REF(m_proxy)=NULL; + Py_DECREF(m_proxy); + m_proxy= NULL; + } +#endif +} + + +#ifndef DISABLE_PYTHON + /*------------------------------ * PyObjectPlus Type -- Every class, even the abstract one should have a Type ------------------------------*/ @@ -78,17 +126,6 @@ PyTypeObject PyObjectPlus::Type = { NULL // no subtype }; - -PyObjectPlus::~PyObjectPlus() -{ - if(m_proxy) { - BGE_PROXY_REF(m_proxy)= NULL; - Py_DECREF(m_proxy); /* Remove own reference, python may still have 1 */ - } -// assert(ob_refcnt==0); -} - - PyObject *PyObjectPlus::py_base_repr(PyObject *self) // This should be the entry in Type. { PyObjectPlus *self_plus= BGE_PROXY_REF(self); @@ -202,11 +239,6 @@ void PyObjectPlus::py_base_dealloc(PyObject *self) // python wrapper #endif }; -PyObjectPlus::PyObjectPlus() : SG_QList() // constructor -{ - m_proxy= NULL; -}; - /*------------------------------ * PyObjectPlus Methods -- Every class, even the abstract one should have a Methods ------------------------------*/ @@ -1067,30 +1099,6 @@ PyObject *PyObjectPlus::py_repr(void) return NULL; } -void PyObjectPlus::ProcessReplica() -{ - /* Clear the proxy, will be created again if needed with GetProxy() - * otherwise the PyObject will point to the wrong reference */ - m_proxy= NULL; -} - -/* Sometimes we might want to manually invalidate a BGE type even if - * it hasnt been released by the BGE, say for example when an object - * is removed from a scene, accessing it may cause problems. - * - * In this case the current proxy is made invalid, disowned, - * and will raise an error on access. However if python can get access - * to this class again it will make a new proxy and work as expected. - */ -void PyObjectPlus::InvalidateProxy() // check typename of each parent -{ - if(m_proxy) { - BGE_PROXY_REF(m_proxy)=NULL; - Py_DECREF(m_proxy); - m_proxy= NULL; - } -} - PyObject *PyObjectPlus::GetProxyPlus_Ext(PyObjectPlus *self, PyTypeObject *tp, void *ptr) { if (self->m_proxy==NULL) @@ -1220,5 +1228,4 @@ void PyObjectPlus::SetDeprecationWarningFirst(WarnLink* wlink) {m_base_wlink_f void PyObjectPlus::SetDeprecationWarningLinkLast(WarnLink* wlink) {m_base_wlink_last= wlink;} void PyObjectPlus::NullDeprecationWarning() {m_base_wlink_first= m_base_wlink_last= NULL;} -#endif //NO_EXP_PYTHON_EMBEDDING - +#endif // DISABLE_PYTHON diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h index 237f01f5a3a..971f9296912 100644 --- a/source/gameengine/Expressions/PyObjectPlus.h +++ b/source/gameengine/Expressions/PyObjectPlus.h @@ -27,8 +27,6 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef NO_EXP_PYTHON_EMBEDDING - #ifndef _adr_py_lib_h_ // only process once, #define _adr_py_lib_h_ // even if multiply included @@ -45,6 +43,7 @@ * Python defines ------------------------------*/ +#ifndef DISABLE_PYTHON #ifdef USE_MATHUTILS extern "C" { #include "../../blender/python/generic/Mathutils.h" /* so we can have mathutils callbacks */ @@ -463,6 +462,20 @@ typedef struct KX_PYATTRIBUTE_DEF { ------------------------------*/ typedef PyTypeObject * PyParentObject; // Define the PyParent Object +#else // DISABLE_PYTHON + +#define Py_Header \ + public: \ + + +#define Py_HeaderPtr \ + public: \ + + +#endif + + + // By making SG_QList the ultimate parent for PyObjectPlus objects, it // allows to put them in 2 different dynamic lists at the same time // The use of these links is interesting because they free of memory allocation @@ -480,11 +493,12 @@ class PyObjectPlus : public SG_QList public: PyObjectPlus(); - - PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */ virtual ~PyObjectPlus(); // destructor +#ifndef DISABLE_PYTHON + PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */ + /* These static functions are referenced by ALL PyObjectPlus_Proxy types * they take the C++ reference from the PyObjectPlus_Proxy and call * its own virtual py_repr, py_base_dealloc ,etc. functions. @@ -514,16 +528,6 @@ public: (assume object destructor takes care of it) */ static PyObject *NewProxyPlus_Ext(PyObjectPlus *self, PyTypeObject *tp, void *ptr, bool py_owns); - void InvalidateProxy(); - - /** - * Makes sure any internal data owned by this class is deep copied. - */ - virtual void ProcessReplica(); - - - static bool m_ignore_deprecation_warnings; - static WarnLink* GetDeprecationWarningLinkFirst(void); static WarnLink* GetDeprecationWarningLinkLast(void); static void SetDeprecationWarningFirst(WarnLink* wlink); @@ -536,12 +540,20 @@ public: static void ShowDeprecationWarning_func(const char* method,const char* prop); static void ClearDeprecationWarning(); -}; +#endif + void InvalidateProxy(); -PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict); + /** + * Makes sure any internal data owned by this class is deep copied. + */ + virtual void ProcessReplica(); -#endif // _adr_py_lib_h_ + static bool m_ignore_deprecation_warnings; +}; -#endif //NO_EXP_PYTHON_EMBEDDING +#ifndef DISABLE_PYTHON +PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict); +#endif +#endif // _adr_py_lib_h_ diff --git a/source/gameengine/Expressions/SConscript b/source/gameengine/Expressions/SConscript index 26cafb004b2..94af9dcfec8 100644 --- a/source/gameengine/Expressions/SConscript +++ b/source/gameengine/Expressions/SConscript @@ -4,6 +4,12 @@ Import ('env') sources = env.Glob('*.cpp') incs ='. #source/kernel/gen_system #intern/guardedalloc #intern/string #intern/moto/include #source/gameengine/SceneGraph #source/blender/blenloader' -incs += ' ' + env['BF_PYTHON_INC'] -env.BlenderLib ( 'bf_expressions', sources, Split(incs), [], libtype=['core','player'], priority = [360,80], cxx_compileflags=env['BGE_CXXFLAGS']) +defs = [] + +if env['WITH_BF_PYTHON']: + incs += ' ' + env['BF_PYTHON_INC'] +else: + defs.append('DISABLE_PYTHON') + +env.BlenderLib ( 'bf_expressions', sources, Split(incs), defs, libtype=['core','player'], priority = [360,80], cxx_compileflags=env['BGE_CXXFLAGS']) diff --git a/source/gameengine/Expressions/StringValue.h b/source/gameengine/Expressions/StringValue.h index 069eb8d9c24..a23bb4ec3e2 100644 --- a/source/gameengine/Expressions/StringValue.h +++ b/source/gameengine/Expressions/StringValue.h @@ -39,9 +39,11 @@ public: virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val); virtual void SetValue(CValue* newval) { m_strString = newval->GetText(); SetModified(true); }; virtual CValue* GetReplica(); +#ifndef DISABLE_PYTHON virtual PyObject* ConvertValueToPython() { return PyUnicode_FromString(m_strString.Ptr()); } +#endif // DISABLE_PYTHON private: // data member diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp index 130317d77e2..6d2dfe2a6e3 100644 --- a/source/gameengine/Expressions/Value.cpp +++ b/source/gameengine/Expressions/Value.cpp @@ -33,7 +33,7 @@ double CValue::m_sZeroVec[3] = {0.0,0.0,0.0}; -#ifndef NO_EXP_PYTHON_EMBEDDING +#ifndef DISABLE_PYTHON PyTypeObject CValue::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -64,6 +64,8 @@ PyTypeObject CValue::Type = { PyMethodDef CValue::Methods[] = { {NULL,NULL} //Sentinel }; +#endif // DISABLE_PYTHON + /*#define CVALUE_DEBUG*/ #ifdef CVALUE_DEBUG @@ -90,10 +92,6 @@ std::vector<SmartCValueRef> gRefList; CValue::CValue() : PyObjectPlus(), -#else -CValue::CValue() -: -#endif //NO_EXP_PYTHON_EMBEDDING m_pNamedPropertyArray(NULL), m_refcount(1) @@ -526,8 +524,7 @@ CValue* CValue::FindIdentifier(const STR_String& identifiername) return result; } - -#ifndef NO_EXP_PYTHON_EMBEDDING +#ifndef DISABLE_PYTHON PyAttributeDef CValue::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("name", CValue, pyattr_get_name), @@ -618,7 +615,8 @@ PyObject* CValue::ConvertKeysToPython( void ) return pylist; } -#endif //NO_EXP_PYTHON_EMBEDDING +#endif // DISABLE_PYTHON + /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h index 7d4adcdb64f..f639ae5af78 100644 --- a/source/gameengine/Expressions/Value.h +++ b/source/gameengine/Expressions/Value.h @@ -197,19 +197,14 @@ public: -#ifndef NO_EXP_PYTHON_EMBEDDING #include "PyObjectPlus.h" +#ifndef DISABLE_PYTHON #include "object.h" +#endif class CValue : public PyObjectPlus -#else -class CValue -#endif //NO_EXP_PYTHON_EMBEDDING - { -#ifndef NO_EXP_PYTHON_EMBEDDING Py_Header; -#endif //NO_EXP_PYTHON_EMBEDDING public: enum AllocationTYPE { STACKVALUE = 0, @@ -224,9 +219,9 @@ public: // Construction / Destruction -#ifndef NO_EXP_PYTHON_EMBEDDING - CValue(); + +#ifndef DISABLE_PYTHON //static PyObject* PyMake(PyObject*,PyObject*); virtual PyObject *py_repr(void) { @@ -242,10 +237,7 @@ public: static PyObject * pyattr_get_name(void * self, const KX_PYATTRIBUTE_DEF * attrdef); virtual PyObject* ConvertKeysToPython( void ); - -#else - CValue(); -#endif //NO_EXP_PYTHON_EMBEDDING +#endif // DISABLE_PYTHON @@ -416,12 +408,8 @@ public: \ class CPropValue : public CValue { public: -#ifndef NO_EXP_PYTHON_EMBEDDING CPropValue() : CValue(), -#else - CPropValue() : -#endif //NO_EXP_PYTHON_EMBEDDING m_strNewName() { |