Browse Source

initial setuptools definition

Sven Czarnian 3 years ago
parent
commit
e112ee9694
1 changed files with 70 additions and 0 deletions
  1. 70 0
      aman/setup.py

+ 70 - 0
aman/setup.py

@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import subprocess
+import sys
+from setuptools import setup
+from distutils.command.clean import clean as _clean
+from distutils.command.build_py import build_py_2to3 as _build_py
+
+# @brief Creates Protobuf python files to encode and decode messages
+# @param[in] source The protobuf source file
+def generateProtobuf(source):
+    output = source.replace('.proto', '_pb2.py').replace('../src/protobuf/', '')
+
+    if (not os.path.exists(output) or (os.path.exists(source) and os.path.getmtime(source) > os.path.getmtime(output))):
+        print('Generating %s...' % output)
+
+        if not os.path.exists(source):
+            sys.stderr.write('Cannot find %s' % source)
+            sys.exit(-1)
+
+        if not os.path.exists('../external/bin/protoc.exe'):
+            sys.stderr.write('Cannot find proto-compiler')
+            sys.exit(-1)
+
+        command = [ '../external/bin/protoc.exe', '-I../src/protobuf/', '-I.', '--python_out=.', source]
+        if 0 != subprocess.call(command):
+            sys.exit(-1)
+
+# @brief Cleans up all auto-generated files and folders
+# @param[in] _clean Instance of setuptools to clean up the system
+class clean(_clean):
+    def run(self):
+        for (dirpath, dirnames, filenames) in os.walk('.'):
+            for filename in filenames:
+                filepath = os.path.join(dirpath, filename)
+                if filepath.endswith('_pb2.py') or filepath.endswith('.pyc'):
+                    os.remove(filepath)
+            for dirname in dirnames:
+                if 'Arrival_MANager.egg-info' == dirname:
+                    shutil.rmtree(os.path.join(dirpath, dirname))
+        _clean.run(self)
+
+# @brief Generates the python files and folders to set up the development/runtime environment
+# @param[in] _build_py Instance of setuptools to build the system
+class build_py(_build_py):
+    def run(self):
+        generateProtobuf('../src/protobuf/Aircraft.proto')
+        generateProtobuf('../src/protobuf/AircraftReport.proto')
+        generateProtobuf('../src/protobuf/AircraftSchedule.proto')
+        generateProtobuf('../src/protobuf/BaseTypes.proto')
+        _build_py.run(self)
+
+setup(
+    name='Arrival MANager',
+    version='0.1.0',
+    packages=[ 'aman' ],
+    namespace_packages=[ 'aman' ],
+    description='AMAN optimization backend',
+    author='Sven Czarnian',
+    author_email='devel@svcz.de',
+    license='GPLv3',
+    cmdclass = { 'clean': clean, 'build_py': build_py },
+    install_requires=[
+        'setuptools',
+        'pyzmq',
+        'protobuf'
+    ]
+)