~ubuntu-branches/ubuntu/precise/dbus-python/precise

« back to all changes in this revision

Viewing changes to _dbus_bindings/module.c

  • Committer: Package Import Robot
  • Author(s): Barry Warsaw
  • Date: 2012-01-12 14:47:33 UTC
  • Revision ID: package-import@ubuntu.com-20120112144733-xtfbmgw30h0j40d2
Tags: 0.84.0-2ubuntu1
* debian/patches:
  - since-0.84.0.patch: Upstream unreleased changes from git tag
    dbus-python-0.84.0 to HEAD.  This is a precursor to the following.
  - python3-support.patch: Upstream unreleased changes from git
    `python3` branch for supporting Python 3. (LP: #893091)
* debian/rules: Enable the test suite.

Show diffs side-by-side

added added

removed removed

Lines of Context:
234
234
};
235
235
 
236
236
PyMODINIT_FUNC
 
237
#ifdef PY3
 
238
PyInit__dbus_bindings(void)
 
239
#else
237
240
init_dbus_bindings(void)
 
241
#endif
238
242
{
239
 
    PyObject *this_module, *c_api;
 
243
    PyObject *this_module = NULL, *c_api;
240
244
    static const int API_count = DBUS_BINDINGS_API_COUNT;
241
245
    static _dbus_py_func_ptr dbus_bindings_API[DBUS_BINDINGS_API_COUNT];
242
246
 
 
247
#ifdef PY3
 
248
    static struct PyModuleDef moduledef = {
 
249
        PyModuleDef_HEAD_INIT,
 
250
        "_dbus_bindings",       /* m_name */
 
251
        module_doc,             /* m_doc */
 
252
        -1,                     /* m_size */
 
253
        module_functions,       /* m_methods */
 
254
        NULL,                   /* m_reload */
 
255
        NULL,                   /* m_traverse */
 
256
        NULL,                   /* m_clear */
 
257
        NULL                    /* m_free */
 
258
    };
 
259
#endif
 
260
 
243
261
    dbus_bindings_API[0] = (_dbus_py_func_ptr)&API_count;
244
262
    dbus_bindings_API[1] = (_dbus_py_func_ptr)DBusPyConnection_BorrowDBusConnection;
245
263
    dbus_bindings_API[2] = (_dbus_py_func_ptr)DBusPyNativeMainLoop_New4;
246
264
 
247
265
    default_main_loop = NULL;
248
266
 
249
 
    /* I'd rather not initialize threads if we can help it - dbus-python and
250
 
    pygobject both release and re-obtain the GIL on a regular basis, which is
251
 
    much simpler (basically free) before threads are initialized.
252
 
 
253
 
    However, on Python < 2.4.2c1 you aren't allowed to call
254
 
    PyGILState_Release without initializing threads first. */
255
 
    if (strcmp(Py_GetVersion(), "2.4.2c1") < 0) {
256
 
        PyEval_InitThreads();
257
 
    }
258
 
 
259
 
    if (!dbus_py_init_generic()) return;
260
 
    if (!dbus_py_init_abstract()) return;
261
 
    if (!dbus_py_init_signature()) return;
262
 
    if (!dbus_py_init_int_types()) return;
263
 
    if (!dbus_py_init_unixfd_type()) return;
264
 
    if (!dbus_py_init_string_types()) return;
265
 
    if (!dbus_py_init_float_types()) return;
266
 
    if (!dbus_py_init_container_types()) return;
267
 
    if (!dbus_py_init_byte_types()) return;
268
 
    if (!dbus_py_init_message_types()) return;
269
 
    if (!dbus_py_init_pending_call()) return;
270
 
    if (!dbus_py_init_mainloop()) return;
271
 
    if (!dbus_py_init_libdbus_conn_types()) return;
272
 
    if (!dbus_py_init_conn_types()) return;
273
 
    if (!dbus_py_init_server_types()) return;
274
 
 
275
 
    this_module = Py_InitModule3("_dbus_bindings", module_functions, module_doc);
276
 
    if (!this_module) return;
277
 
 
278
 
    if (!dbus_py_insert_abstract_types(this_module)) return;
279
 
    if (!dbus_py_insert_signature(this_module)) return;
280
 
    if (!dbus_py_insert_int_types(this_module)) return;
281
 
    if (!dbus_py_insert_unixfd_type(this_module)) return;
282
 
    if (!dbus_py_insert_string_types(this_module)) return;
283
 
    if (!dbus_py_insert_float_types(this_module)) return;
284
 
    if (!dbus_py_insert_container_types(this_module)) return;
285
 
    if (!dbus_py_insert_byte_types(this_module)) return;
286
 
    if (!dbus_py_insert_message_types(this_module)) return;
287
 
    if (!dbus_py_insert_pending_call(this_module)) return;
288
 
    if (!dbus_py_insert_mainloop_types(this_module)) return;
289
 
    if (!dbus_py_insert_libdbus_conn_types(this_module)) return;
290
 
    if (!dbus_py_insert_conn_types(this_module)) return;
291
 
    if (!dbus_py_insert_server_types(this_module)) return;
 
267
    if (!dbus_py_init_generic()) goto init_error;
 
268
    if (!dbus_py_init_abstract()) goto init_error;
 
269
    if (!dbus_py_init_signature()) goto init_error;
 
270
    if (!dbus_py_init_int_types()) goto init_error;
 
271
    if (!dbus_py_init_unixfd_type()) goto init_error;
 
272
    if (!dbus_py_init_string_types()) goto init_error;
 
273
    if (!dbus_py_init_float_types()) goto init_error;
 
274
    if (!dbus_py_init_container_types()) goto init_error;
 
275
    if (!dbus_py_init_byte_types()) goto init_error;
 
276
    if (!dbus_py_init_message_types()) goto init_error;
 
277
    if (!dbus_py_init_pending_call()) goto init_error;
 
278
    if (!dbus_py_init_mainloop()) goto init_error;
 
279
    if (!dbus_py_init_libdbus_conn_types()) goto init_error;
 
280
    if (!dbus_py_init_conn_types()) goto init_error;
 
281
    if (!dbus_py_init_server_types()) goto init_error;
 
282
 
 
283
#ifdef PY3
 
284
    this_module = PyModule_Create(&moduledef);
 
285
#else
 
286
    this_module = Py_InitModule3("_dbus_bindings",
 
287
                                 module_functions, module_doc);
 
288
#endif
 
289
    if (!this_module) goto init_error;
 
290
 
 
291
    if (!dbus_py_insert_abstract_types(this_module)) goto init_error;
 
292
    if (!dbus_py_insert_signature(this_module)) goto init_error;
 
293
    if (!dbus_py_insert_int_types(this_module)) goto init_error;
 
294
    if (!dbus_py_insert_unixfd_type(this_module)) goto init_error;
 
295
    if (!dbus_py_insert_string_types(this_module)) goto init_error;
 
296
    if (!dbus_py_insert_float_types(this_module)) goto init_error;
 
297
    if (!dbus_py_insert_container_types(this_module)) goto init_error;
 
298
    if (!dbus_py_insert_byte_types(this_module)) goto init_error;
 
299
    if (!dbus_py_insert_message_types(this_module)) goto init_error;
 
300
    if (!dbus_py_insert_pending_call(this_module)) goto init_error;
 
301
    if (!dbus_py_insert_mainloop_types(this_module)) goto init_error;
 
302
    if (!dbus_py_insert_libdbus_conn_types(this_module)) goto init_error;
 
303
    if (!dbus_py_insert_conn_types(this_module)) goto init_error;
 
304
    if (!dbus_py_insert_server_types(this_module)) goto init_error;
292
305
 
293
306
    if (PyModule_AddStringConstant(this_module, "BUS_DAEMON_NAME",
294
 
                                   DBUS_SERVICE_DBUS) < 0) return;
 
307
                                   DBUS_SERVICE_DBUS) < 0) goto init_error;
