#!/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' ] )