#!/usr/bin/env python3 """ Helper script to wrap C++ to Matlab. This script is installed via CMake to the user's binary directory and invoked during the wrapping by CMake. """ import argparse import sys from gtwrap.matlab_wrapper import MatlabWrapper if __name__ == "__main__": arg_parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) arg_parser.add_argument("--src", type=str, required=True, help="Input interface .h file.") arg_parser.add_argument("--module_name", type=str, required=True, help="Name of the C++ class being wrapped.") arg_parser.add_argument("--out", type=str, required=True, help="Name of the output folder.") arg_parser.add_argument( "--top_module_namespaces", type=str, default="", help="C++ namespace for the top module, e.g. `ns1::ns2::ns3`. " "Only the content within this namespace and its sub-namespaces " "will be wrapped. The content of this namespace will be available at " "the top module level, and its sub-namespaces' in the submodules.\n" "For example, `import ` gives you access to a Python " "`.Class` of the corresponding C++ `ns1::ns2::ns3::Class`" ", and `from import ns4` gives you access to a Python " "`ns4.Class` of the C++ `ns1::ns2::ns3::ns4::Class`. ") arg_parser.add_argument( "--ignore", nargs='*', type=str, help="A space-separated list of classes to ignore. " "Class names must include their full namespaces.") arg_parser.add_argument( "--use-boost-serialization", action="store_true", help="Allow boost based serialization methods", ) args = arg_parser.parse_args() top_module_namespaces = args.top_module_namespaces.split("::") if top_module_namespaces[0]: top_module_namespaces = [''] + top_module_namespaces print(f"[MatlabWrapper] Ignoring classes: {args.ignore}", file=sys.stderr) wrapper = MatlabWrapper( module_name=args.module_name, top_module_namespace=top_module_namespaces, ignore_classes=args.ignore, use_boost_serialization=args.use_boost_serialization) sources = args.src.split(';') cc_content = wrapper.wrap(sources, path=args.out)