summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2022-03-23 11:12:30 +0000
committerDaniel P. Berrangé <berrange@redhat.com>2022-04-21 12:34:06 +0100
commitc230ecb483dae3d0ff4cebfeec5a9e96ef8e0e4c (patch)
tree127a8393bfd1c95d4fb3b0a0a926c5bbbb6e8df6 /setup.py
parent88067eda52c3ad38a10ef96fb064f96dea01a374 (diff)
downloadlibvirt-python-c230ecb483dae3d0ff4cebfeec5a9e96ef8e0e4c.tar.gz
setup: override 'build_ext' / 'build_py' commands rather than 'build'
We override the 'build' command to invoke the code generator before the extensions are compiled. The 'build' command, however, is merely a wrapper around several other commands. It is possible for the user to directly invoke those commands, in which case our code generator won't get a chance to run: $ python setup.py build_ext running build_ext building 'libvirtmod' extension creating build/temp.linux-x86_64-3.10 creating build/temp.linux-x86_64-3.10/build gcc ..snip... -c build/libvirt.c -o build/temp.linux-x86_64-3.10/build/libvirt.o cc1: fatal error: build/libvirt.c: No such file or directory compilation terminated. error: command '/usr/lib64/ccache/gcc' failed with exit code 1 To solve this we instead override 'build_ext' and 'build_py'. This in turn means we call the generator to emit C code separately from Python code. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'setup.py')
-rwxr-xr-xsetup.py29
1 files changed, 22 insertions, 7 deletions
diff --git a/setup.py b/setup.py
index d407532..941acf1 100755
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,8 @@
#!/usr/bin/env python3
from distutils.core import setup, Extension, Command
-from distutils.command.build import build
+from distutils.command.build_ext import build_ext
+from distutils.command.build_py import build_py
from distutils.command.sdist import sdist
from distutils.util import get_platform
@@ -132,19 +133,32 @@ def get_module_lists():
# Custom commands #
###################
-class my_build(build):
+class my_build_ext(build_ext):
def run(self):
check_minimum_libvirt_version()
apis = get_api_xml_files()
- subprocess.check_call([sys.executable, "generator.py", "libvirt", apis[0]])
- subprocess.check_call([sys.executable, "generator.py", "libvirt-qemu", apis[1]])
+ subprocess.check_call([sys.executable, "generator.py", "libvirt", apis[0], "c"])
+ subprocess.check_call([sys.executable, "generator.py", "libvirt-qemu", apis[1], "c"])
if have_libvirt_lxc():
- subprocess.check_call([sys.executable, "generator.py", "libvirt-lxc", apis[2]])
+ subprocess.check_call([sys.executable, "generator.py", "libvirt-lxc", apis[2], "c"])
+
+ build_ext.run(self)
+
+class my_build_py(build_py):
+
+ def run(self):
+ check_minimum_libvirt_version()
+ apis = get_api_xml_files()
+
+ subprocess.check_call([sys.executable, "generator.py", "libvirt", apis[0], "py"])
+ subprocess.check_call([sys.executable, "generator.py", "libvirt-qemu", apis[1], "py"])
+ if have_libvirt_lxc():
+ subprocess.check_call([sys.executable, "generator.py", "libvirt-lxc", apis[2], "py"])
shutil.copy('libvirtaio.py', 'build')
- build.run(self)
+ build_py.run(self)
class my_sdist(sdist):
user_options = sdist.user_options
@@ -324,7 +338,8 @@ of recent versions of Linux (and other OSes).''',
'': 'build'
},
cmdclass = {
- 'build': my_build,
+ 'build_ext': my_build_ext,
+ 'build_py': my_build_py,
'clean': my_clean,
'sdist': my_sdist,
'test': my_test