meson: build input modules

We have to work around some ordering problems here. We still
manage to keep most of the guts in modules/input/meson.build,
so it's not too ugly overall.

(The autotools build solves this with a 'make -C ../../input/modules'
inside gtk/Makefile, but that's not something we can or want to do.)
This commit is contained in:
Tim-Philipp Müller 2017-03-23 15:54:58 +00:00 committed by Emmanuele Bassi
parent 1c14e93e69
commit e850973956
8 changed files with 154 additions and 9 deletions

View File

@ -213,9 +213,6 @@
/* Define to 1 if you have the ANSI C header files. */
#mesondefine STDC_HEADERS
/* Define to 1 if gmodule works and should be used */
#mesondefine USE_GMODULE
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE

View File

@ -143,6 +143,7 @@ gdkinc = include_directories('.')
xinc = include_directories('x11')
wlinc = include_directories('.')
gdk_gen_headers = [gdkenum_h, gdkmarshal_h, gdkconfig, gdkversionmacros]
gdk_deps = [
libm,

View File

@ -143,6 +143,7 @@ gskresources = gnome.compile_resources('gskresources',
c_name: '_gsk',
extra_args: '--manual-register')
gsk_gen_headers = [gskenum_h]
gsk_deps = [
graphene_dep,

View File

@ -770,6 +770,8 @@ gtk_cargs = [
'-DGTK_DATA_PREFIX="'+ get_option('prefix') + '"',
]
gtk_gen_headers = [gtkmarshal_h, gtktypebuiltins_h, gtkprivatetypebuiltins_h, gtkversion]
gtk_sources += [
gtk_dbus_src,
gtk_deprecated_sources,
@ -840,11 +842,38 @@ if cc.has_header('langinfo.h')
endforeach
endif
# check token HAVE__NL_MEASUREMENT_MEASUREMENT
# check token HAVE__NL_PAPER_HEIGHT
# check token HAVE__NL_PAPER_WIDTH
# check token HAVE__NL_TIME_FIRST_WEEKDAY
# Input methods
gen_headers = [gtk_gen_headers, gsk_gen_headers, gdk_gen_headers]
included_input_modules = []
foreach m : inc_im_method_defs # populated in modules/input/meson.build
im_name = m[0]
im_srcs = m[1]
im_args = m[2]
im_libs = m[3]
included_input_modules += static_library('im-@0@'.format(im_name),
im_srcs, gen_headers,
c_args : im_args,
include_directories : [confinc, gdkinc, gtkinc],
dependencies : gtk_deps + im_libs)
endforeach
foreach m : dyn_im_method_defs # populated in modules/input/meson.build
im_name = m[0]
im_srcs = m[1]
im_args = m[2]
im_libs = m[3]
shared_module('im-@0@'.format(im_name), im_srcs, gen_headers,
c_args : im_args,
include_directories : [confinc, gdkinc, gtkinc],
dependencies : gtk_deps + im_libs,
name_prefix : '', # we want im-foo.so not libim-foo.so
install_dir : immodules_install_dir,
install : true)
endforeach
# Library
@ -853,7 +882,7 @@ libgtk = shared_library('gtk-4',
c_args: gtk_cargs,
include_directories: [confinc, gdkinc, gtkinc],
dependencies: gtk_deps + [libgdk_dep, libgsk_dep],
link_with: [libgdk, libgsk],
link_with: [libgdk, libgsk, included_input_modules],
link_args: ['-Bsymbolic'],
install: true)

View File

@ -183,6 +183,8 @@ graphene_dep = dependency('graphene-1.0', version: graphene_req,
fontconfig_dep = [] # only used in x11 backend
atkbridge_dep = [] # only used in x11 backend
backend_immodules = []
pc_gdk_extra_libs = []
cairo_backends = []
@ -229,6 +231,8 @@ if x11_enabled
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()
@ -310,16 +314,19 @@ 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',
'-Wl,-luuid', '-lwinmm', '-ldwmapi', '-lsetupapi',
'-lcfgmgr32']
backend_immodules += ['ime']
endif
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in
@ -346,6 +353,7 @@ else
message('Vulkan support explicitly disabled')
endif
subdir('modules/input')
subdir('gdk')
subdir('gsk')
subdir('gtk')

View File

@ -20,3 +20,7 @@ option('enable-cloudprint-print-backend', type: 'combo', choices : ['yes', 'no',
description : 'Enable the cloudprint print backend')
option('enable-xinerama', type: 'combo', choices : ['yes', 'no', 'auto'], value : 'auto',
description : 'Enable support for the Xinerama extension')
option('disable-modules', type: 'boolean', value : 'false',
description : 'Disable dynamic module loading')
option('with-included-immodules', type: 'string', value : '',
description : 'Build the specified input methods into gtk (comma-separated list or "all" or "none")')

105
modules/input/meson.build Normal file
View File

@ -0,0 +1,105 @@
# Note: this file is included from the top-level before gtk/meson.build.
# The actual input modules are then built in gtk/meson.build based on the
# defs we provide here. It has to be that way because included input methods
# need to be built before libgtk-4.so is built, so before gtk/meson.build, but
# all input methods also rely on gtk generated headers to be created first, so
# there is a bit of an ordering problem which we solve by collecting all the
# information here but moving the actual build definitions to gtk/meson.build.
build_dynamic_modules = false
disable_modules = get_option('disable-modules')
if not disable_modules
runcmd = run_command('pkg-config', '--variable=gmodule_supported', 'gmodule-no-export-2.0')
if runcmd.returncode() == 0
gmodule_supported = runcmd.stdout().strip()
if gmodule_supported == 'true'
build_dynamic_modules = true
else
message('Modules are not supported according to gmodule-no-export-2.0.pc')
endif
else
message('WARNING: failed to query if modules are supported!')
endif
endif
all_immodules = ['am-et', 'cedilla', 'cyrillic-translit', 'inuktitut',
'ipa', 'multipress', 'thai', 'ti-er', 'ti-et', 'viqr']
all_immodules += backend_immodules
# Allow building some or all immodules included
included_immodules = get_option('with-included-immodules')
if included_immodules == 'none'
included_immodules = ''
elif included_immodules == 'all' or included_immodules == 'yes'
included_immodules = ','.join(all_immodules)
endif
if included_immodules == ''
have_included_immodules = false
included_immodules = []
else
have_included_immodules = true
included_immodules = included_immodules.split(',')
endif
foreach im : included_immodules
if not all_immodules.contains(im)
error('The specified input method "@0@" is not available (available methods: @1@)'.format(im, ', '.join(all_immodules)))
endif
endforeach
immodules_subdir = 'gtk-4.0/@0@/immodules'.format(gtk_binary_version)
immodules_install_dir = join_paths(get_option('libdir'), immodules_subdir)
sysconfdir = join_paths(get_option('prefix'),get_option('sysconfdir'))
mp_confdir = join_paths(sysconfdir, 'gtk-4.0')
mp_cargs = [
'-DMULTIPRESS_LOCALEDIR=""', # FIXME: where is $(mplocaledir) ever set?
'-DMULTIPRESS_CONFDIR="@0@"'.format(mp_confdir),
]
install_data('im-multipress.conf', install_dir : mp_confdir)
method_defs = [
['am-et', files('imam-et.c')],
['cedilla', files('imcedilla.c')],
['cyrillic-translit', files('imcyrillic-translit.c')],
['ti-er', files('imti-er.c')],
['ti-et', files('imti-et.c')],
['thai', files('thai-charprop.c', 'gtkimcontextthai.c', 'imthai.c')],
['viqr', files('imviqr.c')],
['inuktitut', files('iminuktitut.c')],
['ipa', files('imipa.c')],
# backend modules
['broadway', files('imbroadway.c')],
['multipress', files('gtkimcontextmultipress.c', 'immultipress.c'), [], mp_cargs],
['quartz', ('imquartz.c'), [], ('-xobjective-c')],
['xim', files('gtkimcontextxim.c', 'imxim.c')],
['ime', files('gtkimcontextime.c', 'imime.c'), ['imm32']],
]
inc_im_method_defs = []
dyn_im_method_defs = []
foreach m : method_defs
im = m.get(0)
srcs = m.get(1)
cargs = m.get(3, [])
libs = []
# only use backend-specific input methods for backends that are enabled
if all_immodules.contains(im)
# check for extra libs lazily
foreach libname : m.get(2, [])
libs += [cc.find_library(libname)]
endforeach
if included_immodules.contains(im)
cdata.set('INCLUDE_IM_@0@'.format(im.underscorify()), true)
inc_im_method_defs += [[im, srcs, cargs, libs]]
elif build_dynamic_modules
dyn_im_method_defs += [[im, srcs, cargs, libs]]
endif
endif
endforeach
# TODO: post-install gtk4-query-immodules run to create immodules.c

View File

@ -1,4 +1,4 @@
#subdir('input')
# Note: 'input' subdir has already been included from top-level.
if os_unix
subdir('printbackends')