@@ -49,6 +49,7 @@ class GenerateKw(TypedDict):
49
49
install_dir : T .Optional [str ]
50
50
d_module_versions : T .List [T .Union [str , int ]]
51
51
extra_cflags : T .List [str ]
52
+ cflags_private : T .List [str ]
52
53
variables : T .Dict [str , str ]
53
54
uninstalled_variables : T .Dict [str , str ]
54
55
unescaped_variables : T .Dict [str , str ]
@@ -96,6 +97,7 @@ def __init__(self, state: ModuleState, name: str, metadata: T.Dict[str, MetaData
96
97
self .priv_libs : T .List [LIBS ] = []
97
98
self .priv_reqs : T .List [str ] = []
98
99
self .cflags : T .List [str ] = []
100
+ self .cflags_private : T .List [str ] = []
99
101
self .version_reqs : T .DefaultDict [str , T .Set [str ]] = defaultdict (set )
100
102
self .link_whole_targets : T .List [T .Union [build .CustomTarget , build .CustomTargetIndex , build .StaticLibrary ]] = []
101
103
self .uninstalled_incdirs : mesonlib .OrderedSet [str ] = mesonlib .OrderedSet ()
@@ -165,6 +167,9 @@ def _process_reqs(self, reqs: T.Sequence[T.Union[str, build.StaticLibrary, build
165
167
def add_cflags (self , cflags : T .List [str ]) -> None :
166
168
self .cflags += mesonlib .stringlistify (cflags )
167
169
170
+ def add_cflags_private (self , cflags_private : T .List [str ]) -> None :
171
+ self .cflags_private += mesonlib .stringlistify (cflags_private )
172
+
168
173
def _add_uninstalled_incdirs (self , incdirs : T .List [build .IncludeDirs ], subdir : T .Optional [str ] = None ) -> None :
169
174
for i in incdirs :
170
175
curdir = i .get_curdir ()
@@ -372,6 +377,7 @@ def _fn(xs: T.Union[T.List[str], T.List[LIBS]], libs: bool = False) -> T.Union[T
372
377
# Reset exclude list just in case some values can be both cflags and libs.
373
378
exclude = set ()
374
379
self .cflags = _fn (self .cflags )
380
+ self .cflags_private = _fn (self .cflags_private )
375
381
376
382
class PkgConfigModule (NewExtensionModule ):
377
383
@@ -596,11 +602,16 @@ def generate_libs_flags(libs: T.List[LIBS]) -> T.Iterable[str]:
596
602
if cflags and not dataonly :
597
603
ofile .write ('Cflags: {}\n ' .format (' ' .join (cflags )))
598
604
605
+ cflags_private : T .List [str ] = [self ._escape (f ) for f in deps .cflags_private ]
606
+ if cflags_private and not dataonly :
607
+ ofile .write ('Cflags.private: {}\n ' .format (' ' .join (cflags_private )))
608
+
599
609
@typed_pos_args ('pkgconfig.generate' , optargs = [(build .SharedLibrary , build .StaticLibrary )])
600
610
@typed_kwargs (
601
611
'pkgconfig.generate' ,
602
612
D_MODULE_VERSIONS_KW .evolve (since = '0.43.0' ),
603
613
INSTALL_DIR_KW ,
614
+ KwargInfo ('cflags_private' , ContainerTypeInfo (list , str ), default = [], listify = True , since = '1.9.0' ),
604
615
KwargInfo ('conflicts' , ContainerTypeInfo (list , str ), default = [], listify = True ),
605
616
KwargInfo ('dataonly' , bool , default = False , since = '0.54.0' ),
606
617
KwargInfo ('description' , (str , NoneType )),
@@ -651,7 +662,7 @@ def generate(self, state: ModuleState,
651
662
dataonly = kwargs ['dataonly' ]
652
663
if dataonly :
653
664
default_subdirs = []
654
- blocked_vars = ['libraries' , 'libraries_private' , 'requires_private' , 'extra_cflags' , 'subdirs' ]
665
+ blocked_vars = ['libraries' , 'libraries_private' , 'requires_private' , 'extra_cflags' , 'cflags_private' , ' subdirs' ]
655
666
# Mypy can't figure out that this TypedDict index is correct, without repeating T.Literal for the entire list
656
667
if any (kwargs [k ] for k in blocked_vars ): # type: ignore
657
668
raise mesonlib .MesonException (f'Cannot combine dataonly with any of { blocked_vars } ' )
@@ -680,6 +691,7 @@ def generate(self, state: ModuleState,
680
691
deps .add_pub_reqs (kwargs ['requires' ])
681
692
deps .add_priv_reqs (kwargs ['requires_private' ])
682
693
deps .add_cflags (kwargs ['extra_cflags' ])
694
+ deps .add_cflags_private (kwargs ['cflags_private' ])
683
695
684
696
dversions = kwargs ['d_module_versions' ]
685
697
if dversions :
0 commit comments