295
308
    if (PyModule_AddStringConstant(this_module, "BUS_DAEMON_PATH",
296
 
                                   DBUS_PATH_DBUS) < 0) return;
 
309
                                   DBUS_PATH_DBUS) < 0) goto init_error;
297
310
    if (PyModule_AddStringConstant(this_module, "BUS_DAEMON_IFACE",
298
 
                                   DBUS_INTERFACE_DBUS) < 0) return;
 
311
                                   DBUS_INTERFACE_DBUS) < 0) goto init_error;
299
312
    if (PyModule_AddStringConstant(this_module, "LOCAL_PATH",
300
 
                                   DBUS_PATH_LOCAL) < 0) return;
 
313
                                   DBUS_PATH_LOCAL) < 0) goto init_error;
301
314
    if (PyModule_AddStringConstant(this_module, "LOCAL_IFACE",
302
 
                                   DBUS_INTERFACE_LOCAL) < 0) return;
 
315
                                   DBUS_INTERFACE_LOCAL) < 0) goto init_error;
303
316
    if (PyModule_AddStringConstant(this_module, "INTROSPECTABLE_IFACE",
304
 
                                   DBUS_INTERFACE_INTROSPECTABLE) < 0) return;
 
317
                                   DBUS_INTERFACE_INTROSPECTABLE) < 0)
 
