Ejemplo n.º 1
0
def generate_package_file(pkg, s=None):
    "Generate the top level file for the given package with forward declarations for individual messages"
    if s is None:
        s = IndentedWriter()

    # Header
    s.write("#include <boost/python.hpp>\n")
    s.write("namespace {0}".format(pkg))
    s.write("{\n")

    # Forward declarations
    messages = msgs.list_msg_types(pkg, False)
    for m in messages:
        s.write("void export{0}();".format(m));

    # Boost python wrappers
    s.write("\n")
    s.write("BOOST_PYTHON_MODULE({0}_cpp)".format(pkg))
    s.write("{")
    with Indent(s, 2):
        for m in messages:
            s.write("export{0}();".format(m))
    s.write("}\n")

    s.write("} // namespace")
    return s.getvalue()
Ejemplo n.º 2
0
def write_bindings(pkg, target_dir):
    "Generate and write all bindings"
    top_level_file = os.path.join(target_dir, pkg+'.cpp')
    with open(top_level_file, 'w') as f:
        f.write(generate_package_file(pkg))
    for m in msgs.list_msg_types(pkg, False):
        outfile = os.path.join(target_dir, "{0}_{1}.cpp".format(pkg, m))
        with open(outfile, 'w') as f:
            f.write(generate_file(pkg, m))
Ejemplo n.º 3
0
def generate_python_imports(pkg):
    pkgs = set()
    for m in msgs.list_msg_types(pkg, False):
        spec = get_msg_spec(pkg, m)
        for f in spec.parsed_fields():
            if f.is_header:
                pkgs.add('std_msgs')
            else:
                match = re.match('(\w+)/', f.base_type)
                if match and match.group(1)!=pkg:
                    pkgs.add(match.group(1))
    return '\n'.join("import {0}_boost".format(p) for p in pkgs)
Ejemplo n.º 4
0
def write_rospy_conversions(pkg, target_dir, current_pkg):
    """
    Generate all rospy conversions.
    @param pkg: We'll generate conversion functions for all messages defined in this ros package.
    @param current_pkg: The generated functions are being put into this ros package.
    """
    outfile = os.path.join(target_dir, pkg+'_boost.py')
    with open(outfile, 'w') as f:
        f.write("import roslib; roslib.load_manifest('{0}')\n".format(current_pkg))
        f.write("import rostime_boost_python\n")
        f.write(generate_python_imports(pkg))
        f.write("\nimport {0}.msg\n".format(pkg))
        f.write("import {0}_cpp as cpp\n".format(pkg))


        for m in msgs.list_msg_types(pkg, False):
            f.write(generate_rospy_conversion(pkg, m))
def write_rospy_conversions(pkg, target_dir):
    "Generate all rospy conversions"
    outfile = os.path.join(target_dir, pkg+'_boost_conversions.py')
    with open(outfile, 'w') as f:
        for m in msgs.list_msg_types(pkg, False):
            f.write(generate_rospy_conversion(pkg, m))