1spice_gtk_include += [include_directories('.')]
2
3#
4# Source files for spice-client-glib
5#
6
7# generate spice-version.h
8version_info = meson.project_version().split('.')
9major = '@0@'.format(version_info[0])
10minor = '@0@'.format(version_info[1])
11micro = '0'
12if version_info.length() > 2
13  micro = version_info[2].split('-')[0]
14endif
15version_data = configuration_data()
16version_data.set('SPICE_GTK_MAJOR_VERSION', major)
17version_data.set('SPICE_GTK_MINOR_VERSION', minor)
18version_data.set('SPICE_GTK_MICRO_VERSION', micro)
19spice_version_h = configure_file(input : 'spice-version.h.in',
20                                 output : 'spice-version.h',
21                                 configuration : version_data)
22
23spice_client_glib_headers = [
24  spice_version_h,
25  'channel-cursor.h',
26  'channel-display.h',
27  'channel-inputs.h',
28  'channel-main.h',
29  'channel-playback.h',
30  'channel-port.h',
31  'channel-record.h',
32  'channel-smartcard.h',
33  'channel-usbredir.h',
34  'channel-webdav.h',
35  'qmp-port.h',
36  'smartcard-manager.h',
37  'spice-audio.h',
38  'spice-channel.h',
39  'spice-client.h',
40  'spice-file-transfer-task.h',
41  'spice-option.h',
42  'spice-session.h',
43  'spice-types.h',
44  'spice-uri.h',
45  'spice-util.h',
46  'usb-device-manager.h',
47]
48
49install_headers(spice_client_glib_headers, subdir : 'spice-client-glib-2.0')
50
51# generate spice-marshal.[ch]
52gnome = import('gnome')
53spice_marshals = gnome.genmarshal('spice-marshal', sources : 'spice-marshal.txt')
54
55# generate spice-glib-enums.[ch]
56spice_client_glib_enums = gnome.mkenums_simple('spice-glib-enums',
57                                               sources : ['spice-channel.h', 'channel-inputs.h', 'spice-session.h'],
58                                               install_header : true,
59                                               install_dir : join_paths(spice_gtk_includedir, 'spice-client-glib-2.0'))
60
61spice_client_glib_introspection_sources = [
62  spice_client_glib_headers,
63  spice_client_glib_enums,
64  'channel-cursor.c',
65  'channel-display.c',
66  'channel-inputs.c',
67  'channel-main.c',
68  'channel-playback.c',
69  'channel-port.c',
70  'channel-record.c',
71  'channel-smartcard.c',
72  'channel-usbredir.c',
73  'channel-webdav.c',
74  'qmp-port.c',
75  'smartcard-manager.c',
76  'spice-audio.c',
77  'spice-channel.c',
78  'spice-client.c',
79  'spice-option.c',
80  'spice-session.c',
81  'spice-util.c',
82  'usb-device-manager.c',
83]
84
85spice_client_glib_sources = [
86  spice_marshals,
87  spice_client_glib_introspection_sources,
88  'bio-gio.c',
89  'bio-gio.h',
90  'channel-base.c',
91  'channel-display-gst.c',
92  'channel-display-priv.h',
93  'channel-playback-priv.h',
94  'channel-usbredir-priv.h',
95  'client_sw_canvas.c',
96  'client_sw_canvas.h',
97  'coroutine.h',
98  'decode-glz.c',
99  'decode.h',
100  'decode-jpeg.c',
101  'decode-zlib.c',
102  'gio-coroutine.c',
103  'gio-coroutine.h',
104  'qmp-port.c',
105  'qmp-port.h',
106  'smartcard-manager-priv.h',
107  'spice-audio-priv.h',
108  'spice-channel-cache.h',
109  'spice-channel-priv.h',
110  'spice-common.h',
111  'spice-file-transfer-task.c',
112  'spice-file-transfer-task-priv.h',
113  'spice-glib-main.c',
114  'spice-gstaudio.c',
115  'spice-gstaudio.h',
116  'spice-option.h',
117  'spice-session-priv.h',
118  'spice-uri.c',
119  'spice-uri-priv.h',
120  'spice-util-priv.h',
121  'usb-device-manager-priv.h',
122  'usbutil.c',
123  'usbutil.h',
124  'vmcstream.c',
125  'vmcstream.h',
126]
127
128if spice_gtk_has_builtin_mjpeg
129  spice_client_glib_sources += 'channel-display-mjpeg.c'
130endif
131
132if spice_gtk_has_polkit
133  spice_client_glib_sources += ['usb-acl-helper.c',
134                                'usb-acl-helper.h']
135endif
136
137if spice_gtk_has_phodav
138  spice_client_glib_sources += ['giopipe.c',
139                                'giopipe.h']
140endif
141
142if spice_gtk_has_pulse
143  spice_client_glib_sources += ['spice-pulse.c',
144                                'spice-pulse.h']
145endif
146
147if spice_gtk_coroutine == 'gthread'
148  spice_client_glib_sources += 'coroutine_gthread.c'
149elif spice_gtk_coroutine == 'ucontext'
150  spice_client_glib_sources += ['continuation.c',
151                                'continuation.h',
152                                'coroutine_ucontext.c']
153elif spice_gtk_coroutine == 'winfiber'
154  spice_client_glib_sources += 'coroutine_winfibers.c'
155endif
156
157if spice_gtk_has_usbredir and host_machine.system() == 'windows'
158  spice_client_glib_sources += ['usbdk_api.c',
159                                'usbdk_api.h',
160                                'win-usb-dev.c',
161                                'win-usb-dev.h']
162endif
163
164#
165# libspice-client-glib-2.0.so
166#
167
168# version-script
169spice_client_glib_syms = files('map-file')
170spice_client_glib_syms_path = join_paths(meson.current_source_dir(), 'map-file')
171spice_gtk_version_script = '-Wl,--version-script=@0@'.format(spice_client_glib_syms_path)
172spice_gtk_has_version_script = compiler.has_link_argument(spice_gtk_version_script)
173if not spice_gtk_has_version_script
174  spice_client_glib_syms = files('spice-glib-sym-file')
175  spice_client_glib_syms_path = join_paths(meson.current_source_dir(), 'spice-glib-sym-file')
176  spice_gtk_version_script = ['-export-symbols', spice_client_glib_syms_path]
177endif
178
179# soversion
180# XXX: KEEP IN SYNC WITH src/Makefile.am FILE
181# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
182spice_client_glib_current = 14
183spice_client_glib_revision = 0
184spice_client_glib_age = 6
185spice_client_glib_so_version = '@0@.@1@.@2@'.format(spice_client_glib_current - spice_client_glib_age,
186                                                    spice_client_glib_age,
187                                                    spice_client_glib_revision)
188message('libspice-client-glib.so version: ' + spice_client_glib_so_version)
189
190spice_client_glib_lib = library('spice-client-glib-2.0', spice_client_glib_sources,
191                                version : spice_client_glib_so_version,
192                                install : true,
193                                include_directories : spice_gtk_include,
194                                link_args : [spice_gtk_version_script],
195                                link_depends : spice_client_glib_syms,
196                                dependencies : spice_glib_deps)
197
198spice_client_glib_dep = declare_dependency(sources : [spice_marshals[1], spice_client_glib_enums[1]],
199                                           link_with : spice_client_glib_lib,
200                                           include_directories : spice_gtk_include,
201                                           dependencies : spice_glib_deps)
202
203#
204# SpiceClientGLib-2.0.gir
205#
206if spice_gtk_has_introspection
207spice_client_glib_gir = gnome.generate_gir(spice_client_glib_lib,
208                                           export_packages : 'spice-client-glib-2.0',
209                                           extra_args : ['--accept-unprefixed'],
210                                           header : 'spice-client.h',
211                                           includes : ['GObject-2.0', 'Gio-2.0', 'GstBase-1.0'],
212                                           identifier_prefix : 'Spice',
213                                           include_directories: spice_gtk_include,
214                                           link_with : spice_client_glib_lib,
215                                           symbol_prefix : 'spice',
216                                           install : spice_gtk_has_introspection,
217                                           namespace : 'SpiceClientGLib',
218                                           nsversion : '2.0',
219                                           sources : spice_client_glib_introspection_sources)
220endif
221#
222# spice-client-glib-usb-acl-helper
223#
224if spice_gtk_has_polkit
225  executable('spice-client-glib-usb-acl-helper',
226             'spice-client-glib-usb-acl-helper.c',
227             include_directories : spice_gtk_include,
228             install : true,
229             install_dir : spice_gtk_usb_acl_helper_dir,
230             install_mode : ['rwsr-xr-x', 'root', 'root'],
231             dependencies : spice_acl_deps,
232             pie : spice_gtk_has_pie
233            )
234endif
235
236
237if spice_gtk_has_gtk
238  #
239  # Source files for spice-client-gtk
240  #
241
242  spice_client_gtk_headers = [
243    'spice-client-gtk.h',
244    'spice-grabsequence.h',
245    'spice-gtk-session.h',
246    'spice-widget.h',
247    'usb-device-widget.h',
248  ]
249
250  install_headers(spice_client_gtk_headers, subdir : 'spice-client-gtk-3.0')
251
252  # generate spice-widget-enums.[ch]
253  spice_widget_enums = gnome.mkenums_simple('spice-widget-enums',
254                                            sources : 'spice-widget.h',
255                                            install_header : true,
256                                            install_dir : join_paths(spice_gtk_includedir, 'spice-client-gtk-3.0'))
257
258  spice_client_gtk_introspection_sources = [
259    spice_client_gtk_headers,
260    spice_widget_enums,
261    'spice-grabsequence.c',
262    'spice-gtk-session.c',
263    'spice-widget.c',
264    'usb-device-widget.c',
265  ]
266
267  spice_client_gtk_sources = [
268    spice_marshals,
269    spice_client_gtk_introspection_sources,
270    'desktop-integration.c',
271    'desktop-integration.h',
272    'spice-file-transfer-task.h',
273    'spice-grabsequence.h',
274    'spice-grabsequence-priv.h',
275    'spice-gtk-session-priv.h',
276    'spice-util.c',
277    'spice-util-priv.h',
278    'spice-widget-cairo.c',
279    'spice-widget-priv.h',
280    'vncdisplaykeymap.c',
281    'vncdisplaykeymap.h',
282  ]
283
284  if spice_gtk_has_egl
285    spice_client_gtk_sources += 'spice-widget-egl.c'
286  endif
287
288  # keymaps
289  python = import('python').find_installation()
290  keymaps = ['xorgevdev',
291             'xorgkbd',
292             'xorgxquartz',
293             'xorgxwin',
294             'osx',
295             'win32',
296             'x11']
297
298  foreach keymap : keymaps
299    varname = 'keymap_@0@2xtkbd'.format(keymap)
300    target = 'vncdisplay@0@.h'.format(varname)
301    cmd = [python, keymapgen, '--lang', 'glib2', '--varname', varname, 'code-map', keymapcsv, keymap, 'xtkbd']
302    spice_client_gtk_sources += custom_target(target,
303                                              output : target,
304                                              capture : true,
305                                              build_by_default: true,
306                                              command : cmd)
307  endforeach
308
309  #
310  # libspice-client-gtk.so
311  #
312  spice_client_gtk_syms = spice_client_glib_syms
313  if not spice_gtk_has_version_script
314    spice_client_gtk_syms = files('spice-gtk-sym-file')
315    spice_client_gtk_syms_path = join_paths(meson.current_source_dir(), 'spice-gtk-sym-file')
316    spice_gtk_version_script = ['-export-symbols', spice_client_gtk_syms_path]
317  endif
318
319  # soversion
320  # XXX: KEEP IN SYNC WITH src/Makefile.am FILE
321  # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
322  spice_client_gtk_current = 5
323  spice_client_gtk_revision = 0
324  spice_client_gtk_age = 0
325  spice_client_gtk_so_version = '@0@.@1@.@2@'.format(spice_client_gtk_current - spice_client_gtk_age,
326                                                     spice_client_gtk_age,
327                                                     spice_client_gtk_revision)
328  message('libspice-client-gtk.so version: ' + spice_client_gtk_so_version)
329
330  spice_client_gtk_lib = library('spice-client-gtk-3.0', spice_client_gtk_sources,
331                                 version : spice_client_gtk_so_version,
332                                 install : true,
333                                 link_args : [spice_gtk_version_script],
334                                 link_depends : spice_client_gtk_syms,
335                                 dependencies : [spice_client_glib_dep, spice_gtk_deps])
336
337  spice_client_gtk_dep = declare_dependency(sources : spice_widget_enums[1],
338                                            link_with : spice_client_gtk_lib,
339                                            dependencies : [spice_client_glib_dep, spice_gtk_deps])
340
341if spice_gtk_has_introspection
342  #
343  # SpiceClientGtk-3.0.gir
344  #
345  spice_client_gtk_gir = gnome.generate_gir(spice_client_gtk_lib,
346                                            export_packages : 'spice-client-gtk-3.0',
347                                            extra_args : ['--accept-unprefixed'],
348                                            header : 'spice-widget.h',
349                                            includes : ['GObject-2.0', 'Gtk-3.0', spice_client_glib_gir[0]],
350                                            include_directories: spice_gtk_include,
351                                            link_with : spice_client_glib_lib,
352                                            identifier_prefix : 'Spice',
353                                            symbol_prefix : 'spice',
354                                            install : spice_gtk_has_introspection,
355                                            namespace : 'SpiceClientGtk',
356                                            nsversion : '3.0',
357                                            sources : spice_client_gtk_introspection_sources)
358  endif
359endif
360