Add basic Python module, build shared library.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 28 Feb 2009 21:37:16 +0000 (22:37 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 28 Feb 2009 21:37:16 +0000 (22:37 +0100)
.gitignore
Makefile
config.mk.in
configure.ac
pypolicy.c
python/tests/__init__.py

index c1abad34a323ad65c950a087a7797ba89762628c..62240fed58b1bf001919e5020f4a9d25271a14c2 100644 (file)
@@ -16,3 +16,4 @@ lex.h
 policy.so
 _trial_temp
 *.pyc
+*.so
index 814229c9d03118b15c5ca72b0c7152c26adaa971..ea730fc91cf8b6c28c8aea7dd7e7cedfc57fa0ab 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -21,7 +21,12 @@ lex.yy.c lex.h: lex.l
 
 lex.yy.o: lex.yy.c parse_adm.h
 
-dumpadm: dumpadm.o parse_adm.o parse_adm.o lex.yy.o
+parse_adm.o lex.yy.o: CFLAGS+=-fPIC
+
+libpolicy.$(SHLIBEXT): parse_adm.o lex.yy.o
+       $(CC) -shared -o $@ $^ $(TALLOC_LIBS)
+
+dumpadm: dumpadm.o libpolicy.$(SHLIBEXT)
        $(CC) -o $@ $^ $(POPT_LIBS)
 
 clean::
@@ -40,7 +45,7 @@ python:: python/policy.$(SHLIBEXT)
 check-python:: python
        PYTHONPATH=python $(TRIAL) python/tests
 
-python/policy.$(SHLIBEXT): pypolicy.o
-       $(CC) -shared -o $@ $^ `$(PYTHON_CONFIG) --libs`
+python/policy.$(SHLIBEXT): pypolicy.o libpolicy.$(SHLIBEXT)
+       $(CC) -shared -o $@ $^ `$(PYTHON_CONFIG) --libs` $(TALLOC_LIBS)
 
 pypolicy.o: CFLAGS+=`$(PYTHON_CONFIG) --cflags` -fPIC
index 6438c4e718931d08f320fa6e502e4007b343f5e8..c89a3ed5e49d04544c016491b4bbd6554558031c 100644 (file)
@@ -6,5 +6,6 @@ CFLAGS=@CFLAGS@
 REGISTRY_CFLAGS=@REGISTRY_CFLAGS@
 REGISTRY_LIBS=@REGISTRY_LIBS@
 POPT_LIBS=@POPT_LIBS@
+TALLOC_LIBS=@TALLOC_LIBS@
 YACC=@YACC@
 LEX=@LEX@
index 8bb0a531d1bb64806193e0a2d1b3b4a7f8d82e74..47ead05c129b5357fb812f53e54dccf6cfa5a4cb 100644 (file)
@@ -4,6 +4,7 @@ AC_PROG_CC
 AC_PROG_YACC
 AC_PROG_LEX
 
+PKG_CHECK_MODULES(TALLOC, talloc)
 PKG_CHECK_MODULES(REGISTRY, registry)
 
 AC_CHECK_LIB([popt], [poptFreeContext], [
index 0a057891aa2d08e1657247a509e6d48f86cf2c94..2dff5fb307f2fdfd04dbb8d8a289f9fe6d8264e9 100644 (file)
 */
 
 #include <Python.h>
+#include <talloc.h>
+#include "adm.h"
+
+typedef struct {
+       PyObject_HEAD
+       struct adm_file *file;
+} AdmFileObject;
+
+static int adm_file_init(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+       char *path;
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", &path))
+               return -1;
+
+       adm_read_file(path);
+
+       return 0;
+}
+
+static void adm_file_dealloc(AdmFileObject *self)
+{
+       talloc_free(self->file);
+       self->ob_type->tp_free(self);
+}
+
+static PyTypeObject PyAdmFile = {
+       .tp_name = "AdmFile",
+       .tp_flags = Py_TPFLAGS_DEFAULT,
+       .tp_basicsize = sizeof(AdmFileObject),
+       .tp_dealloc = (destructor)adm_file_dealloc,
+       .tp_init = adm_file_init,
+};
 
 void initpolicy(void)
 {
        PyObject *m;
+
+       if (PyType_Ready(&PyAdmFile) < 0)
+               return;
        
-       m = Py_InitModule3("policy", NULL, NULL);
+       m = Py_InitModule3("policy", NULL, "Windows policy management");
        if (m == NULL)
                return;
+
+       PyModule_AddObject(m, "AdmFile", (PyObject *)&PyAdmFile);
+       Py_INCREF(&PyAdmFile);
 }
index 563e8fd70b8cf5656abe447dd60607e2d36d8d89..6c2ef79c216ce6b224e58ed8c82ad4ffbeaeeb4a 100644 (file)
@@ -1 +1,7 @@
 import policy
+import unittest
+
+class AdmTests(unittest.TestCase):
+
+    def test_simple(self):
+