gtk2/meson.build
Руслан Ижбулатов 48613eca27 Check for freetype2 version when PangoFT is used
Check for freetype2 version, because pangoft works with any version
(pangoft availability does not indicate that ft2 is new enough), unlike
GTK.

On Windows, since pangoft is optional, we check for the presence of
freetype2 .pc file first after finding that we have pangoft, and then
check for FT_Get_Var_Design_Coordinates() manually by looking for the
freetype headers and .lib first, and then looking for the presence of
that symbol, since freetype2's Visual Studio build system does not
generate a .pc file for us.

https://bugzilla.gnome.org/show_bug.cgi?id=773299
2018-03-28 16:14:37 +08:00

757 lines
24 KiB
Meson

project('gtk+', 'c',
version: '3.93.0',
default_options: [
'buildtype=debugoptimized',
'warning_level=1',
# We only need c99, but glib needs GNU-specific features
# https://github.com/mesonbuild/meson/issues/2289
'c_std=gnu99',
],
meson_version : '>= 0.43.0',
license: 'LGPLv2.1+')
glib_major_req = 2
glib_minor_req = 55
glib_micro_req = 0
if glib_minor_req.is_odd()
glib_min_required = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req - 1)
else
glib_min_required = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req)
endif
if glib_minor_req.is_odd()
glib_max_allowed = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req + 1)
else
glib_max_allowed = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req)
endif
glib_req = '>= @0@.@1@.@2@'.format(glib_major_req, glib_minor_req, glib_micro_req)
pango_req = '>= 1.41.0'
atk_req = '>= 2.15.1'
cairo_req = '>= 1.14.0'
gdk_pixbuf_req = '>= 2.30.0'
introspection_req = '>= 1.39.0'
wayland_proto_req = '>= 1.9'
wayland_req = '>= 1.9.91'
graphene_req = '>= 1.5.1'
epoxy_req = '>= 1.4'
cloudproviders_req = '>= 0.2.5'
xkbcommon_req = '>= 0.2.0'
gnome = import('gnome')
add_project_arguments('-DG_LOG_USE_STRUCTURED=1', language: 'c')
add_project_arguments('-DGLIB_MIN_REQUIRED_VERSION=' + glib_min_required, language: 'c')
add_project_arguments('-DGLIB_MAX_ALLOWED_VERSION=' + glib_max_allowed, language: 'c')
# Making releases:
# 1. gtk_micro_version += 1;
# 2. gtk_interface_age += 1;
# 3. if any functions have been added, set gtk_interface_age to 0.
# 4. if backwards compatibility has been broken, we're in trouble
gtk_version = meson.project_version()
gtk_major_version = gtk_version.split('.')[0].to_int()
gtk_minor_version = gtk_version.split('.')[1].to_int()
gtk_micro_version = gtk_version.split('.')[2].to_int()
gtk_interface_age = 0
add_project_arguments('-DGTK_VERSION="@0@"'.format(meson.project_version()), language: 'c')
add_project_arguments('-D_GNU_SOURCE', language: 'c')
gtk_debug_cflags = []
buildtype = get_option('buildtype')
if buildtype.startswith('debug')
gtk_debug_cflags += '-DG_ENABLE_DEBUG'
if buildtype == 'debug'
gtk_debug_cflags += '-DG_ENABLE_CONSISTENCY_CHECKS'
endif
elif buildtype == 'release'
gtk_debug_cflags += '-DG_DISABLE_CAST_CHECKS'
endif
add_project_arguments(gtk_debug_cflags, language: 'c')
# Define a string for the earliest version that this release has
# backwards binary compatibility with for all interfaces a module
# might. Unless we add module-only API with lower stability
# guarantees, this should be unchanged until we break binary compat
# for GTK+.
gtk_binary_version = '4.0.0'
gtk_binary_age = 100 * gtk_minor_version + gtk_micro_version
gtk_soversion = '0.@0@.@1@'.format(gtk_binary_age - gtk_interface_age, gtk_interface_age)
gtk_api_version = '4.0'
x11_enabled = get_option('x11-backend')
wayland_enabled = get_option('wayland-backend')
broadway_enabled = get_option('broadway-backend')
quartz_enabled = get_option('quartz-backend')
win32_enabled = get_option('win32-backend')
os_unix = false
os_linux = false
os_win32 = false
os_darwin = false
# Some windowing system backends depend on the platform we're
# building for, so we need to ensure they are disabled; in other
# cases, they are the only windowing system available, so we need
# to ensure they are enabled
if host_machine.system() == 'darwin'
os_darwin = true
win32_enabled = false
elif host_machine.system() == 'windows'
os_win32 = true
win32_enabled = true
x11_enabled = false
wayland_enabled = false
quartz_enabled = false
elif host_machine.system() == 'linux'
os_linux = true
win32_enabled = false
quartz_enabled = false
endif
os_unix = not os_win32
gtk_prefix = get_option('prefix')
gtk_includedir = join_paths(gtk_prefix, get_option('includedir'))
gtk_libdir = join_paths(gtk_prefix, get_option('libdir'))
gtk_datadir = join_paths(gtk_prefix, get_option('datadir'))
gtk_localedir = join_paths(gtk_prefix, get_option('localedir'))
gtk_sysconfdir = join_paths(gtk_prefix, get_option('sysconfdir'))
gtk_applicationsdir = join_paths(gtk_datadir, 'applications')
gtk_schemasdir = join_paths(gtk_datadir, 'glib-2.0/schemas')
gtk_appdatadir = join_paths(gtk_datadir, 'metainfo')
cc = meson.get_compiler('c')
cdata = configuration_data()
cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
cdata.set_quoted('GTK_LOCALEDIR', gtk_localedir)
cdata.set_quoted('GTK_DATADIR', gtk_datadir)
cdata.set_quoted('GTK_LIBDIR', gtk_libdir)
cdata.set_quoted('GTK_SYSCONFDIR', gtk_sysconfdir)
cdata.set_quoted('GETTEXT_PACKAGE', 'gtk40')
cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
cdata.set('GTK_BINARY_AGE', gtk_binary_age)
cdata.set('GTK_INTERFACE_AGE', gtk_interface_age)
check_headers = [
'crt/externs.h',
'dlfcn.h',
'ftw.h',
'inttypes.h',
'linux/memfd.h',
'locale.h',
'memory.h',
'stdint.h',
'stdlib.h',
'strings.h',
'string.h',
'sys/mman.h',
'sys/param.h',
'sys/stat.h',
'sys/sysinfo.h',
'sys/systeminfo.h',
'sys/time.h',
'sys/types.h',
'unistd.h',
]
foreach h : check_headers
if cc.has_header(h)
cdata.set('HAVE_' + h.underscorify().to_upper(), 1)
endif
endforeach
# Maths functions might be implemented in libm
libm = cc.find_library('m', required: false)
check_functions = [
'dcgettext',
'getpagesize',
'getresuid',
'lstat',
'mmap',
'nearbyint',
'posix_fallocate',
'_lock_file',
'flockfile',
'mkstemp',
'mallinfo',
'round',
'rint',
'log2',
'exp2',
'sincos',
]
foreach func : check_functions
if cc.has_function(func, dependencies: libm)
cdata.set('HAVE_' + func.underscorify().to_upper(), 1)
endif
endforeach
cdata.set('HAVE_DECL_ISINF', cc.has_header_symbol('math.h', 'isinf'))
cdata.set('HAVE_DECL_ISNAN', cc.has_header_symbol('math.h', 'isnan'))
# Disable deprecation checks for all libraries we depend on on stable branches.
# This is so newer versions of those libraries don't cause more warnings with
# a stable GTK version.
# We don't ever want to turn off deprecation warnings for master however, because
# that's where we get rid of deprecated API we use.
if gtk_minor_version.is_even()
cdata.set('GLIB_DISABLE_DEPRECATION_WARNINGS', 1)
endif
# Compiler flags
if cc.get_id() == 'msvc'
# Compiler options taken from msvc_recommended_pragmas.h
# in GLib, based on _Win32_Programming_ by Rector and Newcomer
test_cflags = []
add_project_arguments('-FImsvc_recommended_pragmas.h', language: 'c')
add_project_arguments('-D_USE_MATH_DEFINES', language: 'c')
elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
test_cflags = [
'-fno-strict-aliasing',
'-Wpointer-arith',
'-Wmissing-declarations',
'-Wimplicit-function-declaration',
'-Wformat=2',
'-Wformat-nonliteral',
'-Wformat-security',
'-Wstrict-prototypes',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wold-style-definition',
'-Wundef',
'-Wunused',
'-Wcast-align',
'-Wmissing-noreturn',
'-Wmissing-format-attribute',
'-Wmissing-include-dirs',
'-Wlogical-op',
'-Wswitch-default',
'-Wswitch-enum',
'-Wignored-qualifiers',
'-Werror=redundant-decls',
'-Werror=implicit',
'-Werror=nonnull',
'-Werror=init-self',
'-Werror=main',
'-Werror=missing-braces',
'-Werror=sequence-point',
'-Werror=return-type',
'-Werror=trigraphs',
'-Werror=array-bounds',
'-Werror=write-strings',
'-Werror=address',
'-Werror=int-to-pointer-cast',
'-Werror=pointer-to-int-cast',
'-Werror=empty-body',
'-Werror=write-strings',
]
else
test_cflags = []
endif
common_cflags = cc.get_supported_arguments(test_cflags)
# Symbol visibility
if get_option('default_library') != 'static'
if host_machine.system() == 'windows'
cdata.set('DLL_EXPORT', true)
cdata.set('_GDK_EXTERN', '__declspec(dllexport) extern')
if cc.get_id() != 'msvc'
common_cflags += ['-fvisibility=hidden']
endif
else
cdata.set('_GDK_EXTERN', '__attribute__((visibility("default"))) extern')
common_cflags += ['-fvisibility=hidden']
endif
endif
common_ldflags = []
if host_machine.system() == 'linux' and cc.get_id() == 'gcc'
common_ldflags += [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
endif
# Maintain compatibility with autotools
if host_machine.system() == 'darwin'
common_ldflags += [ '-compatibility_version 1', '-current_version 1.0', ]
endif
confinc = include_directories('.')
gdkinc = include_directories('gdk')
gskinc = include_directories('gsk')
gtkinc = include_directories('gtk')
testinc = include_directories('tests')
# Dependencies
glib_dep = dependency('glib-2.0', version: glib_req,
fallback : ['glib', 'libglib_dep'])
gobject_dep = dependency('gobject-2.0', version: glib_req,
fallback : ['glib', 'libgobject_dep'])
if host_machine.system() == 'windows'
giowin32_dep = dependency('gio-windows-2.0', version: glib_req, required: win32_enabled,
fallback : ['glib', 'libgio_dep'])
else
giounix_dep = dependency('gio-unix-2.0', version: glib_req, required: false,
fallback : ['glib', 'libgio_dep'])
endif
gmodule_dep = dependency('gmodule-2.0', version: glib_req,
fallback : ['glib', 'libgmodule_dep'])
cairo_dep = dependency('cairo', version: cairo_req, required : cc.get_id() != 'msvc')
cairogobj_dep = dependency('cairo-gobject', version: cairo_req, required : cc.get_id() != 'msvc')
pango_dep = dependency('pango', version: pango_req,
fallback : ['pango', 'libpango_dep'])
# Require PangoFT2 if on X11 or wayland
require_pangoft2 = wayland_enabled or x11_enabled
if require_pangoft2
pangoft_dep = dependency('pangoft2', fallback : ['pango', 'libpangoft2_dep'])
else
pangoft_dep = dependency('pangoft2', required: false)
endif
if pangoft_dep.found()
# Need at least 2.7.1 for FT_Get_Var_Design_Coordinates()
# We get the dependency itself from pango, but pango doesn't care
# about ft2 version, so an extra check is needed.
ft2_dep = dependency('freetype2', version: '>= 2.7.1', required: require_pangoft2)
# Fallback case: Look for the FreeType2 headers and library manually when its .pc
# file is not available, such as on Visual Studio
if not ft2_dep.found()
ft2lib = ft2_dep
if cc.has_header('ft2build.h')
ft2_libnames = ['freetype', 'freetypemt']
foreach lib: ft2_libnames
if not ft2_dep.found()
ft2lib = cc.find_library(lib)
# If the FreeType2 library is found, check for FT_Get_Var_Design_Coordinates()
if ft2lib.found()
if cc.has_function('FT_Get_Var_Design_Coordinates', dependencies: ft2lib)
ft2_dep = ft2lib
endif
endif
endif
endforeach
endif
endif
endif
pangocairo_dep = dependency('pangocairo', version: cairo_req,
fallback : ['pango', 'libpangocairo_dep'])
pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req,
fallback : ['gdk-pixbuf', 'gdkpixbuf_dep'])
epoxy_dep = dependency('epoxy', version: epoxy_req,
fallback: ['libepoxy', 'libepoxy_dep'])
atk_dep = dependency('atk', version: atk_req)
harfbuzz_dep = dependency('harfbuzz', version: '>= 0.9', required: false)
xkbdep = dependency('xkbcommon', version: xkbcommon_req, required: wayland_enabled)
graphene_dep = dependency('graphene-gobject-1.0', version: graphene_req,
fallback: ['graphene', 'graphene_dep'])
iso_codes_dep = dependency('iso-codes', required: false)
fontconfig_dep = [] # only used in x11 backend
atkbridge_dep = [] # only used in x11 backend
if host_machine.system() == 'windows'
platform_gio_dep = giowin32_dep
else
platform_gio_dep = giounix_dep
endif
cdata.set('HAVE_HARFBUZZ', harfbuzz_dep.found())
cdata.set('HAVE_PANGOFT', pangoft_dep.found())
if iso_codes_dep.found()
cdata.set_quoted('ISO_CODES_PREFIX', iso_codes_dep.get_pkgconfig_variable('prefix'))
else
cdata.set_quoted('ISO_CODES_PREFIX', '/usr')
endif
backend_immodules = []
pc_gdk_extra_libs = []
cairo_backends = []
foreach backend: [ ['cairo-xlib', cairo_req, x11_enabled],
['cairo-win32', cairo_req, win32_enabled],
['cairo-quartz', cairo_req, quartz_enabled],
['cairo', cairo_req, broadway_enabled or wayland_enabled], ]
backend_enabled = backend.get(2)
cairo_backend_req = backend.get(1)
cairo_backend = backend.get(0)
if backend_enabled
if dependency(cairo_backend, version: cairo_backend_req, required : cc.get_id() != 'msvc').found()
cairo_backends += [ cairo_backend ]
endif
endif
endforeach
cairo_pkg_found = false
cairogobj_pkg_found = false
if cairo_dep.found()
cairo_pkg_found = true
endif
if cairogobj_dep.found()
cairogobj_pkg_found = true
endif
cairo_libs = []
if cc.get_id() == 'msvc'
# Fallback depedency discovery for those on Visual Studio that do not generate
# pkg-config files in their build systems for MSVC
# Fallback for Cairo
if not cairo_dep.found()
if (cc.has_header('cairo.h') and cc.has_header('cairo-win32.h'))
cairo_dep = cc.find_library('cairo')
if cairo_dep.found()
cairo_libs += '-lcairo'
endif
endif
endif
# Fallback for Cairo-GObject
if not cairogobj_dep.found()
if cc.has_header('cairo-gobject.h')
cairogobj_dep = cc.find_library('cairo-gobject')
if cairogobj_dep.found()
cairo_libs += '-lcairo-gobject'
endif
endif
endif
# Fallback for HarfBuzz
if not harfbuzz_dep.found()
if cc.has_header('harfbuzz/hb.h')
harfbuzz_dep = cc.find_library('harfbuzz', required : false)
endif
endif
endif
atk_pkgs = ['atk']
wayland_pkgs = []
if wayland_enabled
wlclientdep = dependency('wayland-client', version: wayland_req)
wlprotocolsdep = dependency('wayland-protocols', version: wayland_proto_req)
wlcursordep = dependency('wayland-cursor', version: wayland_req)
wlegldep = dependency('wayland-egl')
backend_immodules += ['wayland']
wayland_pkgs = [
'wayland-client', wayland_req,
'wayland-protocols', wayland_proto_req,
'xkbcommon', xkbcommon_req,
'wayland-cursor', wayland_req,
'wayland-egl',
]
endif
x11_pkgs = []
if x11_enabled
xrandr_dep = dependency('xrandr', version: '>= 1.2.99')
xrandr15_dep = dependency('xrandr', version: '>= 1.5', required: false)
x11_dep = dependency('x11')
xrender_dep = dependency('xrender')
xi_dep = dependency('xi')
xext_dep = dependency('xext')
xcursor_dep = dependency('xcursor', required: false)
xdamage_dep = dependency('xdamage', required: false)
xfixes_dep = dependency('xfixes', required: false)
xcomposite_dep = dependency('xcomposite', required: false)
fontconfig_dep = dependency('fontconfig')
atkbridge_dep = dependency('atk-bridge-2.0', version: atk_req)
backend_immodules += ['xim']
x11_pkgs = ['fontconfig', 'x11', 'xext', 'xi', 'xrandr']
if xcursor_dep.found()
x11_pkgs += ['xcursor']
endif
if xfixes_dep.found()
x11_pkgs += ['xfixes']
endif
if xcomposite_dep.found()
x11_pkgs += ['xcomposite']
endif
if xdamage_dep.found()
x11_pkgs += ['xdamage']
endif
atk_pkgs += ['atk-bridge-2.0']
cdata.set('HAVE_XDAMAGE', xdamage_dep.found())
cdata.set('HAVE_XCURSOR', xcursor_dep.found())
cdata.set('HAVE_XCOMPOSITE', xcomposite_dep.found())
cdata.set('HAVE_XFIXES', xfixes_dep.found())
if cc.has_function('XkbQueryExtension', dependencies: x11_dep,
prefix : '#include <X11/XKBlib.h>')
cdata.set('HAVE_XKB', 1)
endif
if cc.has_function('XSyncQueryExtension', dependencies: xext_dep,
prefix: '''#include <X11/Xlib.h>
#include <X11/extensions/sync.h>''')
cdata.set('HAVE_XSYNC', 1)
endif
if cc.has_function('XGetEventData', dependencies: x11_dep)
cdata.set('HAVE_XGENERICEVENTS', 1)
endif
if xi_dep.found() and cc.has_header('X11/extensions/XInput2.h', dependencies: xi_dep)
cdata.set('XINPUT_2', 1)
# Note that we also check that the XIScrollClassInfo struct is defined,
# because at least Ubuntu Oneiric seems to have XIAllowTouchEvents(),
# but not the XIScrollClassInfo struct
has_allow_touch_evens = cc.has_function('XIAllowTouchEvents', dependencies: xi_dep)
has_scroll_class_info = cc.has_member('XIScrollClassInfo', 'number', dependencies: xi_dep,
prefix: '''#include <X11/Xlib.h>
#include <X11/extensions/XInput2.h>''')
if has_allow_touch_evens and has_scroll_class_info
cdata.set('XINPUT_2_2', 1)
endif
endif
enable_xinerama = get_option('xinerama')
if enable_xinerama != 'no'
want_xinerama = enable_xinerama == 'yes'
xinerama_dep = dependency('xinerama', required: want_xinerama)
if xinerama_dep.found() and cc.has_header_symbol('X11/extensions/Xinerama.h', 'XineramaQueryExtension', dependencies: xinerama_dep)
cdata.set('HAVE_XFREE_XINERAMA', 1)
x11_pkgs += ['xinerama']
endif
else
xinerama_dep = []
endif
cdata.set('HAVE_RANDR', xrandr_dep.found())
cdata.set('HAVE_RANDR15', xrandr15_dep.found())
endif
if broadway_enabled
pc_gdk_extra_libs += ['-lz']
backend_immodules += ['broadway']
endif
if quartz_enabled
pc_gdk_extra_libs += ['-framework Cocoa', '-framework Carbon']
backend_immodules += ['quartz']
endif
if win32_enabled
pc_gdk_extra_libs += ['-lgdi32', '-limm32', '-lshell32', '-lole32']
if cc.get_id() != 'msvc'
pc_gdk_extra_libs += ['-Wl,-luuid']
endif
pc_gdk_extra_libs += ['-lwinmm', '-ldwmapi', '-lsetupapi', '-lcfgmgr32']
backend_immodules += ['ime']
endif
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in by
# doing the same check as glib. We can't check that by linking to glib because
# it might be a subproject and hence not built yet.
libintl_dep = cc.find_library('intl', required : false)
if cc.has_function('bind_textdomain_codeset', dependencies: libintl_dep)
cdata.set('HAVE_BIND_TEXTDOMAIN_CODESET', 1)
endif
if host_machine.system() != 'windows'
cdata.set('HAVE_GIO_UNIX', giounix_dep.found())
endif
# Check for Vulkan support
# TODO: move to gsk subfolder maybe? Or will it be used elsewhere too?
have_vulkan = false
vulkan_pkg_found = false
vulkan_dep = []
enable_vulkan = get_option('vulkan')
if enable_vulkan == 'no'
message('Vulkan support explicitly disabled')
else
vulkan_dep = dependency('vulkan', required: false)
if vulkan_dep.found()
have_vulkan = true
vulkan_pkg_found = true
else
if cc.get_id() == 'msvc'
vulkan_libname = 'vulkan-1'
else
vulkan_libname = 'vulkan'
endif
vulkan_dep = cc.find_library(vulkan_libname, required: false)
if vulkan_dep.found() and cc.has_function('vkCreateInstance', dependencies: vulkan_dep) and cc.has_header('vulkan/vulkan.h')
have_vulkan = true
pc_gdk_extra_libs += ['-l@0@'.format(vulkan_libname)]
endif
endif
if enable_vulkan == 'yes' and not have_vulkan
error('Vulkan support not found, but was explicitly requested.')
endif
endif
cloudproviders_enabled = get_option('cloudproviders')
if cloudproviders_enabled
cloudproviders_dep = dependency('cloudproviders', required: true)
if cloudproviders_dep.found()
cdata.set('HAVE_CLOUDPROVIDERS', cloudproviders_dep.found())
else
error('Cloudproviders support not found, but was explicitly requested.')
endif
endif
subdir('gdk')
subdir('gsk')
subdir('gtk')
subdir('modules')
if get_option('demos')
subdir('demos')
subdir('examples')
endif
if get_option('build-tests')
subdir('tests')
subdir('testsuite')
endif
# config.h
configure_file(input: 'config.h.meson',
output: 'config.h',
configuration: cdata)
# pkg-config files - bit of a mess all of this
pkgconf = configuration_data()
pkgconf.set('prefix', get_option('prefix'))
pkgconf.set('exec_prefix', '${prefix}')
pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
pkgconf.set('GTK_API_VERSION', gtk_api_version)
pkgconf.set('VERSION', meson.project_version())
pkgconf.set('GTK_BINARY_VERSION', gtk_binary_version)
pkgconf.set('host', '@0@-@1@'.format(host_machine.cpu_family(), host_machine.system())) # FIXME
# Requires
pango_pkgname = win32_enabled ? 'pangowin32' : 'pango'
gdk_packages = ' '.join([ pango_pkgname, pango_req,
'pangocairo', pango_req,
'gdk-pixbuf-2.0', gdk_pixbuf_req ])
if cairo_pkg_found
gdk_packages += ' '.join([ ' cairo', cairo_req ])
endif
if cairogobj_pkg_found
gdk_packages += ' '.join([ ' cairo-gobject', cairo_req ])
endif
if vulkan_pkg_found
gdk_packages += 'vulkan'
endif
pkgconf.set('GDK_PACKAGES', gdk_packages)
pkgconf.set('GSK_PACKAGES',
' '.join([ 'graphene-gobject-1.0', graphene_req ]))
pkgconf.set('GTK_PACKAGES',
' '.join([ 'atk', atk_req,
'gio-2.0', glib_req ]))
# Requires.private
pc_gdk_extra_libs += cairo_libs
gio_pkgname = os_unix ? 'gio-unix-2.0' : 'gio-2.0'
pkgconf.set('GDK_PRIVATE_PACKAGES',
' '.join([ gio_pkgname, glib_req,
'epoxy', epoxy_req ] + x11_pkgs + wayland_pkgs + cairo_backends))
pkgconf.set('GSK_PRIVATE_PACKAGES', '') # all already in GDK_PRIVATE_PACKAGES
pangoft2_pkgs = (wayland_enabled or x11_enabled) ? ['pangoft2'] : []
pkgconf.set('GTK_PRIVATE_PACKAGES', ' '.join(atk_pkgs + pangoft2_pkgs))
pkgconf.set('GDK_EXTRA_LIBS', ' '.join(pc_gdk_extra_libs))
pkgconf.set('GSK_EXTRA_LIBS', '')
pkgconf.set('GTK_EXTRA_LIBS', '')
pkgconf.set('GDK_EXTRA_CFLAGS', '')
pkgconf.set('GSK_EXTRA_CFLAGS', '')
pkgconf.set('GTK_EXTRA_CFLAGS', '')
pkg_install_dir = join_paths(get_option('libdir'), 'pkgconfig')
pkgs = [ 'gtk+-4.0.pc' ]
pkg_targets = ''
foreach backend: [ 'broadway', 'quartz', 'wayland', 'win32', 'x11', ]
if get_variable('@0@_enabled'.format(backend))
pkgs += ['gtk+-@0@-4.0.pc'.format(backend)]
pkg_targets += ' ' + backend
endif
endforeach
pkgconf.set('GDK_BACKENDS', pkg_targets.strip())
foreach pkg: pkgs
configure_file(input: 'gtk+-4.0.pc.in',
output: pkg,
configuration: pkgconf,
install_dir: pkg_install_dir)
endforeach
if host_machine.system() != 'windows'
configure_file(input: 'gtk+-unix-print-4.0.pc.in',
output: 'gtk+-unix-print-4.0.pc',
configuration: pkgconf,
install_dir: pkg_install_dir)
endif
subdir('po')
subdir('po-properties')
if get_option('documentation')
subdir('docs/tools')
subdir('docs/reference')
endif
summary = [
'',
'------',
'GTK+ @0@ (@1@)'.format(gtk_version, gtk_api_version),
'',
' Enabled backends: @0@'.format(pkg_targets.strip()),
' Vulkan support: @0@'.format(have_vulkan),
' Print backends: @0@'.format(' '.join(print_backends)),
' Media backends: @0@'.format(' '.join(media_backends)),
' Tests: @0@'.format(get_option('build-tests')),
' Documentation: @0@'.format(get_option('documentation')),
' Demos: @0@'.format(get_option('demos')),
'Directories:',
' prefix: @0@'.format(gtk_prefix),
' includedir: @0@'.format(gtk_includedir),
' libdir: @0@'.format(gtk_libdir),
' datadir: @0@'.format(gtk_datadir),
'------',
''
]
message('\n'.join(summary))
# Keep this in sync with post-install.sh expected arguments
meson.add_install_script('build-aux/meson/post-install.sh',
gtk_api_version,
gtk_binary_version,
gtk_libdir,
gtk_datadir)