mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
3e0a99a059
It gives nowhere near full coverage, but it’s something we can build on in future. Signed-off-by: Philip Withnall <philip@tecnocode.co.uk> Helps: #3158 Helps: #2950
1163 lines
33 KiB
Meson
1163 lines
33 KiB
Meson
gio_c_args = [
|
|
'-DG_LOG_DOMAIN="GLib-GIO"',
|
|
'-DGIO_LAUNCH_DESKTOP="@0@"'.format(glib_prefix / multiarch_libexecdir / 'gio-launch-desktop'),
|
|
'-DGIO_MODULE_DIR="@0@"'.format(glib_giomodulesdir),
|
|
'-DLOCALSTATEDIR="@0@"'.format(glib_localstatedir),
|
|
]
|
|
|
|
gio_c_args_internal = [
|
|
'-DGIO_COMPILATION',
|
|
]
|
|
|
|
# Install empty glib_giomodulesdir
|
|
install_emptydir(glib_giomodulesdir)
|
|
|
|
gio_includedir = glib_includedir / 'gio'
|
|
|
|
gnetworking_h_conf = configuration_data()
|
|
|
|
gnetworking_h_nameser_compat_include = ''
|
|
|
|
if host_system not in ['windows', 'android']
|
|
# Don't check for C_IN on Android since it does not define it in public
|
|
# headers, we define it ourselves wherever necessary
|
|
if not cc.compiles('''#include <sys/types.h>
|
|
#include <arpa/nameser.h>
|
|
int qclass = C_IN;''',
|
|
name : 'C_IN in public headers (no arpa/nameser_compat.h needed)')
|
|
if cc.compiles('''#include <sys/types.h>
|
|
#include <arpa/nameser.h>
|
|
#include <arpa/nameser_compat.h>
|
|
int qclass = C_IN;''',
|
|
name : 'arpa/nameser_compat.h needed for C_IN')
|
|
gnetworking_h_nameser_compat_include = '#include <arpa/nameser_compat.h>'
|
|
else
|
|
error('Could not find required includes for ARPA C_IN')
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
network_libs = [ ]
|
|
network_args = [ ]
|
|
if host_system != 'windows'
|
|
# res_query()
|
|
res_query_test = '''#include <resolv.h>
|
|
int main (int argc, char ** argv) {
|
|
return res_query("test", 0, 0, (void *)0, 0);
|
|
}'''
|
|
res_query_test_full = '''#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/nameser.h>
|
|
''' + res_query_test
|
|
if not cc.links(res_query_test_full, name : 'res_query()')
|
|
if cc.links(res_query_test_full, args : '-lresolv', name : 'res_query() in -lresolv')
|
|
network_libs += [ cc.find_library('resolv') ]
|
|
network_args += [ '-lresolv' ]
|
|
elif cc.links(res_query_test, args : '-lbind', name : 'res_query() in -lbind')
|
|
network_libs += [ cc.find_library('bind') ]
|
|
network_args += [ '-lbind' ]
|
|
elif cc.links(res_query_test, args : '-lsocket', name : 'res_query() in -lsocket')
|
|
network_libs += [ cc.find_library('socket') ]
|
|
network_args += [ '-lsocket' ]
|
|
else
|
|
error('Could not find res_query()')
|
|
endif
|
|
endif
|
|
|
|
# socket()
|
|
socket_test = '''#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
int main (int argc, char ** argv) {
|
|
return socket(1, 2, 3);
|
|
}'''
|
|
if not cc.links(socket_test, name : 'socket()')
|
|
if cc.links(socket_test, args : '-lsocket', name : 'socket() in -lsocket')
|
|
network_libs += [ cc.find_library('socket') ]
|
|
network_args += [ '-lsocket' ]
|
|
else
|
|
error('Could not find socket()')
|
|
endif
|
|
endif
|
|
|
|
# dn_comp()
|
|
if cc.links('''#include <resolv.h>
|
|
int main (int argc, char ** argv) {
|
|
return dn_comp(NULL, NULL, 0, NULL, NULL) == -1;
|
|
} ''', args : network_args, name : 'dn_comp()')
|
|
glib_conf.set('HAVE_DN_COMP', 1)
|
|
endif
|
|
|
|
# res_nclose()
|
|
if cc.links('''#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/nameser.h>
|
|
#include <resolv.h>
|
|
int main (int argc, char ** argv) {
|
|
struct __res_state res;
|
|
res_nclose(&res);
|
|
return 0;
|
|
}''', args : network_args, name : 'res_nclose()')
|
|
glib_conf.set('HAVE_RES_NCLOSE', 1)
|
|
endif
|
|
|
|
# res_ndestroy()
|
|
if cc.links('''#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/nameser.h>
|
|
#include <resolv.h>
|
|
int main (int argc, char ** argv) {
|
|
struct __res_state res;
|
|
res_ndestroy(&res);
|
|
return 0;
|
|
}''', args : network_args, name : 'res_ndestroy()')
|
|
glib_conf.set('HAVE_RES_NDESTROY', 1)
|
|
endif
|
|
|
|
# res_ninit()
|
|
if cc.links('''#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/nameser.h>
|
|
#include <resolv.h>
|
|
int main (int argc, char ** argv) {
|
|
struct __res_state res;
|
|
return res_ninit(&res);
|
|
}''', args : network_args, name : 'res_ninit()')
|
|
glib_conf.set('HAVE_RES_NINIT', 1)
|
|
endif
|
|
|
|
# res_nquery()
|
|
if cc.links('''#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/nameser.h>
|
|
#include <resolv.h>
|
|
int main (int argc, char ** argv) {
|
|
struct __res_state res;
|
|
return res_nquery(&res, "test", 0, 0, (void *)0, 0);
|
|
}''', args : network_args, name : 'res_nquery()')
|
|
glib_conf.set('HAVE_RES_NQUERY', 1)
|
|
endif
|
|
|
|
if cc.has_type('struct ip_mreqn', prefix : '#include <netinet/in.h>')
|
|
glib_conf.set('HAVE_IP_MREQN', 1)
|
|
endif
|
|
|
|
if cc.compiles('''#include <sys/ioctl.h>
|
|
#include <net/if.h>
|
|
int main (int argc, char ** argv) {
|
|
struct ifreq ifr;
|
|
ioctl(0, SIOCGIFADDR, &ifr);
|
|
return 0;
|
|
}''',
|
|
name : 'ioctl with request SIOCGIFADDR')
|
|
glib_conf.set('HAVE_SIOCGIFADDR', '/**/')
|
|
endif
|
|
|
|
endif
|
|
|
|
if host_system == 'android'
|
|
# struct ip_mreq_source definition is broken on Android NDK <= r16
|
|
# See https://bugzilla.gnome.org/show_bug.cgi?id=740791
|
|
if not cc.compiles('''#include <netinet/in.h>
|
|
int main(int argc, char ** argv) {
|
|
struct ip_mreq_source mc_req_src;
|
|
mc_req_src.imr_interface.s_addr = 0;
|
|
return 0;
|
|
}''',
|
|
name : 'ip_mreq_source.imr_interface has s_addr member')
|
|
glib_conf.set('BROKEN_IP_MREQ_SOURCE_STRUCT', 1)
|
|
endif
|
|
endif
|
|
|
|
gnetworking_h_conf.set('NAMESER_COMPAT_INCLUDE', gnetworking_h_nameser_compat_include)
|
|
|
|
gnetworking_h = configure_file(input : 'gnetworking.h.in',
|
|
output : 'gnetworking.h',
|
|
install_dir : gio_includedir,
|
|
install_tag : 'devel',
|
|
configuration : gnetworking_h_conf)
|
|
|
|
gdbus_headers = files(
|
|
'gdbusauthobserver.h',
|
|
'gcredentials.h',
|
|
'gdbusutils.h',
|
|
'gdbuserror.h',
|
|
'gdbusaddress.h',
|
|
'gdbusconnection.h',
|
|
'gdbusmessage.h',
|
|
'gdbusnameowning.h',
|
|
'gdbusnamewatching.h',
|
|
'gdbusproxy.h',
|
|
'gdbusintrospection.h',
|
|
'gdbusmethodinvocation.h',
|
|
'gdbusserver.h',
|
|
'gdbusinterface.h',
|
|
'gdbusinterfaceskeleton.h',
|
|
'gdbusobject.h',
|
|
'gdbusobjectskeleton.h',
|
|
'gdbusobjectproxy.h',
|
|
'gdbusobjectmanager.h',
|
|
'gdbusobjectmanagerclient.h',
|
|
'gdbusobjectmanagerserver.h',
|
|
'gtestdbus.h',
|
|
)
|
|
|
|
gdbus_sources = files(
|
|
'gdbusutils.c',
|
|
'gdbusaddress.c',
|
|
'gdbusauthobserver.c',
|
|
'gdbusauth.c',
|
|
'gdbusauthmechanism.c',
|
|
'gdbusauthmechanismanon.c',
|
|
'gdbusauthmechanismexternal.c',
|
|
'gdbusauthmechanismsha1.c',
|
|
'gdbuserror.c',
|
|
'gdbusconnection.c',
|
|
'gdbusmessage.c',
|
|
'gdbusnameowning.c',
|
|
'gdbusnamewatching.c',
|
|
'gdbusproxy.c',
|
|
'gdbusprivate.c',
|
|
'gdbusintrospection.c',
|
|
'gdbusmethodinvocation.c',
|
|
'gdbusserver.c',
|
|
'gdbusinterface.c',
|
|
'gdbusinterfaceskeleton.c',
|
|
'gdbusobject.c',
|
|
'gdbusobjectskeleton.c',
|
|
'gdbusobjectproxy.c',
|
|
'gdbusobjectmanager.c',
|
|
'gdbusobjectmanagerclient.c',
|
|
'gdbusobjectmanagerserver.c',
|
|
'gtestdbus.c',
|
|
)
|
|
|
|
# Generate gdbus-codegen
|
|
subdir('gdbus-2.0/codegen')
|
|
|
|
# Generate xdp-dbus.{c,h}
|
|
xdp_dbus_generated = custom_target('xdp-dbus',
|
|
input : ['org.freedesktop.portal.Documents.xml',
|
|
'org.freedesktop.portal.OpenURI.xml',
|
|
'org.freedesktop.portal.ProxyResolver.xml',
|
|
'org.freedesktop.portal.Trash.xml'],
|
|
output : ['xdp-dbus.h', 'xdp-dbus.c'],
|
|
depend_files : gdbus_codegen_built_files,
|
|
depends : gdbus_codegen_built_targets,
|
|
command : [python, gdbus_codegen,
|
|
'--interface-prefix', 'org.freedesktop.portal.',
|
|
'--output-directory', '@OUTDIR@',
|
|
'--generate-c-code', 'xdp-dbus',
|
|
'--c-namespace', 'GXdp',
|
|
'@INPUT@'])
|
|
|
|
# Generate gdbus-generated.{c,h}
|
|
gdbus_daemon_generated = custom_target('gdbus-daemon-generated',
|
|
input : ['dbus-daemon.xml'],
|
|
output : ['gdbus-daemon-generated.h', 'gdbus-daemon-generated.c'],
|
|
depend_files : gdbus_codegen_built_files,
|
|
depends : gdbus_codegen_built_targets,
|
|
command : [python, gdbus_codegen,
|
|
'--interface-prefix', 'org.',
|
|
'--output-directory', '@OUTDIR@',
|
|
'--generate-c-code', 'gdbus-daemon-generated',
|
|
'--c-namespace', '_G', '@INPUT@'])
|
|
|
|
settings_headers = files(
|
|
'gsettingsbackend.h',
|
|
'gsettingsschema.h',
|
|
'gsettings.h',
|
|
)
|
|
|
|
settings_sources = files(
|
|
'gdelayedsettingsbackend.c',
|
|
'gkeyfilesettingsbackend.c',
|
|
'gmemorysettingsbackend.c',
|
|
'gnullsettingsbackend.c',
|
|
'gsettingsbackend.c',
|
|
'gsettingsschema.c',
|
|
'gsettings-mapping.c',
|
|
'gsettings.c',
|
|
)
|
|
|
|
application_headers = files(
|
|
'gapplication.h',
|
|
'gapplicationcommandline.h',
|
|
|
|
'gactiongroup.h',
|
|
'gactionmap.h',
|
|
'gsimpleactiongroup.h',
|
|
'gremoteactiongroup.h',
|
|
'gactiongroupexporter.h',
|
|
'gdbusactiongroup.h',
|
|
'gaction.h',
|
|
'gpropertyaction.h',
|
|
'gsimpleaction.h',
|
|
|
|
'gmenumodel.h',
|
|
'gmenu.h',
|
|
'gmenuexporter.h',
|
|
'gdbusmenumodel.h',
|
|
'gnotification.h',
|
|
)
|
|
|
|
application_sources = files(
|
|
'gapplication.c',
|
|
'gapplicationcommandline.c',
|
|
'gapplicationimpl-dbus.c',
|
|
|
|
'gactiongroup.c',
|
|
'gactionmap.c',
|
|
'gsimpleactiongroup.c',
|
|
'gremoteactiongroup.c',
|
|
'gactiongroupexporter.c',
|
|
'gdbusactiongroup.c',
|
|
'gaction.c',
|
|
'gpropertyaction.c',
|
|
'gsimpleaction.c',
|
|
|
|
'gmenumodel.c',
|
|
'gmenu.c',
|
|
'gmenuexporter.c',
|
|
'gdbusmenumodel.c',
|
|
'gnotification.c',
|
|
'gnotificationbackend.c',
|
|
)
|
|
|
|
local_sources = files(
|
|
'ghttpproxy.c',
|
|
'glocalfile.c',
|
|
'glocalfileenumerator.c',
|
|
'glocalfileinfo.c',
|
|
'glocalfileinputstream.c',
|
|
'glocalfilemonitor.c',
|
|
'glocalfileoutputstream.c',
|
|
'glocalfileiostream.c',
|
|
'glocalvfs.c',
|
|
'gsocks4proxy.c',
|
|
'gsocks4aproxy.c',
|
|
'gsocks5proxy.c',
|
|
'thumbnail-verify.c',
|
|
)
|
|
|
|
platform_deps = []
|
|
internal_deps = []
|
|
appinfo_sources = []
|
|
contenttype_sources = []
|
|
portal_sources = []
|
|
unix_sources = []
|
|
win32_sources = []
|
|
|
|
# This is also used by tests/gdbus-daemon, so use files() to include the path
|
|
gdbus_daemon_sources = [
|
|
files('gdbusdaemon.c'),
|
|
gdbus_daemon_generated,
|
|
]
|
|
|
|
if host_system != 'windows'
|
|
unix_sources = files(
|
|
'gfiledescriptorbased.c',
|
|
'giounix-private.c',
|
|
'gunixfdmessage.c',
|
|
'gunixmount.c',
|
|
'gunixmounts.c',
|
|
'gunixvolume.c',
|
|
'gunixvolumemonitor.c',
|
|
'gunixinputstream.c',
|
|
'gunixoutputstream.c',
|
|
'gfdonotificationbackend.c',
|
|
'ggtknotificationbackend.c',
|
|
)
|
|
|
|
portal_sources = [files(
|
|
'gdocumentportal.c',
|
|
'gopenuriportal.c',
|
|
'gmemorymonitorportal.c',
|
|
'gnetworkmonitorportal.c',
|
|
'gpowerprofilemonitorportal.c',
|
|
'gproxyresolverportal.c',
|
|
'gtrashportal.c',
|
|
'gportalsupport.c',
|
|
'gportalnotificationbackend.c',
|
|
'gsandbox.c',
|
|
),
|
|
xdp_dbus_generated
|
|
]
|
|
|
|
gio_unix_include_headers = files(
|
|
'gfiledescriptorbased.h',
|
|
'gunixmounts.h',
|
|
'gunixfdmessage.h',
|
|
'gunixinputstream.h',
|
|
'gunixoutputstream.h',
|
|
)
|
|
|
|
if glib_have_cocoa
|
|
settings_sources += files('gnextstepsettingsbackend.m')
|
|
contenttype_sources += files('gosxcontenttype.m')
|
|
appinfo_sources += files('gosxappinfo.m')
|
|
framework_dep = dependency('appleframeworks', modules : ['Foundation', 'CoreFoundation', 'AppKit'])
|
|
platform_deps += [framework_dep]
|
|
if glib_have_os_x_9_or_later
|
|
unix_sources += files('gcocoanotificationbackend.m')
|
|
endif
|
|
application_headers += files('gosxappinfo.h')
|
|
else
|
|
contenttype_sources += files('gcontenttype.c')
|
|
appinfo_sources += files('gdesktopappinfo.c')
|
|
gio_unix_include_headers += files('gdesktopappinfo.h')
|
|
launch_desktop_sources = files('gio-launch-desktop.c')
|
|
|
|
if host_system == 'linux'
|
|
launch_desktop_sources += files('../glib/gjournal-private.c')
|
|
endif
|
|
|
|
gio_launch_desktop = executable('gio-launch-desktop', launch_desktop_sources,
|
|
include_directories : glibinc,
|
|
install : true,
|
|
install_dir : multiarch_libexecdir,
|
|
install_tag : 'bin',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args)
|
|
endif
|
|
|
|
subdir('xdgmime')
|
|
internal_deps += [xdgmime_lib]
|
|
|
|
install_headers(gio_unix_include_headers, subdir : 'gio-unix-2.0/gio')
|
|
|
|
if glib_conf.has('HAVE_NETLINK')
|
|
unix_sources += files(
|
|
'gnetworkmonitornetlink.c',
|
|
'gnetworkmonitornm.c',
|
|
)
|
|
endif
|
|
else
|
|
appinfo_sources += files('gwin32appinfo.c')
|
|
contenttype_sources += files('gcontenttype-win32.c')
|
|
platform_deps += [cc.find_library('shlwapi'),
|
|
cc.find_library('dnsapi'),
|
|
iphlpapi_dep,
|
|
winsock2]
|
|
platform_deps += uwp_gio_deps
|
|
|
|
win32_sources += files(
|
|
'gmemorymonitorwin32.c',
|
|
'gregistrysettingsbackend.c',
|
|
'gwin32registrykey.c',
|
|
'gwin32mount.c',
|
|
'gwin32volumemonitor.c',
|
|
'gwin32inputstream.c',
|
|
'gwin32outputstream.c',
|
|
'gwin32file-sync-stream.c',
|
|
'gwin32packageparser.c',
|
|
'gwin32networkmonitor.c',
|
|
'gwin32networkmonitor.h',
|
|
'gwin32notificationbackend.c',
|
|
'gwin32sid.c',
|
|
'gwin32sid.h',
|
|
)
|
|
|
|
gio_win_rc = configure_file(
|
|
input: 'gio.rc.in',
|
|
output: 'gio.rc',
|
|
configuration: glibconfig_conf,
|
|
)
|
|
gio_win_res = windows.compile_resources(gio_win_rc)
|
|
win32_sources += [gio_win_res]
|
|
|
|
gio_win32_include_headers = files(
|
|
'gregistrysettingsbackend.h',
|
|
'gwin32inputstream.h',
|
|
'gwin32outputstream.h',
|
|
)
|
|
install_headers(gio_win32_include_headers, subdir : 'gio-win32-2.0/gio')
|
|
endif
|
|
|
|
gio_base_sources = files(
|
|
'gappinfo.c',
|
|
'gasynchelper.c',
|
|
'gasyncinitable.c',
|
|
'gasyncresult.c',
|
|
'gbufferedinputstream.c',
|
|
'gbufferedoutputstream.c',
|
|
'gbytesicon.c',
|
|
'gcancellable.c',
|
|
'gcharsetconverter.c',
|
|
'gcontextspecificgroup.c',
|
|
'gconverter.c',
|
|
'gconverterinputstream.c',
|
|
'gconverteroutputstream.c',
|
|
'gcredentials.c',
|
|
'gdatagrambased.c',
|
|
'gdatainputstream.c',
|
|
'gdataoutputstream.c',
|
|
'gdebugcontroller.c',
|
|
'gdebugcontrollerdbus.c',
|
|
'gdrive.c',
|
|
'gdummyfile.c',
|
|
'gdummyproxyresolver.c',
|
|
'gdummytlsbackend.c',
|
|
'gemblem.c',
|
|
'gemblemedicon.c',
|
|
'gfile.c',
|
|
'gfileattribute.c',
|
|
'gfileenumerator.c',
|
|
'gfileicon.c',
|
|
'gfileinfo.c',
|
|
'gfileinputstream.c',
|
|
'gfilemonitor.c',
|
|
'gfilenamecompleter.c',
|
|
'gfileoutputstream.c',
|
|
'gfileiostream.c',
|
|
'gfilterinputstream.c',
|
|
'gfilteroutputstream.c',
|
|
'gicon.c',
|
|
'ginetaddress.c',
|
|
'ginetaddressmask.c',
|
|
'ginetsocketaddress.c',
|
|
'ginitable.c',
|
|
'ginputstream.c',
|
|
'gioerror.c',
|
|
'giomodule.c',
|
|
'giomodule-priv.c',
|
|
'gioscheduler.c',
|
|
'giostream.c',
|
|
'gloadableicon.c',
|
|
'gmarshal-internal.c',
|
|
'gmount.c',
|
|
'gmemorymonitor.c',
|
|
'gmemorymonitordbus.c',
|
|
'gmemoryinputstream.c',
|
|
'gmemoryoutputstream.c',
|
|
'gmountoperation.c',
|
|
'gnativesocketaddress.c',
|
|
'gnativevolumemonitor.c',
|
|
'gnetworkaddress.c',
|
|
'gnetworking.c',
|
|
'gnetworkmonitor.c',
|
|
'gnetworkmonitorbase.c',
|
|
'gnetworkservice.c',
|
|
'goutputstream.c',
|
|
'gpermission.c',
|
|
'gpollableinputstream.c',
|
|
'gpollableoutputstream.c',
|
|
'gpollableutils.c',
|
|
'gpollfilemonitor.c',
|
|
'gpowerprofilemonitor.c',
|
|
'gpowerprofilemonitordbus.c',
|
|
'gproxy.c',
|
|
'gproxyaddress.c',
|
|
'gproxyaddressenumerator.c',
|
|
'gproxyresolver.c',
|
|
'gresolver.c',
|
|
'gresource.c',
|
|
'gresourcefile.c',
|
|
'gseekable.c',
|
|
'gsimpleasyncresult.c',
|
|
'gsimpleiostream.c',
|
|
'gsimplepermission.c',
|
|
'gsimpleproxyresolver.c',
|
|
'gsocket.c',
|
|
'gsocketaddress.c',
|
|
'gsocketaddressenumerator.c',
|
|
'gsocketclient.c',
|
|
'gsocketconnectable.c',
|
|
'gsocketconnection.c',
|
|
'gsocketcontrolmessage.c',
|
|
'gsocketinputstream.c',
|
|
'gsocketlistener.c',
|
|
'gsocketoutputstream.c',
|
|
'gsocketservice.c',
|
|
'gsrvtarget.c',
|
|
'gsubprocesslauncher.c',
|
|
'gsubprocess.c',
|
|
'gtask.c',
|
|
'gtcpconnection.c',
|
|
'gtcpwrapperconnection.c',
|
|
'gthemedicon.c',
|
|
'gthreadedsocketservice.c',
|
|
'gthreadedresolver.c',
|
|
'gthreadedresolver.h',
|
|
'gtlsbackend.c',
|
|
'gtlscertificate.c',
|
|
'gtlsclientconnection.c',
|
|
'gtlsconnection.c',
|
|
'gtlsdatabase.c',
|
|
'gtlsfiledatabase.c',
|
|
'gtlsinteraction.c',
|
|
'gtlspassword.c',
|
|
'gtlsserverconnection.c',
|
|
'gdtlsconnection.c',
|
|
'gdtlsclientconnection.c',
|
|
'gdtlsserverconnection.c',
|
|
'gunionvolumemonitor.c',
|
|
'gunixconnection.c',
|
|
'gunixfdlist.c',
|
|
'gunixcredentialsmessage.c',
|
|
'gunixsocketaddress.c',
|
|
'gvfs.c',
|
|
'gvolume.c',
|
|
'gvolumemonitor.c',
|
|
'gzlibcompressor.c',
|
|
'gzlibdecompressor.c',
|
|
'glistmodel.c',
|
|
'gliststore.c',
|
|
)
|
|
|
|
gio_sources = gio_base_sources
|
|
|
|
if glib_build_shared
|
|
gio_sources += files ('../glib/gtrace.c')
|
|
endif
|
|
|
|
gio_sources += appinfo_sources
|
|
gio_sources += contenttype_sources
|
|
gio_sources += gdbus_daemon_sources
|
|
gio_sources += unix_sources
|
|
gio_sources += win32_sources
|
|
gio_sources += application_sources
|
|
gio_sources += settings_sources
|
|
gio_sources += gdbus_sources
|
|
gio_sources += portal_sources
|
|
gio_sources += local_sources
|
|
|
|
MISSING_STUFF = '''
|
|
# This is read by gobject-introspection/misc/ and gtk-doc
|
|
gio-public-headers.txt: Makefile
|
|
'$(AM_V_GEN) echo $(gioinclude_HEADERS) $(giowin32include_HEADERS) $(giounixinclude_HEADERS) > $@.tmp && mv $@.tmp $@
|
|
|
|
gio.def: libgio-2.0.la
|
|
'$(AM_V_GEN) dumpbin.exe -exports .libs/libgio-2.0-0.dll | awk 'BEGIN { print "EXPORTS" } / +[[:digit:]]+ +[[:xdigit:]]+ +[[:xdigit:]]+/{ print $$4 }' > gio.def.tmp && mv gio.def.tmp gio.def
|
|
|
|
gio-2.0.lib: libgio-2.0.la gio.def
|
|
'$(AM_V_GEN) lib.exe -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgio-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:$(builddir)/gio.def -out:$@
|
|
'''
|
|
|
|
gio_headers = files(
|
|
'gappinfo.h',
|
|
'gasyncinitable.h',
|
|
'gasyncresult.h',
|
|
'gbufferedinputstream.h',
|
|
'gbufferedoutputstream.h',
|
|
'gbytesicon.h',
|
|
'gcancellable.h',
|
|
'gcontenttype.h',
|
|
'gcharsetconverter.h',
|
|
'gconverter.h',
|
|
'gconverterinputstream.h',
|
|
'gconverteroutputstream.h',
|
|
'gdatagrambased.h',
|
|
'gdatainputstream.h',
|
|
'gdataoutputstream.h',
|
|
'gdebugcontroller.h',
|
|
'gdebugcontrollerdbus.h',
|
|
'gdrive.h',
|
|
'gemblem.h',
|
|
'gemblemedicon.h',
|
|
'gfile.h',
|
|
'gfileattribute.h',
|
|
'gfileenumerator.h',
|
|
'gfileicon.h',
|
|
'gfileinfo.h',
|
|
'gfileinputstream.h',
|
|
'gfilemonitor.h',
|
|
'gfilenamecompleter.h',
|
|
'gfileoutputstream.h',
|
|
'gfileiostream.h',
|
|
'gfilterinputstream.h',
|
|
'gfilteroutputstream.h',
|
|
'gicon.h',
|
|
'ginetaddress.h',
|
|
'ginetaddressmask.h',
|
|
'ginetsocketaddress.h',
|
|
'ginitable.h',
|
|
'ginputstream.h',
|
|
'gio.h',
|
|
'gio-autocleanups.h',
|
|
'gioenums.h',
|
|
'gioerror.h',
|
|
'giomodule.h',
|
|
'gioscheduler.h',
|
|
'giostream.h',
|
|
'giotypes.h',
|
|
'gloadableicon.h',
|
|
'gmount.h',
|
|
'gmemoryinputstream.h',
|
|
'gmemorymonitor.h',
|
|
'gmemoryoutputstream.h',
|
|
'gmountoperation.h',
|
|
'gnativesocketaddress.h',
|
|
'gnativevolumemonitor.h',
|
|
'gnetworkaddress.h',
|
|
'gnetworkmonitor.h',
|
|
'gnetworkservice.h',
|
|
'goutputstream.h',
|
|
'gpermission.h',
|
|
'gpollableinputstream.h',
|
|
'gpollableoutputstream.h',
|
|
'gpollableutils.h',
|
|
'gpowerprofilemonitor.h',
|
|
'gproxy.h',
|
|
'gproxyaddress.h',
|
|
'gproxyaddressenumerator.h',
|
|
'gproxyresolver.h',
|
|
'gresolver.h',
|
|
'gresource.h',
|
|
'gseekable.h',
|
|
'gsimpleasyncresult.h',
|
|
'gsimpleiostream.h',
|
|
'gsimplepermission.h',
|
|
'gsimpleproxyresolver.h',
|
|
'gsocket.h',
|
|
'gsocketaddress.h',
|
|
'gsocketaddressenumerator.h',
|
|
'gsocketclient.h',
|
|
'gsocketconnectable.h',
|
|
'gsocketconnection.h',
|
|
'gsocketcontrolmessage.h',
|
|
'gsocketlistener.h',
|
|
'gsocketservice.h',
|
|
'gsrvtarget.h',
|
|
'gsubprocess.h',
|
|
'gsubprocesslauncher.h',
|
|
'gtask.h',
|
|
'gtcpconnection.h',
|
|
'gtcpwrapperconnection.h',
|
|
'gthemedicon.h',
|
|
'gthreadedsocketservice.h',
|
|
'gtlsbackend.h',
|
|
'gtlscertificate.h',
|
|
'gtlsclientconnection.h',
|
|
'gtlsconnection.h',
|
|
'gtlsdatabase.h',
|
|
'gtlsfiledatabase.h',
|
|
'gtlsinteraction.h',
|
|
'gtlspassword.h',
|
|
'gtlsserverconnection.h',
|
|
'gdtlsconnection.h',
|
|
'gdtlsclientconnection.h',
|
|
'gdtlsserverconnection.h',
|
|
'gunixconnection.h',
|
|
'gunixcredentialsmessage.h',
|
|
'gunixfdlist.h',
|
|
'gunixsocketaddress.h',
|
|
'gvfs.h',
|
|
'gvolume.h',
|
|
'gvolumemonitor.h',
|
|
'gzlibcompressor.h',
|
|
'gzlibdecompressor.h',
|
|
'glistmodel.h',
|
|
'gliststore.h',
|
|
)
|
|
|
|
gio_visibility_h = custom_target(
|
|
output: 'gio-visibility.h',
|
|
command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GIO', '@OUTPUT@'],
|
|
install: true,
|
|
install_dir: gio_includedir,
|
|
# FIXME: Not needed with Meson >= 0.64.0
|
|
install_tag: 'devel',
|
|
)
|
|
gio_sources += gio_visibility_h
|
|
|
|
gio_headers += application_headers
|
|
gio_headers += settings_headers
|
|
gio_headers += gdbus_headers
|
|
install_headers(gio_headers, install_dir : gio_includedir)
|
|
|
|
# We can't use gnome.mkenums() because the GNOME module looks for glib-mkenums
|
|
# in PATH, which means you can't bootstrap glib with its own glib-mkenums.
|
|
gioenumtypes_h = custom_target('gioenumtypes_h',
|
|
output : 'gioenumtypes.h',
|
|
capture : true,
|
|
input : gio_headers,
|
|
install : true,
|
|
install_dir : gio_includedir,
|
|
# FIXME: Not needed with Meson >= 0.64.0
|
|
install_tag: 'devel',
|
|
command : [python, glib_mkenums,
|
|
'--template', files('gioenumtypes.h.template'),
|
|
'@INPUT@', gnetworking_h])
|
|
|
|
gioenumtypes_c = custom_target('gioenumtypes_c',
|
|
output : 'gioenumtypes.c',
|
|
capture : true,
|
|
input : gio_headers,
|
|
depends : [gioenumtypes_h],
|
|
command : [python, glib_mkenums,
|
|
'--template', files('gioenumtypes.c.template'),
|
|
'@INPUT@', gnetworking_h])
|
|
|
|
gioenumtypes_dep = declare_dependency(sources : [gioenumtypes_h, glib_enumtypes_h, gio_visibility_h])
|
|
|
|
# inotify
|
|
if glib_conf.has('HAVE_SYS_INOTIFY_H') and have_func_inotify_init1
|
|
subdir('inotify')
|
|
internal_deps += [ inotify_lib ]
|
|
endif
|
|
|
|
# kevent
|
|
if have_func_kqueue and have_func_kevent
|
|
subdir('kqueue')
|
|
internal_deps += [ kqueue_lib ]
|
|
endif
|
|
|
|
if host_system == 'windows'
|
|
subdir('win32')
|
|
internal_deps += [ giowin32_lib ]
|
|
endif
|
|
|
|
if have_bash
|
|
bash_comp_inst_dir = ''
|
|
if bash_comp_dep.found()
|
|
bash_comp_dir_override = bash_comp_dep.version().version_compare('>= 2.10') ? ['datadir', get_option('datadir')] : ['prefix', get_option('prefix')]
|
|
bash_comp_inst_dir = bash_comp_dep.get_variable('completionsdir', pkgconfig_define: bash_comp_dir_override)
|
|
endif
|
|
|
|
if bash_comp_inst_dir == ''
|
|
message('Found bash-completion but the .pc file did not set \'completionsdir\', fallback to a predefined path')
|
|
bash_comp_inst_dir = join_paths(get_option('datadir'), 'bash-completion/completions')
|
|
endif
|
|
|
|
install_data([
|
|
'completion/gapplication',
|
|
'completion/gdbus',
|
|
'completion/gio',
|
|
'completion/gsettings',
|
|
'completion/gresource'
|
|
],
|
|
install_dir: bash_comp_inst_dir,
|
|
install_tag: 'bin',
|
|
)
|
|
endif
|
|
|
|
if enable_dtrace
|
|
gio_dtrace_obj = dtrace_obj_gen.process('gio_probes.d')
|
|
gio_dtrace_hdr = dtrace_hdr_gen.process('gio_probes.d')
|
|
else
|
|
gio_dtrace_obj = []
|
|
gio_dtrace_hdr = []
|
|
endif
|
|
|
|
libgio = library('gio-2.0',
|
|
gioenumtypes_h, gioenumtypes_c, gnetworking_h, gio_sources,
|
|
gio_dtrace_hdr, gio_dtrace_obj,
|
|
version : library_version,
|
|
soversion : soversion,
|
|
darwin_versions : darwin_versions,
|
|
install : true,
|
|
include_directories : [configinc, gioinc],
|
|
# '$(gio_win32_res_ldflag)',
|
|
link_with: internal_deps,
|
|
dependencies : [libz_dep, libdl_dep, libmount_dep, libglib_dep,
|
|
libgobject_dep, libgmodule_dep, selinux_dep, xattr_dep,
|
|
platform_deps, network_libs, libsysprof_capture_dep,
|
|
gioenumtypes_dep, gvdb_dep],
|
|
c_args : [gio_c_args, gio_c_args_internal],
|
|
objc_args : [gio_c_args, gio_c_args_internal],
|
|
gnu_symbol_visibility : 'hidden',
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : [noseh_link_args, glib_link_flags],
|
|
)
|
|
|
|
if get_option('gio_module_dir') != ''
|
|
pkgconfig_giomodulesdir = join_paths('${prefix}', get_option('gio_module_dir'))
|
|
else
|
|
pkgconfig_giomodulesdir = join_paths('${libdir}', 'gio', 'modules')
|
|
endif
|
|
|
|
schemas_subdir = join_paths('glib-2.0', 'schemas')
|
|
dtds_subdir = join_paths('glib-2.0', 'dtds')
|
|
|
|
libgio_dep = declare_dependency(link_with : libgio,
|
|
dependencies : [libgmodule_dep, libgobject_dep, gioenumtypes_dep],
|
|
include_directories : [gioinc],
|
|
variables : [
|
|
'schemasdir=' + join_paths(glib_datadir, schemas_subdir),
|
|
'giomoduledir=' + glib_giomodulesdir,
|
|
'dtdsdir=' + join_paths(glib_datadir, dtds_subdir)
|
|
],
|
|
)
|
|
|
|
pkg.generate(libgio,
|
|
requires : ['glib-2.0', 'gobject-2.0'],
|
|
variables : [
|
|
'schemasdir=' + '${datadir}' / schemas_subdir,
|
|
'dtdsdir=' + '${datadir}' / dtds_subdir,
|
|
'giomoduledir=' + pkgconfig_giomodulesdir,
|
|
'gio=' + '${bindir}' / 'gio',
|
|
'gio_querymodules=' + pkgconfig_multiarch_bindir / 'gio-querymodules',
|
|
'glib_compile_schemas=' + pkgconfig_multiarch_bindir / 'glib-compile-schemas',
|
|
'glib_compile_resources=' + '${bindir}' / 'glib-compile-resources',
|
|
'gdbus=' + '${bindir}' /'gdbus',
|
|
'gdbus_codegen=' + '${bindir}' / 'gdbus-codegen',
|
|
'gresource=' + '${bindir}' / 'gresource',
|
|
'gsettings=' + '${bindir}' / 'gsettings',
|
|
],
|
|
version : glib_version,
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'gio-2.0',
|
|
name : 'GIO',
|
|
description : 'glib I/O library',
|
|
)
|
|
meson.override_dependency('gio-2.0', libgio_dep)
|
|
|
|
if host_system == 'windows'
|
|
pkg.generate(requires : ['gobject-2.0', 'gmodule-no-export-2.0', 'gio-2.0'],
|
|
subdirs : ['gio-win32-2.0'],
|
|
version : glib_version,
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'gio-windows-2.0',
|
|
name : 'GIO Windows specific APIs',
|
|
description : 'Windows specific headers for glib I/O library',
|
|
)
|
|
meson.override_dependency('gio-windows-2.0', libgio_dep)
|
|
else
|
|
pkg.generate(requires : ['gobject-2.0', 'gio-2.0'],
|
|
subdirs : ['gio-unix-2.0'],
|
|
version : glib_version,
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'gio-unix-2.0',
|
|
name : 'GIO unix specific APIs',
|
|
description : 'unix specific headers for glib I/O library',
|
|
)
|
|
meson.override_dependency('gio-unix-2.0', libgio_dep)
|
|
endif
|
|
|
|
if host_system == 'windows'
|
|
# Hack till https://github.com/mesonbuild/meson/issues/2324 is fixed
|
|
libgiounix_dep = dependency('', required : false)
|
|
libgiowin32_dep = libgio_dep
|
|
else
|
|
libgiowin32_dep = dependency('', required : false)
|
|
libgiounix_dep = libgio_dep
|
|
endif
|
|
|
|
# Dependencies used by executables below
|
|
have_libelf = false
|
|
libelf = dependency('libelf', version : '>= 0.8.12', required : false)
|
|
if libelf.found() and get_option('libelf').allowed()
|
|
have_libelf = true
|
|
else
|
|
# This fallback is necessary on *BSD. elfutils isn't the only libelf
|
|
# implementation, and *BSD usually includes their own libelf as a system
|
|
# library which doesn't have a corresponding .pc file.
|
|
libelf = cc.find_library('elf', required : get_option ('libelf'))
|
|
have_libelf = libelf.found()
|
|
have_libelf = have_libelf and cc.has_function('elf_begin', dependencies : libelf)
|
|
have_libelf = have_libelf and cc.has_function('elf_getshdrstrndx', dependencies : libelf)
|
|
have_libelf = have_libelf and cc.has_function('elf_getshdrnum', dependencies : libelf)
|
|
have_libelf = have_libelf and cc.has_header('libelf.h')
|
|
endif
|
|
|
|
if have_libelf
|
|
glib_conf.set('HAVE_LIBELF', 1)
|
|
else
|
|
libelf = []
|
|
endif
|
|
|
|
gconstructor_as_data_h = custom_target('gconstructor_as_data.h',
|
|
input : ['data-to-c.py', files('../glib/gconstructor.h')],
|
|
output : ['gconstructor_as_data.h'],
|
|
command : [python, '@INPUT0@', '@INPUT1@', 'gconstructor_code', '@OUTPUT@'])
|
|
|
|
# Several installed executables
|
|
gio_tool_sources = [
|
|
'gio-tool.c',
|
|
'gio-tool.h',
|
|
'gio-tool-cat.c',
|
|
'gio-tool-copy.c',
|
|
'gio-tool-info.c',
|
|
'gio-tool-launch.c',
|
|
'gio-tool-list.c',
|
|
'gio-tool-mime.c',
|
|
'gio-tool-mkdir.c',
|
|
'gio-tool-monitor.c',
|
|
'gio-tool-mount.c',
|
|
'gio-tool-move.c',
|
|
'gio-tool-open.c',
|
|
'gio-tool-rename.c',
|
|
'gio-tool-remove.c',
|
|
'gio-tool-save.c',
|
|
'gio-tool-set.c',
|
|
'gio-tool-trash.c',
|
|
'gio-tool-tree.c',
|
|
]
|
|
|
|
gio_tool = executable('gio', gio_tool_sources,
|
|
install : true,
|
|
install_tag : 'bin',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
|
|
|
|
executable('gresource', 'gresource-tool.c',
|
|
install : true,
|
|
install_tag : 'bin',
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libelf, libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
|
|
|
|
gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodule-priv.c',
|
|
install : true,
|
|
install_dir : multiarch_bindir,
|
|
install_tag : 'bin',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
|
|
|
|
glib_compile_schemas = executable('glib-compile-schemas',
|
|
['glib-compile-schemas.c'],
|
|
install : true,
|
|
install_dir : multiarch_bindir,
|
|
install_tag : 'bin',
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep, gvdb_dep])
|
|
|
|
glib_compile_resources = executable('glib-compile-resources',
|
|
[gconstructor_as_data_h, 'glib-compile-resources.c'],
|
|
install : true,
|
|
install_tag : 'bin-devel',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep, gvdb_dep])
|
|
install_data('gresource.dtd',
|
|
install_dir: get_option('datadir') / dtds_subdir,
|
|
install_tag: 'devel',
|
|
)
|
|
|
|
# Cannot override those programs in cross compilation case because they are
|
|
# native executables that cannot be run on the build machine.
|
|
# See https://gitlab.gnome.org/GNOME/glib/issues/1859.
|
|
if meson.can_run_host_binaries()
|
|
meson.override_find_program('glib-compile-schemas', glib_compile_schemas)
|
|
meson.override_find_program('glib-compile-resources', glib_compile_resources)
|
|
meson.override_find_program('gio-querymodules', gio_querymodules)
|
|
endif
|
|
|
|
executable('gsettings', 'gsettings-tool.c',
|
|
install : true,
|
|
install_tag : 'bin',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
|
|
install_data('gschema.dtd',
|
|
install_dir : get_option('datadir') / schemas_subdir,
|
|
install_tag : 'devel',
|
|
)
|
|
|
|
install_data(['gschema.loc', 'gschema.its'],
|
|
install_dir : get_option('datadir') / 'gettext' / 'its',
|
|
install_tag : 'devel',
|
|
)
|
|
|
|
executable('gdbus', 'gdbus-tool.c',
|
|
install : true,
|
|
install_tag : 'bin',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
|
|
|
|
if host_system != 'windows' and not glib_have_cocoa
|
|
executable('gapplication', 'gapplication-tool.c',
|
|
install : true,
|
|
install_tag : 'bin',
|
|
c_args : gio_c_args,
|
|
# intl.lib is not compatible with SAFESEH
|
|
link_args : noseh_link_args,
|
|
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
|
|
endif
|
|
|
|
if enable_systemtap
|
|
gio_stp = configure_file(input : 'gio.stp.in',
|
|
output : '@0@.stp'.format(libgio.full_path().split('/').get(-1)),
|
|
configuration : stp_cdata,
|
|
install_dir : tapset_install_dir,
|
|
install_tag : 'systemtap',
|
|
)
|
|
endif
|
|
|
|
if multiarch_bindir != get_option('bindir')
|
|
foreach exe : ['gio-querymodules', 'glib-compile-schemas']
|
|
install_symlink(
|
|
exe,
|
|
install_dir : get_option('bindir'),
|
|
pointing_to : get_option('prefix') / multiarch_bindir / exe,
|
|
)
|
|
endforeach
|
|
endif
|
|
|
|
if enable_gir
|
|
gio_gir_sources = [
|
|
gio_visibility_h,
|
|
gioenumtypes_h,
|
|
gnetworking_h,
|
|
gio_headers,
|
|
gio_base_sources,
|
|
application_sources,
|
|
gdbus_sources,
|
|
appinfo_sources,
|
|
contenttype_sources,
|
|
unix_sources,
|
|
win32_sources,
|
|
settings_sources,
|
|
]
|
|
gio_gir_packages = [ 'gio-2.0' ]
|
|
gio_gir_args = [
|
|
'-DGIO_COMPILATION',
|
|
'-DG_SETTINGS_ENABLE_BACKEND',
|
|
'--symbol-prefix=gio',
|
|
]
|
|
if host_system == 'windows'
|
|
gio_gir_sources += gio_win32_include_headers
|
|
foreach h: gio_win32_include_headers
|
|
gio_gir_args += '--c-include=@0@'.format(h)
|
|
endforeach
|
|
gio_gir_packages += 'gio-win32-2.0'
|
|
gio_gir_args += '--pkg=gio-win32-2.0'
|
|
else
|
|
gio_gir_sources += gio_unix_include_headers
|
|
foreach h: gio_unix_include_headers
|
|
gio_gir_args += '--c-include=@0@'.format(h)
|
|
endforeach
|
|
gio_gir_packages += 'gio-unix-2.0'
|
|
gio_gir_args += '--pkg=gio-unix-2.0'
|
|
endif
|
|
|
|
gio_gir = gnome.generate_gir(libgio,
|
|
sources: gio_gir_sources,
|
|
namespace: 'Gio',
|
|
nsversion: '2.0',
|
|
identifier_prefix: 'G',
|
|
symbol_prefix: 'g',
|
|
export_packages: gio_gir_packages,
|
|
header: 'gio/gio.h',
|
|
includes: [ glib_gir[0], gmodule_gir[0], gobject_gir[0] ],
|
|
install: true,
|
|
dependencies: [ libglib_dep, libgobject_dep, libgmodule_dep ],
|
|
extra_args: gir_args + gio_gir_args,
|
|
)
|
|
endif
|
|
|
|
if build_tests
|
|
subdir('tests')
|
|
endif
|
|
|
|
# The following is an example for building internal marshallers that are used
|
|
# by GIO. We cannot guarantee glib-genmarshal availability while building GLib
|
|
# so they are pre-generated and placed into gmarshal-internal.[ch].
|
|
#
|
|
# gmarshal_internal = gnome.genmarshal('gmarshal-internal',
|
|
# sources: 'gmarshal-internal.list',
|
|
# prefix: '_g_cclosure_marshal',
|
|
# valist_marshallers: true,
|
|
# internal: true,
|
|
# )
|