123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/usr/bin/env python
- import os
- import re
- 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/', 'aman/com/')
- 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', '-Isrc/protobuf/', '-I.', '--python_out=aman/com/', source]
- if 0 != subprocess.call(command):
- sys.exit(-1)
- # check if we need to replace some import commands
- replaced = False
- content = open(output, 'r').read()
- for entry in re.findall('import.[A-Z].*.as.*', content):
- content = content.replace(entry, 'from . ' + entry)
- replaced = True
- # update the content
- if replaced:
- with open(output, 'w') as file:
- file.write(content)
- # @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 or 'build' == dirname or 'dist' == dirname or '__pycache__' == 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')
- generateProtobuf('src/protobuf/Communication.proto')
- _build_py.run(self)
- with open('README.md', 'r') as f:
- longDescription = f.read()
- setup(
- name = 'Arrival MANager',
- version = '0.1.0',
- packages = [
- 'aman',
- 'aman.com',
- 'aman.config',
- 'aman.formats',
- 'aman.sys',
- 'aman.sys.aco',
- 'aman.tools',
- 'aman.types'
- ],
- namespace_packages = [ 'aman' ],
- description = 'AMAN optimization backend',
- long_description = longDescription,
- author = 'Sven Czarnian, Pascal Seeler',
- author_email = 'devel@svcz.de',
- license = 'GPLv3',
- cmdclass = { 'clean': clean, 'build_py': build_py },
- install_requires=[
- 'argparse',
- 'bs4',
- 'configparser',
- 'numpy',
- 'protobuf',
- 'pyzmq',
- 'scipy',
- 'setuptools',
- 'flask',
- 'flask-cors'
- ]
- )
|