@@ -181,27 +181,12 @@ def generate_from(self, ast: ast_pb2.AST):
181
181
182
182
yield 'namespace {'
183
183
yield ''
184
- yield 'PyObject * this_module_init() noexcept {'
185
- yield I + 'PYBIND11_CHECK_PYTHON_VERSION'
186
- yield I + 'PYBIND11_ENSURE_INTERNALS_READY'
187
- yield I + ('static pybind11::module_::module_def '
188
- f'module_def_{ self ._module_name } ;' )
189
- yield I + ('auto m = pybind11::module_::create_extension_module('
190
- f'"{ self ._module_name } ", nullptr, '
191
- f'&module_def_{ self ._module_name } );' )
192
- yield I + 'try {'
193
- yield I + I + 'm.attr("__pyclif_codegen_mode__") = "pybind11";'
184
+ yield '// When manually converting this code to a pure pybind11 extension,'
185
+ yield '// change this function to:'
186
+ yield f'// PYBIND11_MODULE({ self ._module_name } , m)'
187
+ yield 'void PyclifPybind11ModuleInit(py::module_ m) {'
194
188
for s in self ._generate_import_modules (ast ):
195
189
yield I + s
196
- yield I + I + f'm.doc() = "CLIF-generated module for { ast .source } ";'
197
- if self ._codegen_info .requires_status :
198
- yield I + I + ('pybind11::module_::import('
199
- '"util.task.python.error");' )
200
- yield I + I + 'pybind11_protobuf::check_unknown_fields::'
201
- yield I + I + ' ExtensionsWithUnknownFieldsPolicy::'
202
- yield I + I + ' WeakEnableFallbackToSerializeParse();'
203
- yield I + I + 'pybind11_protobuf::ImportNativeProtoCasters();'
204
-
205
190
for decl in ast .decls :
206
191
if decl .decltype == ast_pb2 .Decl .Type .FUNC :
207
192
for s in function .generate_from (
@@ -217,26 +202,30 @@ def generate_from(self, ast: ast_pb2.AST):
217
202
elif decl .decltype == ast_pb2 .Decl .Type .ENUM :
218
203
for s in enums .generate_from ('m' , decl .enum ):
219
204
yield I + s
220
- yield I + I + 'return m.ptr();'
221
- yield I + '}'
222
- yield I + 'PYBIND11_CATCH_INIT_EXCEPTIONS'
223
205
yield '}'
224
206
yield ''
225
207
yield '} // namespace'
226
208
yield ''
227
209
mangled_module_name = utils .generate_mangled_name_for_module (
228
210
self ._module_path )
229
- yield f'extern "C" PyObject* GooglePyInit_{ mangled_module_name } () {{'
230
- yield I + 'return this_module_init();'
231
- yield '}'
232
- yield ''
233
-
211
+ yield '// When manually converting this code to a pure pybind11 extension,'
212
+ yield '// remove this macro invocation entirely.'
213
+ yield 'PYCLIF_PYBIND11_MODULE('
214
+ yield f' "{ ast .source } ",'
215
+ yield f' GooglePyInit_{ mangled_module_name } ,'
216
+ yield f' "{ self ._module_name } ")'
217
+
218
+ insert_empty_line = True
234
219
for namespace , typedefs in itertools .groupby (
235
220
self ._types , lambda gen_type : gen_type .cpp_namespace ):
221
+ if insert_empty_line :
222
+ insert_empty_line = False
223
+ yield ''
236
224
namespace = namespace .strip (':' ) or 'clif'
237
225
yield ' ' .join ('namespace %s {' % ns for ns in namespace .split ('::' ))
238
226
for t in typedefs :
239
227
yield from t .generate_converters ()
228
+ yield ''
240
229
yield '} ' * (1 + namespace .count ('::' )) + ' // namespace ' + namespace
241
230
242
231
def _generate_import_modules (self ,
@@ -280,6 +269,7 @@ def _generate_headlines(self):
280
269
yield f'#include "{ include } "'
281
270
yield f'#include "{ self ._header_path } "'
282
271
yield '#include "clif/pybind11/clif_type_casters.h"'
272
+ yield '#include "clif/pybind11/pyclif_pybind11_module_macro.h"'
283
273
yield '#include "clif/pybind11/runtime.h"'
284
274
yield '#include "clif/pybind11/type_casters.h"'
285
275
yield '#include "third_party/pybind11_protobuf/native_proto_caster.h"'
0 commit comments