diff --git a/docs/changes.rst b/docs/changes.rst index ee1ea5d7..3ad5b2e1 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -4,6 +4,15 @@ Changes This change log is used to track all major changes to Mopidy. +v0.14.0 (UNRELEASED) +==================== + +**Dependencies** + +- setuptools or distribute is now required. We've introduced this dependency to + use setuptools' entry points functionality to find installed Mopidy + extensions. + v0.13.0 (2013-03-31) ==================== diff --git a/requirements/core.txt b/requirements/core.txt index 9ffac2cf..d8e81e61 100644 --- a/requirements/core.txt +++ b/requirements/core.txt @@ -1,2 +1,5 @@ +setuptools +# Available as python-setuptools in Debian/Ubuntu + Pykka >= 1.1 # Available as python-pykka from apt.mopidy.com diff --git a/setup.py b/setup.py index 5840ca53..1c0d10b8 100644 --- a/setup.py +++ b/setup.py @@ -1,101 +1,47 @@ -""" -Most of this file is taken from the Django project, which is BSD licensed. -""" - from __future__ import unicode_literals -from distutils.core import setup -from distutils.command.install_data import install_data -from distutils.command.install import INSTALL_SCHEMES -import os import re -import sys + +from setuptools import setup, find_packages -def get_version(): - init_py = open('mopidy/__init__.py').read() +def get_version(filename): + init_py = open(filename).read() metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) return metadata['version'] -class osx_install_data(install_data): - # On MacOS, the platform-specific lib dir is - # /System/Library/Framework/Python/.../ which is wrong. Python 2.5 supplied - # with MacOS 10.5 has an Apple-specific fix for this in - # distutils.command.install_data#306. It fixes install_lib but not - # install_data, which is why we roll our own install_data class. - - def finalize_options(self): - # By the time finalize_options is called, install.install_lib is set to - # the fixed directory, so we set the installdir to install_lib. The - # install_data class uses ('install_data', 'install_dir') instead. - self.set_undefined_options('install', ('install_lib', 'install_dir')) - install_data.finalize_options(self) - - -if sys.platform == "darwin": - cmdclasses = {'install_data': osx_install_data} -else: - cmdclasses = {'install_data': install_data} - - -def fullsplit(path, result=None): - """ - Split a pathname into components (the opposite of os.path.join) in a - platform-neutral way. - """ - if result is None: - result = [] - head, tail = os.path.split(path) - if head == '': - return [tail] + result - if head == path: - return result - return fullsplit(head, [tail] + result) - - -# Tell distutils to put the data_files in platform-specific installation -# locations. See here for an explanation: -# http://groups.google.com/group/comp.lang.python/browse_thread/ -# thread/35ec7b2fed36eaec/2105ee4d9e8042cb -for scheme in INSTALL_SCHEMES.values(): - scheme['data'] = scheme['purelib'] - - -# Compile the list of packages available, because distutils doesn't have -# an easy way to do this. -packages, data_files = [], [] -root_dir = os.path.dirname(__file__) -if root_dir != b'': - os.chdir(root_dir) -project_dir = b'mopidy' - -for dirpath, dirnames, filenames in os.walk(project_dir): - # Ignore dirnames that start with '.' - for i, dirname in enumerate(dirnames): - if dirname.startswith(b'.'): - del dirnames[i] - if b'__init__.py' in filenames: - packages.append(b'.'.join(fullsplit(dirpath))) - elif filenames: - data_files.append([ - dirpath, [os.path.join(dirpath, f) for f in filenames]]) - - setup( name='Mopidy', - version=get_version(), - author='Stein Magnus Jodal', - author_email='stein.magnus@jodal.no', - packages=packages, - package_data={b'mopidy': ['backends/spotify/spotify_appkey.key']}, - cmdclass=cmdclasses, - data_files=data_files, - scripts=['bin/mopidy', 'bin/mopidy-scan'], + version=get_version('mopidy/__init__.py'), url='http://www.mopidy.com/', license='Apache License, Version 2.0', + author='Stein Magnus Jodal', + author_email='stein.magnus@jodal.no', description='Music server with MPD and Spotify support', long_description=open('README.rst').read(), + packages=find_packages(exclude=['tests', 'tests.*']), + zip_safe=False, + include_package_data=True, + install_requires=[ + 'setuptools', + 'Pykka >= 1.1', + ], + extras_require={ + b'spotify': ['pyspotify >= 1.9, < 1.11'], + b'lastfm': ['pylast >= 0.5.7'], + b'http': ['cherrypy >= 3.2.2', 'ws4py >= 0.2.3'], + b'external_mixers': ['pyserial'], + }, + test_suite='nose.collector', + tests_require=[ + 'nose', + 'mock >= 0.7', + 'unittest2', + ], + entry_points={ + b'mopidy.extension': [], + }, classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: No Input/Output (Daemon)',