#include <Salome_file_i.hxx>
#include <omniORB4/CORBA.h>
-//--- 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 <hold_lock> 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 <hold_lock> 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 <Python.h>
+#include <omniORBpy.h>
+omniORBpyAPI* api=0;
+PyObject* dsc ;
%}
%init
%{
-#include <capsulethunk.h>
// init section
#ifdef WITH_NUMPY
import_array()
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");
+++ /dev/null
-#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 */