1818 BuildTargetOutput ,
1919 ExtensionModule ,
2020 LocalDependency ,
21+ CppMacroValue ,
2122 makeplan ,
2223)
2324from .util import maybe_write_file , relpath_walk_up
@@ -47,7 +48,9 @@ def _make_string(s: str):
4748 return f"'{ s } '"
4849
4950
50- VarTypes = T .Union [InputFile , OutputFile , BuildTarget , ExtensionModule , LocalDependency ]
51+ VarTypes = T .Union [
52+ InputFile , OutputFile , BuildTarget , ExtensionModule , LocalDependency , CppMacroValue
53+ ]
5154
5255
5356class VarCache :
@@ -80,6 +83,9 @@ def getvar(self, item: VarTypes) -> str:
8083 elif isinstance (item , LocalDependency ):
8184 name = item .name .replace ("-" , "_" )
8285 var = f"{ name } _dep"
86+ elif isinstance (item , CppMacroValue ):
87+ name = item .name
88+ var = f"_sw_cpp_var_{ name } "
8389 else :
8490 assert False
8591
@@ -118,6 +124,8 @@ def _render_build_target(r: RenderBuffer, vc: VarCache, bt: BuildTarget):
118124 elif isinstance (arg , ExtensionModule ):
119125 cmd .append (f"'@INPUT{ len (tinput )} @'" )
120126 tinput .append (vc .getvar (arg ))
127+ elif isinstance (arg , CppMacroValue ):
128+ cmd .append (vc .getvar (arg ))
121129 else :
122130 assert False , f"unexpected { arg !r} in { bt } "
123131
@@ -295,6 +303,8 @@ def gen_meson(
295303 # is simpler to generate
296304
297305 plan = makeplan (pathlib .Path (project_root ))
306+ macros : T .List [CppMacroValue ] = []
307+ build_targets : T .List [BuildTarget ] = []
298308 modules : T .List [ExtensionModule ] = []
299309 pyi_targets : T .List [BuildTarget ] = []
300310 local_deps : T .List [LocalDependency ] = []
@@ -308,17 +318,30 @@ def gen_meson(
308318 elif item .command == "dat2trampoline" :
309319 trampoline_targets .append (item )
310320 else :
311- _render_build_target ( r0 , vc , item )
321+ build_targets . append ( item )
312322 elif isinstance (item , ExtensionModule ):
313323 # defer these to the end
314324 modules .append (item )
315325 elif isinstance (item , Entrypoint ):
316326 eps .append (item )
317327 elif isinstance (item , LocalDependency ):
318328 local_deps .append (item )
329+ elif isinstance (item , CppMacroValue ):
330+ macros .append (item )
319331 else :
320332 assert False
321333
334+ if macros :
335+ for macro in macros :
336+ macro_name = _make_string (macro .name )
337+ r0 .writeln (
338+ f"{ vc .getvar (macro )} = meson.get_compiler('cpp').get_define({ macro_name } )"
339+ )
340+ r0 .writeln ()
341+
342+ for target in build_targets :
343+ _render_build_target (r0 , vc , target )
344+
322345 if local_deps :
323346 r0 .writeln ()
324347 r0 .write_trim (
0 commit comments