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