From e112ee969470acbca3b5f5ebfe04311fc83ceecb Mon Sep 17 00:00:00 2001 From: Sven Czarnian Date: Sat, 14 Aug 2021 19:35:25 +0200 Subject: [PATCH] initial setuptools definition --- aman/setup.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 aman/setup.py diff --git a/aman/setup.py b/aman/setup.py new file mode 100644 index 0000000..15e4ddf --- /dev/null +++ b/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' + ] +)