diff options
Diffstat (limited to 'setup.py')
-rw-r--r-- | setup.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..0a105dc --- /dev/null +++ b/setup.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8:noet +from __future__ import (unicode_literals, division, absolute_import, print_function) + +import os +import sys +import logging +import shlex +import subprocess + +from setuptools import setup, find_packages + +from powerline.version import get_version + +CURRENT_DIR = os.path.abspath(os.path.dirname(__file__)) +try: + README = open(os.path.join(CURRENT_DIR, 'README.rst'), 'rb').read().decode('utf-8') +except IOError: + README = '' + +OLD_PYTHON = sys.version_info < (2, 7) + + +def compile_client(): + '''Compile the C powerline-client script.''' + + if hasattr(sys, 'getwindowsversion'): + raise NotImplementedError() + else: + from distutils.ccompiler import new_compiler + compiler = new_compiler().compiler + cflags = os.environ.get('CFLAGS', str('-O3')) + # A normal split would do a split on each space which might be incorrect. The + # shlex will not split if a space occurs in an arguments value. + subprocess.check_call(compiler + shlex.split(cflags) + ['client/powerline.c', '-o', 'scripts/powerline']) + +try: + compile_client() +except Exception as e: + print('Compiling C version of powerline-client failed') + logging.exception(e) + # FIXME Catch more specific exceptions + import shutil + if hasattr(shutil, 'which'): + which = shutil.which + else: + sys.path.append(CURRENT_DIR) + from powerline.lib.shell import which + can_use_scripts = True + if which('socat') and which('sed') and which('sh'): + print('Using powerline.sh script instead of C version (requires socat, sed and sh)') + shutil.copyfile('client/powerline.sh', 'scripts/powerline') + else: + print('Using powerline.py script instead of C version') + shutil.copyfile('client/powerline.py', 'scripts/powerline') +else: + can_use_scripts = False + +setup( + name='powerline-status', + version=get_version(), + description='The ultimate statusline/prompt utility.', + long_description=README, + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Environment :: Plugins', + 'Intended Audience :: End Users/Desktop', + 'License :: OSI Approved :: MIT License', + 'Natural Language :: English', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + ], + download_url='https://github.com/powerline/powerline/archive/develop.zip', + author='Kim Silkebaekken', + author_email='kim.silkebaekken+vim@gmail.com', + url='https://github.com/powerline/powerline', + license='MIT', + # XXX Python 3 doesn’t allow compiled C files to be included in the scripts + # list below. This is because Python 3 distutils tries to decode the file to + # ASCII, and fails when powerline-client is a binary. + # + # XXX Python 2 fucks up script contents*. Not using it to install scripts + # any longer. + # * Consider the following input: + # % alias hex1=$'hexdump -e \'"" 1/1 "%02X\n"\'' + # % diff <(hex1 ./scripts/powerline) <(hex1 ~/.local/bin/powerline) + # This will show output like + # 375c375 + # < 0D + # --- + # > 0A + # (repeated, with diff segment header numbers growing up). + # + # FIXME Current solution does not work with `pip install -e`. Still better + # then solution that is not working at all. + scripts=[ + 'scripts/powerline-lint', + 'scripts/powerline-daemon', + 'scripts/powerline-render', + 'scripts/powerline-config', + ] + (['scripts/powerline'] if can_use_scripts else []), + data_files=(None if can_use_scripts else (('bin', ['scripts/powerline']),)), + keywords='', + packages=find_packages(exclude=('tests', 'tests.*')), + include_package_data=True, + zip_safe=False, + install_requires=['argparse'] if OLD_PYTHON else [], + extras_require={ + 'docs': [ + 'Sphinx', + 'sphinx_rtd_theme', + ], + }, + test_suite='tests' if not OLD_PYTHON else None, +) |