1subdir('trashlib')
2
3# D-Bus and systemd service files
4dbus_service = gvfs_namespace + '.Daemon'
5dbus_exec = 'gvfsd'
6dbus_systemd_service = ''
7
8if install_systemd_systemduserunitdir
9  service = 'gvfs-daemon.service'
10
11  configure_file(
12    input: service + '.in',
13    output: '@BASENAME@',
14    configuration: service_conf,
15    install: true,
16    install_dir: systemd_systemduserunitdir,
17  )
18
19  dbus_systemd_service = 'SystemdService=' + service
20endif
21
22dbus_service_conf = {
23  'service': dbus_service,
24  'exec': gvfs_prefix / gvfs_libexecdir / dbus_exec,
25  'systemd_service': dbus_systemd_service,
26}
27
28daemon_service = configure_file(
29  input: dbus_service_in,
30  output: dbus_service + '.service',
31  configuration: dbus_service_conf,
32  install: true,
33  install_dir: dbus_session_bus_services_dir,
34)
35
36gnome.mkenums(
37  'org.gnome.system.gvfs.enums.xml',
38  sources: 'gvfs-enums.h',
39  comments: '<!-- @comment@ -->',
40  fhead: '<schemalist>',
41  vhead: '  <@type@ id="org.gnome.system.gvfs.@EnumName@">',
42  vprod: '    <value nick="@valuenick@" value="@valuenum@"/>',
43  vtail: '  </@type@>',
44  ftail: '</schemalist>',
45  install_header: true,
46  install_dir: gio_schemasdir,
47)
48
49sources = files(
50  'gvfsbackend.c',
51  'gvfschannel.c',
52  'gvfsdaemon.c',
53  'gvfsdaemonutils.c',
54  'gvfsjob.c',
55  'gvfsjobcloseread.c',
56  'gvfsjobclosewrite.c',
57  'gvfsjobcopy.c',
58  'gvfsjobcreatemonitor.c',
59  'gvfsjobdbus.c',
60  'gvfsjobdelete.c',
61  'gvfsjobenumerate.c',
62  'gvfsjoberror.c',
63  'gvfsjobmakedirectory.c',
64  'gvfsjobmakesymlink.c',
65  'gvfsjobmount.c',
66  'gvfsjobmountmountable.c',
67  'gvfsjobmove.c',
68  'gvfsjobopenforread.c',
69  'gvfsjobopenforwrite.c',
70  'gvfsjobopeniconforread.c',
71  'gvfsjobpollmountable.c',
72  'gvfsjobprogress.c',
73  'gvfsjobpull.c',
74  'gvfsjobpush.c',
75  'gvfsjobqueryattributes.c',
76  'gvfsjobqueryfsinfo.c',
77  'gvfsjobqueryinfo.c',
78  'gvfsjobqueryinforead.c',
79  'gvfsjobqueryinfowrite.c',
80  'gvfsjobread.c',
81  'gvfsjobseekread.c',
82  'gvfsjobseekwrite.c',
83  'gvfsjobsetattribute.c',
84  'gvfsjobsetdisplayname.c',
85  'gvfsjobsource.c',
86  'gvfsjobstartmountable.c',
87  'gvfsjobstopmountable.c',
88  'gvfsjobtrash.c',
89  'gvfsjobtruncate.c',
90  'gvfsjobunmount.c',
91  'gvfsjobunmountmountable.c',
92  'gvfsjobwrite.c',
93  'gvfskeyring.c',
94  'gvfsmonitor.c',
95  'gvfsreadchannel.c',
96  'gvfswritechannel.c',
97)
98
99deps = socket_deps + [
100  gio_unix_dep,
101  libgvfscommon_dep,
102  gsettings_desktop_schemas_dep,
103]
104
105if enable_gcr
106  deps += gcr_dep
107endif
108
109if enable_keyring
110  deps += libsecret_dep
111endif
112
113cflags = [
114  '-DLIBEXEC_DIR="@0@"'.format(gvfs_prefix / gvfs_libexecdir),
115  '-DMOUNTABLE_DIR="@0@"'.format(gvfs_prefix / gvfs_mounts_dir),
116  '-DGVFS_LOCALEDIR="@0@"'.format(gvfs_prefix / gvfs_localedir),
117]
118
119libgvfsdaemon = shared_library(
120  'gvfsdaemon',
121  sources: sources,
122  include_directories: top_inc,
123  dependencies: deps,
124  c_args: cflags,
125  install: true,
126  install_rpath: gvfs_rpath,
127  install_dir: gvfs_pkglibdir,
128)
129
130libgvfsdaemon_dep = declare_dependency(
131  include_directories: include_directories('.'),
132  dependencies: libgvfscommon_dep,
133  compile_args: cflags,
134  link_with: libgvfsdaemon,
135)
136
137sources = files(
138  'main.c',
139  'mount.c',
140)
141
142executable(
143  'gvfsd',
144  sources,
145  include_directories: top_inc,
146  dependencies: libgvfsdaemon_dep,
147  install: true,
148  install_rpath: gvfs_rpath,
149  install_dir: gvfs_libexecdir,
150)
151
152daemon_main_sources = files(
153  'daemon-main.c',
154  'daemon-main-generic.c',
155)
156
157programs = []
158mounts = []
159schema_data = []
160convert_data = []
161
162cflags = [
163  '-DBACKEND_HEADER=gvfsbackendlocaltest.h',
164  '-DDEFAULT_BACKEND_TYPE=localtest',
165  '-DBACKEND_TYPES="localtest", G_VFS_TYPE_BACKEND_LOCALTEST,',
166]
167
168programs += [['gvfsd-localtest', {'sources': files('gvfsbackendlocaltest.c'), 'c_args': cflags}]]
169mounts += ['localtest']
170
171sources = files(
172  'gvfsbackendftp.c',
173  'gvfsftpconnection.c',
174  'gvfsftpdircache.c',
175  'gvfsftpfile.c',
176  'gvfsftptask.c',
177  'ParseFTPList.c',
178)
179
180cflags = [
181  '-DBACKEND_HEADER=gvfsbackendftp.h',
182  '-DDEFAULT_BACKEND_TYPE=ftp',
183  '-DBACKEND_TYPES="ftp", G_VFS_TYPE_BACKEND_FTP, "ftps", G_VFS_TYPE_BACKEND_FTP, "ftpis", G_VFS_TYPE_BACKEND_FTP,',
184  '-DMAX_JOB_THREADS=10',
185]
186
187programs += [['gvfsd-ftp', {'sources': sources, 'c_args': cflags}]]
188mounts += ['ftp', 'ftps', 'ftpis']
189
190cflags = [
191  '-DBACKEND_HEADER=gvfsbackendtrash.h',
192  '-DDEFAULT_BACKEND_TYPE=trash',
193  '-DBACKEND_TYPES="trash", G_VFS_TYPE_BACKEND_TRASH,',
194  '-DMAX_JOB_THREADS=10',
195]
196
197programs += [['gvfsd-trash', {'sources': files('gvfsbackendtrash.c'), 'dependencies': [libtrash_dep], 'c_args': cflags}]]
198mounts += ['trash']
199
200cflags = [
201  '-DBACKEND_HEADER=gvfsbackendrecent.h',
202  '-DDEFAULT_BACKEND_TYPE=recent',
203  '-DBACKEND_TYPES="recent", G_VFS_TYPE_BACKEND_RECENT,',
204  '-DBACKEND_USES_GVFS=1',
205  '-DMAX_JOB_THREADS=10',
206]
207
208programs += [['gvfsd-recent', {'sources': files('gvfsbackendrecent.c'), 'c_args': cflags}]]
209mounts += ['recent']
210
211cflags = [
212  '-DBACKEND_HEADER=gvfsbackendcomputer.h',
213  '-DDEFAULT_BACKEND_TYPE=computer',
214  '-DBACKEND_TYPES="computer", G_VFS_TYPE_BACKEND_COMPUTER,',
215  '-DBACKEND_USES_GVFS=1',
216  '-DMAX_JOB_THREADS=1',
217]
218
219programs += [['gvfsd-computer', {'sources': files('gvfsbackendcomputer.c'), 'dependencies': [gio_unix_dep], 'c_args': cflags}]]
220mounts += ['computer']
221
222cflags = [
223  '-DBACKEND_HEADER=gvfsbackendnetwork.h',
224  '-DDEFAULT_BACKEND_TYPE=network',
225  '-DBACKEND_TYPES="network", G_VFS_TYPE_BACKEND_NETWORK,',
226  '-DBACKEND_USES_GVFS=1',
227  '-DMAX_JOB_THREADS=1',
228]
229
230programs += [['gvfsd-network', {'sources': files('gvfsbackendnetwork.c'), 'c_args': cflags}]]
231mounts += ['network']
232
233cflags = [
234  '-DBACKEND_HEADER=gvfsbackendburn.h',
235  '-DDEFAULT_BACKEND_TYPE=burn',
236  '-DBACKEND_TYPES="burn", G_VFS_TYPE_BACKEND_BURN,',
237  '-DMAX_JOB_THREADS=1',
238]
239
240programs += [['gvfsd-burn', {'sources': files('gvfsbackendburn.c'), 'dependencies': [gio_unix_dep], 'c_args': cflags}]]
241mounts += ['burn']
242
243if enable_sftp
244  sources = files(
245    'gvfsbackendsftp.c',
246    'pty_open.c',
247  )
248
249  deps = socket_deps + [
250    gio_unix_dep,
251    util_dep
252  ]
253
254  cflags = [
255    '-DBACKEND_HEADER=gvfsbackendsftp.h',
256    '-DDEFAULT_BACKEND_TYPE=sftp',
257    '-DBACKEND_TYPES="sftp", G_VFS_TYPE_BACKEND_SFTP,',
258    '-DMAX_JOB_THREADS=1',
259    '-DSSH_PROGRAM="@0@"'.format(ssh.path()),
260  ]
261
262  programs += [['gvfsd-sftp', {'sources': sources, 'dependencies': deps, 'c_args': cflags}]]
263  mounts += ['sftp']
264endif
265
266if enable_samba
267  sources = files('gvfsbackendsmb.c')
268
269  cflags = [
270    '-DBACKEND_HEADER=gvfsbackendsmb.h',
271    '-DDEFAULT_BACKEND_TYPE=smb',
272    '-DBACKEND_TYPES="smb-share", G_VFS_TYPE_BACKEND_SMB,',
273    '-DMAX_JOB_THREADS=1',
274  ]
275
276  programs += [['gvfsd-smb', {'sources': sources, 'dependencies': [smbclient_dep], 'c_args': cflags}]]
277  mounts += ['smb']
278  schema_data += files('org.gnome.system.smb.gschema.xml')
279  convert_data += files('gvfs-smb.convert')
280
281  cflags = [
282    '-DBACKEND_HEADER=gvfsbackendsmbbrowse.h',
283    '-DDEFAULT_BACKEND_TYPE=smb-network',
284    '-DBACKEND_TYPES="smb-network", G_VFS_TYPE_BACKEND_SMB_BROWSE, "smb-server",  G_VFS_TYPE_BACKEND_SMB_BROWSE,',
285    '-DMAX_JOB_THREADS=1',
286    '-DMOUNTABLE_DBUS_NAME=' + gvfs_namespace + '.mountpoint_smb_browse',
287  ]
288
289  programs += [['gvfsd-smb-browse', {'sources': sources + files('gvfsbackendsmbbrowse.c'), 'dependencies': [smbclient_dep], 'c_args': cflags}]]
290  mounts += ['smb-browse']
291endif
292
293if enable_dnssd
294  deps = [
295    avahi_client_dep,
296    avahi_glib_dep,
297    libgvfscommon_dnssd_dep,
298  ]
299
300  cflags = [
301    '-DBACKEND_HEADER=gvfsbackenddnssd.h',
302    '-DDEFAULT_BACKEND_TYPE=dns-sd',
303    '-DBACKEND_TYPES="dns-sd", G_VFS_TYPE_BACKEND_DNS_SD,',
304    '-DMAX_JOB_THREADS=1',
305    '-DMOUNTABLE_DBUS_NAME=' + gvfs_namespace + '.mountpoint_dnssd',
306  ]
307
308  programs += [['gvfsd-dnssd', {'sources': files('gvfsbackenddnssd.c'), 'dependencies': deps, 'c_args': cflags}]]
309  mounts += ['dns-sd']
310  schema_data += files('org.gnome.system.dns_sd.gschema.xml')
311  convert_data += files('gvfs-dns-sd.convert')
312endif
313
314if enable_archive
315  cflags = [
316    '-DBACKEND_HEADER=gvfsbackendarchive.h',
317    '-DDEFAULT_BACKEND_TYPE=archive',
318    '-DBACKEND_TYPES="archive", G_VFS_TYPE_BACKEND_ARCHIVE,',
319    '-DMAX_JOB_THREADS=1',
320    '-DBACKEND_USES_GVFS=1',
321  ]
322
323  programs += [['gvfsd-archive', {'sources': files('gvfsbackendarchive.c'), 'dependencies': [libarchive_dep], 'c_args': cflags}]]
324  mounts += ['archive']
325endif
326
327if enable_cdda
328  deps = [
329    gudev_dep,
330    libcdio_paranoia_dep,
331  ]
332
333  cflags = [
334    '-DBACKEND_HEADER=gvfsbackendcdda.h',
335    '-DDEFAULT_BACKEND_TYPE=cdda',
336    '-DBACKEND_TYPES="cdda", G_VFS_TYPE_BACKEND_CDDA,',
337    '-DMAX_JOB_THREADS=1',
338  ]
339
340  programs += [['gvfsd-cdda', {'sources': files('gvfsbackendcdda.c'), 'dependencies': deps, 'c_args': cflags}]]
341  mounts += ['cdda']
342endif
343
344if enable_admin
345  deps = [
346    libcap_dep,
347    polkit_gobject_dep,
348  ]
349
350  cflags = [
351    '-DBACKEND_HEADER=gvfsbackendadmin.h',
352    '-DDEFAULT_BACKEND_TYPE=admin',
353    '-DBACKEND_TYPES="admin", G_VFS_TYPE_BACKEND_ADMIN,',
354    '-DMOUNTABLE_DBUS_NAME=' + gvfs_namespace + '.mountpoint_admin',
355  ]
356
357  programs += [['gvfsd-admin', {'sources': files('gvfsbackendadmin.c'), 'dependencies': deps, 'c_args': cflags}]]
358  mounts += ['admin']
359
360  policy = gvfs_namespace + '.file-operations.policy'
361
362  policy_in = configure_file(
363    input: policy + '.in.in',
364    output: '@BASENAME@',
365    configuration: service_conf,
366  )
367
368  i18n.merge_file(
369    policy,
370    input: policy_in,
371    output: '@BASENAME@',
372    po_dir: po_dir,
373    install: true,
374    install_dir: gvfs_datadir / 'polkit-1/actions',
375  )
376
377  install_data(
378    gvfs_namespace + '.file-operations.rules',
379    install_dir: gvfs_datadir / 'polkit-1/rules.d',
380  )
381endif
382
383if enable_google
384  deps = [
385    goa_dep,
386    libgdata_dep,
387  ]
388
389  cflags = [
390    '-DBACKEND_HEADER=gvfsbackendgoogle.h',
391    '-DDEFAULT_BACKEND_TYPE=google-drive',
392    '-DBACKEND_TYPES="google-drive", G_VFS_TYPE_BACKEND_GOOGLE,',
393  ]
394
395  programs += [['gvfsd-google', {'sources': files('gvfsbackendgoogle.c'), 'dependencies': deps, 'c_args': cflags}]]
396  mounts += ['google']
397endif
398
399if enable_gphoto2
400  deps = [
401    gio_unix_dep,
402    libgphoto2_dep,
403    libgvfscommon_gphoto2_dep,
404  ]
405
406  cflags = [
407    '-DBACKEND_HEADER=gvfsbackendgphoto2.h',
408    '-DDEFAULT_BACKEND_TYPE=gphoto2',
409    '-DBACKEND_TYPES="gphoto2", G_VFS_TYPE_BACKEND_GPHOTO2,',
410    '-DMAX_JOB_THREADS=1',
411  ]
412
413  programs += [['gvfsd-gphoto2', {'sources': files('gvfsbackendgphoto2.c'), 'dependencies': deps, 'c_args': cflags}]]
414  mounts += ['gphoto2']
415endif
416
417if enable_mtp
418  deps = [
419    libgvfscommon_gphoto2_dep,
420    libmtp_dep
421  ]
422
423  cflags = [
424    '-DBACKEND_HEADER=gvfsbackendmtp.h',
425    '-DDEFAULT_BACKEND_TYPE=mtp',
426    '-DBACKEND_TYPES="mtp", G_VFS_TYPE_BACKEND_MTP,',
427    '-DMAX_JOB_THREADS=1',
428  ]
429
430  if enable_libusb
431    deps += libusb_dep
432  endif
433
434  programs += [['gvfsd-mtp', {'sources': files('gvfsbackendmtp.c'), 'dependencies': deps, 'c_args': cflags}]]
435  mounts += ['mtp']
436endif
437
438if enable_http
439  sources = files(
440    'gvfsbackendhttp.c',
441    'gvfshttpinputstream.c',
442  )
443
444  deps = [
445    libsoup_dep,
446    libxml_dep,
447  ]
448
449  cflags = [
450    '-DBACKEND_HEADER=gvfsbackendhttp.h',
451    '-DDEFAULT_BACKEND_TYPE=http',
452    '-DBACKEND_TYPES="http", G_VFS_TYPE_BACKEND_HTTP,',
453    '-DMAX_JOB_THREADS=1',
454    '-DMOUNTABLE_DBUS_NAME=' + gvfs_namespace + '.mountpoint_http',
455  ]
456
457  programs += [['gvfsd-http', {'sources': sources, 'dependencies': deps, 'c_args': cflags}]]
458  mounts += ['http']
459
460  cflags = [
461    '-DBACKEND_HEADER=gvfsbackenddav.h',
462    '-DDEFAULT_BACKEND_TYPE=dav',
463    '-DMAX_JOB_THREADS=1',
464  ]
465
466  if enable_dnssd
467    deps += libgvfscommon_dnssd_dep
468
469    cflags += '-DBACKEND_TYPES="dav", G_VFS_TYPE_BACKEND_DAV, "dav+sd", G_VFS_TYPE_BACKEND_DAV, "davs+sd", G_VFS_TYPE_BACKEND_DAV,'
470
471    mounts += ['dav+sd']
472  else
473    cflags += '-DBACKEND_TYPES="dav", G_VFS_TYPE_BACKEND_DAV,'
474  endif
475
476  programs += [['gvfsd-dav', {'sources': sources + files('gvfsbackenddav.c'), 'dependencies': deps, 'c_args': cflags}]]
477  mounts += ['dav']
478endif
479
480if enable_afc
481  deps = [
482    libimobiledevice_dep,
483    libplist_dep,
484  ]
485
486  cflags = [
487    '-DBACKEND_HEADER=gvfsbackendafc.h',
488    '-DDEFAULT_BACKEND_TYPE=afc',
489    '-DBACKEND_TYPES="afc", G_VFS_TYPE_BACKEND_AFC,',
490    '-DMAX_JOB_THREADS=1',
491    '-DBACKEND_USES_GVFS=1',
492  ]
493
494  programs += [['gvfsd-afc', {'sources': files('gvfsbackendafc.c'), 'dependencies': deps, 'c_args': cflags}]]
495  mounts += ['afc']
496endif
497
498if enable_afp
499  common_sources = files(
500    'gvfsafptypes.h',
501    'gvfsafputils.c',
502    'gvfsafpconnection.c',
503    'gvfsafpserver.c',
504    'gvfsafpvolume.c',
505  )
506
507  deps = []
508  if enable_gcrypt
509    deps += libgcrypt_dep
510  endif
511
512  cflags = [
513    '-DBACKEND_HEADER=gvfsbackendafp.h',
514    '-DDEFAULT_BACKEND_TYPE=afp-volume',
515    '-DBACKEND_TYPES="afp-volume", G_VFS_TYPE_BACKEND_AFP,',
516    '-DMAX_JOB_THREADS=1',
517  ]
518
519  programs += [['gvfsd-afp', {'sources': common_sources + files('gvfsbackendafp.c'), 'dependencies': deps, 'c_args': cflags}]]
520  mounts += ['afp']
521
522  cflags = [
523    '-DBACKEND_HEADER=gvfsbackendafpbrowse.h',
524    '-DDEFAULT_BACKEND_TYPE=afp-server',
525    '-DBACKEND_TYPES="afp-server", G_VFS_TYPE_BACKEND_AFP_BROWSE,',
526    '-DMAX_JOB_THREADS=1',
527  ]
528
529  programs += [['gvfsd-afp-browse', {'sources': common_sources + files('gvfsbackendafpbrowse.c'), 'dependencies': deps, 'c_args': cflags}]]
530  mounts += ['afp-browse']
531endif
532
533if enable_nfs
534  cflags = [
535    '-DBACKEND_HEADER=gvfsbackendnfs.h',
536    '-DDEFAULT_BACKEND_TYPE=nfs',
537    '-DBACKEND_TYPES="nfs", G_VFS_TYPE_BACKEND_NFS,',
538    '-DMAX_JOB_THREADS=1',
539  ]
540
541  programs += [['gvfsd-nfs', {'sources': files('gvfsbackendnfs.c'), 'dependencies': [libnfs_dep], 'c_args': cflags}]]
542  mounts += ['nfs']
543endif
544
545foreach program: programs
546  options = program[1]
547  kwargs = {
548    'sources': daemon_main_sources + options.get('sources', []),
549    'dependencies': [libgvfsdaemon_dep] + options.get('dependencies', []),
550    'c_args': options.get('c_args', ''),
551  }
552
553  executable(
554    program[0],
555    include_directories: top_inc,
556    kwargs: kwargs,
557    install: true,
558    install_rpath: gvfs_rpath,
559    install_dir: gvfs_libexecdir,
560  )
561endforeach
562
563foreach mount: mounts
564  configure_file(
565    input: mount + '.mount.in',
566    output: '@BASENAME@',
567    configuration: service_conf,
568    install: true,
569    install_dir: gvfs_mounts_dir,
570  )
571endforeach
572
573if enable_devel_utils
574  sources = daemon_main_sources + files('gvfsbackendtest.c')
575
576  cflags = [
577    '-DBACKEND_HEADER=gvfsbackendtest.h',
578    '-DDEFAULT_BACKEND_TYPE=test',
579    '-DBACKEND_TYPES="test", G_VFS_TYPE_BACKEND_TEST,',
580  ]
581
582  executable(
583    'gvfsd-test',
584    sources,
585    include_directories: top_inc,
586    dependencies: libgvfsdaemon_dep,
587    c_args: cflags,
588  )
589endif
590
591install_data(
592  schema_data,
593  install_dir: gio_schemasdir,
594)
595
596install_data(
597  convert_data,
598  install_dir: gvfs_datadir / 'GConf/gsettings',
599)
600