Merge branch '896-variant-type-docs' into 'master'
[glib.git] / gio / meson.build
blobf37911fac357734994b4d33268beda05d51d4642
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')
414   endif
416   subdir('xdgmime')
417   internal_deps += [xdgmime_lib]
419   install_headers(gio_unix_include_headers, subdir : 'gio-unix-2.0/gio')
421   if glib_conf.has('HAVE_NETLINK')
422     unix_sources += files(
423       'gnetworkmonitornetlink.c',
424       'gnetworkmonitornm.c',
425     )
426   endif
427 else
428   appinfo_sources += files('gwin32appinfo.c')
429   contenttype_sources += files('gcontenttype-win32.c')
430   platform_deps += [cc.find_library('shlwapi'),
431                     cc.find_library('dnsapi'),
432                     iphlpapi_dep,
433                     winsock2]
434   win32_sources += files(
435     'gwin32registrykey.c',
436     'gwin32mount.c',
437     'gwin32volumemonitor.c',
438     'gwin32inputstream.c',
439     'gwin32outputstream.c',
440     'gwin32networkmonitor.c',
441     'gwin32networkmonitor.h',
442     'gwin32notificationbackend.c',
443   )
445   gio_win_rc = configure_file(
446     input: 'gio.rc.in',
447     output: 'gio.rc',
448     configuration: glibconfig_conf,
449   )
450   gio_win_res = windows.compile_resources(gio_win_rc)
451   win32_sources += [gio_win_res]
453   gio_win32_include_headers = files(
454     'gwin32inputstream.h',
455     'gwin32outputstream.h',
456   )
457   install_headers(gio_win32_include_headers, subdir : 'gio-win32-2.0/gio')
458 endif
460 gio_sources = files(
461   'gappinfo.c',
462   'gasynchelper.c',
463   'gasyncinitable.c',
464   'gasyncresult.c',
465   'gbufferedinputstream.c',
466   'gbufferedoutputstream.c',
467   'gbytesicon.c',
468   'gcancellable.c',
469   'gcharsetconverter.c',
470   'gcontextspecificgroup.c',
471   'gconverter.c',
472   'gconverterinputstream.c',
473   'gconverteroutputstream.c',
474   'gcredentials.c',
475   'gdatagrambased.c',
476   'gdatainputstream.c',
477   'gdataoutputstream.c',
478   'gdrive.c',
479   'gdummyfile.c',
480   'gdummyproxyresolver.c',
481   'gdummytlsbackend.c',
482   'gemblem.c',
483   'gemblemedicon.c',
484   'gfile.c',
485   'gfileattribute.c',
486   'gfileenumerator.c',
487   'gfileicon.c',
488   'gfileinfo.c',
489   'gfileinputstream.c',
490   'gfilemonitor.c',
491   'gfilenamecompleter.c',
492   'gfileoutputstream.c',
493   'gfileiostream.c',
494   'gfilterinputstream.c',
495   'gfilteroutputstream.c',
496   'gicon.c',
497   'ginetaddress.c',
498   'ginetaddressmask.c',
499   'ginetsocketaddress.c',
500   'ginitable.c',
501   'ginputstream.c',
502   'gioerror.c',
503   'giomodule.c',
504   'giomodule-priv.c',
505   'gioscheduler.c',
506   'giostream.c',
507   'gloadableicon.c',
508   'gmount.c',
509   'gmemoryinputstream.c',
510   'gmemoryoutputstream.c',
511   'gmountoperation.c',
512   'gnativevolumemonitor.c',
513   'gnativesocketaddress.c',
514   'gnetworkaddress.c',
515   'gnetworking.c',
516   'gnetworkmonitor.c',
517   'gnetworkmonitorbase.c',
518   'gnetworkservice.c',
519   'goutputstream.c',
520   'gpermission.c',
521   'gpollableinputstream.c',
522   'gpollableoutputstream.c',
523   'gpollableutils.c',
524   'gpollfilemonitor.c',
525   'gproxy.c',
526   'gproxyaddress.c',
527   'gproxyaddressenumerator.c',
528   'gproxyresolver.c',
529   'gresolver.c',
530   'gresource.c',
531   'gresourcefile.c',
532   'gseekable.c',
533   'gsimpleasyncresult.c',
534   'gsimpleiostream.c',
535   'gsimplepermission.c',
536   'gsocket.c',
537   'gsocketaddress.c',
538   'gsocketaddressenumerator.c',
539   'gsocketclient.c',
540   'gsocketconnectable.c',
541   'gsocketconnection.c',
542   'gsocketcontrolmessage.c',
543   'gsocketinputstream.c',
544   'gsocketlistener.c',
545   'gsocketoutputstream.c',
546   'gsubprocesslauncher.c',
547   'gsubprocess.c',
548   'gsocketservice.c',
549   'gsrvtarget.c',
550   'gsimpleproxyresolver.c',
551   'gtask.c',
552   'gtcpconnection.c',
553   'gtcpwrapperconnection.c',
554   'gthreadedsocketservice.c',
555   'gthemedicon.c',
556   'gthreadedresolver.c',
557   'gthreadedresolver.h',
558   'gtlsbackend.c',
559   'gtlscertificate.c',
560   'gtlsclientconnection.c',
561   'gtlsconnection.c',
562   'gtlsdatabase.c',
563   'gtlsfiledatabase.c',
564   'gtlsinteraction.c',
565   'gtlspassword.c',
566   'gtlsserverconnection.c',
567   'gdtlsconnection.c',
568   'gdtlsclientconnection.c',
569   'gdtlsserverconnection.c',
570   'gunionvolumemonitor.c',
571   'gvfs.c',
572   'gvolume.c',
573   'gvolumemonitor.c',
574   'gzlibcompressor.c',
575   'gzlibdecompressor.c',
576   'glistmodel.c',
577   'gliststore.c',
580 gio_sources += appinfo_sources
581 gio_sources += contenttype_sources
582 gio_sources += gdbus_daemon_sources
583 gio_sources += unix_sources
584 gio_sources += win32_sources
585 gio_sources += application_sources
586 gio_sources += settings_sources
587 gio_sources += gdbus_sources
588 gio_sources += portal_sources
589 gio_sources += local_sources
591 MISSING_STUFF = '''
592 # This is read by gobject-introspection/misc/ and gtk-doc
593 gio-public-headers.txt: Makefile
594   '$(AM_V_GEN) echo $(gioinclude_HEADERS) $(giowin32include_HEADERS) $(giounixinclude_HEADERS) > $@.tmp && mv $@.tmp $@
596 gio.def: libgio-2.0.la
597   '$(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
599 gio-2.0.lib: libgio-2.0.la gio.def
600   '$(AM_V_GEN) lib.exe -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgio-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:$(builddir)/gio.def -out:$@
603 gio_headers = files(
604   'gappinfo.h',
605   'gasyncinitable.h',
606   'gasyncresult.h',
607   'gbufferedinputstream.h',
608   'gbufferedoutputstream.h',
609   'gbytesicon.h',
610   'gcancellable.h',
611   'gcontenttype.h',
612   'gcharsetconverter.h',
613   'gconverter.h',
614   'gconverterinputstream.h',
615   'gconverteroutputstream.h',
616   'gdatagrambased.h',
617   'gdatainputstream.h',
618   'gdataoutputstream.h',
619   'gdrive.h',
620   'gemblem.h',
621   'gemblemedicon.h',
622   'gfile.h',
623   'gfileattribute.h',
624   'gfileenumerator.h',
625   'gfileicon.h',
626   'gfileinfo.h',
627   'gfileinputstream.h',
628   'gfilemonitor.h',
629   'gfilenamecompleter.h',
630   'gfileoutputstream.h',
631   'gfileiostream.h',
632   'gfilterinputstream.h',
633   'gfilteroutputstream.h',
634   'gicon.h',
635   'ginetaddress.h',
636   'ginetaddressmask.h',
637   'ginetsocketaddress.h',
638   'ginputstream.h',
639   'ginitable.h',
640   'gio.h',
641   'gio-autocleanups.h',
642   'giotypes.h',
643   'gioenums.h',
644   'gioerror.h',
645   'giomodule.h',
646   'gioscheduler.h',
647   'giostream.h',
648   'gloadableicon.h',
649   'gmount.h',
650   'gmemoryinputstream.h',
651   'gmemoryoutputstream.h',
652   'gmountoperation.h',
653   'gnativevolumemonitor.h',
654   'gnetworkaddress.h',
655   'gnetworkmonitor.h',
656   'gnetworkservice.h',
657   'goutputstream.h',
658   'gpermission.h',
659   'gpollableinputstream.h',
660   'gpollableoutputstream.h',
661   'gpollableutils.h',
662   'gproxyaddress.h',
663   'gproxy.h',
664   'gproxyaddressenumerator.h',
665   'gproxyresolver.h',
666   'gresolver.h',
667   'gresource.h',
668   'gseekable.h',
669   'gsimpleasyncresult.h',
670   'gsimpleiostream.h',
671   'gsimplepermission.h',
672   'gsocket.h',
673   'gsocketaddress.h',
674   'gsocketaddressenumerator.h',
675   'gsocketclient.h',
676   'gsocketconnectable.h',
677   'gsocketconnection.h',
678   'gsocketcontrolmessage.h',
679   'gsocketlistener.h',
680   'gsocketservice.h',
681   'gsrvtarget.h',
682   'gsimpleproxyresolver.h',
683   'gtask.h',
684   'gsubprocess.h',
685   'gsubprocesslauncher.h',
686   'gtcpconnection.h',
687   'gtcpwrapperconnection.h',
688   'gthreadedsocketservice.h',
689   'gthemedicon.h',
690   'gtlsbackend.h',
691   'gtlscertificate.h',
692   'gtlsclientconnection.h',
693   'gtlsconnection.h',
694   'gtlsdatabase.h',
695   'gtlsfiledatabase.h',
696   'gtlsinteraction.h',
697   'gtlspassword.h',
698   'gtlsserverconnection.h',
699   'gdtlsconnection.h',
700   'gdtlsclientconnection.h',
701   'gdtlsserverconnection.h',
702   'gvfs.h',
703   'gvolume.h',
704   'gvolumemonitor.h',
705   'gzlibcompressor.h',
706   'gzlibdecompressor.h',
707   'glistmodel.h',
708   'gliststore.h',
711 gio_headers += application_headers
712 gio_headers += settings_headers
713 gio_headers += gdbus_headers
714 install_headers(gio_headers, subdir : 'glib-2.0/gio/')
716 # We can't use gnome.mkenums() because the GNOME module looks for glib-mkenums
717 # in PATH, which means you can't bootstrap glib with its own glib-mkenums.
718 gioenumtypes_h = custom_target('gioenumtypes_h',
719   output : 'gioenumtypes.h',
720   capture : true,
721   input : gio_headers,
722   install : true,
723   install_dir : join_paths(get_option('includedir'), 'glib-2.0/gio'),
724   command : [python, glib_mkenums,
725              '--template', files('gioenumtypes.h.template'),
726              '@INPUT@', gnetworking_h])
728 gioenumtypes_c = custom_target('gioenumtypes_c',
729   output : 'gioenumtypes.c',
730   capture : true,
731   input : gio_headers,
732   depends : [gioenumtypes_h],
733   command : [python, glib_mkenums,
734              '--template', files('gioenumtypes.c.template'),
735              '@INPUT@', gnetworking_h])
737 gioenumtypes_dep = declare_dependency(sources : [gioenumtypes_h])
739 # inotify
740 if glib_conf.has('HAVE_SYS_INOTIFY_H') and have_func_inotify_init1
741   subdir('inotify')
742   internal_deps += [ inotify_lib ]
743 endif
745 # kevent
746 if have_func_kqueue and have_func_kevent
747   subdir('kqueue')
748   internal_deps += [ kqueue_lib ]
749 endif
751 if host_system == 'windows'
752   subdir('win32')
753   internal_deps += [ giowin32_lib ]
754 endif
756 if have_bash
757   install_data([
758     'completion/gapplication',
759     'completion/gdbus',
760     'completion/gio',
761     'completion/gsettings',
762     'completion/gresource'
763   ],
764   install_dir: join_paths(get_option('datadir'), 'bash-completion/completions'))
765 endif
767 if enable_dtrace
768   gio_dtrace_obj = dtrace_obj_gen.process('gio_probes.d')
769   gio_dtrace_hdr = dtrace_hdr_gen.process('gio_probes.d')
770 else
771   gio_dtrace_obj = []
772   gio_dtrace_hdr = []
773 endif
775 libgio = library('gio-2.0',
776   gioenumtypes_h, gioenumtypes_c, gnetworking_h, gio_sources,
777   gio_dtrace_hdr, gio_dtrace_obj,
778   version : library_version,
779   soversion : soversion,
780   install : true,
781   include_directories : [configinc, gioinc],
782   link_with : internal_deps,
783   #  '$(gio_win32_res_ldflag)',
784   dependencies : [libz_dep, libdl_dep, libmount_dep, libglib_dep,
785                   libgobject_dep, libgmodule_dep, selinux_dep, xattr_dep,
786                   platform_deps, network_libs],
787   c_args : gio_c_args,
788   objc_args : gio_c_args,
789   # intl.lib is not compatible with SAFESEH
790   link_args : [noseh_link_args, glib_link_flags],
793 giomodulesdir = get_option('gio_module_dir')
794 if giomodulesdir == ''
795   giomodulesdir = join_paths('${libdir}', 'gio', 'modules')
796 endif
798 pkg.generate(libraries : libgio,
799   libraries_private : [osx_ldflags],
800   requires : ['glib-2.0', 'gobject-2.0'],
801   variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
802                'giomoduledir=' + giomodulesdir,
803                'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'),
804                'glib_compile_resources=' + join_paths('${bindir}', 'glib-compile-resources'),
805                'gdbus_codegen=' + join_paths('${bindir}', 'gdbus-codegen')],
806   version : glib_version,
807   install_dir : glib_pkgconfigreldir,
808   filebase : 'gio-2.0',
809   name : 'GIO',
810   description : 'glib I/O library',
813 if host_system == 'windows'
814   pkg.generate(requires : ['gobject-2.0', 'gmodule-no-export-2.0', 'gio-2.0'],
815     subdirs : ['gio-win32-2.0'],
816     version : glib_version,
817     install_dir : glib_pkgconfigreldir,
818     filebase : 'gio-windows-2.0',
819     name : 'GIO Windows specific APIs',
820     description : 'Windows specific headers for glib I/O library',
821   )
822 else
823   pkg.generate(requires : ['gobject-2.0', 'gio-2.0'],
824     subdirs : ['gio-unix-2.0'],
825     version : glib_version,
826     install_dir : glib_pkgconfigreldir,
827     filebase : 'gio-unix-2.0',
828     name : 'GIO unix specific APIs',
829     description : 'unix specific headers for glib I/O library',
830   )
831 endif
833 libgio_dep = declare_dependency(link_with : libgio,
834   dependencies : [gioenumtypes_dep],
835   # We sadly need to export configinc here because everyone includes <gio/*.h>
836   include_directories : [configinc, gioinc])
838 if host_system == 'windows'
839   # Hack till https://github.com/mesonbuild/meson/issues/2324 is fixed
840   libgiounix_dep = dependency('', required : false)
841   libgiowin32_dep = libgio_dep
842 else
843   libgiowin32_dep = dependency('', required : false)
844   libgiounix_dep = libgio_dep
845 endif
847 # Dependencies used by executables below
848 have_libelf = false
849 libelf = dependency('libelf', version : '>= 0.8.12', required : false)
850 if libelf.found()
851   have_libelf = true
852 else
853   # This fallback is necessary on *BSD. elfutils isn't the only libelf
854   # implementation, and *BSD usually includes their own libelf as a system
855   # library which doesn't have a corresponding .pc file.
856   libelf = cc.find_library('elf', required : false)
857   have_libelf = libelf.found()
858   have_libelf = have_libelf and cc.has_function('elf_begin', dependencies : libelf)
859   have_libelf = have_libelf and cc.has_function('elf_getshdrstrndx', dependencies : libelf)
860   have_libelf = have_libelf and cc.has_function('elf_getshdrnum', dependencies : libelf)
861   have_libelf = have_libelf and cc.has_header('libelf.h')
862 endif
864 if have_libelf
865   glib_conf.set('HAVE_LIBELF', 1)
866 else
867   libelf = []
868 endif
870 gconstructor_as_data_h = custom_target('gconstructor_as_data.h',
871     input : ['data-to-c.py', files('../glib/gconstructor.h')],
872     output : ['gconstructor_as_data.h'],
873     command : [python, '@INPUT0@', '@INPUT1@', 'gconstructor_code', '@OUTPUT@'])
875 # Several installed executables
876 gio_tool_sources = [
877   'gio-tool.c',
878   'gio-tool.h',
879   'gio-tool-cat.c',
880   'gio-tool-copy.c',
881   'gio-tool-info.c',
882   'gio-tool-list.c',
883   'gio-tool-mime.c',
884   'gio-tool-mkdir.c',
885   'gio-tool-monitor.c',
886   'gio-tool-mount.c',
887   'gio-tool-move.c',
888   'gio-tool-open.c',
889   'gio-tool-rename.c',
890   'gio-tool-remove.c',
891   'gio-tool-save.c',
892   'gio-tool-set.c',
893   'gio-tool-trash.c',
894   'gio-tool-tree.c',
897 executable('gio', gio_tool_sources,
898   install : true,
899   c_args : gio_c_args,
900   # intl.lib is not compatible with SAFESEH
901   link_args : noseh_link_args,
902   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
904 executable('gresource', 'gresource-tool.c',
905   install : true,
906   # intl.lib is not compatible with SAFESEH
907   link_args : noseh_link_args,
908   dependencies : [libelf, libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
910 gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodule-priv.c',
911   install : true,
912   c_args : gio_c_args,
913   # intl.lib is not compatible with SAFESEH
914   link_args : noseh_link_args,
915   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
917 glib_compile_schemas = executable('glib-compile-schemas',
918   [gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-schemas.c'],
919   install : true,
920   # intl.lib is not compatible with SAFESEH
921   link_args : noseh_link_args,
922   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
924 glib_compile_resources = executable('glib-compile-resources',
925   [gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-resources.c'],
926   install : true,
927   c_args : gio_c_args,
928   # intl.lib is not compatible with SAFESEH
929   link_args : noseh_link_args,
930   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
932 executable('gsettings', 'gsettings-tool.c',
933   install : true,
934   c_args : gio_c_args,
935   # intl.lib is not compatible with SAFESEH
936   link_args : noseh_link_args,
937   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
938 install_data('gschema.dtd',
939   install_dir : join_paths(get_option('datadir'), 'glib-2.0/schemas'))
941 install_data(['gschema.loc', 'gschema.its'],
942   install_dir : join_paths(get_option('datadir'), 'gettext/its'))
944 executable('gdbus', 'gdbus-tool.c',
945   install : true,
946   c_args : gio_c_args,
947   # intl.lib is not compatible with SAFESEH
948   link_args : noseh_link_args,
949   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
951 if host_system != 'windows' and not glib_have_cocoa
952   executable('gapplication', 'gapplication-tool.c',
953     install : true,
954     c_args : gio_c_args,
955     # intl.lib is not compatible with SAFESEH
956     link_args : noseh_link_args,
957     dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
958 endif
960 if enable_systemtap
961   gio_stp = configure_file(input : 'gio.stp.in',
962     output : '@0@.stp'.format(libgio.full_path().split('/').get(-1)),
963     configuration : stp_cdata,
964     install_dir : tapset_install_dir,
965     install : true)
966 endif
968 subdir('fam')
970 if host_system != 'windows'
971   subdir('tests')
972 endif