| gio_c_args = [ |
| '-DG_LOG_DOMAIN="GLib-GIO"', |
| '-DGIO_COMPILATION', |
| '-DGIO_MODULE_DIR="@0@"'.format(glib_giomodulesdir), |
| '-DLOCALSTATEDIR="@0@"'.format(glib_localstatedir), |
| ] |
| |
| gio_c_args += glib_hidden_visibility_args |
| |
| # FIXME: Install empty glib_giomodulesdir |
| |
| 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 |
| |
| # 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 == '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 : 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', |
| '@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', |
| 'giounix-private.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', |
| 'gmemorymonitorportal.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') |
| 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] |
| platform_deps += uwp_gio_deps |
| |
| win32_sources += files( |
| 'gwin32registrykey.c', |
| 'gwin32mount.c', |
| 'gwin32volumemonitor.c', |
| 'gwin32inputstream.c', |
| 'gwin32outputstream.c', |
| 'gwin32file-sync-stream.c', |
| 'gwin32packageparser.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', |
| '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', |
| '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', |
| '../glib/gtrace.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', |
| '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', |
| '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 |
| 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_pkgconfig_variable('completionsdir', define_variable: 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) |
| 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, libsysprof_capture_dep], |
| 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], |
| ) |
| |
| 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') |
| |
| libgio_dep = declare_dependency(link_with : libgio, |
| dependencies : [libgmodule_dep, libgobject_dep, gioenumtypes_dep], |
| include_directories : [gioinc]) |
| |
| 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=' + pkgconfig_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 meson.version().version_compare('>=0.54.0') |
| meson.override_dependency('gio-2.0', libgio_dep) |
| endif |
| |
| |
| 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', |
| ) |
| if meson.version().version_compare('>=0.54.0') |
| meson.override_dependency('gio-win32-2.0', libgio_dep) |
| endif |
| 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', |
| ) |
| if meson.version().version_compare('>=0.54.0') |
| meson.override_dependency('gio-unix-2.0', libgio_dep) |
| endif |
| 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 : get_option ('libelf')) |
| 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 : 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', |
| ] |
| |
| 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', |
| ['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) |
| meson.override_find_program('gio-querymodules', gio_querymodules) |
| 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') |
| 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, |
| # ) |