diff --git a/setup.py b/setup.py index 6f4b0ca5..06e89cd0 100644 --- a/setup.py +++ b/setup.py @@ -4,18 +4,42 @@ import os import setuptools +import setuptools.command.install # 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(): + yield 'qrexec-policy', 'qubespolicy.cli' + yield 'qrexec-policy-agent', 'qubespolicy.agent' + yield 'qrexec-policy-graph', 'qubespolicy.graph' 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) + yield basename.replace('_', '-'), 'qubes.tools.{}'.format(basename) +# create simple scripts that run much faster than "console entry points" +class CustomInstall(setuptools.command.install.install): + def run(self): + bin = os.path.join(self.root, "usr/bin") + try: + os.makedirs(bin) + except: + pass + for file, pkg in get_console_scripts(): + path = os.path.join(bin, file) + with open(path, "w") as f: + f.write( +"""#!/usr/bin/python3 +from {} import main +import sys +if __name__ == '__main__': + sys.exit(main()) +""".format(pkg)) + + os.chmod(path, 0o755) + setuptools.command.install.install.run(self) if __name__ == '__main__': setuptools.setup( @@ -30,12 +54,10 @@ if __name__ == '__main__': package_data = { 'qubespolicy': ['glade/*.glade'], }, + cmdclass={ + 'install': CustomInstall, + }, entry_points={ - 'console_scripts': list(get_console_scripts()) + [ - 'qrexec-policy = qubespolicy.cli:main', - 'qrexec-policy-agent = qubespolicy.agent:main', - 'qrexec-policy-graph = qubespolicy.graph:main', - ], 'qubes.vm': [ 'AppVM = qubes.vm.appvm:AppVM', 'TemplateVM = qubes.vm.templatevm:TemplateVM',