build: setup.py
authorFrédéric Péters <fpeters@0d.be>
Thu, 28 May 2020 15:36:46 +0000 (17:36 +0200)
committerFrédéric Péters <fpeters@0d.be>
Thu, 28 May 2020 15:41:14 +0000 (17:41 +0200)
setup.py

index e94e158..13fec65 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -1,26 +1,93 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
+#! /usr/bin/env python3
 
-try:
-    from setuptools import setup
-except ImportError:
-    from ez_setup import use_setuptools
-    use_setuptools()
-    from setuptools import setup
+import os
+import subprocess
+import sys
+
+from setuptools.command.install_lib import install_lib as _install_lib
+from distutils.command.build import build as _build
+from distutils.command.sdist import sdist as _sdist
+from distutils.cmd import Command
+from setuptools import setup, find_packages
+
+
+class sdist(_sdist):
+    def run(self):
+        if os.path.exists('VERSION'):
+            os.remove('VERSION')
+        version = get_version()
+        with open('VERSION', 'w') as fd:
+            fd.write(version)
+        _sdist.run(self)
+        if os.path.exists('VERSION'):
+            os.remove('VERSION')
+
+
+def get_version():
+    if os.path.exists('VERSION'):
+        with open('VERSION', 'r') as v:
+            return v.read()
+    if os.path.exists('.git'):
+        p = subprocess.Popen(['git', 'describe', '--dirty=.dirty', '--match=v*'],
+                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        result = p.communicate()[0]
+        if p.returncode == 0:
+            result = result.decode('ascii').strip()[1:]  # strip spaces/newlines and initial v
+            if '-' in result:  # not a tagged version
+                real_number, commit_count, commit_hash = result.split('-', 2)
+                version = '%s.post%s+%s' % (real_number, commit_count, commit_hash)
+            else:
+                version = result
+            return version
+        else:
+            return '0.0.post%s' % len(
+                    subprocess.check_output(
+                            ['git', 'rev-list', 'HEAD']).splitlines())
+    return '0.0'
+
+
+class compile_translations(Command):
+    description = 'compile message catalogs to MO files via django compilemessages'
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        try:
+            from django.core.management import call_command
+            for path, dirs, files in os.walk('combo_plugin_gnm'):
+                if 'locale' not in dirs:
+                    continue
+                curdir = os.getcwd()
+                os.chdir(os.path.realpath(path))
+                call_command('compilemessages')
+                os.chdir(curdir)
+        except ImportError:
+            sys.stderr.write('!!! Please install Django to build translations\n')
+
+
+class build(_build):
+    sub_commands = [('compile_translations', None)] + _build.sub_commands
+
+
+class install_lib(_install_lib):
+    def run(self):
+        self.run_command('compile_translations')
+        _install_lib.run(self)
 
 
 setup(
     name='panikombo',
-    version='0.1',
+    version=get_version(),
     description='Combo extensions for Radio Panik',
     author='Frederic Peters',
     author_email='fred@radiopanik.org',
-    packages=[
-        'panikombo',
-        'panikombo.migrations',
-        'gallery',
-        'gallery.migrations',
-    ],
+    packages=find_packages(),
+    include_package_data=True,
     classifiers=[
         'Development Status :: 4 - Beta',
         'Environment :: Web Environment',
@@ -34,4 +101,10 @@ setup(
         'Topic :: Multimedia :: Sound/Audio',
     ],
     zip_safe=False,
+    cmdclass={
+        'build': build,
+        'compile_translations': compile_translations,
+        'install_lib': install_lib,
+        'sdist': sdist,
+    }
 )