318
        goto init_error;
305
319
    if (PyModule_AddStringConstant(this_module, "PEER_IFACE",
306
 
                                   DBUS_INTERFACE_PEER) < 0) return;
 
320
                                   DBUS_INTERFACE_PEER) < 0) goto init_error;
307
321
    if (PyModule_AddStringConstant(this_module, "PROPERTIES_IFACE",
308
 
                                   DBUS_INTERFACE_PROPERTIES) < 0) return;
 
322
                                   DBUS_INTERFACE_PROPERTIES) < 0)
 
323
        goto init_error;
309
324
    if (PyModule_AddStringConstant(this_module,
310
325
                "DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER",
311
 
                DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER) < 0) return;
 
326
                DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER) < 0)
 
327
        goto init_error;
312
328
    if (PyModule_AddStringConstant(this_module,
313
329
                "DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER",
314
 
                DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER) < 0) return;
 
330
                DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER) < 0)
 
331
        goto init_error;
315
332
    if (PyModule_AddStringConstant(this_module,
316
333
                "DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE",
317
 
                DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE) < 0) return;
 
334
                DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE) < 0)
 
335
        goto init_error;
318
336
 
319
337
#define ADD_CONST_VAL(x, v) \
320
 
    if (PyModule_AddIntConstant(this_module, x, v) < 0) return;
 
338
    if (PyModule_AddIntConstant(this_module, x, v) < 0) goto init_error;
321
339
#define ADD_CONST_PREFIXED(x) ADD_CONST_VAL(#x, DBUS_##x)
322
340
#define ADD_CONST(x) ADD_CONST_VAL(#x, x)
323
341
 
382
400
    ADD_CONST_PREFIXED(WATCH_ERROR)
383
401
 
384
402
    if (PyModule_AddStringConstant(this_module, "__docformat__",
385
 
                                   "restructuredtext") < 0) return;
 
403
                                   "restructuredtext") < 0) goto init_error;
386
404
 
387
405
    if (PyModule_AddStringConstant(this_module, "__version__",
388
 
                                   PACKAGE_VERSION) < 0) return;
 
406
                                   PACKAGE_VERSION) < 0) goto init_error;
389
407
 
390
408
    if (PyModule_AddIntConstant(this_module, "_python_version",
391
 
                                PY_VERSION_HEX) < 0) return;
 
409
                                PY_VERSION_HEX) < 0) goto init_error;
392
410
 
 
411
#ifdef PY3
 
412
    c_api = PyCapsule_New((void *)dbus_bindings_API,
 
413
                          PYDBUS_CAPSULE_NAME, NULL);
 
414
#else
393
415
    c_api = PyCObject_FromVoidPtr ((void *)dbus_bindings_API, NULL);
 
416
#endif
394
417
    if (!c_api) {
395
 
        return;
 
418
        goto init_error;
396
419
    }
397
420
    PyModule_AddObject(this_module, "_C_API", c_api);
 
421
 
 
422
#ifdef PY3
 
423
    return this_module;
 
424
  init_error:
 
425
    Py_CLEAR(this_module);
 
426
    return NULL;
 
427
#else
 
428
  init_error:
 
429
    return;
 
430
#endif
398
431
}
399
432
 
400
433
/* vim:set ft=c cino< sw=4 sts=4 et: */