from setuptools import setup
import os
import shutil

# Builds the message registry and other data files into a python package

# Copy the msg registry and comp IDs files into the subdir with
# the __init__.py before building the package so they can reside in
# ../site-packages/pel_registry/ instead of site-packages/registry.
this_dir = os.path.dirname(__file__)
target_dir = os.path.join(this_dir, 'pel_registry')
shutil.copy(os.path.join(
    this_dir, 'registry/message_registry.json'), target_dir)
shutil.copy(os.path.join(this_dir, 'registry/O_component_ids.json'),
            target_dir)
shutil.copy(os.path.join(this_dir, 'registry/B_component_ids.json'),
            target_dir)

setup(
    name="pel_message_registry",
    version=os.getenv('PELTOOL_VERSION', '1.0'),
    classifiers=["License :: OSI Approved :: Apache Software License"],
    packages=['pel_registry'],
    package_data={'': ['message_registry.json',
                       'O_component_ids.json',
                       'B_component_ids.json']},
)
