Use macros for refcount types API
[glib.git] / gio / meson.build
blob9544ab395dd3b91ed01378976726e5f0f54f6705
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/gsettings',
761     'completion/gresource'
762   ],
763   install_dir: join_paths(get_option('datadir'), 'bash-completion/completions'))
764 endif
766 if enable_dtrace
767   gio_dtrace_obj = dtrace_obj_gen.process('gio_probes.d')
768   gio_dtrace_hdr = dtrace_hdr_gen.process('gio_probes.d')
769 else
770   gio_dtrace_obj = []
771   gio_dtrace_hdr = []
772 endif
774 libgio = library('gio-2.0',
775   gioenumtypes_h, gioenumtypes_c, gnetworking_h, gio_sources,
776   gio_dtrace_hdr, gio_dtrace_obj,
777   version : library_version,
778   soversion : soversion,
779   install : true,
780   include_directories : [configinc, gioinc],
781   link_with : internal_deps,
782   #  '$(gio_win32_res_ldflag)',
783   dependencies : [libz_dep, libdl_dep, libmount_dep, libglib_dep,
784                   libgobject_dep, libgmodule_dep, selinux_dep, xattr_dep,
785                   platform_deps, network_libs],
786   c_args : gio_c_args,
787   objc_args : gio_c_args,
788   # intl.lib is not compatible with SAFESEH
789   link_args : [noseh_link_args, glib_link_flags],
792 giomodulesdir = get_option('gio_module_dir')
793 if giomodulesdir == ''
794   giomodulesdir = join_paths('${libdir}', 'gio', 'modules')
795 endif
797 pkg.generate(libraries : libgio,
798   libraries_private : [osx_ldflags],
799   requires : ['glib-2.0', 'gobject-2.0'],
800   variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
801                'giomoduledir=' + giomodulesdir,
802                'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'),
803                'glib_compile_resources=' + join_paths('${bindir}', 'glib-compile-resources'),
804                'gdbus_codegen=' + join_paths('${bindir}', 'gdbus-codegen')],
805   version : glib_version,
806   install_dir : glib_pkgconfigreldir,
807   filebase : 'gio-2.0',
808   name : 'GIO',
809   description : 'glib I/O library',
812 if host_system == 'windows'
813   pkg.generate(requires : ['gobject-2.0', 'gmodule-no-export-2.0', 'gio-2.0'],
814     subdirs : ['gio-win32-2.0'],
815     version : glib_version,
816     install_dir : glib_pkgconfigreldir,
817     filebase : 'gio-windows-2.0',
818     name : 'GIO Windows specific APIs',
819     description : 'Windows specific headers for glib I/O library',
820   )
821 else
822   pkg.generate(requires : ['gobject-2.0', 'gio-2.0'],
823     subdirs : ['gio-unix-2.0'],
824     version : glib_version,
825     install_dir : glib_pkgconfigreldir,
826     filebase : 'gio-unix-2.0',
827     name : 'GIO unix specific APIs',
828     description : 'unix specific headers for glib I/O library',
829   )
830 endif
832 libgio_dep = declare_dependency(link_with : libgio,
833   dependencies : [gioenumtypes_dep],
834   # We sadly need to export configinc here because everyone includes <gio/*.h>
835   include_directories : [configinc, gioinc])
837 if host_system == 'windows'
838   # Hack till https://github.com/mesonbuild/meson/issues/2324 is fixed
839   libgiounix_dep = dependency('', required : false)
840   libgiowin32_dep = libgio_dep
841 else
842   libgiowin32_dep = dependency('', required : false)
843   libgiounix_dep = libgio_dep
844 endif
846 # Dependencies used by executables below
847 have_libelf = false
848 libelf = dependency('libelf', version : '>= 0.8.12', required : false)
849 if libelf.found()
850   have_libelf = true
851 else
852   # This fallback is necessary on *BSD. elfutils isn't the only libelf
853   # implementation, and *BSD usually includes their own libelf as a system
854   # library which doesn't have a corresponding .pc file.
855   libelf = cc.find_library('elf', required : false)
856   have_libelf = libelf.found()
857   have_libelf = have_libelf and cc.has_function('elf_begin', dependencies : libelf)
858   have_libelf = have_libelf and cc.has_function('elf_getshdrstrndx', dependencies : libelf)
859   have_libelf = have_libelf and cc.has_function('elf_getshdrnum', dependencies : libelf)
860   have_libelf = have_libelf and cc.has_header('libelf.h')
861 endif
863 if have_libelf
864   glib_conf.set('HAVE_LIBELF', 1)
865 else
866   libelf = []
867 endif
869 gconstructor_as_data_h = custom_target('gconstructor_as_data.h',
870     input : ['data-to-c.py', files('../glib/gconstructor.h')],
871     output : ['gconstructor_as_data.h'],
872     command : [python, '@INPUT0@', '@INPUT1@', 'gconstructor_code', '@OUTPUT@'])
874 # Several installed executables
875 gio_tool_sources = [
876   'gio-tool.c',
877   'gio-tool.h',
878   'gio-tool-cat.c',
879   'gio-tool-copy.c',
880   'gio-tool-info.c',
881   'gio-tool-list.c',
882   'gio-tool-mime.c',
883   'gio-tool-mkdir.c',
884   'gio-tool-monitor.c',
885   'gio-tool-mount.c',
886   'gio-tool-move.c',
887   'gio-tool-open.c',
888   'gio-tool-rename.c',
889   'gio-tool-remove.c',
890   'gio-tool-save.c',
891   'gio-tool-set.c',
892   'gio-tool-trash.c',
893   'gio-tool-tree.c',
896 executable('gio', gio_tool_sources,
897   install : true,
898   c_args : gio_c_args,
899   # intl.lib is not compatible with SAFESEH
900   link_args : noseh_link_args,
901   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
903 executable('gresource', 'gresource-tool.c',
904   install : true,
905   # intl.lib is not compatible with SAFESEH
906   link_args : noseh_link_args,
907   dependencies : [libelf, libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
909 gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodule-priv.c',
910   install : true,
911   c_args : gio_c_args,
912   # intl.lib is not compatible with SAFESEH
913   link_args : noseh_link_args,
914   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
916 glib_compile_schemas = executable('glib-compile-schemas',
917   [gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-schemas.c'],
918   install : true,
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_resources = executable('glib-compile-resources',
924   [gconstructor_as_data_h, 'gvdb/gvdb-builder.c', 'glib-compile-resources.c'],
925   install : true,
926   c_args : gio_c_args,
927   # intl.lib is not compatible with SAFESEH
928   link_args : noseh_link_args,
929   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
931 executable('gsettings', 'gsettings-tool.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])
937 install_data('gschema.dtd',
938   install_dir : join_paths(get_option('datadir'), 'glib-2.0/schemas'))
940 install_data(['gschema.loc', 'gschema.its'],
941   install_dir : join_paths(get_option('datadir'), 'gettext/its'))
943 executable('gdbus', 'gdbus-tool.c',
944   install : true,
945   c_args : gio_c_args,
946   # intl.lib is not compatible with SAFESEH
947   link_args : noseh_link_args,
948   dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
950 if host_system != 'windows' and not glib_have_cocoa
951   executable('gapplication', 'gapplication-tool.c',
952     install : true,
953     c_args : gio_c_args,
954     # intl.lib is not compatible with SAFESEH
955     link_args : noseh_link_args,
956     dependencies : [libgio_dep, libgobject_dep, libgmodule_dep, libglib_dep])
957 endif
959 if enable_systemtap
960   gio_stp = configure_file(input : 'gio.stp.in',
961     output : '@0@.stp'.format(libgio.full_path().split('/').get(-1)),
962     configuration : stp_cdata,
963     install_dir : tapset_install_dir,
964     install : true)
965 endif
967 subdir('fam')
969 if host_system != 'windows'
970   subdir('tests')
971 endif