Commit f3116a83 by Daniel Miranda Committed by Stéphane Graber

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: 's avatarDaniel Miranda <danielkza2@gmail.com> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent ff117dab
......@@ -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')}})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment