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 #include int qclass = C_IN;''', name : 'C_IN in public headers (no arpa/nameser_compat.h needed)') if cc.compiles('''#include #include #include int qclass = C_IN;''', name : 'arpa/nameser_compat.h needed for C_IN') gnetworking_h_nameser_compat_include = '#include ' 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 int main (int argc, char ** argv) { return res_query("test", 0, 0, (void *)0, 0); }''' res_query_test_full = '''#include #include #include ''' + 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 #include 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 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 #include #include #include 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 #include #include #include 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 #include #include #include 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 #include #include #include 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 ') glib_conf.set('HAVE_IP_MREQN', 1) endif if cc.compiles('''#include #include 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 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 = [] 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') unix_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') unix_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 win32_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', ) if glib_build_shared 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] endif 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 += 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 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, # )