chiark / gitweb /
Merge branch 'master' into 'master'
[fdroidserver.git] / setup.py
old mode 100644 (file)
new mode 100755 (executable)
index a98fe26..f50c4d8
--- a/setup.py
+++ b/setup.py
-#!/usr/bin/env python2
+#!/usr/bin/env python3
 
+from setuptools import Command
 from setuptools import setup
+import os
+import re
+import shutil
 import sys
 
-# workaround issue on OSX, where sys.prefix is not an installable location
-if sys.platform == 'darwin' and sys.prefix.startswith('/System'):
-    data_prefix = '.'
+
+class VersionCheckCommand(Command):
+    """Make sure git tag and version match before uploading"""
+    user_options = []
+
+    def initialize_options(self):
+        """Abstract method that is required to be overwritten"""
+
+    def finalize_options(self):
+        """Abstract method that is required to be overwritten"""
+
+    def run(self):
+        version = self.distribution.get_version()
+        version_git = subprocess.check_output(['git', 'describe', '--tags', '--always']).rstrip().decode('utf-8')
+        if version != version_git:
+            print('ERROR: Release version mismatch! setup.py (%s) does not match git (%s)'
+                  % (version, version_git))
+            sys.exit(1)
+        print('Upload using: twine upload dist/fdroidserver*.tar.gz*')
+
+
+def get_data_files():
+    # workaround issue on OSX or --user installs, where sys.prefix is not an installable location
+    if os.access(sys.prefix, os.W_OK | os.X_OK):
+        data_prefix = sys.prefix
+    else:
+        data_prefix = '.'
+
+    data_files = []
+    with open('MANIFEST.in') as fp:
+        data = fp.read()
+
+    data_files.append((data_prefix + '/share/doc/fdroidserver/examples',
+                       ['buildserver/config.buildserver.py', ]
+                       + re.findall(r'include (examples/.*)', data)))
+
+    for f in re.findall(r'include (locale/[a-z][a-z][a-zA-Z_]*/LC_MESSAGES/fdroidserver.mo)', data):
+        d = os.path.join(data_prefix, 'share', os.path.dirname(f))
+        data_files.append((d, [f, ]))
+    return data_files
+
+
+# PyPI accepts reST not Markdown
+if os.path.exists('README.md'):
+    if shutil.which('pandoc'):
+        print('Using reST README')
+        import subprocess
+        subprocess.check_call(['pandoc', '--from=markdown', '--to=rst', 'README.md',
+                               '--output=README.rst'], universal_newlines=True)
+        with open('README.rst') as fp:
+            readme = fp.read()
+    else:
+        print('Using Markdown README')
+        with open('README.md') as fp:
+            readme = fp.read()
 else:
-    data_prefix = sys.prefix
+    readme = ''
 
 setup(name='fdroidserver',
-      version='0.4.0',
+      version='1.0.3',
       description='F-Droid Server Tools',
-      long_description=open('README.md').read(),
+      long_description=readme,
       author='The F-Droid Project',
       author_email='team@f-droid.org',
       url='https://f-droid.org',
-      packages=['fdroidserver'],
-      scripts=['fdroid', 'fd-commit'],
-      data_files=[
-          (data_prefix + '/share/doc/fdroidserver/examples',
-              ['buildserver/config.buildserver.py',
-                  'examples/config.py',
-                  'examples/makebs.config.py',
-                  'examples/opensc-fdroid.cfg',
-                  'examples/fdroid-icon.png']),
+      license='AGPL-3.0',
+      packages=['fdroidserver', 'fdroidserver.asynchronousfilereader'],
+      scripts=['fdroid', 'makebuildserver'],
+      data_files=get_data_files(),
+      python_requires='>=3.4',
+      cmdclass={'versioncheck': VersionCheckCommand},
+      setup_requires=[
+          'babel',
       ],
-      install_requires=[  # should include 'python-magic' but its not strictly required
+      install_requires=[
+          'clint',
+          'GitPython',
           'mwclient',
           'paramiko',
           'Pillow',
           'apache-libcloud >= 0.14.1',
           'pyasn1',
           'pyasn1-modules',
+          'python-vagrant',
           'PyYAML',
-          'requests',
+          'qrcode',
+          'ruamel.yaml >= 0.13',
+          'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0',
+          'docker-py >= 1.9, < 2.0',
       ],
       classifiers=[
-          'Development Status :: 3 - Alpha',
+          'Development Status :: 4 - Beta',
           'Intended Audience :: Developers',
-          'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
+          'Intended Audience :: Information Technology',
+          'Intended Audience :: System Administrators',
+          'Intended Audience :: Telecommunications Industry',
+          'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
           'Operating System :: POSIX',
+          'Operating System :: MacOS :: MacOS X',
+          'Operating System :: Unix',
           'Topic :: Utilities',
       ],
       )