From bf6801eb47f6f074504fb6e0696d5cce7b7000d3 Mon Sep 17 00:00:00 2001 From: Ovidiu Mircescu Date: Fri, 27 Jul 2018 10:43:13 +0200 Subject: [PATCH] Fix calcium in python3. --- src/DSC/DSC_Python/CMakeLists.txt | 1 + src/DSC/DSC_Python/calcium.i | 31 ++----- src/Utils/CMakeLists.txt | 1 - src/Utils/capsulethunk.h | 134 ------------------------------ 4 files changed, 6 insertions(+), 161 deletions(-) delete mode 100644 src/Utils/capsulethunk.h diff --git a/src/DSC/DSC_Python/CMakeLists.txt b/src/DSC/DSC_Python/CMakeLists.txt index 697747d88..eb5369a43 100755 --- a/src/DSC/DSC_Python/CMakeLists.txt +++ b/src/DSC/DSC_Python/CMakeLists.txt @@ -31,6 +31,7 @@ INCLUDE_DIRECTORIES( ${NUMPY_INCLUDE_DIR} ${PTHREAD_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} + ${OMNIORBPY_INCLUDE_DIR} ${PROJECT_BINARY_DIR}/salome_adm ${PROJECT_SOURCE_DIR}/src/DSC/DSC_User ${PROJECT_SOURCE_DIR}/src/DSC/DSC_User/Datastream diff --git a/src/DSC/DSC_Python/calcium.i b/src/DSC/DSC_Python/calcium.i index 586cd8def..618ccaa25 100644 --- a/src/DSC/DSC_Python/calcium.i +++ b/src/DSC/DSC_Python/calcium.i @@ -37,36 +37,15 @@ #include #include -//--- from omniORBpy.h (not present on Debian Sarge packages) - -struct omniORBpyAPI { - - PyObject* (*cxxObjRefToPyObjRef)(const CORBA::Object_ptr cxx_obj, - CORBA::Boolean hold_lock); - // Convert a C++ object reference to a Python object reference. - // If is true, caller holds the Python interpreter lock. - - CORBA::Object_ptr (*pyObjRefToCxxObjRef)(PyObject* py_obj, - CORBA::Boolean hold_lock); - // Convert a Python object reference to a C++ object reference. - // Raises BAD_PARAM if the Python object is not an object reference. - // If is true, caller holds the Python interpreter lock. - - PyObject* (*handleCxxSystemException)(const CORBA::SystemException& ex); - // Sets the Python exception state to reflect the given C++ system - // exception. Always returns NULL. The caller must hold the Python - // interpreter lock. -}; - - omniORBpyAPI* api; - PyObject* dsc ; - +#include +#include +omniORBpyAPI* api=0; +PyObject* dsc ; %} %init %{ -#include // init section #ifdef WITH_NUMPY import_array() @@ -80,7 +59,7 @@ struct omniORBpyAPI { return NULL; } PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API"); - api = (omniORBpyAPI*)PyCapsule_New(pyapi,NULL,NULL); + api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API"); Py_DECREF(pyapi); PyObject* engines = PyImport_ImportModule("Engines"); diff --git a/src/Utils/CMakeLists.txt b/src/Utils/CMakeLists.txt index ec38d52d2..689b32e1a 100755 --- a/src/Utils/CMakeLists.txt +++ b/src/Utils/CMakeLists.txt @@ -79,4 +79,3 @@ ADD_LIBRARY(OpUtil ${OpUtil_SOURCES}) TARGET_LINK_LIBRARIES(OpUtil ${COMMON_LIBS}) INSTALL(TARGETS OpUtil EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${SALOME_INSTALL_HEADERS}) -INSTALL(FILES capsulethunk.h DESTINATION ${SALOME_INSTALL_HEADERS}) diff --git a/src/Utils/capsulethunk.h b/src/Utils/capsulethunk.h deleted file mode 100644 index 6b20564f1..000000000 --- a/src/Utils/capsulethunk.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef __CAPSULETHUNK_H -#define __CAPSULETHUNK_H - -#if ( (PY_VERSION_HEX < 0x02070000) \ - || ((PY_VERSION_HEX >= 0x03000000) \ - && (PY_VERSION_HEX < 0x03010000)) ) - -#define __PyCapsule_GetField(capsule, field, default_value) \ - ( PyCapsule_CheckExact(capsule) \ - ? (((PyCObject *)capsule)->field) \ - : (default_value) \ - ) \ - -#define __PyCapsule_SetField(capsule, field, value) \ - ( PyCapsule_CheckExact(capsule) \ - ? (((PyCObject *)capsule)->field = value), 1 \ - : 0 \ - ) \ - - -#define PyCapsule_Type PyCObject_Type - -#define PyCapsule_CheckExact(capsule) (PyCObject_Check(capsule)) -#define PyCapsule_IsValid(capsule, name) (PyCObject_Check(capsule)) - - -#define PyCapsule_New(pointer, name, destructor) \ - (PyCObject_FromVoidPtr(pointer, destructor)) - - -#define PyCapsule_GetPointer(capsule, name) \ - (PyCObject_AsVoidPtr(capsule)) - -/* Don't call PyCObject_SetPointer here, it fails if there's a destructor */ -#define PyCapsule_SetPointer(capsule, pointer) \ - __PyCapsule_SetField(capsule, cobject, pointer) - - -#define PyCapsule_GetDestructor(capsule) \ - __PyCapsule_GetField(capsule, destructor) - -#define PyCapsule_SetDestructor(capsule, dtor) \ - __PyCapsule_SetField(capsule, destructor, dtor) - - -/* - * Sorry, there's simply no place - * to store a Capsule "name" in a CObject. - */ -#define PyCapsule_GetName(capsule) NULL - -static int -PyCapsule_SetName(PyObject *capsule, const char *unused) -{ - unused = unused; - PyErr_SetString(PyExc_NotImplementedError, - "can't use PyCapsule_SetName with CObjects"); - return 1; -} - - - -#define PyCapsule_GetContext(capsule) \ - __PyCapsule_GetField(capsule, descr) - -#define PyCapsule_SetContext(capsule, context) \ - __PyCapsule_SetField(capsule, descr, context) - - -static void * -PyCapsule_Import(const char *name, int no_block) -{ - PyObject *object = NULL; - void *return_value = NULL; - char *trace; - size_t name_length = (strlen(name) + 1) * sizeof(char); - char *name_dup = (char *)PyMem_MALLOC(name_length); - - if (!name_dup) { - return NULL; - } - - memcpy(name_dup, name, name_length); - - trace = name_dup; - while (trace) { - char *dot = strchr(trace, '.'); - if (dot) { - *dot++ = '\0'; - } - - if (object == NULL) { - if (no_block) { - object = PyImport_ImportModuleNoBlock(trace); - } else { - object = PyImport_ImportModule(trace); - if (!object) { - PyErr_Format(PyExc_ImportError, - "PyCapsule_Import could not " - "import module \"%s\"", trace); - } - } - } else { - PyObject *object2 = PyObject_GetAttrString(object, trace); - Py_DECREF(object); - object = object2; - } - if (!object) { - goto EXIT; - } - - trace = dot; - } - - if (PyCObject_Check(object)) { - PyCObject *cobject = (PyCObject *)object; - return_value = cobject->cobject; - } else { - PyErr_Format(PyExc_AttributeError, - "PyCapsule_Import \"%s\" is not valid", - name); - } - -EXIT: - Py_XDECREF(object); - if (name_dup) { - PyMem_FREE(name_dup); - } - return return_value; -} - -#endif /* #if PY_VERSION_HEX < 0x02070000 */ - -#endif /* __CAPSULETHUNK_H */ -- 2.39.2