Add build system. Fix import.
[checkpath-python] / setup.py
CommitLineData
ab147f75 1#! /usr/bin/python
2
3from distutils.core import setup, Extension
4from os import *
5from errno import *
6
7incdirs = []
8libdirs = []
9libs = []
10
11def progoutput(cmd):
12 p = popen(cmd)
13 out = p.readline()
14 if p.read() != '': raise 'extra junk from %s' % cmd
15 p.close()
16 return out.rstrip('\n')
17
18def libconfig(lib, ver):
19 config = lib + '-config'
20 if system('%s --check %s' % (config, ver)):
21 raise '%s version %s not found' % (lib, ver)
22 version = progoutput('%s --version' % config)
23 for i in progoutput('%s --cflags' % config).split():
24 if i[:2] == '-I': incdirs.append(i[2:])
25 else: raise 'strange cflags item %s' % i
26 for i in progoutput('%s --libs' % config).split():
27 if i[:2] == '-L': libdirs.append(i[2:])
28 elif i[:2] == '-l': libs.append(i[2:])
29 else: raise 'strange libs item %s' % i
30
31def uniquify(l):
32 u = {}
33 o = []
34 for i in l:
35 if i not in u:
36 o.append(i)
37 u[i] = 1
38 return o
39
40libconfig('mLib', '2.0.3')
41libconfig('checkpath', '1.1.0')
42
43class SubprocessFailure (Exception):
44 def __init__(me, file, rc):
45 me.args = (file, rc)
46 me.file = file
47 me.rc = rc
48 def __str__(me):
49 if WIFEXITED(me.rc):
50 return '%s failed (rc = %d)' % (me.file, WEXITSTATUS(me.rc))
51 elif WIFSIGNALED(me.rc):
52 return '%s died (signal %d)' % (me.file, WTERMSIG(me.rc))
53 else:
54 return '%s died inexplicably' % (me.file)
55
56chk = Extension('checkpath',
57 ['checkpath.c'],
58 include_dirs = uniquify(incdirs),
59 library_dirs = uniquify(libdirs),
60 libraries = uniquify(libs))
61setup(name = 'CheckPath',
62 version = '1.1.0',
63 description = 'Checking paths for security',
64 author = 'Straylight/Edgeware',
65 author_email = 'mdw@nsict.org',
66 license = 'GNU General Public License',
67 ext_modules = [chk])