1gdk_public_sources = files([
2  'gdk.c',
3  'gdkapplaunchcontext.c',
4  'gdkcairo.c',
5  'gdkcairocontext.c',
6  'gdkclipboard.c',
7  'gdkcontentdeserializer.c',
8  'gdkcontentformats.c',
9  'gdkcontentprovider.c',
10  'gdkcontentproviderimpl.c',
11  'gdkcontentserializer.c',
12  'gdkcursor.c',
13  'gdkdevice.c',
14  'gdkdevicepad.c',
15  'gdkdevicetool.c',
16  'gdkdisplay.c',
17  'gdkdisplaymanager.c',
18  'gdkdrag.c',
19  'gdkdrawcontext.c',
20  'gdkdrop.c',
21  'gdkevents.c',
22  'filetransferportal.c',
23  'gdkframeclock.c',
24  'gdkframeclockidle.c',
25  'gdkframetimings.c',
26  'gdkgl.c',
27  'gdkglcontext.c',
28  'gdkglobals.c',
29  'gdkgltexture.c',
30  'gdkkeys.c',
31  'gdkkeyuni.c',
32  'gdkmemorytexture.c',
33  'gdkmonitor.c',
34  'gdkpaintable.c',
35  'gdkpango.c',
36  'gdkpixbuf-drawable.c',
37  'gdkpipeiostream.c',
38  'gdkrectangle.c',
39  'gdkrgba.c',
40  'gdkseat.c',
41  'gdkseatdefault.c',
42  'gdksnapshot.c',
43  'gdktexture.c',
44  'gdkvulkancontext.c',
45  'gdksurface.c',
46  'gdkpopuplayout.c',
47  'gdkprofiler.c',
48  'gdkpopup.c',
49  'gdktoplevellayout.c',
50  'gdktoplevelsize.c',
51  'gdktoplevel.c',
52  'gdkdragsurface.c',
53])
54
55gdk_public_headers = files([
56  'gdk-autocleanup.h',
57  'gdk.h',
58  'gdkapplaunchcontext.h',
59  'gdkcairo.h',
60  'gdkcairocontext.h',
61  'gdkclipboard.h',
62  'gdkcontentdeserializer.h',
63  'gdkcontentformats.h',
64  'gdkcontentprovider.h',
65  'gdkcontentproviderimpl.h',
66  'gdkcontentserializer.h',
67  'gdkcursor.h',
68  'gdkdevice.h',
69  'gdkdevicepad.h',
70  'gdkdevicetool.h',
71  'gdkdisplay.h',
72  'gdkdisplaymanager.h',
73  'gdkdrag.h',
74  'gdkdrawcontext.h',
75  'gdkdrop.h',
76  'gdkevents.h',
77  'gdkframeclock.h',
78  'gdkframetimings.h',
79  'gdkglcontext.h',
80  'gdkgltexture.h',
81  'gdkkeys.h',
82  'gdkkeysyms.h',
83  'gdkmemorytexture.h',
84  'gdkmonitor.h',
85  'gdkpaintable.h',
86  'gdkpango.h',
87  'gdkpixbuf.h',
88  'gdkrectangle.h',
89  'gdkrgba.h',
90  'gdkseat.h',
91  'gdksnapshot.h',
92  'gdktexture.h',
93  'gdktypes.h',
94  'gdkvulkancontext.h',
95  'gdksurface.h',
96  'gdkpopuplayout.h',
97  'gdkpopup.h',
98  'gdktoplevellayout.h',
99  'gdktoplevelsize.h',
100  'gdktoplevel.h',
101  'gdkdragsurface.h',
102])
103install_headers(gdk_public_headers, subdir: 'gtk-4.0/gdk/')
104
105gdk_sources = gdk_public_sources
106
107gdk_private_h_sources = files([
108  'gdkeventsprivate.h',
109  'gdkdevicetoolprivate.h',
110  'gdkmonitorprivate.h',
111  'gdkseatdefaultprivate.h',
112  'gdktoplevelsizeprivate.h',
113])
114
115gdk_gresource_xml = configure_file(output: 'gdk.gresource.xml',
116  input: 'gen-gdk-gresources-xml.py',
117  command: [
118    find_program('gen-gdk-gresources-xml.py'),
119    meson.current_source_dir(),
120    '@OUTPUT@',
121  ],
122)
123
124gdkresources = gnome.compile_resources('gdkresources',
125  gdk_gresource_xml,
126  source_dir: '.',
127  c_name: '_gdk',
128  extra_args: '--manual-register',
129)
130
131gdk_headers = gdk_public_headers
132
133gdk_enums = gnome.mkenums('gdkenumtypes',
134  sources: gdk_public_headers,
135  c_template: 'gdkenumtypes.c.template',
136  h_template: 'gdkenumtypes.h.template',
137  install_dir: gtk_includedir / 'gtk-4.0/gdk',
138  install_header: true,
139)
140
141gdkenum_h = gdk_enums[1]
142
143gdk_marshalers = gnome.genmarshal('gdkmarshalers',
144  sources: 'gdkmarshalers.list',
145  prefix: '_gdk_marshal',
146  valist_marshallers: true,
147)
148
149gdkmarshal_h = gdk_marshalers[1]
150
151gdkconfig_cdata = configuration_data()
152gdkconfig_cdata.set('GDK_WINDOWING_X11', x11_enabled)
153gdkconfig_cdata.set('GDK_WINDOWING_WAYLAND', wayland_enabled)
154gdkconfig_cdata.set('GDK_WINDOWING_WIN32', win32_enabled)
155gdkconfig_cdata.set('GDK_WINDOWING_BROADWAY', broadway_enabled)
156gdkconfig_cdata.set('GDK_WINDOWING_MACOS', macos_enabled)
157gdkconfig_cdata.set('GDK_RENDERING_VULKAN', have_vulkan)
158
159gdkconfig = configure_file(
160  input: 'gdkconfig.h.meson',
161  output: 'gdkconfig.h',
162  configuration: gdkconfig_cdata,
163  install_dir: gtk_includedir / 'gtk-4.0/gdk',
164)
165
166gdkversion_cdata = configuration_data()
167gdkversion_cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
168gdkversion_cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
169gdkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
170
171gdkversionmacros = configure_file(
172  input: 'gdkversionmacros.h.in',
173  output: 'gdkversionmacros.h',
174  configuration: gdkversion_cdata,
175  install_dir: gtk_includedir / 'gtk-4.0/gdk',
176)
177
178gdkinc = include_directories('.')
179gdkx11_inc = include_directories('x11')
180gdkwayland_inc = include_directories('wayland')
181
182wlinc = include_directories('.')
183win32rcinc = include_directories('win32/rc')
184
185gdk_gen_headers = [gdkenum_h, gdkmarshal_h, gdkconfig, gdkversionmacros]
186
187gdk_deps = [
188  libm,
189  pixbuf_dep,
190  cairo_dep,
191  pango_dep,
192  fribidi_dep,
193  cairogobj_dep,
194  glib_dep,
195  gobject_dep,
196  graphene_dep,
197  epoxy_dep,
198  fontconfig_dep,
199  platform_gio_dep,
200  pangocairo_dep,
201  vulkan_dep,
202]
203
204if profiler_enabled
205  if libsysprof_capture_dep.found()
206    gdk_deps += [libsysprof_capture_dep]
207  endif
208endif
209
210# add generated gdk sources
211gdk_sources += [
212  gdkconfig,
213  gdk_enums,
214  gdk_marshalers,
215  gdkresources,
216  gdkversionmacros,
217  gdk_private_h_sources,
218  gdk_public_headers
219]
220
221if wayland_enabled or broadway_enabled
222  if cc.has_function('shm_open')
223    shmlib = []
224  elif cc.has_function('shm_open', args : '-lrt')
225    shmlib = cc.find_library('rt')
226  else
227    shmlib = []
228  endif
229endif
230
231libgdk_c_args = [
232  '-DGTK_COMPILATION',
233  '-DG_LOG_DOMAIN="Gdk"',
234]
235
236gdk_backends = []
237gdk_backends_gen_headers = []  # non-public generated headers
238foreach backend : ['broadway', 'wayland', 'win32', 'x11', 'macos']
239  if get_variable('@0@_enabled'.format(backend))
240    subdir(backend)
241    gdk_deps += get_variable('gdk_@0@_deps'.format(backend))
242    gdk_backends += get_variable('libgdk_@0@'.format(backend))
243    # Special-case this for now to work around Meson bug with get_variable()
244    # fallback being an empty array, or any array (#1481)
245    if backend == 'wayland'
246      gdk_backends_gen_headers += get_variable('gdk_@0@_gen_headers'.format(backend))
247    endif
248  endif
249endforeach
250
251if gdk_backends.length() == 0
252  error('No backends enabled')
253endif
254
255libgdk = static_library('gdk',
256  sources: [gdk_sources, gdk_backends_gen_headers, gdkconfig],
257  dependencies: gdk_deps + [libgtk_css_dep],
258  link_with: [libgtk_css, ],
259  include_directories: [confinc, gdkx11_inc, wlinc],
260  c_args: libgdk_c_args + common_cflags,
261  link_whole: gdk_backends,
262)
263
264# We don't have link_with: to internal static libs here on purpose, just
265# list the dependencies and generated headers and such, for use in the
266# "public" libgtk_dep used by internal executables.
267libgdk_dep = declare_dependency(
268  sources: ['gdk.h', gdkconfig, gdkenum_h],
269  include_directories: [confinc, gdkx11_inc, wlinc],
270  dependencies: gdk_deps + [libgtk_css_dep],
271)
272