Add build system. Fix import.
authormdw <mdw>
Fri, 24 Jun 2005 11:52:23 +0000 (11:52 +0000)
committermdw <mdw>
Fri, 24 Jun 2005 11:52:23 +0000 (11:52 +0000)
MANIFEST.in [new file with mode: 0644]
Makefile [new file with mode: 0644]
checkpath.c [deleted file]
checkpath.pyx~ [deleted file]
checkpath.so [deleted file]
setup.py [new file with mode: 0644]
test.py [deleted file]
test.py~ [deleted file]

diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644 (file)
index 0000000..409b7fd
--- /dev/null
@@ -0,0 +1 @@
+include Makefile MANIFEST MANIFEST.in checkpath.pyx
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..e414f7b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,24 @@
+## Makefile
+
+PYTHON = python
+PYREXC = pyrexc
+prefix = /usr/local
+
+all: setup.py checkpath.c
+       $(PYTHON) setup.py build
+
+clean: setup.py
+       $(PYTHON) setup.py clean
+       rm -rf build checkpath.c
+
+checkpath.c: checkpath.pyx
+       pyrexc -o $@.new checkpath.pyx
+       mv $@.new $@
+
+dist: setup.py checkpath.c
+       $(PYTHON) setup.py sdist
+
+install: setup.py checkpath.c
+       $(PYTHON) setup.py install --prefix $(prefix)
+
+.PHONY: all clean dist install
diff --git a/checkpath.c b/checkpath.c
deleted file mode 100644 (file)
index cc3afe3..0000000
+++ /dev/null
@@ -1,1002 +0,0 @@
-/* Generated by Pyrex 0.9.3 on Thu Jun  9 16:58:27 2005 */
-
-#include "Python.h"
-#include "structmember.h"
-#ifndef PY_LONG_LONG
-  #define PY_LONG_LONG LONG_LONG
-#endif
-#include "checkpath.h"
-
-
-typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
-typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
-static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/
-static int __Pyx_EndUnpack(PyObject *, int); /*proto*/
-static int __Pyx_PrintItem(PyObject *); /*proto*/
-static int __Pyx_PrintNewline(void); /*proto*/
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-static void __Pyx_ReRaise(void); /*proto*/
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
-static PyObject *__Pyx_GetExcValue(void); /*proto*/
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
-static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/
-static void __Pyx_WriteUnraisable(char *name); /*proto*/
-static void __Pyx_AddTraceback(char *funcname); /*proto*/
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/
-static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
-static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
-static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
-
-static PyObject *__pyx_m;
-static PyObject *__pyx_b;
-static int __pyx_lineno;
-static char *__pyx_filename;
-staticforward char **__pyx_f;
-
-/* Declarations from checkpath */
-
-staticforward PyTypeObject __pyx_type_9checkpath_CheckPath;
-
-struct __pyx_obj_9checkpath_CheckPath {
-  PyObject_HEAD
-  struct checkpath cp;
-};
-
-static PyTypeObject *__pyx_ptype_9checkpath_CheckPath = 0;
-static void (__pyx_f_9checkpath_cp_report(unsigned int ,int ,char (*),char (*),void (*))); /*proto*/
-
-/* Implementation of checkpath */
-
-static PyObject *__pyx_n_ERROR;
-static PyObject *__pyx_n_WRWORLD;
-static PyObject *__pyx_n_WRGRP;
-static PyObject *__pyx_n_WROTHGRP;
-static PyObject *__pyx_n_WROTHUSR;
-static PyObject *__pyx_n_PROBLEMS;
-static PyObject *__pyx_n_SYMLINK;
-static PyObject *__pyx_n_REPORT;
-static PyObject *__pyx_n_STICKYOK;
-
-static PyObject *__pyx_n_report;
-
-static char (__pyx_k1[]) = "<null>";
-
-static void __pyx_f_9checkpath_cp_report(unsigned int __pyx_v_what,int __pyx_v_verb,char (*__pyx_v_path),char (*__pyx_v_msg),void (*__pyx_v_arg)) {
-  PyObject *__pyx_v_cp;
-  PyObject *__pyx_1 = 0;
-  int __pyx_2;
-  PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  PyObject *__pyx_5 = 0;
-  PyObject *__pyx_6 = 0;
-  PyObject *__pyx_7 = 0;
-  __pyx_v_cp = Py_None; Py_INCREF(__pyx_v_cp);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":44 */
-  __pyx_1 = (PyObject *)__pyx_v_arg;
-  Py_INCREF(__pyx_1);
-  Py_DECREF(__pyx_v_cp);
-  __pyx_v_cp = __pyx_1;
-  __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":45 */
-  __pyx_2 = (__pyx_v_msg == 0);
-  if (__pyx_2) {
-
-    /* "/home/mdw/src/chkpath-python/checkpath.pyx":46 */
-    __pyx_v_msg = __pyx_k1;
-    goto __pyx_L2;
-  }
-  __pyx_L2:;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":47 */
-  __pyx_1 = PyObject_GetAttr(__pyx_v_cp, __pyx_n_report); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  __pyx_3 = PyInt_FromLong(__pyx_v_what); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  __pyx_4 = PyInt_FromLong(__pyx_v_verb); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  __pyx_5 = PyString_FromString(__pyx_v_path); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  __pyx_6 = PyString_FromString(__pyx_v_msg); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  __pyx_7 = PyTuple_New(4); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  PyTuple_SET_ITEM(__pyx_7, 0, __pyx_3);
-  PyTuple_SET_ITEM(__pyx_7, 1, __pyx_4);
-  PyTuple_SET_ITEM(__pyx_7, 2, __pyx_5);
-  PyTuple_SET_ITEM(__pyx_7, 3, __pyx_6);
-  __pyx_3 = 0;
-  __pyx_4 = 0;
-  __pyx_5 = 0;
-  __pyx_6 = 0;
-  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_7); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  Py_DECREF(__pyx_7); __pyx_7 = 0;
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_4);
-  Py_XDECREF(__pyx_5);
-  Py_XDECREF(__pyx_6);
-  Py_XDECREF(__pyx_7);
-  __Pyx_WriteUnraisable("checkpath.cp_report");
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_cp);
-}
-
-static int __pyx_f_9checkpath_9CheckPath___init__(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_9checkpath_9CheckPath___init__(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  static char *__pyx_argnames[] = {0};
-  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1;
-  Py_INCREF(__pyx_v_me);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":52 */
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_uid = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":53 */
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gids = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":54 */
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_verbose = 1;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":55 */
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_what = CP_PROBLEMS;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":56 */
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_report = __pyx_f_9checkpath_cp_report;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":57 */
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_arg = ((void (*))__pyx_v_me);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":58 */
-  checkpath_setids((&((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp));
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1:;
-  __Pyx_AddTraceback("checkpath.CheckPath.__init__");
-  __pyx_r = -1;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_setids(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_setids(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r;
-  static char *__pyx_argnames[] = {0};
-  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
-  Py_INCREF(__pyx_v_me);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":60 */
-  checkpath_setids((&((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp));
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  __Pyx_AddTraceback("checkpath.CheckPath.setids");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_3uid___get__(PyObject *__pyx_v_me); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_3uid___get__(PyObject *__pyx_v_me) {
-  PyObject *__pyx_r;
-  PyObject *__pyx_1 = 0;
-  Py_INCREF(__pyx_v_me);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":63 */
-  __pyx_1 = PyInt_FromLong(((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_uid); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; goto __pyx_L1;}
-  __pyx_r = __pyx_1;
-  __pyx_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  __Pyx_AddTraceback("checkpath.CheckPath.uid.__get__");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  return __pyx_r;
-}
-
-static int __pyx_f_9checkpath_9CheckPath_3uid___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/
-static int __pyx_f_9checkpath_9CheckPath_3uid___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) {
-  int __pyx_r;
-  uid_t __pyx_1;
-  Py_INCREF(__pyx_v_me);
-  Py_INCREF(__pyx_v_val);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":65 */
-  __pyx_1 = PyInt_AsLong(__pyx_v_val); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; goto __pyx_L1;}
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_uid = __pyx_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1:;
-  __Pyx_AddTraceback("checkpath.CheckPath.uid.__set__");
-  __pyx_r = -1;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  Py_DECREF(__pyx_v_val);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_4gids___get__(PyObject *__pyx_v_me); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_4gids___get__(PyObject *__pyx_v_me) {
-  PyObject *__pyx_v_g;
-  PyObject *__pyx_v_i;
-  PyObject *__pyx_r;
-  PyObject *__pyx_1 = 0;
-  long __pyx_2;
-  int __pyx_3;
-  int __pyx_4;
-  Py_INCREF(__pyx_v_me);
-  __pyx_v_g = Py_None; Py_INCREF(__pyx_v_g);
-  __pyx_v_i = Py_None; Py_INCREF(__pyx_v_i);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":68 */
-  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; goto __pyx_L1;}
-  Py_DECREF(__pyx_v_g);
-  __pyx_v_g = __pyx_1;
-  __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":69 */
-  __pyx_3 = ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gids;
-  for (__pyx_2 = 0; __pyx_2 < __pyx_3; ++__pyx_2) {
-    __pyx_1 = PyInt_FromLong(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;}
-    Py_DECREF(__pyx_v_i);
-    __pyx_v_i = __pyx_1;
-    __pyx_1 = 0;
-
-    /* "/home/mdw/src/chkpath-python/checkpath.pyx":70 */
-    __pyx_4 = PyInt_AsLong(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; goto __pyx_L1;}
-    __pyx_1 = PyInt_FromLong((((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gid[__pyx_4])); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; goto __pyx_L1;}
-    if (PyObject_SetItem(__pyx_v_g, __pyx_v_i, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; goto __pyx_L1;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    __pyx_L2:;
-  }
-  __pyx_L3:;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":71 */
-  Py_INCREF(__pyx_v_g);
-  __pyx_r = __pyx_v_g;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  __Pyx_AddTraceback("checkpath.CheckPath.gids.__get__");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_g);
-  Py_DECREF(__pyx_v_i);
-  Py_DECREF(__pyx_v_me);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_n_len;
-static PyObject *__pyx_n_TypeError;
-
-static PyObject *__pyx_k2p;
-
-static char (__pyx_k2[]) = "too many groups";
-
-static int __pyx_f_9checkpath_9CheckPath_4gids___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/
-static int __pyx_f_9checkpath_9CheckPath_4gids___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) {
-  PyObject *__pyx_v_i;
-  int __pyx_r;
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
-  long __pyx_5;
-  long __pyx_6;
-  gid_t __pyx_7;
-  Py_INCREF(__pyx_v_me);
-  Py_INCREF(__pyx_v_val);
-  __pyx_v_i = Py_None; Py_INCREF(__pyx_v_i);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":73 */
-  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}
-  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}
-  Py_INCREF(__pyx_v_val);
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_val);
-  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_1 = PyInt_FromLong((NGROUPS_MAX + 1)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}
-  if (PyObject_Cmp(__pyx_3, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}
-  __pyx_4 = __pyx_4 >= 0;
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  if (__pyx_4) {
-
-    /* "/home/mdw/src/chkpath-python/checkpath.pyx":74 */
-    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; goto __pyx_L1;}
-    __Pyx_Raise(__pyx_2, __pyx_k2p, 0);
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; goto __pyx_L1;}
-    goto __pyx_L2;
-  }
-  __pyx_L2:;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":75 */
-  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;}
-  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;}
-  Py_INCREF(__pyx_v_val);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_val);
-  __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_6 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  for (__pyx_5 = 0; __pyx_5 < __pyx_6; ++__pyx_5) {
-    __pyx_3 = PyInt_FromLong(__pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;}
-    Py_DECREF(__pyx_v_i);
-    __pyx_v_i = __pyx_3;
-    __pyx_3 = 0;
-
-    /* "/home/mdw/src/chkpath-python/checkpath.pyx":76 */
-    __pyx_1 = PyObject_GetItem(__pyx_v_val, __pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;}
-    __pyx_7 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    __pyx_4 = PyInt_AsLong(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;}
-    (((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gid[__pyx_4]) = __pyx_7;
-    __pyx_L3:;
-  }
-  __pyx_L4:;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":77 */
-  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;}
-  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;}
-  Py_INCREF(__pyx_v_val);
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_val);
-  __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  __pyx_4 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_gids = __pyx_4;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_AddTraceback("checkpath.CheckPath.gids.__set__");
-  __pyx_r = -1;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_i);
-  Py_DECREF(__pyx_v_me);
-  Py_DECREF(__pyx_v_val);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_7verbose___get__(PyObject *__pyx_v_me); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_7verbose___get__(PyObject *__pyx_v_me) {
-  PyObject *__pyx_r;
-  PyObject *__pyx_1 = 0;
-  Py_INCREF(__pyx_v_me);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":80 */
-  __pyx_1 = PyInt_FromLong(((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_verbose); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; goto __pyx_L1;}
-  __pyx_r = __pyx_1;
-  __pyx_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  __Pyx_AddTraceback("checkpath.CheckPath.verbose.__get__");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  return __pyx_r;
-}
-
-static int __pyx_f_9checkpath_9CheckPath_7verbose___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/
-static int __pyx_f_9checkpath_9CheckPath_7verbose___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) {
-  int __pyx_r;
-  int __pyx_1;
-  Py_INCREF(__pyx_v_me);
-  Py_INCREF(__pyx_v_val);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":82 */
-  __pyx_1 = PyInt_AsLong(__pyx_v_val); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;}
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_verbose = __pyx_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1:;
-  __Pyx_AddTraceback("checkpath.CheckPath.verbose.__set__");
-  __pyx_r = -1;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  Py_DECREF(__pyx_v_val);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_4what___get__(PyObject *__pyx_v_me); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_4what___get__(PyObject *__pyx_v_me) {
-  PyObject *__pyx_r;
-  PyObject *__pyx_1 = 0;
-  Py_INCREF(__pyx_v_me);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":85 */
-  __pyx_1 = PyInt_FromLong(((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_what); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;}
-  __pyx_r = __pyx_1;
-  __pyx_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  __Pyx_AddTraceback("checkpath.CheckPath.what.__get__");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  return __pyx_r;
-}
-
-static int __pyx_f_9checkpath_9CheckPath_4what___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val); /*proto*/
-static int __pyx_f_9checkpath_9CheckPath_4what___set__(PyObject *__pyx_v_me, PyObject *__pyx_v_val) {
-  int __pyx_r;
-  unsigned int __pyx_1;
-  Py_INCREF(__pyx_v_me);
-  Py_INCREF(__pyx_v_val);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":87 */
-  __pyx_1 = PyInt_AsLong(__pyx_v_val); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; goto __pyx_L1;}
-  ((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp.cp_what = __pyx_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1:;
-  __Pyx_AddTraceback("checkpath.CheckPath.what.__set__");
-  __pyx_r = -1;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  Py_DECREF(__pyx_v_val);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_check(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_check(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_path = 0;
-  PyObject *__pyx_r;
-  char (*__pyx_1);
-  int __pyx_2;
-  PyObject *__pyx_3 = 0;
-  static char *__pyx_argnames[] = {"path",0};
-  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_path)) return 0;
-  Py_INCREF(__pyx_v_me);
-  Py_INCREF(__pyx_v_path);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":89 */
-  __pyx_1 = PyString_AsString(__pyx_v_path); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
-  __pyx_2 = checkpath(__pyx_1,(&((struct __pyx_obj_9checkpath_CheckPath *)__pyx_v_me)->cp)); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
-  __pyx_3 = PyInt_FromLong(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
-  __pyx_r = __pyx_3;
-  __pyx_3 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_3);
-  __Pyx_AddTraceback("checkpath.CheckPath.check");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  Py_DECREF(__pyx_v_path);
-  return __pyx_r;
-}
-
-static PyObject *__pyx_f_9checkpath_9CheckPath_report(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_9checkpath_9CheckPath_report(PyObject *__pyx_v_me, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_what = 0;
-  PyObject *__pyx_v_verb = 0;
-  PyObject *__pyx_v_path = 0;
-  PyObject *__pyx_v_msg = 0;
-  PyObject *__pyx_r;
-  static char *__pyx_argnames[] = {"what","verb","path","msg",0};
-  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OOOO", __pyx_argnames, &__pyx_v_what, &__pyx_v_verb, &__pyx_v_path, &__pyx_v_msg)) return 0;
-  Py_INCREF(__pyx_v_me);
-  Py_INCREF(__pyx_v_what);
-  Py_INCREF(__pyx_v_verb);
-  Py_INCREF(__pyx_v_path);
-  Py_INCREF(__pyx_v_msg);
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":91 */
-
-  __pyx_r = Py_None; Py_INCREF(__pyx_r);
-  goto __pyx_L0;
-  __pyx_L1:;
-  __Pyx_AddTraceback("checkpath.CheckPath.report");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_me);
-  Py_DECREF(__pyx_v_what);
-  Py_DECREF(__pyx_v_verb);
-  Py_DECREF(__pyx_v_path);
-  Py_DECREF(__pyx_v_msg);
-  return __pyx_r;
-}
-
-static __Pyx_InternTabEntry __pyx_intern_tab[] = {
-  {&__pyx_n_ERROR, "ERROR"},
-  {&__pyx_n_PROBLEMS, "PROBLEMS"},
-  {&__pyx_n_REPORT, "REPORT"},
-  {&__pyx_n_STICKYOK, "STICKYOK"},
-  {&__pyx_n_SYMLINK, "SYMLINK"},
-  {&__pyx_n_TypeError, "TypeError"},
-  {&__pyx_n_WRGRP, "WRGRP"},
-  {&__pyx_n_WROTHGRP, "WROTHGRP"},
-  {&__pyx_n_WROTHUSR, "WROTHUSR"},
-  {&__pyx_n_WRWORLD, "WRWORLD"},
-  {&__pyx_n_len, "len"},
-  {&__pyx_n_report, "report"},
-  {0, 0}
-};
-
-static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_k2p, __pyx_k2, sizeof(__pyx_k2)},
-  {0, 0, 0}
-};
-
-static PyObject *__pyx_tp_new_9checkpath_CheckPath(PyTypeObject *t, PyObject *a, PyObject *k) {
-  PyObject *o = (*t->tp_alloc)(t, 0);
-  struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o;
-  return o;
-}
-
-static void __pyx_tp_dealloc_9checkpath_CheckPath(PyObject *o) {
-  struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o;
-  (*o->ob_type->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_9checkpath_CheckPath(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o;
-  return 0;
-}
-
-static int __pyx_tp_clear_9checkpath_CheckPath(PyObject *o) {
-  struct __pyx_obj_9checkpath_CheckPath *p = (struct __pyx_obj_9checkpath_CheckPath *)o;
-  return 0;
-}
-
-static PyObject *__pyx_getprop_9checkpath_9CheckPath_uid(PyObject *o, void *x) {
-  return __pyx_f_9checkpath_9CheckPath_3uid___get__(o);
-}
-
-static int __pyx_setprop_9checkpath_9CheckPath_uid(PyObject *o, PyObject *v, void *x) {
-  if (v) {
-    return __pyx_f_9checkpath_9CheckPath_3uid___set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_9checkpath_9CheckPath_gids(PyObject *o, void *x) {
-  return __pyx_f_9checkpath_9CheckPath_4gids___get__(o);
-}
-
-static int __pyx_setprop_9checkpath_9CheckPath_gids(PyObject *o, PyObject *v, void *x) {
-  if (v) {
-    return __pyx_f_9checkpath_9CheckPath_4gids___set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_9checkpath_9CheckPath_verbose(PyObject *o, void *x) {
-  return __pyx_f_9checkpath_9CheckPath_7verbose___get__(o);
-}
-
-static int __pyx_setprop_9checkpath_9CheckPath_verbose(PyObject *o, PyObject *v, void *x) {
-  if (v) {
-    return __pyx_f_9checkpath_9CheckPath_7verbose___set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_9checkpath_9CheckPath_what(PyObject *o, void *x) {
-  return __pyx_f_9checkpath_9CheckPath_4what___get__(o);
-}
-
-static int __pyx_setprop_9checkpath_9CheckPath_what(PyObject *o, PyObject *v, void *x) {
-  if (v) {
-    return __pyx_f_9checkpath_9CheckPath_4what___set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static struct PyMethodDef __pyx_methods_9checkpath_CheckPath[] = {
-  {"setids", (PyCFunction)__pyx_f_9checkpath_9CheckPath_setids, METH_VARARGS|METH_KEYWORDS, 0},
-  {"check", (PyCFunction)__pyx_f_9checkpath_9CheckPath_check, METH_VARARGS|METH_KEYWORDS, 0},
-  {"report", (PyCFunction)__pyx_f_9checkpath_9CheckPath_report, METH_VARARGS|METH_KEYWORDS, 0},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_9checkpath_CheckPath[] = {
-  {"uid", __pyx_getprop_9checkpath_9CheckPath_uid, __pyx_setprop_9checkpath_9CheckPath_uid, 0, 0},
-  {"gids", __pyx_getprop_9checkpath_9CheckPath_gids, __pyx_setprop_9checkpath_9CheckPath_gids, 0, 0},
-  {"verbose", __pyx_getprop_9checkpath_9CheckPath_verbose, __pyx_setprop_9checkpath_9CheckPath_verbose, 0, 0},
-  {"what", __pyx_getprop_9checkpath_9CheckPath_what, __pyx_setprop_9checkpath_9CheckPath_what, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyNumberMethods __pyx_tp_as_number_CheckPath = {
-  0, /*nb_add*/
-  0, /*nb_subtract*/
-  0, /*nb_multiply*/
-  0, /*nb_divide*/
-  0, /*nb_remainder*/
-  0, /*nb_divmod*/
-  0, /*nb_power*/
-  0, /*nb_negative*/
-  0, /*nb_positive*/
-  0, /*nb_absolute*/
-  0, /*nb_nonzero*/
-  0, /*nb_invert*/
-  0, /*nb_lshift*/
-  0, /*nb_rshift*/
-  0, /*nb_and*/
-  0, /*nb_xor*/
-  0, /*nb_or*/
-  0, /*nb_coerce*/
-  0, /*nb_int*/
-  0, /*nb_long*/
-  0, /*nb_float*/
-  0, /*nb_oct*/
-  0, /*nb_hex*/
-  0, /*nb_inplace_add*/
-  0, /*nb_inplace_subtract*/
-  0, /*nb_inplace_multiply*/
-  0, /*nb_inplace_divide*/
-  0, /*nb_inplace_remainder*/
-  0, /*nb_inplace_power*/
-  0, /*nb_inplace_lshift*/
-  0, /*nb_inplace_rshift*/
-  0, /*nb_inplace_and*/
-  0, /*nb_inplace_xor*/
-  0, /*nb_inplace_or*/
-  0, /*nb_floor_divide*/
-  0, /*nb_true_divide*/
-  0, /*nb_inplace_floor_divide*/
-  0, /*nb_inplace_true_divide*/
-};
-
-static PySequenceMethods __pyx_tp_as_sequence_CheckPath = {
-  0, /*sq_length*/
-  0, /*sq_concat*/
-  0, /*sq_repeat*/
-  0, /*sq_item*/
-  0, /*sq_slice*/
-  0, /*sq_ass_item*/
-  0, /*sq_ass_slice*/
-  0, /*sq_contains*/
-  0, /*sq_inplace_concat*/
-  0, /*sq_inplace_repeat*/
-};
-
-static PyMappingMethods __pyx_tp_as_mapping_CheckPath = {
-  0, /*mp_length*/
-  0, /*mp_subscript*/
-  0, /*mp_ass_subscript*/
-};
-
-static PyBufferProcs __pyx_tp_as_buffer_CheckPath = {
-  0, /*bf_getreadbuffer*/
-  0, /*bf_getwritebuffer*/
-  0, /*bf_getsegcount*/
-  0, /*bf_getcharbuffer*/
-};
-
-statichere PyTypeObject __pyx_type_9checkpath_CheckPath = {
-  PyObject_HEAD_INIT(0)
-  0, /*ob_size*/
-  "checkpath.CheckPath", /*tp_name*/
-  sizeof(struct __pyx_obj_9checkpath_CheckPath), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_9checkpath_CheckPath, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  0, /*tp_compare*/
-  0, /*tp_repr*/
-  &__pyx_tp_as_number_CheckPath, /*tp_as_number*/
-  &__pyx_tp_as_sequence_CheckPath, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping_CheckPath, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  &__pyx_tp_as_buffer_CheckPath, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_9checkpath_CheckPath, /*tp_traverse*/
-  __pyx_tp_clear_9checkpath_CheckPath, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_9checkpath_CheckPath, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_9checkpath_CheckPath, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_f_9checkpath_9CheckPath___init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_9checkpath_CheckPath, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-};
-
-static struct PyMethodDef __pyx_methods[] = {
-  {0, 0, 0, 0}
-};
-
-DL_EXPORT(void) initcheckpath(void); /*proto*/
-DL_EXPORT(void) initcheckpath(void) {
-  PyObject *__pyx_1 = 0;
-  __pyx_m = Py_InitModule4("checkpath", __pyx_methods, 0, 0, PYTHON_API_VERSION);
-  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
-  __pyx_b = PyImport_AddModule("__builtin__");
-  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
-  if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
-  if (PyType_Ready(&__pyx_type_9checkpath_CheckPath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;}
-  if (PyObject_SetAttrString(__pyx_m, "CheckPath", (PyObject *)&__pyx_type_9checkpath_CheckPath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;}
-  __pyx_ptype_9checkpath_CheckPath = &__pyx_type_9checkpath_CheckPath;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":31 */
-  __pyx_1 = PyInt_FromLong(CP_ERROR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_ERROR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":32 */
-  __pyx_1 = PyInt_FromLong(CP_WRWORLD); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_WRWORLD, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":33 */
-  __pyx_1 = PyInt_FromLong(CP_WRGRP); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_WRGRP, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":34 */
-  __pyx_1 = PyInt_FromLong(CP_WROTHGRP); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_WROTHGRP, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":35 */
-  __pyx_1 = PyInt_FromLong(CP_WROTHUSR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_WROTHUSR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":36 */
-  __pyx_1 = PyInt_FromLong(CP_PROBLEMS); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_PROBLEMS, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":37 */
-  __pyx_1 = PyInt_FromLong(CP_SYMLINK); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMLINK, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":38 */
-  __pyx_1 = PyInt_FromLong(CP_REPORT); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_REPORT, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":39 */
-  __pyx_1 = PyInt_FromLong(CP_STICKYOK); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_STICKYOK, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; goto __pyx_L1;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  /* "/home/mdw/src/chkpath-python/checkpath.pyx":90 */
-  return;
-  __pyx_L1:;
-  Py_XDECREF(__pyx_1);
-  __Pyx_AddTraceback("checkpath");
-}
-
-static char *__pyx_filenames[] = {
-  "checkpath.pyx",
-};
-statichere char **__pyx_f = __pyx_filenames;
-
-/* Runtime support code */
-
-static void __Pyx_WriteUnraisable(char *name) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-    PyErr_Fetch(&old_exc, &old_val, &old_tb);
-    ctx = PyString_FromString(name);
-    PyErr_Restore(old_exc, old_val, old_tb);
-    if (!ctx)
-        ctx = Py_None;
-    PyErr_WriteUnraisable(ctx);
-}
-
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
-    PyObject *result;
-    result = PyObject_GetAttr(dict, name);
-    if (!result)
-        PyErr_SetObject(PyExc_NameError, name);
-    return result;
-}
-
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
-    Py_XINCREF(type);
-    Py_XINCREF(value);
-    Py_XINCREF(tb);
-    /* First, check the traceback argument, replacing None with NULL. */
-    if (tb == Py_None) {
-        Py_DECREF(tb);
-        tb = 0;
-    }
-    else if (tb != NULL && !PyTraceBack_Check(tb)) {
-        PyErr_SetString(PyExc_TypeError,
-            "raise: arg 3 must be a traceback or None");
-        goto raise_error;
-    }
-    /* Next, replace a missing value with None */
-    if (value == NULL) {
-        value = Py_None;
-        Py_INCREF(value);
-    }
-    /* Next, repeatedly, replace a tuple exception with its first item */
-    while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
-        PyObject *tmp = type;
-        type = PyTuple_GET_ITEM(type, 0);
-        Py_INCREF(type);
-        Py_DECREF(tmp);
-    }
-    if (PyString_Check(type))
-        ;
-    else if (PyClass_Check(type))
-        ; /*PyErr_NormalizeException(&type, &value, &tb);*/
-    else if (PyInstance_Check(type)) {
-        /* Raising an instance.  The value should be a dummy. */
-        if (value != Py_None) {
-            PyErr_SetString(PyExc_TypeError,
-              "instance exception may not have a separate value");
-            goto raise_error;
-        }
-        else {
-            /* Normalize to raise <class>, <instance> */
-            Py_DECREF(value);
-            value = type;
-            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
-            Py_INCREF(type);
-        }
-    }
-    else {
-        /* Not something you can raise.  You get an exception
-           anyway, just not what you specified :-) */
-        PyErr_Format(PyExc_TypeError,
-                 "exceptions must be strings, classes, or "
-                 "instances, not %s", type->ob_type->tp_name);
-        goto raise_error;
-    }
-    PyErr_Restore(type, value, tb);
-    return;
-raise_error:
-    Py_XDECREF(value);
-    Py_XDECREF(type);
-    Py_XDECREF(tb);
-    return;
-}
-
-static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
-    while (t->p) {
-        *t->p = PyString_InternFromString(t->s);
-        if (!*t->p)
-            return -1;
-        ++t;
-    }
-    return 0;
-}
-
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
-    while (t->p) {
-        *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
-        if (!*t->p)
-            return -1;
-        ++t;
-    }
-    return 0;
-}
-
-#include "compile.h"
-#include "frameobject.h"
-#include "traceback.h"
-
-static void __Pyx_AddTraceback(char *funcname) {
-    PyObject *py_srcfile = 0;
-    PyObject *py_funcname = 0;
-    PyObject *py_globals = 0;
-    PyObject *empty_tuple = 0;
-    PyObject *empty_string = 0;
-    PyCodeObject *py_code = 0;
-    PyFrameObject *py_frame = 0;
-    
-    py_srcfile = PyString_FromString(__pyx_filename);
-    if (!py_srcfile) goto bad;
-    py_funcname = PyString_FromString(funcname);
-    if (!py_funcname) goto bad;
-    py_globals = PyModule_GetDict(__pyx_m);
-    if (!py_globals) goto bad;
-    empty_tuple = PyTuple_New(0);
-    if (!empty_tuple) goto bad;
-    empty_string = PyString_FromString("");
-    if (!empty_string) goto bad;
-    py_code = PyCode_New(
-        0,            /*int argcount,*/
-        0,            /*int nlocals,*/
-        0,            /*int stacksize,*/
-        0,            /*int flags,*/
-        empty_string, /*PyObject *code,*/
-        empty_tuple,  /*PyObject *consts,*/
-        empty_tuple,  /*PyObject *names,*/
-        empty_tuple,  /*PyObject *varnames,*/
-        empty_tuple,  /*PyObject *freevars,*/
-        empty_tuple,  /*PyObject *cellvars,*/
-        py_srcfile,   /*PyObject *filename,*/
-        py_funcname,  /*PyObject *name,*/
-        __pyx_lineno,   /*int firstlineno,*/
-        empty_string  /*PyObject *lnotab*/
-    );
-    if (!py_code) goto bad;
-    py_frame = PyFrame_New(
-        PyThreadState_Get(), /*PyThreadState *tstate,*/
-        py_code,             /*PyCodeObject *code,*/
-        py_globals,          /*PyObject *globals,*/
-        0                    /*PyObject *locals*/
-    );
-    if (!py_frame) goto bad;
-    py_frame->f_lineno = __pyx_lineno;
-    PyTraceBack_Here(py_frame);
-bad:
-    Py_XDECREF(py_srcfile);
-    Py_XDECREF(py_funcname);
-    Py_XDECREF(empty_tuple);
-    Py_XDECREF(empty_string);
-    Py_XDECREF(py_code);
-    Py_XDECREF(py_frame);
-}
diff --git a/checkpath.pyx~ b/checkpath.pyx~
deleted file mode 100644 (file)
index 46ead15..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-cdef extern from "checkpath.h":
-  struct checkpath:
-    ctypedef int uid_t
-    ctypedef int gid_t
-    uid_t cp_uid
-    gid_t cp_gid[]
-    int cp_gids
-    int cp_verbose
-    unsigned cp_what
-    void (*cp_report)(unsigned, int, char *, char *, void *)
-    void *cp_arg
-  int checkpath(char *path, checkpath *cp)
-  void checkpath_setids(checkpath *cp)
-
diff --git a/checkpath.so b/checkpath.so
deleted file mode 100755 (executable)
index 2ee1b2c..0000000
Binary files a/checkpath.so and /dev/null differ
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..5ae8c34
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,67 @@
+#! /usr/bin/python
+
+from distutils.core import setup, Extension
+from os import *
+from errno import *
+
+incdirs = []
+libdirs = []
+libs = []
+
+def progoutput(cmd):
+  p = popen(cmd)
+  out = p.readline()
+  if p.read() != '': raise 'extra junk from %s' % cmd
+  p.close()
+  return out.rstrip('\n')
+
+def libconfig(lib, ver):
+  config = lib + '-config'
+  if system('%s --check %s' % (config, ver)):
+    raise '%s version %s not found' % (lib, ver)
+  version = progoutput('%s --version' % config)
+  for i in progoutput('%s --cflags' % config).split():
+    if i[:2] == '-I': incdirs.append(i[2:])
+    else: raise 'strange cflags item %s' % i
+  for i in progoutput('%s --libs' % config).split():
+    if i[:2] == '-L': libdirs.append(i[2:])
+    elif i[:2] == '-l': libs.append(i[2:])
+    else: raise 'strange libs item %s' % i
+
+def uniquify(l):
+  u = {}
+  o = []
+  for i in l:
+    if i not in u:
+      o.append(i)
+      u[i] = 1
+  return o
+
+libconfig('mLib', '2.0.3')
+libconfig('checkpath', '1.1.0')
+
+class SubprocessFailure (Exception):
+  def __init__(me, file, rc):
+    me.args = (file, rc)
+    me.file = file
+    me.rc = rc
+  def __str__(me):
+    if WIFEXITED(me.rc):
+      return '%s failed (rc = %d)' % (me.file, WEXITSTATUS(me.rc))
+    elif WIFSIGNALED(me.rc):
+      return '%s died (signal %d)' % (me.file, WTERMSIG(me.rc))
+    else:
+      return '%s died inexplicably' % (me.file)
+
+chk = Extension('checkpath',
+                ['checkpath.c'],
+                include_dirs = uniquify(incdirs),
+                library_dirs = uniquify(libdirs),
+                libraries = uniquify(libs))
+setup(name = 'CheckPath',
+      version = '1.1.0',
+      description = 'Checking paths for security',
+      author = 'Straylight/Edgeware',
+      author_email = 'mdw@nsict.org',
+      license = 'GNU General Public License',
+      ext_modules = [chk])
diff --git a/test.py b/test.py
deleted file mode 100644 (file)
index 9eb2d8d..0000000
--- a/test.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import checkpath as CP
-
-class VerboseCheck (CP.CheckPath):
-  def __init__(me):
-    CP.CheckPath.__init__(me)
-    me.what |= CP.REPORT
-  def report(me, what, verb, path, msg):
-    print msg
-
-cp = VerboseCheck()
-cp.check('/home/mdw')
-
diff --git a/test.py~ b/test.py~
deleted file mode 100644 (file)
index f0f882a..0000000
--- a/test.py~
+++ /dev/null
@@ -1,5 +0,0 @@
-import checkpath as CP
-
-cp = CP.CheckPath()
-cp.check('/home/mdw')
-