From: Daniel Miranda Date: Mon, 25 Aug 2014 21:16:43 +0000 (-0300) Subject: build: Make setup.py run from srcdir to avoid distutils errors X-Git-Tag: lxc-1.1.0.alpha2~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4eddfef90c41595905ff45a92ca6e9e954d279b;p=thirdparty%2Flxc.git build: Make setup.py run from srcdir to avoid distutils errors distutils can't handle paths to source files containing '..'. It will try to navigate away from the build directory and fail. To fix that, before building the python module, transform all the path variables then cd to the srcdir, and set the build directory manually. This is hopefully the last needed fix to use separate build and source diretories. Signed-off-by: Daniel Miranda Acked-by: Stéphane Graber --- diff --git a/src/python-lxc/setup.py.in b/src/python-lxc/setup.py.in index 31e849c16..3b4b1feec 100644 --- a/src/python-lxc/setup.py.in +++ b/src/python-lxc/setup.py.in @@ -22,15 +22,36 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 # USA +import os, os.path from distutils.core import setup, Extension -module = Extension('_lxc', sources=['@srcdir@/lxc.c'], - include_dirs=['@top_builddir@/src', '@top_srcdir@/src'], - library_dirs=['@top_builddir@/src/lxc'], libraries=['lxc']) +# Distutils doesn't cope well with source files that have relative paths going +# up in the directory tree: it tries to navigate outside of the build dir and +# fails miserably. Therefore, we will instead cd to the source directory, +# run this script from there, but write the build products to the correct path. +# +# Since we will be changing directories before building, we must transform +# all the path variables to their forms relative to srcdir. + +srcdir, builddir, top_srcdir, top_builddir = map(os.path.abspath, + ["@srcdir@", "@builddir@", "@top_srcdir@", "@top_builddir@"]) + +builddir, top_srcdir, top_builddir = map(lambda d: os.path.relpath(d, srcdir), + [builddir, top_srcdir, top_builddir]) + +os.chdir(srcdir) + +module = Extension('_lxc', sources=['lxc.c'], + include_dirs=[os.path.join(top_srcdir, 'src'), + os.path.join(top_builddir, 'src')], + library_dirs=[os.path.join(top_builddir, 'src/lxc')], + libraries=['lxc']) + setup(name='_lxc', version='0.1', description='LXC', packages=['lxc'], - package_dir={'lxc': '@srcdir@/lxc'}, - ext_modules=[module]) + package_dir={'lxc': 'lxc'}, + ext_modules=[module], + options={'build': {'build_base': os.path.join(builddir, 'build')}})