From 6f4951d08a385220915aa036a86fbe49d4b15e5b Mon Sep 17 00:00:00 2001 From: Wojtek Porczyk Date: Mon, 28 Sep 2015 17:44:59 +0200 Subject: [PATCH] install python package with setuptools --- Makefile | 5 +- qubes/Makefile | 83 ------------------------------ qubes/qdb.py | 5 -- qubes/vm/qubesvm.py | 2 +- qvm-tools/Makefile | 14 ----- rpm_spec/core-dom0.spec | 111 +++++++++++++++++++++------------------- setup.py | 33 ++++++++++++ 7 files changed, 94 insertions(+), 159 deletions(-) delete mode 100644 qubes/Makefile delete mode 100644 qubes/qdb.py delete mode 100644 qvm-tools/Makefile create mode 100644 setup.py diff --git a/Makefile b/Makefile index c56eae51..ac389f2a 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ clean: make -C qmemman clean all: - make all -C qubes + python setup.py build # make all -C tests # Currently supported only on xen ifeq ($(BACKEND_VMM),xen) @@ -58,8 +58,7 @@ ifeq ($(OS),Linux) $(MAKE) install -C linux/aux-tools $(MAKE) install -C linux/system-config endif - $(MAKE) install -C qvm-tools - $(MAKE) install -C qubes + python setup.py install -O1 --skip-build --root $(DESTDIR) # $(MAKE) install -C tests $(MAKE) install -C relaxng ifeq ($(BACKEND_VMM),xen) diff --git a/qubes/Makefile b/qubes/Makefile deleted file mode 100644 index 18b6e71b..00000000 --- a/qubes/Makefile +++ /dev/null @@ -1,83 +0,0 @@ -OS ?= Linux - -PYTHON_QUBESPATH = $(PYTHON_SITEPATH)/qubes -SETTINGS_SUFFIX = $(BACKEND_VMM)-$(OS) - -all: - python -m compileall . - python -O -m compileall . - -install: -ifndef PYTHON_SITEPATH - $(error PYTHON_SITEPATH not defined) -endif - mkdir -p $(DESTDIR)$(PYTHON_QUBESPATH) - mkdir \ - $(DESTDIR)$(PYTHON_QUBESPATH)/vm \ - $(DESTDIR)$(PYTHON_QUBESPATH)/storage \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tools \ - $(DESTDIR)$(PYTHON_QUBESPATH)/ext \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tests \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tests/vm \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tests/tools - - cp \ - __init__.py* \ - _pluginloader.py* \ - config.py* \ - dochelpers.py* \ - events.py* \ - log.py* \ - plugins.py* \ - rngdoc.py* \ - utils.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH) - - cp \ - vm/__init__.py* \ - vm/adminvm.py* \ - vm/appvm.py* \ - vm/dispvm.py* \ - vm/hvm.py* \ - vm/netvm.py* \ - vm/proxyvm.py* \ - vm/qubesvm.py* \ - vm/templatehvm.py* \ - vm/templatevm.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH)/vm - - cp \ - storage/__init__.py* \ - storage/xen.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH)/storage - - cp \ - tools/__init__.py* \ - tools/qubes_create.py* \ - tools/qvm_create.py* \ - tools/qvm_ls.py* \ - tools/qvm_prefs.py* \ - tools/qvm_start.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tools - - cp ext/__init__.py* $(DESTDIR)$(PYTHON_QUBESPATH)/ext - - cp \ - tests/__init__.py* \ - tests/events.py* \ - tests/init.py* \ - tests/run.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tests - - cp \ - tests/vm/__init__.py* \ - tests/vm/init.py* \ - tests/vm/adminvm.py* \ - tests/vm/qubesvm.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tests/vm - - cp \ - tests/tools/__init__.py* \ - tests/tools/init.py* \ - tests/tools/qvm_ls.py* \ - $(DESTDIR)$(PYTHON_QUBESPATH)/tests/tools diff --git a/qubes/qdb.py b/qubes/qdb.py deleted file mode 100644 index 929ca4d1..00000000 --- a/qubes/qdb.py +++ /dev/null @@ -1,5 +0,0 @@ -# This is mock file, not installed. It is needed. because pylint needs to -# import all the modules, and qubes.qbd is one of them. - -def QubesDB(dummy): - return None diff --git a/qubes/vm/qubesvm.py b/qubes/vm/qubesvm.py index 2852c7d8..f1cad69c 100644 --- a/qubes/vm/qubesvm.py +++ b/qubes/vm/qubesvm.py @@ -42,7 +42,6 @@ import libvirt import qubes import qubes.config -import qubes.qdb #import qubes.qmemman #import qubes.qmemman_algo import qubes.storage @@ -339,6 +338,7 @@ class QubesVM(qubes.vm.BaseVM): '''QubesDB handle for this domain.''' if self._qdb_connection is None: if self.is_running(): + import qubes.qdb self._qdb_connection = qubes.qdb.QubesDB(self.name) return self._qdb_connection diff --git a/qvm-tools/Makefile b/qvm-tools/Makefile deleted file mode 100644 index 64da0b2e..00000000 --- a/qvm-tools/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -BINDIR ?= /usr/bin -ifeq ($(OS),Windows_NT) -PYTHONEXEEXT = .py -endif - -all: - true - -install: - mkdir -p $(DESTDIR)$(BINDIR) - for f in qvm-* qubes-*; do \ - cp $$f $(DESTDIR)$(BINDIR)/$$f$(PYTHONEXEEXT); \ - done - diff --git a/rpm_spec/core-dom0.spec b/rpm_spec/core-dom0.spec index 32c80b8d..c8e52ae5 100644 --- a/rpm_spec/core-dom0.spec +++ b/rpm_spec/core-dom0.spec @@ -23,7 +23,7 @@ # # -%{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} +#%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(False)")} %{!?version: %define version %(cat version)} @@ -53,6 +53,7 @@ Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units Requires: python, pciutils, python-inotify, python-daemon +Requires: python-setuptools Requires: qubes-core-dom0-linux >= 2.0.24 Requires: qubes-db-dom0 Requires: python-lxml @@ -75,6 +76,7 @@ Requires: PyQt4 # for property's docstrings Requires: python-docutils + # Prevent preupgrade from installation (it pretend to provide distribution upgrade) Obsoletes: preupgrade < 2.0 Provides: preupgrade = 2.0 @@ -99,7 +101,7 @@ make all make install \ DESTDIR=$RPM_BUILD_ROOT \ UNITDIR=%{_unitdir} \ - PYTHON_SITEPATH=%{python_sitearch} \ + PYTHON_SITEPATH=%{python_sitelib} \ SYSCONFDIR=%{_sysconfdir} %post @@ -187,67 +189,70 @@ fi /usr/bin/qvm-* /usr/bin/qubes-* -%dir %{python_sitearch}/qubes -%{python_sitearch}/qubes/__init__.py* -%{python_sitearch}/qubes/_pluginloader.py* -%{python_sitearch}/qubes/config.py* -%{python_sitearch}/qubes/dochelpers.py* -%{python_sitearch}/qubes/events.py* -%{python_sitearch}/qubes/log.py* -%{python_sitearch}/qubes/plugins.py* -%{python_sitearch}/qubes/rngdoc.py* -%{python_sitearch}/qubes/utils.py* +%dir %{python_sitelib}/qubes-*.egg-info +%{python_sitelib}/qubes-*.egg-info/* -%dir %{python_sitearch}/qubes/vm -%{python_sitearch}/qubes/vm/__init__.py* -%{python_sitearch}/qubes/vm/adminvm.py* -%{python_sitearch}/qubes/vm/appvm.py* -%{python_sitearch}/qubes/vm/dispvm.py* -%{python_sitearch}/qubes/vm/hvm.py* -%{python_sitearch}/qubes/vm/netvm.py* -%{python_sitearch}/qubes/vm/proxyvm.py* -%{python_sitearch}/qubes/vm/qubesvm.py* -%{python_sitearch}/qubes/vm/templatehvm.py* -%{python_sitearch}/qubes/vm/templatevm.py* +%dir %{python_sitelib}/qubes +%{python_sitelib}/qubes/__init__.py* +%{python_sitelib}/qubes/_pluginloader.py* +%{python_sitelib}/qubes/config.py* +%{python_sitelib}/qubes/dochelpers.py* +%{python_sitelib}/qubes/events.py* +%{python_sitelib}/qubes/log.py* +%{python_sitelib}/qubes/plugins.py* +%{python_sitelib}/qubes/rngdoc.py* +%{python_sitelib}/qubes/utils.py* -%dir %{python_sitearch}/qubes/storage -%{python_sitearch}/qubes/storage/__init__.py* -%{python_sitearch}/qubes/storage/xen.py* +%dir %{python_sitelib}/qubes/vm +%{python_sitelib}/qubes/vm/__init__.py* +%{python_sitelib}/qubes/vm/adminvm.py* +%{python_sitelib}/qubes/vm/appvm.py* +%{python_sitelib}/qubes/vm/dispvm.py* +%{python_sitelib}/qubes/vm/hvm.py* +%{python_sitelib}/qubes/vm/netvm.py* +%{python_sitelib}/qubes/vm/proxyvm.py* +%{python_sitelib}/qubes/vm/qubesvm.py* +%{python_sitelib}/qubes/vm/templatehvm.py* +%{python_sitelib}/qubes/vm/templatevm.py* -%dir %{python_sitearch}/qubes/tools -%{python_sitearch}/qubes/tools/__init__.py* -%{python_sitearch}/qubes/tools/qubes_create.py* -%{python_sitearch}/qubes/tools/qvm_create.py* -%{python_sitearch}/qubes/tools/qvm_ls.py* -%{python_sitearch}/qubes/tools/qvm_prefs.py* -%{python_sitearch}/qubes/tools/qvm_start.py* +%dir %{python_sitelib}/qubes/storage +%{python_sitelib}/qubes/storage/__init__.py* +%{python_sitelib}/qubes/storage/xen.py* -%dir %{python_sitearch}/qubes/ext -%{python_sitearch}/qubes/ext/__init__.py* +%dir %{python_sitelib}/qubes/tools +%{python_sitelib}/qubes/tools/__init__.py* +%{python_sitelib}/qubes/tools/qubes_create.py* +%{python_sitelib}/qubes/tools/qvm_create.py* +%{python_sitelib}/qubes/tools/qvm_ls.py* +%{python_sitelib}/qubes/tools/qvm_prefs.py* +%{python_sitelib}/qubes/tools/qvm_start.py* -%dir %{python_sitearch}/qubes/tests -%{python_sitearch}/qubes/tests/__init__.py* -%{python_sitearch}/qubes/tests/run.py* +%dir %{python_sitelib}/qubes/ext +%{python_sitelib}/qubes/ext/__init__.py* -%{python_sitearch}/qubes/tests/events.py* -%{python_sitearch}/qubes/tests/init.py* +%dir %{python_sitelib}/qubes/tests +%{python_sitelib}/qubes/tests/__init__.py* +%{python_sitelib}/qubes/tests/run.py* -%dir %{python_sitearch}/qubes/tests/vm -%{python_sitearch}/qubes/tests/vm/__init__.py* -%{python_sitearch}/qubes/tests/vm/init.py* -%{python_sitearch}/qubes/tests/vm/adminvm.py* -%{python_sitearch}/qubes/tests/vm/qubesvm.py* +%{python_sitelib}/qubes/tests/events.py* +%{python_sitelib}/qubes/tests/init.py* -%dir %{python_sitearch}/qubes/tests/tools -%{python_sitearch}/qubes/tests/tools/__init__.py* -%{python_sitearch}/qubes/tests/tools/init.py* -%{python_sitearch}/qubes/tests/tools/qvm_ls.py* +%dir %{python_sitelib}/qubes/tests/vm +%{python_sitelib}/qubes/tests/vm/__init__.py* +%{python_sitelib}/qubes/tests/vm/init.py* +%{python_sitelib}/qubes/tests/vm/adminvm.py* +%{python_sitelib}/qubes/tests/vm/qubesvm.py* + +%dir %{python_sitelib}/qubes/tests/tools +%{python_sitelib}/qubes/tests/tools/__init__.py* +%{python_sitelib}/qubes/tests/tools/init.py* +%{python_sitelib}/qubes/tests/tools/qvm_ls.py* # qmemman -%{python_sitearch}/qubes/qmemman.py* -%{python_sitearch}/qubes/qmemman_algo.py* -%{python_sitearch}/qubes/qmemman_client.py* -%{python_sitearch}/qubes/qmemman_server.py* +%{python_sitelib}/qubes/qmemman.py* +%{python_sitelib}/qubes/qmemman_algo.py* +%{python_sitelib}/qubes/qmemman_client.py* +%{python_sitelib}/qubes/qmemman_server.py* /usr/lib/qubes/unbind-pci-device.sh /usr/lib/qubes/cleanup-dispvms diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..8905c76b --- /dev/null +++ b/setup.py @@ -0,0 +1,33 @@ +#!/usr/bin/python2 -O +# vim: fileencoding=utf-8 + +import glob +import os +import setuptools + +# don't import: import * is unreliable and there is no need, since this is +# compile time and we have source files +def get_console_scripts(): + for filename in os.listdir('./qubes/tools'): + basename, ext = os.path.splitext(os.path.basename(filename)) + if basename == '__init__' or ext != '.py': + continue + yield '{} = qubes.tools.{}:main'.format( + basename.replace('_', '-'), basename) + +if __name__ == '__main__': + setuptools.setup( + name='qubes', + version=open('version').read().strip(), + author='Invisible Things Lab', + author_email='woju@invisiblethingslab.com', + description='Qubes core package', + license='GPL2+', + url='https://www.qubes-os.org/', + + packages=setuptools.find_packages(exclude=('core*', 'tests')), + + entry_points={ + 'console_scripts': list(get_console_scripts()), + } + )