geary/meson.build
Michael Gratton 83be745e95 Install client library in private lib sub-directory
Use Geary's private lib sub-directory so that the library won't be found
on the global library search path. Version the library name to avoid
clashes. Update the binary's rpath on install so it can find the lib
still.

Fixes #775
2020-03-30 14:13:49 +11:00

189 lines
6.3 KiB
Python

project('geary', [ 'vala', 'c' ],
version: '3.36.0',
license: 'LGPL2.1+',
meson_version: '>= 0.50',
)
# Build-time configuration options
enable_valadoc = get_option('valadoc')
install_contractor_file = get_option('contractor')
iso_3166_xml = get_option('iso_3166_xml')
iso_639_xml = get_option('iso_639_xml')
poodle = get_option('poodle')
reference_tracking = get_option('ref_tracking')
# Build type
if get_option('profile') == 'development'
profile = '.Devel'
name_suffix = ' (Development)'
elif get_option('profile') == 'beta'
profile = '.Beta'
name_suffix = ' (Beta)'
else
profile = ''
name_suffix = ''
endif
# Configurable install dirs
geary_prefix = get_option('prefix')
bin_dir = join_paths(geary_prefix, get_option('bindir'))
data_dir = join_paths(geary_prefix, get_option('datadir'))
lib_dir = join_paths(geary_prefix, get_option('libdir'))
locale_dir = join_paths(geary_prefix, get_option('localedir'))
# Source dirs
metadata_dir = join_paths(meson.source_root(), 'bindings', 'metadata')
po_dir = join_paths(meson.source_root(), 'po')
vapi_dir = join_paths(meson.source_root(), 'bindings', 'vapi')
# Compiler configuration
add_project_arguments([
# Make sure Meson can find custom VAPIs
'--vapidir', vapi_dir,
'--metadatadir', metadata_dir,
],
language: 'vala'
)
cc = meson.get_compiler('c')
valac = meson.get_compiler('vala')
#
# Required libraries and other dependencies
#
target_vala = '0.42'
target_glib = '2.60.4'
target_gtk = '3.24.7'
target_webkit = '2.26'
if not valac.version().version_compare('>=' + target_vala)
error('Vala does not meet minimum required version: ' + target_vala)
endif
# Primary deps
glib = dependency('glib-2.0', version: '>=' + target_glib)
gmime = dependency('gmime-3.0', version: '>= 3.2.4')
gtk = dependency('gtk+-3.0', version: '>=' + target_gtk)
sqlite = dependency('sqlite3', version: '>= 3.24')
webkit2gtk = dependency('webkit2gtk-4.0', version: '>=' + target_webkit)
# Secondary deps - keep sorted alphabetically
# We need appdata.its from appstream-glib:
# https://gitlab.gnome.org/GNOME/geary/issues/439
appstream_glib = dependency('appstream-glib', version: '>=0.7.10')
enchant = dependency('enchant-2', version: '>=2.1')
folks = dependency('folks', version: '>=0.11')
gck = dependency('gck-1')
gcr = dependency('gcr-3', version: '>= 3.10.1')
gdk = dependency('gdk-3.0', version: '>=' + target_gtk)
gee = dependency('gee-0.8', version: '>= 0.8.5')
gio = dependency('gio-2.0', version: '>=' + target_glib)
goa = dependency('goa-1.0')
gsound = dependency('gsound')
gspell = dependency('gspell-1')
gthread = dependency('gthread-2.0', version: '>=' + target_glib)
iso_codes = dependency('iso-codes')
javascriptcoregtk = dependency('javascriptcoregtk-4.0', version: '>=' + target_webkit)
json_glib = dependency('json-glib-1.0', version: '>= 1.0')
libhandy = dependency('libhandy-0.0', version: '>= 0.0.10')
libmath = cc.find_library('m')
libpeas = dependency('libpeas-1.0', version: '>= 1.24.0')
libpeas_gtk = dependency('libpeas-gtk-1.0', version: '>= 1.24.0')
libsecret = dependency('libsecret-1', version: '>= 0.11')
libsoup = dependency('libsoup-2.4', version: '>= 2.48')
libunwind_dep = dependency(
'libunwind', version: '>= 1.1', required: not get_option('libunwind_optional')
)
libunwind_generic_dep = dependency(
'libunwind-generic', version: '>= 1.1', required: not get_option('libunwind_optional')
)
libxml = dependency('libxml-2.0', version: '>= 2.7.8')
libytnef = dependency('libytnef', version: '>= 1.9.3', required: get_option('tnef-support'))
posix = valac.find_library('posix')
webkit2gtk_web_extension = dependency('webkit2gtk-web-extension-4.0', version: '>=' + target_webkit)
# Libunwind system dependencies above ensures appropriate versions,
# but this declared depencency is what we actually build against so we
# can include the custom VAPI correctly. We need to add unwind_lib to
# the search path for these so Flatpak builds can find the C lib.
if libunwind_dep.found()
unwind_lib = libunwind_dep.get_pkgconfig_variable('libdir')
libunwind = declare_dependency(
dependencies: [
valac.find_library('libunwind', dirs: [vapi_dir, unwind_lib]),
cc.find_library('libunwind', dirs: unwind_lib),
cc.find_library('libunwind-generic', dirs: unwind_lib)
],
)
endif
# Optional dependencies
appstream_util = find_program('appstream-util', required: false)
desktop_file_validate = find_program('desktop-file-validate', required: false)
libmessagingmenu_dep = dependency('messaging-menu', version: '>= 12.10', required: false)
#
# Internal build configuration
#
# Build variables
geary_id = 'org.gnome.Geary@0@'.format(profile)
geary_version = meson.project_version()
revno = run_command('build-aux/git_version.py').stdout().strip()
gnome = import('gnome')
i18n = import('i18n')
# Static install dirs
dbus_services_dir = join_paths(data_dir, 'dbus-1', 'services')
client_lib_dir = join_paths(lib_dir, 'geary')
plugins_dir = join_paths(client_lib_dir, 'plugins')
web_extensions_dir = join_paths(client_lib_dir, 'web-extensions')
# Ensure SQLite was built correctly
if not cc.has_header_symbol('sqlite3.h', 'SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER', dependencies: sqlite)
error('SQLite3 is missing FTS3 tokenizer support. Please compile it with -DSQLITE_ENABLE_FTS3.\n'
+ 'See https://bugzilla.gnome.org/show_bug.cgi?id=763203 for details.')
endif
#
# Build glue
#
if enable_valadoc
valadoc = find_program('valadoc')
endif
# Language detection
iso_codes_dir = join_paths(iso_codes.get_pkgconfig_variable('prefix'), 'share', 'xml', 'iso-codes')
if iso_639_xml == ''
iso_639_xml = join_paths(iso_codes_dir, 'iso_639.xml')
endif
if iso_3166_xml == ''
iso_3166_xml = join_paths(iso_codes_dir, 'iso_3166.xml')
endif
files(iso_639_xml, iso_3166_xml) # Check to make sure these exist
# Post-install scripts
meson.add_install_script(join_paths('build-aux', 'post_install.py'))
# GNOME Builder doesn't support YAML manifests, so generate a JSON
# version from the YAML and commit it. :( GNOME/gnome-builder#520
yaml_to_json = find_program('build-aux' / 'yaml_to_json.py')
custom_target(
'org.gnome.Geary.json',
build_by_default: true,
command: [yaml_to_json, '@INPUT@', meson.source_root(), '@OUTPUT@'],
input: files('org.gnome.Geary.yaml'),
output: 'org.gnome.Geary.json'
)
# Subfolders
subdir('desktop')
subdir('help')
subdir('icons')
subdir('po')
subdir('sql')
subdir('ui')
subdir('src')
subdir('test')