@ -316,7 +316,8 @@ class GnomeModule(ExtensionModule):
def _get_dependencies_flags ( self , deps , state , depends , include_rpath = False ,
use_gir_args = False ) :
cflags = OrderedSet ( )
ldflags = OrderedSet ( )
internal_ldflags = OrderedSet ( )
external_ldflags = OrderedSet ( )
gi_includes = OrderedSet ( )
deps = mesonlib . listify ( deps , unholder = True )
@ -326,17 +327,19 @@ class GnomeModule(ExtensionModule):
for lib in dep . libraries :
if hasattr ( lib , ' held_object ' ) :
lib = lib . held_object
ldflags . update ( self . _get_link_args ( state , lib , depends , include_rpath ) )
internal_ ldflags. update ( self . _get_link_args ( state , lib , depends , include_rpath ) )
libdepflags = self . _get_dependencies_flags ( lib . get_external_deps ( ) , state , depends , include_rpath ,
use_gir_args )
cflags . update ( libdepflags [ 0 ] )
ldflags . update ( libdepflags [ 1 ] )
gi_includes . update ( libdepflags [ 2 ] )
internal_ldflags . update ( libdepflags [ 1 ] )
external_ldflags . update ( libdepflags [ 2 ] )
gi_includes . update ( libdepflags [ 3 ] )
extdepflags = self . _get_dependencies_flags ( dep . ext_deps , state , depends , include_rpath ,
use_gir_args )
cflags . update ( extdepflags [ 0 ] )
ldflags . update ( extdepflags [ 1 ] )
gi_includes . update ( extdepflags [ 2 ] )
internal_ldflags . update ( extdepflags [ 1 ] )
external_ldflags . update ( extdepflags [ 2 ] )
gi_includes . update ( extdepflags [ 3 ] )
for source in dep . sources :
if hasattr ( source , ' held_object ' ) :
source = source . held_object
@ -351,9 +354,9 @@ class GnomeModule(ExtensionModule):
# For PkgConfigDependency only:
getattr ( dep , ' is_libtool ' , False ) ) :
lib_dir = os . path . dirname ( lib )
ldflags . update ( [ " -L %s " % lib_dir ] )
external_ ldflags. update ( [ " -L %s " % lib_dir ] )
if include_rpath :
ldflags . update ( [ ' -Wl,-rpath {} ' . format ( lib_dir ) ] )
external_ ldflags. update ( [ ' -Wl,-rpath {} ' . format ( lib_dir ) ] )
libname = os . path . basename ( lib )
if libname . startswith ( " lib " ) :
libname = libname [ 3 : ]
@ -362,7 +365,7 @@ class GnomeModule(ExtensionModule):
# Hack to avoid passing some compiler options in
if lib . startswith ( " -W " ) :
continue
ldflags . update ( [ lib ] )
external_ ldflags. update ( [ lib ] )
if isinstance ( dep , PkgConfigDependency ) :
girdir = dep . get_pkgconfig_variable ( " girdir " , { ' default ' : ' ' } )
@ -376,14 +379,17 @@ class GnomeModule(ExtensionModule):
continue
if gir_has_extra_lib_arg ( self . interpreter ) and use_gir_args :
fixed_ldflags = OrderedSet ( )
for ldflag in ldflags :
if ldflag . startswith ( " -l " ) :
fixed_ldflags . add ( ldflag . replace ( ' -l ' , ' --extra-library= ' , 1 ) )
else :
fixed_ldflags . add ( ldflag )
ldflags = fixed_ldflags
return cflags , ldflags , gi_includes
def fix_ldflags ( ldflags ) :
fixed_ldflags = OrderedSet ( )
for ldflag in ldflags :
if ldflag . startswith ( " -l " ) :
fixed_ldflags . add ( ldflag . replace ( ' -l ' , ' --extra-library= ' , 1 ) )
else :
fixed_ldflags . add ( ldflag )
return fixed_ldflags
internal_ldflags = fix_ldflags ( internal_ldflags )
external_ldflags = fix_ldflags ( external_ldflags )
return cflags , internal_ldflags , external_ldflags , gi_includes
@FeatureNewKwargs ( ' build target ' , ' 0.40.0 ' , [ ' build_by_default ' ] )
@permittedKwargs ( { ' sources ' , ' nsversion ' , ' namespace ' , ' symbol_prefix ' , ' identifier_prefix ' ,
@ -487,7 +493,8 @@ class GnomeModule(ExtensionModule):
' Gir includes must be str, GirTarget, or list of them ' )
cflags = [ ]
ldflags = [ ]
internal_ldflags = [ ]
external_ldflags = [ ]
for lang , compiler in girtarget . compilers . items ( ) :
# XXX: Can you use g-i with any other language?
if lang in ( ' c ' , ' cpp ' , ' objc ' , ' objcpp ' , ' d ' ) :
@ -504,7 +511,7 @@ class GnomeModule(ExtensionModule):
sanitize = state . environment . coredata . base_options [ ' b_sanitize ' ] . value
cflags + = compilers . sanitizer_compile_args ( sanitize )
if ' address ' in sanitize . split ( ' , ' ) :
ldflags + = [ ' -lasan ' ]
external_ ldflags + = [ ' -lasan ' ]
# FIXME: Linking directly to libasan is not recommended but g-ir-scanner
# does not understand -f LDFLAGS. https://bugzilla.gnome.org/show_bug.cgi?id=783892
# ldflags += compilers.sanitizer_link_args(sanitize)
@ -565,10 +572,11 @@ class GnomeModule(ExtensionModule):
# ldflags will be misinterpreted by gir scanner (showing
# spurious dependencies) but building GStreamer fails if they
# are not used here.
dep_cflags , dep_ldflags , gi_includes = self . _get_dependencies_flags ( deps , state , depends ,
use_gir_args = True )
dep_cflags , dep_internal_ ldflags , dep_external_ldflags , gi_includes = \
self . _get_dependencies_flags ( deps , state , depends , use_gir_args = True )
cflags + = list ( dep_cflags )
ldflags + = list ( dep_ldflags )
internal_ldflags + = list ( dep_internal_ldflags )
external_ldflags + = list ( dep_external_ldflags )
scan_command + = [ ' --cflags-begin ' ]
scan_command + = cflags
scan_command + = state . environment . coredata . get_external_args ( lang )
@ -578,7 +586,7 @@ class GnomeModule(ExtensionModule):
# ones.
if isinstance ( girtarget , build . SharedLibrary ) :
scan_command + = [ " -L@PRIVATE_OUTDIR_ABS_ %s @ " % girtarget . get_id ( ) ]
scan_command + = list ( ldflags )
scan_command + = list ( internal_ ldflags)
for i in gi_includes :
scan_command + = [ ' --add-include-path= %s ' % i ]
@ -606,6 +614,7 @@ class GnomeModule(ExtensionModule):
for link_arg in state . environment . coredata . get_external_link_args ( lang ) :
if link_arg . startswith ( ' -L ' ) :
scan_command . append ( link_arg )
scan_command + = list ( external_ldflags )
scankwargs = { ' output ' : girfile ,
' command ' : scan_command ,
@ -832,7 +841,8 @@ This will become a hard error in the future.''')
def _get_build_args ( self , kwargs , state , depends ) :
args = [ ]
deps = extract_as_list ( kwargs , ' dependencies ' , unholder = True )
cflags , ldflags , gi_includes = self . _get_dependencies_flags ( deps , state , depends , include_rpath = True )
cflags , internal_ldflags , external_ldflags , gi_includes = \
self . _get_dependencies_flags ( deps , state , depends , include_rpath = True )
inc_dirs = mesonlib . extract_as_list ( kwargs , ' include_directories ' )
for incd in inc_dirs :
if not isinstance ( incd . held_object , ( str , build . IncludeDirs ) ) :
@ -840,7 +850,10 @@ This will become a hard error in the future.''')
' Gir include dirs should be include_directories(). ' )
cflags . update ( get_include_args ( inc_dirs ) )
cflags . update ( state . environment . coredata . get_external_args ( ' c ' ) )
ldflags = OrderedSet ( )
ldflags . update ( internal_ldflags )
ldflags . update ( state . environment . coredata . get_external_link_args ( ' c ' ) )
ldflags . update ( external_ldflags )
if cflags :
args + = [ ' --cflags= %s ' % ' ' . join ( cflags ) ]
if ldflags :