upgrade rpm version to 4.14.1
[platform/upstream/rpm.git] / python / rpmbmodule.c
1 #include "rpmsystem-py.h"
2
3 #include "spec-py.h"
4
5 static char rpmb__doc__[] =
6 "";
7
8 /*
9   Do any common preliminary work before python 2 vs python 3 module creation:
10 */
11 static int prepareInitModule(void)
12 {
13     if (PyType_Ready(&spec_Type) < 0) return 0;
14     if (PyType_Ready(&specPkg_Type) < 0) return 0;
15
16     return 1;
17 }
18
19 static int initModule(PyObject *m)
20 {
21     Py_INCREF(&spec_Type);
22     PyModule_AddObject(m, "spec", (PyObject *) &spec_Type);
23     Py_INCREF(&specPkg_Type);
24     PyModule_AddObject(m, "specPkg", (PyObject *) &specPkg_Type);
25
26 #define REGISTER_ENUM(val) PyModule_AddIntConstant(m, #val, val)
27     REGISTER_ENUM(RPMBUILD_ISSOURCE);
28     REGISTER_ENUM(RPMBUILD_ISPATCH);
29     REGISTER_ENUM(RPMBUILD_ISICON);
30     REGISTER_ENUM(RPMBUILD_ISNO);
31
32     REGISTER_ENUM(RPMBUILD_NONE);
33     REGISTER_ENUM(RPMBUILD_PREP);
34     REGISTER_ENUM(RPMBUILD_BUILD);
35     REGISTER_ENUM(RPMBUILD_INSTALL);
36     REGISTER_ENUM(RPMBUILD_CHECK);
37     REGISTER_ENUM(RPMBUILD_CLEAN);
38     REGISTER_ENUM(RPMBUILD_FILECHECK);
39     REGISTER_ENUM(RPMBUILD_PACKAGESOURCE);
40     REGISTER_ENUM(RPMBUILD_PACKAGEBINARY);
41     REGISTER_ENUM(RPMBUILD_RMSOURCE);
42     REGISTER_ENUM(RPMBUILD_RMBUILD);
43     REGISTER_ENUM(RPMBUILD_RMSPEC);
44
45     REGISTER_ENUM(RPMBUILD_PKG_NONE);
46     REGISTER_ENUM(RPMBUILD_PKG_NODIRTOKENS);
47
48     REGISTER_ENUM(RPMSPEC_NONE);
49     REGISTER_ENUM(RPMSPEC_ANYARCH);
50     REGISTER_ENUM(RPMSPEC_FORCE);
51     REGISTER_ENUM(RPMSPEC_NOLANG);
52
53     return 1;
54 }
55
56 #if PY_MAJOR_VERSION >= 3
57 static struct PyModuleDef moduledef = {
58     PyModuleDef_HEAD_INIT,
59     "_rpmb",     /* m_name */
60     rpmb__doc__, /* m_doc */
61     0,           /* m_size */
62     NULL,        /* m_methods */
63     NULL,        /* m_reload */
64     NULL,        /* m_traverse */
65     NULL,        /* m_clear */
66     NULL         /* m_free */
67 };
68
69 PyObject * PyInit__rpmb(void);  /* XXX eliminate gcc warning */
70 PyObject * PyInit__rpmb(void)
71 {
72     PyObject *m;
73
74     if (!prepareInitModule())
75         return NULL;
76     m = PyModule_Create(&moduledef);
77     if (m == NULL || !initModule(m)) {
78         Py_XDECREF(m);
79         m = NULL;
80     }
81     return m;
82 }
83 #else
84 void init_rpmb(void);   /* XXX eliminate gcc warning */
85 void init_rpmb(void)
86 {
87     PyObject *m;
88   
89     if (!prepareInitModule())
90         return;
91
92     m = Py_InitModule3("_rpmb", NULL, rpmb__doc__);
93     if (m) initModule(m);
94 }
95 #endif