glib/gio/meson.build
Mihai Moldovan bd4c16b356 gio: actually install and reference gnativesocketaddress.h.
The header file was installed when building using autotools, but was
inadvertently omitted in the meson targets.

Luckily, ABI is not impacted, since gnativesocketaddress.c was always
compiled and linked into libgio.

Fixes: #1854
2019-08-29 14:32:55 +02:00

1028 lines
30 KiB
Meson
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

gio_c_args = [
'-DG_LOG_DOMAIN="GLib-GIO"',
'-DGIO_COMPILATION',
'-DGIO_MODULE_DIR="@0@"'.format(glib_giomodulesdir),
]
gio_c_args += glib_hidden_visibility_args
# FIXME: Install empty glib_giomodulesdir
gnetworking_h_conf = configuration_data()
gnetworking_h_wspiapi_include = ''
gnetworking_h_nameser_compat_include = ''
if host_system == 'windows'
# <wspiapi.h> in the Windows SDK and in mingw-w64 has wrappers for
# inline workarounds for getaddrinfo, getnameinfo and freeaddrinfo if
# they aren't present at run-time (on Windows 2000).
gnetworking_h_wspiapi_include = '#include <wspiapi.h>'
elif not host_system.contains('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' ]
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
# res_init()
if cc.links('''#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
int main (int argc, char ** argv) {
return res_init();
}''', args : network_args, name : 'res_init()')
glib_conf.set('HAVE_RES_INIT', 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.contains('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('WSPIAPI_INCLUDE', gnetworking_h_wspiapi_include)
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 : join_paths(get_option('includedir'), 'glib-2.0/gio'),
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,
command : [python, gdbus_codegen,
'--interface-prefix', 'org.freedesktop.portal.',
'--output-directory', '@OUTDIR@',
'--generate-c-code', 'xdp-dbus',
'--c-namespace', 'GXdp',
'--annotate', 'org.freedesktop.portal.Documents.Add()',
'org.gtk.GDBus.C.UnixFD', 'true',
'--annotate', 'org.freedesktop.portal.Documents.AddNamed()',
'org.gtk.GDBus.C.UnixFD', 'true',
'--annotate', 'org.freedesktop.portal.Documents.AddFull()',
'org.gtk.GDBus.C.UnixFD', 'true',
'--annotate', 'org.freedesktop.portal.OpenURI.OpenFile()',
'org.gtk.GDBus.C.UnixFD', 'true',
'--annotate', 'org.freedesktop.portal.Trash.TrashFile()',
'org.gtk.GDBus.C.UnixFD', 'true',
'@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,
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(
'gvdb/gvdb-reader.c',
'gdelayedsettingsbackend.c',
'gkeyfilesettingsbackend.c',
'gmemorysettingsbackend.c',
'gnullsettingsbackend.c',
'gsettingsbackend.c',
'gsettingsschema.c',
'gsettings-mapping.c',
'gsettings.c',
)
if host_system == 'windows'
settings_sources += files('gregistrysettingsbackend.c')
endif
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 = []
# TODO: internal_objects is a workaround for
# <https://github.com/mesonbuild/meson/issues/3934> and
# <https://github.com/mesonbuild/meson/issues/3937>. When we can depend
# on a meson version where those are fixed, revert the commit that
# introduced this workaround.
internal_objects = []
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',
'gunixconnection.c',
'gunixcredentialsmessage.c',
'gunixfdlist.c',
'gunixfdmessage.c',
'gunixmount.c',
'gunixmounts.c',
'gunixsocketaddress.c',
'gunixvolume.c',
'gunixvolumemonitor.c',
'gunixinputstream.c',
'gunixoutputstream.c',
'gfdonotificationbackend.c',
'ggtknotificationbackend.c',
)
portal_sources = [files(
'gdocumentportal.c',
'gopenuriportal.c',
'gnetworkmonitorportal.c',
'gproxyresolverportal.c',
'gtrashportal.c',
'gportalsupport.c',
'gportalnotificationbackend.c'),
xdp_dbus_generated
]
gio_unix_include_headers = files(
'gfiledescriptorbased.h',
'gunixconnection.h',
'gunixcredentialsmessage.h',
'gunixmounts.h',
'gunixfdlist.h',
'gunixfdmessage.h',
'gunixinputstream.h',
'gunixoutputstream.h',
'gunixsocketaddress.h',
)
if glib_have_cocoa
settings_sources += files('gnextstepsettingsbackend.m')
contenttype_sources += files('gosxcontenttype.m')
appinfo_sources += files('gosxappinfo.m')
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')
executable('gio-launch-desktop', 'gio-launch-desktop.c',
install : true,
c_args : gio_c_args,
# intl.lib is not compatible with SAFESEH
link_args : noseh_link_args)
endif
subdir('xdgmime')
internal_deps += [xdgmime_lib]
internal_objects += [xdgmime_lib.extract_all_objects()]
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]
win32_sources += files(
'gwin32registrykey.c',
'gwin32mount.c',
'gwin32volumemonitor.c',
'gwin32inputstream.c',
'gwin32outputstream.c',
'gwin32networkmonitor.c',
'gwin32networkmonitor.h',
'gwin32notificationbackend.c',
)
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(
'gwin32inputstream.h',
'gwin32outputstream.h',
)
install_headers(gio_win32_include_headers, subdir : 'gio-win32-2.0/gio')
endif
gio_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',
'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',
'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',
'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',
'gvfs.c',
'gvolume.c',
'gvolumemonitor.c',
'gzlibcompressor.c',
'gzlibdecompressor.c',
'glistmodel.c',
'gliststore.c',
)
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',
'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',
'gmemoryoutputstream.h',
'gmountoperation.h',
'gnativesocketaddress.h',
'gnativevolumemonitor.h',
'gnetworkaddress.h',
'gnetworkmonitor.h',
'gnetworkservice.h',
'goutputstream.h',
'gpermission.h',
'gpollableinputstream.h',
'gpollableoutputstream.h',
'gpollableutils.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',
'gvfs.h',
'gvolume.h',
'gvolumemonitor.h',
'gzlibcompressor.h',
'gzlibdecompressor.h',
'glistmodel.h',
'gliststore.h',
)
gio_headers += application_headers
gio_headers += settings_headers
gio_headers += gdbus_headers
install_headers(gio_headers, subdir : 'glib-2.0/gio/')
# 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 : join_paths(get_option('includedir'), 'glib-2.0/gio'),
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])
# inotify
if glib_conf.has('HAVE_SYS_INOTIFY_H') and have_func_inotify_init1
subdir('inotify')
internal_deps += [ inotify_lib ]
internal_objects += [inotify_lib.extract_all_objects()]
endif
# kevent
if have_func_kqueue and have_func_kevent
subdir('kqueue')
internal_deps += [ kqueue_lib ]
internal_objects += [kqueue_lib.extract_all_objects()]
endif
if host_system == 'windows'
subdir('win32')
internal_deps += [ giowin32_lib ]
internal_objects += [giowin32_lib.extract_all_objects()]
endif
if have_bash
install_data([
'completion/gapplication',
'completion/gdbus',
'completion/gio',
'completion/gsettings',
'completion/gresource'
],
install_dir: join_paths(get_option('datadir'), 'bash-completion/completions'))
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,
objects : internal_objects,
version : library_version,
soversion : soversion,
darwin_versions : darwin_versions,
install : true,
include_directories : [configinc, gioinc],
# '$(gio_win32_res_ldflag)',
dependencies : [libz_dep, libdl_dep, libmount_dep, libglib_dep,
libgobject_dep, libgmodule_dep, selinux_dep, xattr_dep,
platform_deps, network_libs],
c_args : gio_c_args,
objc_args : gio_c_args,
# intl.lib is not compatible with SAFESEH
link_args : [noseh_link_args, glib_link_flags],
)
giomodulesdir = get_option('gio_module_dir')
if giomodulesdir == ''
giomodulesdir = join_paths('${libdir}', 'gio', 'modules')
endif
schemas_subdir = join_paths('glib-2.0', 'schemas')
pkg.generate(libgio,
libraries_private : [osx_ldflags],
requires : ['glib-2.0', 'gobject-2.0'],
variables : ['datadir=' + join_paths('${prefix}', get_option('datadir')),
'schemasdir=' + join_paths('${datadir}', schemas_subdir),
'bindir=' + join_paths('${prefix}', get_option('bindir')),
'giomoduledir=' + giomodulesdir,
'gio=' + join_paths('${bindir}', 'gio'),
'gio_querymodules=' + join_paths('${bindir}', 'gio-querymodules'),
'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'),
'glib_compile_resources=' + join_paths('${bindir}', 'glib-compile-resources'),
'gdbus=' + join_paths('${bindir}', 'gdbus'),
'gdbus_codegen=' + join_paths('${bindir}', 'gdbus-codegen'),
'gresource=' + join_paths('${bindir}', 'gresource'),
'gsettings=' + join_paths('${bindir}', 'gsettings')],
version : glib_version,
install_dir : glib_pkgconfigreldir,
filebase : 'gio-2.0',
name : 'GIO',
description : 'glib I/O library',
)
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',
)
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',
)
endif
libgio_dep = declare_dependency(link_with : libgio,
dependencies : [libgmodule_dep, libgobject_dep, gioenumtypes_dep],
include_directories : [gioinc])
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()
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 : false)
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-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',
]
executable('gio', gio_tool_sources,
install : true,
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,
# 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,
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',
[gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-schemas.c'],
install : true,
# intl.lib is not compatible with SAFESEH
link_args : noseh_link_args,
dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
glib_compile_resources = executable('glib-compile-resources',
[gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-resources.c'],
install : true,
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])
# 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 not meson.is_cross_build()
meson.override_find_program('glib-compile-schemas', glib_compile_schemas)
meson.override_find_program('glib-compile-resources', glib_compile_resources)
endif
executable('gsettings', 'gsettings-tool.c',
install : true,
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 : join_paths(get_option('datadir'), schemas_subdir))
install_data(['gschema.loc', 'gschema.its'],
install_dir : join_paths(get_option('datadir'), 'gettext/its'))
executable('gdbus', 'gdbus-tool.c',
install : true,
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,
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,
)
endif
subdir('fam')
# Dont build the tests unless we can run them (either natively or in an exe wrapper)
build_tests = not meson.is_cross_build() or (meson.is_cross_build() and meson.has_exe_wrapper())
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,
# )