Part of https://gitlab.gnome.org/GNOME/Initiatives/issues/1; Sets up dual installation for flatpaks, allowing us to build and run geary without affecting our system install. This will allow testing of nightlies and CI artifacts as well via the flatpak, so we can iterate on designs and share bundles to test with.
226 lines
7.8 KiB
Python
226 lines
7.8 KiB
Python
project('geary', [ 'vala', 'c' ],
|
|
version: '3.33.1',
|
|
license: 'LGPL2.1+',
|
|
meson_version: '>= 0.50',
|
|
)
|
|
|
|
gnome = import('gnome')
|
|
i18n = import('i18n')
|
|
|
|
# Option
|
|
install_contractor_file = get_option('contractor')
|
|
iso_639_xml = get_option('iso_639_xml')
|
|
iso_3166_xml = get_option('iso_3166_xml')
|
|
reference_tracking = get_option('ref_tracking')
|
|
poodle = get_option('poodle')
|
|
enable_valadoc = get_option('valadoc')
|
|
|
|
# Build type
|
|
if get_option('profile') == 'development'
|
|
name_suffix = ' (Development)'
|
|
profile = 'Devel'
|
|
vcs_tag = run_command('git', 'rev-parse', '--short', 'HEAD').stdout().strip()
|
|
if vcs_tag == ''
|
|
version_suffix = '-devel'
|
|
else
|
|
version_suffix = '-@0@'.format(vcs_tag)
|
|
endif
|
|
else
|
|
profile = ''
|
|
name_suffix = ''
|
|
version_suffix = ''
|
|
endif
|
|
|
|
geary_id = 'org.gnome.Geary@0@'.format(profile)
|
|
geary_version = meson.project_version() + version_suffix
|
|
|
|
# Some variables
|
|
cc = meson.get_compiler('c')
|
|
valac = meson.get_compiler('vala')
|
|
config_h_dir = include_directories('.')
|
|
geary_prefix = get_option('prefix')
|
|
bindir = join_paths(geary_prefix, get_option('bindir'))
|
|
datadir = join_paths(geary_prefix, get_option('datadir'))
|
|
libdir = join_paths(geary_prefix, get_option('libdir'))
|
|
locale_dir = join_paths(geary_prefix, get_option('localedir'))
|
|
po_dir = join_paths(meson.source_root(), 'po')
|
|
vapi_dir = join_paths(meson.source_root(), 'bindings', 'vapi')
|
|
metadata_dir = join_paths(meson.source_root(), 'bindings', 'metadata')
|
|
dbus_services_dir = join_paths(datadir, 'dbus-1', 'services')
|
|
web_extensions_dir = join_paths(libdir, 'geary', 'web-extensions')
|
|
|
|
# Make sure Meson can find our custom VAPI's
|
|
add_project_arguments([
|
|
'--vapidir', vapi_dir,
|
|
'--metadatadir', metadata_dir,
|
|
],
|
|
language: 'vala'
|
|
)
|
|
|
|
#
|
|
# Required libraries and other dependencies
|
|
#
|
|
|
|
target_glib = '2.54' # Also passed to valac, so don't include a point rev
|
|
target_gtk = '3.24.7'
|
|
target_webkit = '2.20'
|
|
|
|
# Primary deps
|
|
glib = dependency('glib-2.0', version: '>=' + target_glib)
|
|
gmime = dependency('gmime-2.6', version: '>= 2.6.17')
|
|
gtk = dependency('gtk+-3.0', version: '>=' + target_gtk)
|
|
sqlite = dependency('sqlite3', version: '>= 3.12')
|
|
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', required: false) # see below
|
|
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')
|
|
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')
|
|
libcanberra = dependency('libcanberra', version: '>= 0.28')
|
|
libhandy = dependency('libhandy-0.0', version: '>= 0.0.9', required: false)
|
|
libmath = cc.find_library('m')
|
|
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)
|
|
|
|
# Can currently use either Enchant 1 or 2
|
|
if not enchant.found()
|
|
enchant = dependency('enchant', version: '>=1.6')
|
|
endif
|
|
|
|
# Handy isn't necessarily packaged by distros, so fall back to a
|
|
# subproject until it is.
|
|
if not libhandy.found()
|
|
libhandy_subproj = subproject(
|
|
'libhandy',
|
|
default_options: [
|
|
'examples=false',
|
|
'glade_catalog=disabled',
|
|
'tests=false',
|
|
]
|
|
)
|
|
|
|
libhandy = declare_dependency(
|
|
dependencies: [
|
|
libhandy_subproj.get_variable('libhandy_dep'),
|
|
libhandy_subproj.get_variable('libhandy_vapi'),
|
|
]
|
|
)
|
|
endif
|
|
|
|
# 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)
|
|
libunity = dependency('unity', version: '>= 5.12.0', required: false)
|
|
|
|
if libmessagingmenu_dep.found()
|
|
# The libmessagingmenu dependency above determines if the lib is
|
|
# present, but since it uses a broken name for its VAPI we have to
|
|
# find that and the C libs separately.
|
|
libmessagingmenu = declare_dependency(
|
|
include_directories: include_directories(
|
|
libmessagingmenu_dep.get_pkgconfig_variable('includedir')
|
|
),
|
|
dependencies: [
|
|
valac.find_library('MessagingMenu-1.0', dirs: [ '/usr/share/vala/vapi' ]),
|
|
cc.find_library('messaging-menu')
|
|
],
|
|
)
|
|
endif
|
|
|
|
# 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
|
|
|
|
# Configuration
|
|
conf = configuration_data()
|
|
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
|
|
conf.set_quoted('G_LOG_DOMAIN', meson.project_name())
|
|
conf.set_quoted('PACKAGE_NAME', meson.project_name())
|
|
conf.set_quoted('PACKAGE_STRING', '@0@-@1@'.format(meson.project_name(), meson.project_version()))
|
|
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
|
|
conf.set_quoted('_BUILD_ROOT_DIR', meson.build_root())
|
|
conf.set_quoted('_SOURCE_ROOT_DIR', meson.source_root())
|
|
conf.set_quoted('_GSETTINGS_DIR', join_paths(meson.build_root(), 'desktop'))
|
|
conf.set_quoted('_INSTALL_PREFIX', geary_prefix)
|
|
conf.set_quoted('_WEB_EXTENSIONS_DIR', web_extensions_dir)
|
|
conf.set_quoted('LANGUAGE_SUPPORT_DIRECTORY', locale_dir)
|
|
conf.set_quoted('ISO_CODE_639_XML', iso_639_xml)
|
|
conf.set_quoted('ISO_CODE_3166_XML', iso_3166_xml)
|
|
conf.set('GCR_API_SUBJECT_TO_CHANGE', true)
|
|
conf.set_quoted('_VERSION', geary_version)
|
|
conf.set_quoted('_APP_ID', geary_id)
|
|
conf.set_quoted('_PROFILE', profile)
|
|
conf.set_quoted('_NAME_SUFFIX', name_suffix)
|
|
configure_file(output: 'config.h', configuration: conf)
|
|
|
|
# Post-install scripts
|
|
meson.add_install_script(join_paths('build-aux', 'post_install.py'))
|
|
|
|
# Subfolders
|
|
subdir('desktop')
|
|
subdir('help')
|
|
subdir('icons')
|
|
subdir('po')
|
|
subdir('sql')
|
|
subdir('ui')
|
|
subdir('src')
|
|
subdir('test')
|