Meson: Group all glib tests into a single dict
[glib.git] / gio / meson.build
bloba24a92e3df9c74af7a39d551a5caeb91b1125657
1 gio_c_args = [
2   '-DG_LOG_DOMAIN="GLib-GIO"',
3   '-DGIO_COMPILATION',
4   '-DGIO_MODULE_DIR="@0@"'.format(glib_giomodulesdir),
7 gio_c_args += glib_hidden_visibility_args
9 # FIXME: Install empty glib_giomodulesdir
11 gnetworking_h_conf = configuration_data()
13 gnetworking_h_wspiapi_include = ''
14 gnetworking_h_nameser_compat_include = ''
16 if host_system == 'windows'
17   # <wspiapi.h> in the Windows SDK and in mingw-w64 has wrappers for
18   # inline workarounds for getaddrinfo, getnameinfo and freeaddrinfo if
19   # they aren't present at run-time (on Windows 2000).
20   gnetworking_h_wspiapi_include = '#include <wspiapi.h>'
21 elif not host_system.contains('android')
22   # Don't check for C_IN on Android since it does not define it in public
23   # headers, we define it ourselves wherever necessary
24   if not cc.compiles('''#include <sys/types.h>
25                         #include <arpa/nameser.h>
26                         int qclass = C_IN;''',
27                      name : 'C_IN in public headers (no arpa/nameser_compat.h needed)')
28     if cc.compiles('''#include <sys/types.h>
29                       #include <arpa/nameser.h>
30                       #include <arpa/nameser_compat.h>
31                       int qclass = C_IN;''',
32                    name : 'arpa/nameser_compat.h needed for C_IN')
33       gnetworking_h_nameser_compat_include = '#include <arpa/nameser_compat.h>'
34     else
35       error('Could not find required includes for ARPA C_IN')
36     endif
37   endif
38 endif
40 network_libs = [ ]
41 network_args = [ ]
42 if host_system != 'windows'
43   # res_query()
44   res_query_test = '''#include <resolv.h>
45                       int main (int argc, char ** argv) {
46                         return res_query("test", 0, 0, (void *)0, 0);
47                       }'''
48   res_query_test_full = '''#include <sys/types.h>
49                            #include <netinet/in.h>
50                            #include <arpa/nameser.h>
51                         ''' + res_query_test
52   if not cc.links(res_query_test_full, name : 'res_query()')
53     if cc.links(res_query_test_full, args : '-lresolv', name : 'res_query() in -lresolv')
54       network_libs += [ cc.find_library('resolv') ]
55       network_args += [ '-lresolv' ]
56     elif cc.links(res_query_test, args : '-lbind', name : 'res_query() in -lbind')
57       network_libs += [ cc.find_library('bind') ]
58       network_args += [ '-lbind' ]
59     else
60       error('Could not find res_query()')
61     endif
62   endif
64   # socket()
65   socket_test = '''#include <sys/types.h>
66                    #include <sys/socket.h>
67                    int main (int argc, char ** argv) {
68                      return socket(1, 2, 3);
69                    }'''
70   if not cc.links(socket_test, name : 'socket()')
71     if cc.links(socket_test, args : '-lsocket', name : 'socket() in -lsocket')
72       network_libs += [ cc.find_library('socket') ]
73       network_args += [ '-lsocket' ]
74     else
75       error('Could not find socket()')
76     endif
77   endif
79   # res_init()
80   if cc.links('''#include <sys/types.h>
81                  #include <netinet/in.h>
82                  #include <arpa/nameser.h>
83                  #include <resolv.h>
84                  int main (int argc, char ** argv) {
85                    return res_init();
86                  }''', args : network_args, name : 'res_init()')
87     glib_conf.set('HAVE_RES_INIT', 1)
88   endif
90   # res_nclose()
91   if cc.links('''#include <sys/types.h>
92                  #include <netinet/in.h>
93                  #include <arpa/nameser.h>
94                  #include <resolv.h>
95                  int main (int argc, char ** argv) {
96                    struct __res_state res;
97                    res_nclose(&res);
98                    return 0;
99                  }''', args : network_args, name : 'res_nclose()')
100     glib_conf.set('HAVE_RES_NCLOSE', 1)
101   endif
103   # res_ndestroy()
104   if cc.links('''#include <sys/types.h>
105                  #include <netinet/in.h>
106                  #include <arpa/nameser.h>
107                  #include <resolv.h>
108                  int main (int argc, char ** argv) {
109                    struct __res_state res;
110                    res_ndestroy(&res);
111                    return 0;
112                  }''', args : network_args, name : 'res_ndestroy()')
113     glib_conf.set('HAVE_RES_NDESTROY', 1)
114   endif
116   # res_ninit()
117   if cc.links('''#include <sys/types.h>
118                  #include <netinet/in.h>
119                  #include <arpa/nameser.h>
120                  #include <resolv.h>
121                  int main (int argc, char ** argv) {
122                    struct __res_state res;
123                    return res_ninit(&res);
124                  }''', args : network_args, name : 'res_ninit()')
125     glib_conf.set('HAVE_RES_NINIT', 1)
126   endif
128   # res_nquery()
129   if cc.links('''#include <sys/types.h>
130                  #include <netinet/in.h>
131                  #include <arpa/nameser.h>
132                  #include <resolv.h>
133                  int main (int argc, char ** argv) {
134                    struct __res_state res;
135                    return res_nquery(&res, "test", 0, 0, (void *)0, 0);
136                  }''', args : network_args, name : 'res_nquery()')
137     glib_conf.set('HAVE_RES_NQUERY', 1)
138   endif
140   if cc.has_type('struct ip_mreqn', prefix : '#include <netinet/in.h>')
141     glib_conf.set('HAVE_IP_MREQN', 1)
142   endif
144   if cc.compiles('''#include <sys/ioctl.h>
145                     #include <net/if.h>
146                     int main (int argc, char ** argv) {
147                       struct ifreq ifr;
148                       ioctl(0, SIOCGIFADDR, &ifr);
149                       return 0;
150                     }''',
151                  name : 'ioctl with request SIOCGIFADDR')
152     glib_conf.set('HAVE_SIOCGIFADDR', '/**/')
153   endif
155   if not cc.compiles('''#include <netinet/in.h>
156                         int main(int argc, char ** argv) {
157                           struct ip_mreq_source mc_req_src;
158                           mc_req_src.imr_interface.s_addr = 0;
159                           return 0;
160                         }''',
161                         name : 'ip_mreq_source.imr_interface has s_addr member')
162     glib_conf.set('BROKEN_IP_MREQ_SOURCE_STRUCT', 1)
163   endif
165 endif
167 gnetworking_h_conf.set('WSPIAPI_INCLUDE', gnetworking_h_wspiapi_include)
168 gnetworking_h_conf.set('NAMESER_COMPAT_INCLUDE', gnetworking_h_nameser_compat_include)
170 gnetworking_h = configure_file(input : 'gnetworking.h.in',
171                                output : 'gnetworking.h',
172                                install_dir : join_paths(get_option('includedir'), 'glib-2.0/gio'),
173                                configuration : gnetworking_h_conf)
175 gdbus_headers = files(
176   'gdbusauthobserver.h',
177   'gcredentials.h',
178   'gdbusutils.h',
179   'gdbuserror.h',
180   'gdbusaddress.h',
181   'gdbusconnection.h',
182   'gdbusmessage.h',
183   'gdbusnameowning.h',
184   'gdbusnamewatching.h',
185   'gdbusproxy.h',
186   'gdbusintrospection.h',
187   'gdbusmethodinvocation.h',
188   'gdbusserver.h',
189   'gdbusinterface.h',
190   'gdbusinterfaceskeleton.h',
191   'gdbusobject.h',
192   'gdbusobjectskeleton.h',
193   'gdbusobjectproxy.h',
194   'gdbusobjectmanager.h',
195   'gdbusobjectmanagerclient.h',
196   'gdbusobjectmanagerserver.h',
197   'gtestdbus.h',
200 gdbus_sources = files(
201   'gdbusutils.c',
202   'gdbusaddress.c',
203   'gdbusauthobserver.c',
204   'gdbusauth.c',
205   'gdbusauthmechanism.c',
206   'gdbusauthmechanismanon.c',
207   'gdbusauthmechanismexternal.c',
208   'gdbusauthmechanismsha1.c',
209   'gdbuserror.c',
210   'gdbusconnection.c',
211   'gdbusmessage.c',
212   'gdbusnameowning.c',
213   'gdbusnamewatching.c',
214   'gdbusproxy.c',
215   'gdbusprivate.c',
216   'gdbusintrospection.c',
217   'gdbusmethodinvocation.c',
218   'gdbusserver.c',
219   'gdbusinterface.c',
220   'gdbusinterfaceskeleton.c',
221   'gdbusobject.c',
222   'gdbusobjectskeleton.c',
223   'gdbusobjectproxy.c',
224   'gdbusobjectmanager.c',
225   'gdbusobjectmanagerclient.c',
226   'gdbusobjectmanagerserver.c',
227   'gtestdbus.c',
230 # Generate gdbus-codegen
231 subdir('gdbus-2.0/codegen')
233 # Generate xdp-dbus.{c,h}
234 xdp_dbus_generated = custom_target('xdp-dbus',
235     input : ['org.freedesktop.portal.Documents.xml',
236              'org.freedesktop.portal.OpenURI.xml',
237              'org.freedesktop.portal.NetworkMonitor.xml',
238              'org.freedesktop.portal.ProxyResolver.xml'],
239     output : ['xdp-dbus.h', 'xdp-dbus.c'],
240     depend_files : gdbus_codegen_built_files,
241     command : [python, gdbus_codegen,
242                '--interface-prefix', 'org.freedesktop.portal.',
243                '--output-directory', '@OUTDIR@',
244                '--generate-c-code', 'xdp-dbus',
245                '--c-namespace', 'GXdp',
246                '--annotate', 'org.freedesktop.portal.Documents.Add()',
247                              'org.gtk.GDBus.C.UnixFD', 'true',
248                '--annotate', 'org.freedesktop.portal.Documents.AddNamed()',
249                              'org.gtk.GDBus.C.UnixFD', 'true',
250                '--annotate', 'org.freedesktop.portal.Documents.AddFull()',
251                              'org.gtk.GDBus.C.UnixFD', 'true',
252                '--annotate', 'org.freedesktop.portal.OpenURI.OpenFile()',
253                              'org.gtk.GDBus.C.UnixFD', 'true',
254                '@INPUT@'])
256 # Generate gdbus-generated.{c,h}
257 gdbus_daemon_generated = custom_target('gdbus-daemon-generated',
258     input : ['dbus-daemon.xml'],
259     output : ['gdbus-daemon-generated.h', 'gdbus-daemon-generated.c'],
260     depend_files : gdbus_codegen_built_files,
261     command : [python, gdbus_codegen,
262                '--interface-prefix', 'org.',
263                '--output-directory', '@OUTDIR@',
264                '--generate-c-code', 'gdbus-daemon-generated',
265                '--c-namespace', '_G', '@INPUT@'])
267 settings_headers = files(
268   'gsettingsbackend.h',
269   'gsettingsschema.h',
270   'gsettings.h',
273 settings_sources = files(
274   'gvdb/gvdb-reader.c',
275   'gdelayedsettingsbackend.c',
276   'gkeyfilesettingsbackend.c',
277   'gmemorysettingsbackend.c',
278   'gnullsettingsbackend.c',
279   'gsettingsbackend.c',
280   'gsettingsschema.c',
281   'gsettings-mapping.c',
282   'gsettings.c',
285 if host_system == 'windows'
286   settings_sources += files('gregistrysettingsbackend.c')
287 endif
289 application_headers = files(
290   'gapplication.h',
291   'gapplicationcommandline.h',
293   'gactiongroup.h',
294   'gactionmap.h',
295   'gsimpleactiongroup.h',
296   'gremoteactiongroup.h',
297   'gactiongroupexporter.h',
298   'gdbusactiongroup.h',
299   'gaction.h',
300   'gpropertyaction.h',
301   'gsimpleaction.h',
303   'gmenumodel.h',
304   'gmenu.h',
305   'gmenuexporter.h',
306   'gdbusmenumodel.h',
307   'gnotification.h',
310 application_sources = files(
311   'gapplication.c',
312   'gapplicationcommandline.c',
313   'gapplicationimpl-dbus.c',
315   'gactiongroup.c',
316   'gactionmap.c',
317   'gsimpleactiongroup.c',
318   'gremoteactiongroup.c',
319   'gactiongroupexporter.c',
320   'gdbusactiongroup.c',
321   'gaction.c',
322   'gpropertyaction.c',
323   'gsimpleaction.c',
325   'gmenumodel.c',
326   'gmenu.c',
327   'gmenuexporter.c',
328   'gdbusmenumodel.c',
329   'gnotification.c',
330   'gnotificationbackend.c',
333 local_sources = files(
334   'ghttpproxy.c',
335   'glocalfile.c',
336   'glocalfileenumerator.c',
337   'glocalfileinfo.c',
338   'glocalfileinputstream.c',
339   'glocalfilemonitor.c',
340   'glocalfileoutputstream.c',
341   'glocalfileiostream.c',
342   'glocalvfs.c',
343   'gsocks4proxy.c',
344   'gsocks4aproxy.c',
345   'gsocks5proxy.c',
346   'thumbnail-verify.c',
349 platform_deps = []
350 internal_deps = []
351 appinfo_sources = []
352 contenttype_sources = []
353 portal_sources = []
354 unix_sources = []
355 win32_sources = []
357 # This is also used by tests/gdbus-daemon, so use files() to include the path
358 gdbus_daemon_sources = [
359   files('gdbusdaemon.c'),
360   gdbus_daemon_generated,
363 if host_system != 'windows'
364   unix_sources = files(
365     'gfiledescriptorbased.c',
366     'gunixconnection.c',
367     'gunixcredentialsmessage.c',
368     'gunixfdlist.c',
369     'gunixfdmessage.c',
370     'gunixmount.c',
371     'gunixmounts.c',
372     'gunixsocketaddress.c',
373     'gunixvolume.c',
374     'gunixvolumemonitor.c',
375     'gunixinputstream.c',
376     'gunixoutputstream.c',
377     'gfdonotificationbackend.c',
378     'ggtknotificationbackend.c',
379   )
381   portal_sources = [files(
382     'gdocumentportal.c',
383     'gopenuriportal.c',
384     'gnetworkmonitorportal.c',
385     'gproxyresolverportal.c',
386     'gportalsupport.c',
387     'gportalnotificationbackend.c'),
388     xdp_dbus_generated
389   ]
391   gio_unix_include_headers = files(
392     'gfiledescriptorbased.h',
393     'gunixconnection.h',
394     'gunixcredentialsmessage.h',
395     'gunixmounts.h',
396     'gunixfdlist.h',
397     'gunixfdmessage.h',
398     'gunixinputstream.h',
399     'gunixoutputstream.h',
400     'gunixsocketaddress.h',
401   )
403   if glib_have_cocoa
404     settings_sources += files('gnextstepsettingsbackend.m')
405     contenttype_sources += files('gosxcontenttype.m')
406     appinfo_sources += files('gosxappinfo.m')
407     if glib_have_os_x_9_or_later
408       unix_sources += files('gcocoanotificationbackend.m')
409     endif
410   else
411     contenttype_sources += files('gcontenttype.c')
412     appinfo_sources += files('gdesktopappinfo.c')
413     gio_unix_include_headers += files('gdesktopappinfo.h')
415     executable('gio-launch-desktop', 'gio-launch-desktop.c',
416       install : true,
417       c_args : gio_c_args,
418       # intl.lib is not compatible with SAFESEH
419       link_args : noseh_link_args)
420   endif
422   subdir('xdgmime')
423   internal_deps += [xdgmime_lib]
425   install_headers(gio_unix_include_headers, subdir : 'gio-unix-2.0/gio')
427   if glib_conf.has('HAVE_NETLINK')
428     unix_sources += files(
429       'gnetworkmonitornetlink.c',
430       'gnetworkmonitornm.c',
431     )
432   endif
433 else
434   appinfo_sources += files('gwin32appinfo.c')
435   contenttype_sources += files('gcontenttype-win32.c')
436   platform_deps += [cc.find_library('shlwapi'),
437                     cc.find_library('dnsapi'),
438                     iphlpapi_dep,
439                     winsock2]
440   win32_sources += files(
441     'gwin32registrykey.c',
442     'gwin32mount.c',
443     'gwin32volumemonitor.c',
444     'gwin32inputstream.c',
445     'gwin32outputstream.c',
446     'gwin32networkmonitor.c',
447     'gwin32networkmonitor.h',
448     'gwin32notificationbackend.c',
449   )
451   gio_win_rc = configure_file(
452     input: 'gio.rc.in',
453     output: 'gio.rc',
454     configuration: glibconfig_conf,
455   )
456   gio_win_res = windows.compile_resources(gio_win_rc)
457   win32_sources += [gio_win_res]
459   gio_win32_include_headers = files(
460     'gwin32inputstream.h',
461     'gwin32outputstream.h',
462   )
463   install_headers(gio_win32_include_headers, subdir : 'gio-win32-2.0/gio')
464 endif
466 gio_sources = files(
467   'gappinfo.c',
468   'gasynchelper.c',
469   'gasyncinitable.c',
470   'gasyncresult.c',
471   'gbufferedinputstream.c',
472   'gbufferedoutputstream.c',
473   'gbytesicon.c',
474   'gcancellable.c',
475   'gcharsetconverter.c',
476   'gcontextspecificgroup.c',
477   'gconverter.c',
478   'gconverterinputstream.c',
479   'gconverteroutputstream.c',
480   'gcredentials.c',
481   'gdatagrambased.c',
482   'gdatainputstream.c',
483   'gdataoutputstream.c',
484   'gdrive.c',
485   'gdummyfile.c',
486   'gdummyproxyresolver.c',
487   'gdummytlsbackend.c',
488   'gemblem.c',
489   'gemblemedicon.c',
490   'gfile.c',
491   'gfileattribute.c',
492   'gfileenumerator.c',
493   'gfileicon.c',
494   'gfileinfo.c',
495   'gfileinputstream.c',
496   'gfilemonitor.c',
497   'gfilenamecompleter.c',
498   'gfileoutputstream.c',
499   'gfileiostream.c',
500   'gfilterinputstream.c',
501   'gfilteroutputstream.c',
502   'gicon.c',
503   'ginetaddress.c',
504   'ginetaddressmask.c',
505   'ginetsocketaddress.c',
506   'ginitable.c',
507   'ginputstream.c',
508   'gioerror.c',
509   'giomodule.c',
510   'giomodule-priv.c',
511   'gioscheduler.c',
512   'giostream.c',
513   'gloadableicon.c',
514   'gmount.c',
515   'gmemoryinputstream.c',
516   'gmemoryoutputstream.c',
517   'gmountoperation.c',
518   'gnativevolumemonitor.c',
519   'gnativesocketaddress.c',
520   'gnetworkaddress.c',
521   'gnetworking.c',
522   'gnetworkmonitor.c',
523   'gnetworkmonitorbase.c',
524   'gnetworkservice.c',
525   'goutputstream.c',
526   'gpermission.c',
527   'gpollableinputstream.c',
528   'gpollableoutputstream.c',
529   'gpollableutils.c',
530   'gpollfilemonitor.c',
531   'gproxy.c',
532   'gproxyaddress.c',
533   'gproxyaddressenumerator.c',
534   'gproxyresolver.c',
535   'gresolver.c',
536   'gresource.c',
537   'gresourcefile.c',
538   'gseekable.c',
539   'gsimpleasyncresult.c',
540   'gsimpleiostream.c',
541   'gsimplepermission.c',
542   'gsocket.c',
543   'gsocketaddress.c',
544   'gsocketaddressenumerator.c',
545   'gsocketclient.c',
546   'gsocketconnectable.c',
547   'gsocketconnection.c',
548   'gsocketcontrolmessage.c',
549   'gsocketinputstream.c',
550   'gsocketlistener.c',
551   'gsocketoutputstream.c',
552   'gsubprocesslauncher.c',
553   'gsubprocess.c',
554   'gsocketservice.c',
555   'gsrvtarget.c',
556   'gsimpleproxyresolver.c',
557   'gtask.c',
558   'gtcpconnection.c',
559   'gtcpwrapperconnection.c',
560   'gthreadedsocketservice.c',
561   'gthemedicon.c',
562   'gthreadedresolver.c',
563   'gthreadedresolver.h',
564   'gtlsbackend.c',
565   'gtlscertificate.c',
566   'gtlsclientconnection.c',
567   'gtlsconnection.c',
568   'gtlsdatabase.c',
569   'gtlsfiledatabase.c',
570   'gtlsinteraction.c',
571   'gtlspassword.c',
572   'gtlsserverconnection.c',
573   'gdtlsconnection.c',
574   'gdtlsclientconnection.c',
575   'gdtlsserverconnection.c',
576   'gunionvolumemonitor.c',
577   'gvfs.c',
578   'gvolume.c',
579   'gvolumemonitor.c',
580   'gzlibcompressor.c',
581   'gzlibdecompressor.c',
582   'glistmodel.c',
583   'gliststore.c',
586 gio_sources += appinfo_sources
587 gio_sources += contenttype_sources
588 gio_sources += gdbus_daemon_sources
589 gio_sources += unix_sources
590 gio_sources += win32_sources
591 gio_sources += application_sources
592 gio_sources += settings_sources
593 gio_sources += gdbus_sources
594 gio_sources += portal_sources
595 gio_sources += local_sources
597 MISSING_STUFF = '''
598 # This is read by gobject-introspection/misc/ and gtk-doc
599 gio-public-headers.txt: Makefile
600   '$(AM_V_GEN) echo $(gioinclude_HEADERS) $(giowin32include_HEADERS) $(giounixinclude_HEADERS) > $@.tmp && mv $@.tmp $@
602 gio.def: libgio-2.0.la
603   '$(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
605 gio-2.0.lib: libgio-2.0.la gio.def
606   '$(AM_V_GEN) lib.exe -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgio-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:$(builddir)/gio.def -out:$@
609 gio_headers = files(
610   'gappinfo.h',
611   'gasyncinitable.h',
612   'gasyncresult.h',
613   'gbufferedinputstream.h',
614   'gbufferedoutputstream.h',
615   'gbytesicon.h',
616   'gcancellable.h',
617   'gcontenttype.h',
618   'gcharsetconverter.h',
619   'gconverter.h',
620   'gconverterinputstream.h',
621   'gconverteroutputstream.h',
622   'gdatagrambased.h',
623   'gdatainputstream.h',
624   'gdataoutputstream.h',
625   'gdrive.h',
626   'gemblem.h',
627   'gemblemedicon.h',
628   'gfile.h',
629   'gfileattribute.h',
630   'gfileenumerator.h',
631   'gfileicon.h',
632   'gfileinfo.h',
633   'gfileinputstream.h',
634   'gfilemonitor.h',
635   'gfilenamecompleter.h',
636   'gfileoutputstream.h',
637   'gfileiostream.h',
638   'gfilterinputstream.h',
639   'gfilteroutputstream.h',
640   'gicon.h',
641   'ginetaddress.h',
642   'ginetaddressmask.h',
643   'ginetsocketaddress.h',
644   'ginputstream.h',
645   'ginitable.h',
646   'gio.h',
647   'gio-autocleanups.h',
648   'giotypes.h',
649   'gioenums.h',
650   'gioerror.h',
651   'giomodule.h',
652   'gioscheduler.h',
653   'giostream.h',
654   'gloadableicon.h',
655   'gmount.h',
656   'gmemoryinputstream.h',
657   'gmemoryoutputstream.h',
658   'gmountoperation.h',
659   'gnativevolumemonitor.h',
660   'gnetworkaddress.h',
661   'gnetworkmonitor.h',
662   'gnetworkservice.h',
663   'goutputstream.h',
664   'gpermission.h',
665   'gpollableinputstream.h',
666   'gpollableoutputstream.h',
667   'gpollableutils.h',
668   'gproxyaddress.h',
669   'gproxy.h',
670   'gproxyaddressenumerator.h',
671   'gproxyresolver.h',
672   'gresolver.h',
673   'gresource.h',
674   'gseekable.h',
675   'gsimpleasyncresult.h',
676   'gsimpleiostream.h',
677   'gsimplepermission.h',
678   'gsocket.h',
679   'gsocketaddress.h',
680   'gsocketaddressenumerator.h',
681   'gsocketclient.h',
682   'gsocketconnectable.h',
683   'gsocketconnection.h',
684   'gsocketcontrolmessage.h',
685   'gsocketlistener.h',
686   'gsocketservice.h',
687   'gsrvtarget.h',
688   'gsimpleproxyresolver.h',
689   'gtask.h',
690   'gsubprocess.h',
691   'gsubprocesslauncher.h',
692   'gtcpconnection.h',
693   'gtcpwrapperconnection.h',
694   'gthreadedsocketservice.h',
695   'gthemedicon.h',
696   'gtlsbackend.h',
697   'gtlscertificate.h',
698   'gtlsclientconnection.h',
699   'gtlsconnection.h',
700   'gtlsdatabase.h',
701   'gtlsfiledatabase.h',
702   'gtlsinteraction.h',
703   'gtlspassword.h',
704   'gtlsserverconnection.h',
705   'gdtlsconnection.h',
706   'gdtlsclientconnection.h',
707   'gdtlsserverconnection.h',
708   'gvfs.h',
709   'gvolume.h',
710   'gvolumemonitor.h',
711   'gzlibcompressor.h',
712   'gzlibdecompressor.h',
713   'glistmodel.h',
714   'gliststore.h',
717 gio_headers += application_headers
718 gio_headers += settings_headers
719 gio_headers += gdbus_headers
720 install_headers(gio_headers, subdir : 'glib-2.0/gio/')
722 # We can't use gnome.mkenums() because the GNOME module looks for glib-mkenums
723 # in PATH, which means you can't bootstrap glib with its own glib-mkenums.
724 gioenumtypes_h = custom_target('gioenumtypes_h',
725   output : 'gioenumtypes.h',
726   capture : true,
727   input : gio_headers,
728   install : true,
729   install_dir : join_paths(get_option('includedir'), 'glib-2.0/gio'),
730   command : [python, glib_mkenums,
731              '--template', files('gioenumtypes.h.template'),
732              '@INPUT@', gnetworking_h])
734 gioenumtypes_c = custom_target('gioenumtypes_c',
735   output : 'gioenumtypes.c',
736   capture : true,
737   input : gio_headers,
738   depends : [gioenumtypes_h],
739   command : [python, glib_mkenums,
740              '--template', files('gioenumtypes.c.template'),
741              '@INPUT@', gnetworking_h])
743 gioenumtypes_dep = declare_dependency(sources : [gioenumtypes_h])
745 # inotify
746 if glib_conf.has('HAVE_SYS_INOTIFY_H') and have_func_inotify_init1
747   subdir('inotify')
748   internal_deps += [ inotify_lib ]
749 endif
751 # kevent
752 if have_func_kqueue and have_func_kevent
753   subdir('kqueue')
754   internal_deps += [ kqueue_lib ]
755 endif
757 if host_system == 'windows'
758   subdir('win32')
759   internal_deps += [ giowin32_lib ]
760 endif
762 if have_bash
763   install_data([
764     'completion/gapplication',
765     'completion/gdbus',
766     'completion/gio',
767     'completion/gsettings',
768     'completion/gresource'
769   ],
770   install_dir: join_paths(get_option('datadir'), 'bash-completion/completions'))
771 endif
773 if enable_dtrace
774   gio_dtrace_obj = dtrace_obj_gen.process('gio_probes.d')
775   gio_dtrace_hdr = dtrace_hdr_gen.process('gio_probes.d')
776 else
777   gio_dtrace_obj = []
778   gio_dtrace_hdr = []
779 endif
781 libgio = library('gio-2.0',
782   gioenumtypes_h, gioenumtypes_c, gnetworking_h, gio_sources,
783   gio_dtrace_hdr, gio_dtrace_obj,
784   version : library_version,
785   soversion : soversion,
786   install : true,
787   include_directories : [configinc, gioinc],
788   link_with : internal_deps,
789   #  '$(gio_win32_res_ldflag)',
790   dependencies : [libz_dep, libdl_dep, libmount_dep, libglib_dep,
791                   libgobject_dep, libgmodule_dep, selinux_dep, xattr_dep,
792                   platform_deps, network_libs],
793   c_args : gio_c_args,
794   objc_args : gio_c_args,
795   # intl.lib is not compatible with SAFESEH
796   link_args : [noseh_link_args, glib_link_flags],
799 giomodulesdir = get_option('gio_module_dir')
800 if giomodulesdir == ''
801   giomodulesdir = join_paths('${libdir}', 'gio', 'modules')
802 endif
804 pkg.generate(libraries : libgio,
805   libraries_private : [osx_ldflags],
806   requires : ['glib-2.0', 'gobject-2.0'],
807   variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
808                'giomoduledir=' + giomodulesdir,
809                'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'),
810                'glib_compile_resources=' + join_paths('${bindir}', 'glib-compile-resources'),
811                'gdbus_codegen=' + join_paths('${bindir}', 'gdbus-codegen')],
812   version : glib_version,
813   install_dir : glib_pkgconfigreldir,
814   filebase : 'gio-2.0',
815   name : 'GIO',
816   description : 'glib I/O library',
819 if host_system == 'windows'
820   pkg.generate(requires : ['gobject-2.0', 'gmodule-no-export-2.0', 'gio-2.0'],
821     subdirs : ['gio-win32-2.0'],
822     version : glib_version,
823     install_dir : glib_pkgconfigreldir,
824     filebase : 'gio-windows-2.0',
825     name : 'GIO Windows specific APIs',
826     description : 'Windows specific headers for glib I/O library',
827   )
828 else
829   pkg.generate(requires : ['gobject-2.0', 'gio-2.0'],
830     subdirs : ['gio-unix-2.0'],
831     version : glib_version,
832     install_dir : glib_pkgconfigreldir,
833     filebase : 'gio-unix-2.0',
834     name : 'GIO unix specific APIs',
835     description : 'unix specific headers for glib I/O library',
836   )
837 endif
839 libgio_dep = declare_dependency(link_with : libgio,
840   dependencies : [gioenumtypes_dep],
841   # We sadly need to export configinc here because everyone includes <gio/*.h>
842   include_directories : [configinc, gioinc])
844 if host_system == 'windows'
845   # Hack till https://github.com/mesonbuild/meson/issues/2324 is fixed
846   libgiounix_dep = dependency('', required : false)
847   libgiowin32_dep = libgio_dep
848 else
849   libgiowin32_dep = dependency('', required : false)
850   libgiounix_dep = libgio_dep
851 endif
853 # Dependencies used by executables below
854 have_libelf = false
855 libelf = dependency('libelf', version : '>= 0.8.12', required : false)
856 if libelf.found()
857   have_libelf = true
858 else
859   # This fallback is necessary on *BSD. elfutils isn't the only libelf
860   # implementation, and *BSD usually includes their own libelf as a system
861   # library which doesn't have a corresponding .pc file.
862   libelf = cc.find_library('elf', required : false)
863   have_libelf = libelf.found()
864   have_libelf = have_libelf and cc.has_function('elf_begin', dependencies : libelf)
865   have_libelf = have_libelf and cc.has_function('elf_getshdrstrndx', dependencies : libelf)
866   have_libelf = have_libelf and cc.has_function('elf_getshdrnum', dependencies : libelf)
867   have_libelf = have_libelf and cc.has_header('libelf.h')
868 endif
870 if have_libelf
871   glib_conf.set('HAVE_LIBELF', 1)
872 else
873   libelf = []
874 endif
876 gconstructor_as_data_h = custom_target('gconstructor_as_data.h',
877     input : ['data-to-c.py', files('../glib/gconstructor.h')],
878     output : ['gconstructor_as_data.h'],
879     command : [python, '@INPUT0@', '@INPUT1@', 'gconstructor_code', '@OUTPUT@'])
881 # Several installed executables
882 gio_tool_sources = [
883   'gio-tool.c',
884   'gio-tool.h',
885   'gio-tool-cat.c',
886   'gio-tool-copy.c',
887   'gio-tool-info.c',
888   'gio-tool-list.c',
889   'gio-tool-mime.c',
890   'gio-tool-mkdir.c',
891   'gio-tool-monitor.c',
892   'gio-tool-mount.c',
893   'gio-tool-move.c',
894   'gio-tool-open.c',
895   'gio-tool-rename.c',
896   'gio-tool-remove.c',
897   'gio-tool-save.c',
898   'gio-tool-set.c',
899   'gio-tool-trash.c',
900   'gio-tool-tree.c',
903 executable('gio', gio_tool_sources,
904   install : true,
905   c_args : gio_c_args,
906   # intl.lib is not compatible with SAFESEH
907   link_args : noseh_link_args,
908   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
910 executable('gresource', 'gresource-tool.c',
911   install : true,
912   # intl.lib is not compatible with SAFESEH
913   link_args : noseh_link_args,
914   dependencies : [libelf, libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
916 gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodule-priv.c',
917   install : true,
918   c_args : gio_c_args,
919   # intl.lib is not compatible with SAFESEH
920   link_args : noseh_link_args,
921   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
923 glib_compile_schemas = executable('glib-compile-schemas',
924   [gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-schemas.c'],
925   install : true,
926   # intl.lib is not compatible with SAFESEH
927   link_args : noseh_link_args,
928   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
930 glib_compile_resources = executable('glib-compile-resources',
931   [gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-resources.c'],
932   install : true,
933   c_args : gio_c_args,
934   # intl.lib is not compatible with SAFESEH
935   link_args : noseh_link_args,
936   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
938 executable('gsettings', 'gsettings-tool.c',
939   install : true,
940   c_args : gio_c_args,
941   # intl.lib is not compatible with SAFESEH
942   link_args : noseh_link_args,
943   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
944 install_data('gschema.dtd',
945   install_dir : join_paths(get_option('datadir'), 'glib-2.0/schemas'))
947 install_data(['gschema.loc', 'gschema.its'],
948   install_dir : join_paths(get_option('datadir'), 'gettext/its'))
950 executable('gdbus', 'gdbus-tool.c',
951   install : true,
952   c_args : gio_c_args,
953   # intl.lib is not compatible with SAFESEH
954   link_args : noseh_link_args,
955   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
957 if host_system != 'windows' and not glib_have_cocoa
958   executable('gapplication', 'gapplication-tool.c',
959     install : true,
960     c_args : gio_c_args,
961     # intl.lib is not compatible with SAFESEH
962     link_args : noseh_link_args,
963     dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
964 endif
966 if enable_systemtap
967   gio_stp = configure_file(input : 'gio.stp.in',
968     output : '@0@.stp'.format(libgio.full_path().split('/').get(-1)),
969     configuration : stp_cdata,
970     install_dir : tapset_install_dir,
971     install : true)
972 endif
974 subdir('fam')
976 if host_system != 'windows'
977   subdir('tests')
978 endif