Moved vduimpl.c from util-python, import common pybuild infrastructure
[util-vserver.git] / python / setup.py
index b0c232e..507a5c2 100644 (file)
@@ -1,14 +1,40 @@
+#!/usr/bin/python
+
+import re
+import sys
+
 from distutils.core import setup, Extension
 
-# XXX - need a way to share crap with the Makefile
-setup(name = "util-vserver",
-      version = "0.1",
-      description = "Python modules for vserver operations",
-      author = "Steve Muir",
-      author_email = "smuir@cs.princeton.edu",
-      py_modules = ["vserver"],
-      ext_modules = [Extension("vserverimpl",
-                               ["vserverimpl.c"],
-                               include_dirs = ["..", "../lib"],
-                               library_dirs = ["../lib"],
-                               libraries = ["vserver"])])
+MODULE_NAME_RE = "[A-Za-z_]+"
+
+if __name__ == "__main__":
+
+    build_arg_re = re.compile(r"^([A-Z_]+)= *(.*)")
+    def split_args((build_args, argv), arg):
+        m = build_arg_re.match(arg)
+        if m:
+            (k, v) = m.groups()
+            build_args[k] = v
+        else:
+            argv += [arg]
+        return (build_args, argv)
+
+    (build_args, argv) = reduce(split_args, sys.argv[1:], ({}, []))
+    sys.argv[1:] = argv
+    extension_args = { "extra_compile_args": ["-Wall"] }
+    if "INCLUDES" in build_args:
+        extension_args["include_dirs"] = re.findall(r"-I([^ ]+)",
+                                                    build_args["INCLUDES"])
+    lib_args = build_args.get("LIBS", "")
+    if lib_args:
+        extension_args["library_dirs"] = re.findall(r"-L([^ ]+)", lib_args)
+        extension_args["libraries"] = re.findall(r"-l([^ ]+)", lib_args)
+    modules = re.findall("(%s).py" % MODULE_NAME_RE,
+                         build_args.get("PY_MODS", ""))
+    extensions = map(lambda modname: Extension(modname,
+                                               [modname + ".c"],
+                                               **extension_args),
+                     re.findall("(%s).so" % MODULE_NAME_RE,
+                                build_args.get("PY_EXT_MODS", "")))
+
+    setup(py_modules = modules, ext_modules = extensions)