-INCLUDES := -I.. -I../lib
-LIBS = -L../lib -lvserver
+#
+# GNUMakefile for util-vserver Python bindings
+#
+# It's too hard to integrate distutils into the autoconf/libtool
+# framework, so run this Makefile separately from and after the normal
+# util-vserver build.
+#
+# Steve Muir <smuir@cs.princeton.edu>
+# Mark Huang <mlhuang@cs.princeton.edu>
+# Copyright (C) 2005 The Trustees of Princeton University
+#
+# $Id$
+#
-PY_MODS := vserver.py cpulimit.py bwlimit.py
-PY_EXT_MODS := vduimpl.so vserverimpl.so
+ALL := vserverimpl.so vduimpl.so util_vserver_vars.py
-all: py-build
+pythonlibdir := @libdir@/python@PYTHON_VERSION@/site-packages
-install: py-install
- ln -s /usr/lib/util-vserver/util-vserver-vars \
- $(INSTALL_ROOT)/usr/lib/python2.3/site-packages/util_vserver_vars.py
+all: $(ALL)
--include pybuild.mk
+%.o: %.c
+ # builds object and incompletely linked library
+ python setup.py build_ext
+ # copy to current directory
+ cp -a build/temp.*/*.o .
-.PHONY: all install
+vserverimpl.so vduimpl.so: %.so: %.o
+ # relink the object against libvserver with libtool
+ ../libtool --tag=CC --mode=link $(CC) -shared -o $@ $< ../lib/libvserver.la
+
+util_vserver_vars.py: ../scripts/util-vserver-vars
+ install -m 644 $< $@
+
+install: $(ALL)
+ # install relinked libraries and byte-compiled scripts
+ python setup.py install --root="$(DESTDIR)"
+ # reinstall libraries with libtool so that the final path
+ # to libvserver is resolved
+ for so in $(filter %.so, $(ALL)) ; do \
+ ../libtool --tag=CC --mode=install install "$$so" `find "$(DESTDIR)" -name "$$so"` ; \
+ done
+
+clean:
+ rm -rf $(ALL) *.o build
+
+.PHONY: all install clean
+++ /dev/null
-# Copyright 2005 Princeton University
-#
-# PY_MODS variable should be list of Python source modules
-# PY_EXT_MODS should be list of Python extension modules (.so) that need
-# to be built
-#
-
-_PY_TMPDIR := .pybuild
-
-# use strip to remove extra whitespace
-_PY_SETUP = $(strip python setup.py \
- $(foreach i,DEFS INCLUDES LIBS PY_MODS PY_EXT_MODS,\
- $(if $(subst undefined,,$(origin $i)),$i="$($i)")))
-
-_PY_BUILD_ARGS := -t $(_PY_TMPDIR) -b $(_PY_TMPDIR)/build
-
-py-build: .pybuild/.prep-done $(PY_MODS) $(PY_EXT_MODS)
-
-.pybuild/.prep-done:
- mkdir build .pybuild
- ln -s ../build .pybuild
- touch $@
-
-$(PY_EXT_MODS): PY_EXT_MODS = $@
-
-$(PY_EXT_MODS): %.so: %.c
- $(_PY_SETUP) build_ext -f $(_PY_BUILD_ARGS)
-
-py-install:
- $(_PY_SETUP) install --root=$(INSTALL_ROOT)
-
-.PHONY: py-build py-install py-clean
#!/usr/bin/python
-
-import re
-import sys
+#
+# Python distutils script for util-vserver Python bindings
+#
+# Steve Muir <smuir@cs.princeton.edu>
+# Mark Huang <mlhuang@cs.princeton.edu>
+#
+# Copyright (C) 2005 The Trustees of Princeton University
+#
+# $Id$
+#
from distutils.core import setup, Extension
-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)
+extension_args = {}
+extension_args['extra_compile_args'] = ['-Wall']
+extension_args['include_dirs'] = ['..', '../lib']
+# Link against libvserver with libtool later
+#extension_args['library_dirs'] = ['../lib']
+#extension_args['libraries'] = ['vserver']
- (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", "")))
+modules = ['util_vserver_vars', 'vserver', 'cpulimit', 'bwlimit']
+extensions = [Extension('vduimpl', ['vduimpl.c'], **extension_args),
+ Extension('vserverimpl', ['vserverimpl.c'], **extension_args)]
- setup(py_modules = modules, ext_modules = extensions)
+setup(py_modules = modules, ext_modules = extensions)