-
Notifications
You must be signed in to change notification settings - Fork 42
Expand file tree
/
Copy pathgenerate_python_lib.py.in
More file actions
110 lines (89 loc) · 5.88 KB
/
generate_python_lib.py.in
File metadata and controls
110 lines (89 loc) · 5.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/python
# ----------------- BEGIN LICENSE BLOCK ---------------------------------
#
# Copyright (c) 2020-2022 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
# ----------------- END LICENSE BLOCK -----------------------------------
"""
This module uses pygccxml and py++ to generate
Python interfaces for all classes and datatypes
of the ad_physics library.
The resulting library is called libad_physics_python
"""
from python_wrapper_helper import generate_python_wrapper, post_process_python_wrapper
def main():
"""
Main function to generate Python-C++ binding code
"""
include_dirs = {
"@GENPY_INCLUDE_DIRS@",
"@CMAKE_CURRENT_LIST_DIR@/../generated/include",
"@CMAKE_CURRENT_LIST_DIR@/../include"
}
declarations={"toString", "fromString", "std::to_string", "std::sqrt", "std::fabs", "std::numeric_limits"}
for component in ["physics", "geometry"]:
main_namespace="ad::{}".format(component)
declarations_component=declarations.copy()
declarations_component.add(main_namespace)
additional_replacements = [
("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less__double_comma__boost_scope_geometry_scope_cs_scope_cartesian__greater__comma__false_comma__true_comma__std_scope_vector_comma__std_scope_vector_comma__std_scope_allocator_comma__std_scope_allocator__greater_", "Polygon"),
("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less__double__greater__comma__false_comma__true__greater_", "Polygon"),
("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less__double__greater__comma__false__greater_", "Polygon"),
("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less_double_greater__comma__false_greater_", "Polygon"),
("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less_double_greater__comma__false_comma__true_greater_", "Polygon"),
("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_comma__true_comma__std_scope_vector_comma__std_scope_vector_comma__std_scope_allocator_comma__std_scope_allocator__greater_", "Polygon"),
("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_comma__true__greater_", "Polygon"),
("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_comma__true_greater_", "Polygon"),
("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false__greater_", "Polygon"),
("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_greater_", "Polygon"),
("vector_less__boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less_double_comma__boost_scope_geometry_scope_cs_scope_cartesian_greater___greater_", "PointVector"),
("vector_less_boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less_double_greater__greater_", "PointVector"),
("vector_less_boost_scope_geometry_scope_model_scope_d2_scope_Point_greater_", "PointVector"),
("point_xy_less__double_comma__boost_scope_geometry_scope_cs_scope_cartesian__greater_", "Point"),
("point_xy_less__double__greater_", "Point"),
("point_xy_less_double_greater_", "Point"),
]
header_dirs = {
"@CMAKE_CURRENT_LIST_DIR@/../include/ad/{}".format(component),
"@CMAKE_CURRENT_LIST_DIR@/../generated/include/ad/{}".format(component)
}
ignore_files={}
ignore_declarations={}
additional_includes={}
add_declarations={}
ignore_declarations={}
if component == "physics":
pass
elif component == "geometry":
add_declarations={"boost::geometry::model::d2::point_xy", "boost::geometry::model::multi_point", "boost::geometry::model::polygon"}
ignore_declarations={"boost::geometry::model::ring"}
generate_python_wrapper(library_name=component,
cpp_filename="Ad-{}-PythonWrapper.cpp.in".format(component),
header_directories=header_dirs,
include_paths=include_dirs,
main_namespace=main_namespace,
declarations=declarations_component,
add_declarations=add_declarations,
ignore_declarations=ignore_declarations,
ignore_files=ignore_files)
additional_replacements_component = additional_replacements.copy()
additional_replacements_component.append(
("BOOST_PYTHON_MODULE({}){{".format(component),
"void export_ad_{}(){{\n\n".format(component) +
" bp::object ad_{}_module(bp::handle<>(bp::borrowed(PyImport_AddModule(\"{}\"))));\n".format(component, component) +
" bp::scope().attr(\"{}\") = ad_{}_module;\n".format(component, component) +
" bp::scope submodule_scope = ad_{}_module;\n\n".format(component) +
" bp::scope().attr(\"__doc__\") = \"Python binding of ad_physics ad::{} namespace C++ code for @PYTHON_BINDING_NAME@\";".format(component) +
" bp::scope().attr(\"__copyright__\") = \"Copyright (C) 2020-2022 Intel Corporation\";" +
" bp::scope().attr(\"__license__\") = \"MIT\";"
))
post_process_python_wrapper(header_directories=header_dirs,
cpp_filename_in="Ad-{}-PythonWrapper.cpp.in".format(component),
cpp_filename_out="Ad-{}-PythonWrapper.cpp".format(component),
additional_replacements=additional_replacements_component,
additional_includes=additional_includes
)
if __name__ == '__main__':
main()