Ardupilot2/Tools/ardupilotwaf/mavgen.py
Gustavo Jose de Sousa e5c66de554 waf: mavgen: ensure order without bld.add_group()
This is a better approach, because there's no need of calling add_group() for
each time a mavgen task generator is created.
2016-01-15 07:28:48 +11:00

66 lines
2.0 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
# (c) Siddharth Bharat Purohit, 3DRobotics Inc.
"""
The **mavgen.py** program is a code generator which creates mavlink header files.
"""
from waflib import Task, Utils, Node
from waflib.TaskGen import feature, before_method, extension
import os
class mavgen(Task.Task):
"""generate mavlink header files"""
color = 'GREEN'
run_str = '${PYTHON} ${MAVGEN} --lang=C --wire-protocol=1.0 --output ${TGT} ${SRC}'
before = 'cxx c'
def post_run(self):
super(mavgen, self).post_run()
for header in self.generator.output_dir.ant_glob("*.h **/*.h", remove=False):
header.sig = header.cache_sig = self.cache_sig
def options(opt):
opt.load('python')
@feature('mavgen')
@before_method('process_source')
def process_mavgen(self):
inputs = self.to_nodes(self.source)
outputs = []
self.target = Utils.to_list(getattr(self, 'target', []))
for t in self.target:
if not isinstance(t, Node.Node):
t = self.bld.bldnode.find_or_declare(t)
outputs.append(t)
self.source = []
self.create_task('mavgen', inputs, outputs)
def configure(cfg):
"""
setup environment for mavlink header generator
"""
cfg.load('python')
cfg.check_python_version(minver=(2,7,0))
env = cfg.env
cfg.env.env = dict(os.environ)
cfg.start_msg('Checking for message_definitions')
if not cfg.srcnode.find_resource('modules/mavlink/message_definitions/v1.0/ardupilotmega.xml'):
cfg.fatal(env.MAV_MSG_DEFS + ' not found, please run: git submodule init && git submodule update', color='RED')
return
cfg.end_msg('success')
env.MAVLINK_DIR = cfg.srcnode.find_dir('modules/mavlink/').abspath()
env.MAVLINK_HEADERS = cfg.bldnode.make_node('/libraries/GCS_MAVLink/include/mavlink/v1.0/').abspath()
env.MAVGEN = env.MAVLINK_DIR + '/pymavlink/tools/mavgen.py'
cfg.env.env['PYTHONPATH'] = env.MAVLINK_DIR
env.MAV_MSG_DEFS = cfg.srcnode.find_resource('modules/mavlink/message_definitions/v1.0/ardupilotmega.xml').abspath()