1/*
2 * This module is used in the unittests for object initialize.
3 */
4#include "Python.h"
5#include "pyobjc-api.h"
6
7#import <Foundation/Foundation.h>
8
9
10static PyMethodDef mod_methods[] = {
11	{ 0, 0, 0, 0 }
12};
13
14typedef struct TestStructPointerStruct* Foo;
15
16#if PY_VERSION_HEX >= 0x03000000
17
18static struct PyModuleDef mod_module = {
19	PyModuleDef_HEAD_INIT,
20	"structpointer2",
21	NULL,
22	0,
23	mod_methods,
24	NULL,
25	NULL,
26	NULL,
27	NULL
28};
29
30#define INITERROR() return NULL
31#define INITDONE() return m
32
33PyObject* PyInit_structpointer2(void);
34
35PyObject*
36PyInit_structpointer2(void)
37
38#else
39
40#define INITERROR() return
41#define INITDONE() return
42
43void initstructpointer2(void);
44
45void
46initstructpointer2(void)
47#endif
48{
49	PyObject* m;
50	PyObject* v;
51
52#if PY_VERSION_HEX >= 0x03000000
53	m = PyModule_Create(&mod_module);
54#else
55	m = Py_InitModule4("structpointer2", mod_methods,
56		NULL, NULL, PYTHON_API_VERSION);
57#endif
58	if (!m) {
59		INITERROR();
60	}
61
62	if (PyObjC_ImportAPI(m) < 0) {
63		INITERROR();
64	}
65	v = PyObjCCreateOpaquePointerType("TestStructPointerStructPtr",
66			@encode(Foo), NULL);
67	if (v == NULL) {
68		INITERROR();
69	}
70	if (PyDict_SetItemString(PyModule_GetDict(m), "TestStructPointerStructPtr",
71			v) < 0) {
72		INITERROR();
73	}
74
75	INITDONE();
76}
77