diff --git a/bindings/meson.build b/bindings/meson.build new file mode 100644 index 00000000..db55b943 --- /dev/null +++ b/bindings/meson.build @@ -0,0 +1,62 @@ +# Custom VAPIs +# NOTE: We can't directly use the dependencies returned by dependency() for +# webkit2gtk (and the web extensions), since Meson then adds the packages from +# the system directories. Since there might be conflicts with our custom VAPI's, +# we need to glue pieces together. We satisfy GCC by looking up the relevant +# include directories and we please the linker by using cc.find_library() + + +girdir = gobject_introspection.get_pkgconfig_variable('girdir') + +webkit2gtk_vapi = gnome.generate_vapi('webkit2gtk-4.8', + sources: join_paths(girdir, 'WebKit2-4.0.gir'), + vapi_dirs: vapi_dir, + metadata_dirs: metadata_dir, + packages: [ + 'gtk+-3.0', + 'libsoup-2.4', + 'javascriptcore-4.0', + ], +) + +webkit2gtk = declare_dependency( + dependencies: [ + webkit2gtk_vapi, + javascriptcore, + javascriptcoregtk, + libsoup, + gdk, + gtk, + cc.find_library('webkit2gtk-4.0'), + ], + include_directories: include_directories(webkit2gtk_dep.get_pkgconfig_variable('includedir')+'/webkitgtk-4.0/'), +) + + +webkit2gtk_web_extension_vapi = gnome.generate_vapi('webkit2gtk-web-extension-4.0', + sources: [ + join_paths(girdir, 'WebKit2WebExtension-4.0.gir'), + join_paths('metadata', 'WebKit2WebExtension-4.0-custom.vala'), + ], + vapi_dirs: [vapi_dir, meson.current_build_dir()], + metadata_dirs: metadata_dir, + packages: [ + 'gtk+-3.0', + 'libsoup-2.4', + 'javascriptcore-4.0', + ], +) + +webkit2gtk_web_extension = declare_dependency( + dependencies: [ + webkit2gtk_web_extension_vapi, + glib, + gio, + gtk, + libsoup, + javascriptcore, + javascriptcoregtk, + cc.find_library('webkit2gtk-4.0'), + ], + include_directories: include_directories(webkit2gtk_web_extension_dep.get_pkgconfig_variable('includedir')+'/webkitgtk-4.0/'), +) diff --git a/build-aux/post_install.py b/build-aux/post_install.py new file mode 100644 index 00000000..bf320a9d --- /dev/null +++ b/build-aux/post_install.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +import os +import subprocess + +install_prefix = os.environ['MESON_INSTALL_PREFIX'] +icondir = os.path.join(install_prefix, 'share', 'icons', 'hicolor') +schemadir = os.path.join(install_prefix, 'share', 'glib-2.0', 'schemas') + +if not os.environ.get('DESTDIR'): + print('Update icon cache...') + subprocess.call(['gtk-update-icon-cache', '-f', '-t', icondir]) + + print('Compiling gsettings schemas...') + subprocess.call(['glib-compile-schemas', schemadir]) diff --git a/desktop/meson.build b/desktop/meson.build new file mode 100644 index 00000000..fc18da28 --- /dev/null +++ b/desktop/meson.build @@ -0,0 +1,42 @@ +foreach desktop_file: [ 'org.gnome.Geary.desktop', 'geary-autostart.desktop' ] + i18n.merge_file( + input: desktop_file + '.in', + output: desktop_file, + type: 'desktop', + po_dir: po_dir, + install: true, + install_dir: join_paths(datadir, 'applications') + ) +endforeach + +# The appdata file +i18n.merge_file( + input: 'org.gnome.Geary.appdata.xml.in', + output: 'org.gnome.Geary.appdata.xml', + type: 'xml', + po_dir: po_dir, + install: true, + install_dir: join_paths(datadir, 'metainfo') +) + +# Contractor file (Elementary OS) +if install_contractor_file + i18n.merge_file( + input: 'geary-attach.contract.desktop.in', + output: 'geary-attach.contract', + type: 'desktop', + po_dir: po_dir, + install: true, + install_dir: join_paths(datadir, 'contractor') + ) + + install_data('geary-attach', + install_dir: bindir, + ) +endif + +# GSettings schemas +geary_compiled_schema = gnome.compile_schemas() # Always compile, even if necessary. Makes sure it's valid. +install_data('org.gnome.Geary.gschema.xml', + install_dir: join_paths(datadir, 'glib-2.0', 'schemas'), +) diff --git a/help/LINGUAS b/help/LINGUAS new file mode 100644 index 00000000..6cf3b64a --- /dev/null +++ b/help/LINGUAS @@ -0,0 +1,11 @@ +# please keep this list sorted alphabetically +# +cs +de +el +es +fr +it +pl +pt_BR +sv diff --git a/help/meson.build b/help/meson.build new file mode 100644 index 00000000..d6af75be --- /dev/null +++ b/help/meson.build @@ -0,0 +1,18 @@ +geary_help_pages = [ + 'accounts.page', + 'archive.page', + 'bugs.page', + 'index.page', + 'label.page', + 'limits.page', + 'overview.page', + 'preferences.page', + 'search.page', + 'shortcuts.page', + 'star.page', + 'write.page', +] + +gnome.yelp(meson.project_name(), + sources: geary_help_pages, +) diff --git a/icons/meson.build b/icons/meson.build new file mode 100644 index 00000000..3f9e0450 --- /dev/null +++ b/icons/meson.build @@ -0,0 +1,33 @@ +system_icons_dir = join_paths(datadir, 'icons', 'hicolor') + +icon_files = files( + 'mail-archive-symbolic.svg', + 'close-symbolic.svg', + 'detach-symbolic.svg', + 'text-x-generic-symbolic.svg', + 'edit-symbolic.svg', + 'format-text-remove-symbolic.svg', + 'mail-drafts-symbolic.svg', + 'mail-drafts-symbolic-rtl.svg', + 'mail-forward-symbolic.svg', + 'mail-forward-symbolic-rtl.svg', + 'mail-inbox-symbolic.svg', + 'mail-outbox-symbolic.svg', + 'mail-reply-all-symbolic.svg', + 'mail-reply-all-symbolic-rtl.svg', + 'mail-reply-sender-symbolic.svg', + 'mail-reply-sender-symbolic-rtl.svg', + 'mail-sent-symbolic.svg', + 'mail-sent-symbolic-rtl.svg', + 'marker-symbolic.svg', + 'tag-symbolic.svg', + 'tag-symbolic-rtl.svg', +) + +install_data(icon_files, + install_dir: join_paths(system_icons_dir, 'scalable', 'actions'), +) + +install_subdir('hicolor', + install_dir: system_icons_dir, +) diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..8dcda828 --- /dev/null +++ b/meson.build @@ -0,0 +1,154 @@ +project('geary', [ 'vala', 'c' ], + version: '0.13-dev', + license: 'LGPL2.1+', + meson_version: '>= 0.41', +) + +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') +local_gsettings = get_option('local_gsettings') +enable_valadoc = get_option('valadoc') + +# Some variables +cc = meson.get_compiler('c') +valac = meson.get_compiler('vala') +config_h_dir = include_directories('.') +geary_prefix = get_option('prefix') +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') + +# Make sure Meson can find our custom VAPI's +add_project_arguments([ + '--vapidir', vapi_dir, + '--metadatadir', metadata_dir, + ], + language: 'vala' +) + +# Dependencies +target_glib = '2.44' # Also passed to valac, so don't include a point rev +target_gtk = '3.22.0' +target_webkit = '2.16' + +posix = valac.find_library('posix') +libmath = cc.find_library('m') +glib = dependency('glib-2.0', version: '>=' + target_glib) +gthread = dependency('gthread-2.0', version: '>=' + target_glib) +gio = dependency('gio-2.0', version: '>=' + target_glib) +gtk = dependency('gtk+-3.0', version: '>=' + target_gtk) +gdk = dependency('gdk-3.0', version: '>=' + target_gtk) +libsoup = dependency('libsoup-2.4', version: '>= 2.48') +gee = dependency('gee-0.8', version: '>= 0.8.5') +libnotify = dependency('libnotify', version: '>= 0.7.5') +libcanberra = dependency('libcanberra', version: '>= 0.28') +sqlite = dependency('sqlite3', version: '>= 3.7.4') +gmime = dependency('gmime-2.6', version: '>= 2.6.17') +libsecret = dependency('libsecret-1', version: '>= 0.11') +libxml = dependency('libxml-2.0', version: '>= 2.7.8') +gcr = dependency('gcr-3', version: '>= 3.10.1') +gobject_introspection = dependency('gobject-introspection-1.0') +webkit2gtk_dep = dependency('webkit2gtk-4.0', version: '>=' + target_webkit) +webkit2gtk_web_extension_dep = dependency('webkit2gtk-web-extension-4.0', version: '>=' + target_webkit) +javascriptcore = valac.find_library('javascriptcore-4.0', dirs: vapi_dir) +javascriptcoregtk = cc.find_library('javascriptcoregtk-4.0', version: '>=' + target_webkit) +enchant = dependency('enchant', version: '>= 1.6') +libunwind = declare_dependency( + dependencies: [ + dependency('libunwind', version: '>= 1.1'), + cc.find_library('libunwind-' + target_machine.cpu_family()), + ], +) + +libunity = dependency('unity', version: '>= 5.12.0', required: false) +libmessagingmenu = dependency('messaging-menu', version: '>= 12.10.2', required: false) +sqlite = dependency('sqlite3') +if sqlite.version().version_compare('>= 3.12') + if not cc.has_header_symbol('sqlite3.h', 'SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER') + 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 +else + # detect that the current sqlite3 library has FTS3 support (at run time) + runtime_fts3_check = cc.compiles(''' + #include + #include + int main() { + sqlite3 *db; + char tmpfile[] = "sqliteXXXXXX"; + mkstemp(tmpfile); + if (sqlite3_open(tmpfile, &db) == SQLITE_OK) { + return sqlite3_exec(db, "CREATE VIRTUAL TABLE mail USING fts3(subject, body);", 0, 0, 0); + } + return -1; + } + ''', dependencies: sqlite) + if not runtime_fts3_check + if sqlite.version().version_compare('< 3.11') + error('SQLite3 is missing FTS3 support. Please compile it with -DSQLITE_ENABLE_FTS3.') + else + error('SQLite3 is missing FTS3 tokenizer support. Please compile it with -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_TOKENIZER.') + endif + endif +endif + +if enable_valadoc + valadoc = find_program('valadoc') +endif + +# This will provide our custom dependencies, such as webkit2gtk +subdir('bindings') + +# Language detection +iso_codes_dir = join_paths('/', 'usr', '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.source_root(), 'desktop')) +conf.set_quoted('_INSTALL_PREFIX', geary_prefix) +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('HAVE_LIBMESSAGINGMENU', libmessagingmenu.found()) +conf.set('HAVE_LIBUNITY', libunity.found()) +conf.set('HAVE_FTS3_TOKENIZE', true) +conf.set('VERSION', meson.project_version()) +conf.set('GCR_API_SUBJECT_TO_CHANGE', true) +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') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..00b11516 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,7 @@ +option('valadoc', type: 'boolean', value: false, description: 'Whether to build the documentaton (requires valadoc).') +option('contractor', type: 'boolean', value: false, description: 'Whether to install the contractor file (Elementary OS-specific).') +option('local_gsettings', type: 'boolean', value: false, description: 'Whether to compile GSettings schema inside the build folder.') +option('poodle', type: 'boolean', value: true, description: 'Whether to apply the POODLE SSLv3 fix.') +option('ref_tracking', type: 'boolean', value: false, description: 'Whether to use explicit reference tracking.') +option('iso_639_xml', type: 'string', value: '', description: 'Full path to the ISO 639 XML file.') +option('iso_3166_xml', type: 'string', value: '', description: 'Full path to the ISO 3166 XML file.') diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 00000000..f904cde4 --- /dev/null +++ b/po/meson.build @@ -0,0 +1,3 @@ +i18n.gettext(meson.project_name(), + preset: 'glib' +) diff --git a/sql/meson.build b/sql/meson.build new file mode 100644 index 00000000..a8ec43e4 --- /dev/null +++ b/sql/meson.build @@ -0,0 +1,31 @@ +sql_files = [ + 'version-001.sql', + 'version-002.sql', + 'version-003.sql', + 'version-004.sql', + 'version-005.sql', + 'version-006.sql', + 'version-007.sql', + 'version-008.sql', + 'version-009.sql', + 'version-010.sql', + 'version-011.sql', + 'version-012.sql', + 'version-013.sql', + 'version-014.sql', + 'version-015.sql', + 'version-016.sql', + 'version-017.sql', + 'version-018.sql', + 'version-019.sql', + 'version-020.sql', + 'version-021.sql', + 'version-022.sql', + 'version-023.sql', + 'version-024.sql', + 'version-025.sql', +] + +install_data(sql_files, + install_dir: join_paths(datadir, meson.project_name(), 'sql') +) diff --git a/src/client/meson.build b/src/client/meson.build new file mode 100644 index 00000000..03af6037 --- /dev/null +++ b/src/client/meson.build @@ -0,0 +1,142 @@ +# Geary client +geary_client_vala_sources = files( + 'application/autostart-manager.vala', + 'application/geary-application.vala', + 'application/geary-args.vala', + 'application/geary-config.vala', + 'application/geary-controller.vala', + 'application/secret-mediator.vala', + + 'accounts/account-dialog.vala', + 'accounts/account-dialog-account-list-pane.vala', + 'accounts/account-dialog-add-edit-pane.vala', + 'accounts/account-dialog-edit-alternate-emails-pane.vala', + 'accounts/account-dialog-pane.vala', + 'accounts/account-dialog-remove-confirm-pane.vala', + 'accounts/account-dialog-remove-fail-pane.vala', + 'accounts/account-dialog-spinner-pane.vala', + 'accounts/account-spinner-page.vala', + 'accounts/add-edit-page.vala', + 'accounts/login-dialog.vala', + + 'components/client-web-view.vala', + 'components/count-badge.vala', + 'components/empty-placeholder.vala', + 'components/folder-popover.vala', + 'components/icon-factory.vala', + 'components/main-toolbar.vala', + 'components/main-window.vala', + 'components/main-window-info-bar.vala', + 'components/monitored-progress-bar.vala', + 'components/monitored-spinner.vala', + 'components/search-bar.vala', + 'components/status-bar.vala', + 'components/stock.vala', + + 'composer/composer-box.vala', + 'composer/composer-container.vala', + 'composer/composer-embed.vala', + 'composer/composer-headerbar.vala', + 'composer/composer-link-popover.vala', + 'composer/composer-web-view.vala', + 'composer/composer-widget.vala', + 'composer/composer-window.vala', + 'composer/contact-entry-completion.vala', + 'composer/contact-list-store.vala', + 'composer/contact-list-store-cache.vala', + 'composer/email-entry.vala', + 'composer/spell-check-popover.vala', + + 'conversation-list/conversation-list-cell-renderer.vala', + 'conversation-list/conversation-list-store.vala', + 'conversation-list/conversation-list-view.vala', + 'conversation-list/formatted-conversation-data.vala', + + 'conversation-viewer/conversation-email.vala', + 'conversation-viewer/conversation-list-box.vala', + 'conversation-viewer/conversation-message.vala', + 'conversation-viewer/conversation-viewer.vala', + 'conversation-viewer/conversation-web-view.vala', + + 'dialogs/alert-dialog.vala', + 'dialogs/attachment-dialog.vala', + 'dialogs/certificate-warning-dialog.vala', + 'dialogs/password-dialog.vala', + 'dialogs/preferences-dialog.vala', + 'dialogs/upgrade-dialog.vala', + + 'folder-list/folder-list-abstract-folder-entry.vala', + 'folder-list/folder-list-account-branch.vala', + 'folder-list/folder-list-folder-entry.vala', + 'folder-list/folder-list-tree.vala', + 'folder-list/folder-list-inboxes-branch.vala', + 'folder-list/folder-list-inbox-folder-entry.vala', + 'folder-list/folder-list-search-branch.vala', + 'folder-list/folder-list-special-grouping.vala', + + 'notification/libmessagingmenu.vala', + 'notification/libnotify.vala', + 'notification/new-messages-indicator.vala', + 'notification/new-messages-monitor.vala', + 'notification/null-indicator.vala', + 'notification/unity-launcher.vala', + + 'sidebar/sidebar-branch.vala', + 'sidebar/sidebar-common.vala', + 'sidebar/sidebar-count-cell-renderer.vala', + 'sidebar/sidebar-entry.vala', + 'sidebar/sidebar-tree.vala', + + 'util/util-date.vala', + 'util/util-email.vala', + 'util/util-files.vala', + 'util/util-gio.vala', + 'util/util-gravatar.vala', + 'util/util-gtk.vala', + 'util/util-international.vala', + 'util/util-migrate.vala', + 'util/util-webkit.vala', +) + +geary_client_sources = [ + geary_client_vala_sources, + geary_resources[0], +] + +geary_client_dependencies = [ + libmath, + enchant, + gcr, + gee, + gio, + gtk, + libcanberra, + libnotify, + libsecret, + libsoup, + gmime, + libxml, + posix, + webkit2gtk, + geary_engine_dep, +] + +if libmessagingmenu.found() + geary_client_dependencies += libmessagingmenu +endif +if libunity.found() + geary_client_dependencies += libunity +endif + +geary_client_lib = library('geary-client', + geary_client_sources, + dependencies: geary_client_dependencies, + include_directories: config_h_dir, + vala_args: geary_vala_options, + c_args: geary_c_options, +) + +geary_client_dep = declare_dependency( + link_with: geary_client_lib, + include_directories: include_directories('.'), +) diff --git a/src/console/meson.build b/src/console/meson.build new file mode 100644 index 00000000..8ff47716 --- /dev/null +++ b/src/console/meson.build @@ -0,0 +1,16 @@ +geary_console_sources = files( + 'main.vala', +) + +geary_console_dependencies = [ + gtk, + gee, + gmime, + webkit2gtk, + geary_engine_dep, +] + +geary_console = executable('geary-console', + geary_console_sources, + dependencies: geary_console_dependencies, +) diff --git a/src/engine/meson.build b/src/engine/meson.build new file mode 100644 index 00000000..7a0913fd --- /dev/null +++ b/src/engine/meson.build @@ -0,0 +1,349 @@ +# Geary engine +geary_engine_vala_sources = files( + 'api/geary.vala', + 'api/geary-abstract-local-folder.vala', + 'api/geary-account.vala', + 'api/geary-account-information.vala', + 'api/geary-aggregated-folder-properties.vala', + 'api/geary-attachment.vala', + 'api/geary-base-object.vala', + 'api/geary-composed-email.vala', + 'api/geary-contact.vala', + 'api/geary-contact-flags.vala', + 'api/geary-contact-importance.vala', + 'api/geary-contact-store.vala', + 'api/geary-credentials.vala', + 'api/geary-credentials-mediator.vala', + 'api/geary-email-flags.vala', + 'api/geary-email-identifier.vala', + 'api/geary-email-properties.vala', + 'api/geary-email.vala', + 'api/geary-endpoint.vala', + 'api/geary-engine-error.vala', + 'api/geary-engine.vala', + 'api/geary-folder.vala', + 'api/geary-folder-path.vala', + 'api/geary-folder-properties.vala', + 'api/geary-folder-supports-archive.vala', + 'api/geary-folder-supports-copy.vala', + 'api/geary-folder-supports-create.vala', + 'api/geary-folder-supports-empty.vala', + 'api/geary-folder-supports-mark.vala', + 'api/geary-folder-supports-move.vala', + 'api/geary-folder-supports-remove.vala', + 'api/geary-logging.vala', + 'api/geary-named-flag.vala', + 'api/geary-named-flags.vala', + 'api/geary-problem-report.vala', + 'api/geary-progress-monitor.vala', + 'api/geary-revokable.vala', + 'api/geary-search-folder.vala', + 'api/geary-search-query.vala', + 'api/geary-service.vala', + 'api/geary-service-provider.vala', + 'api/geary-special-folder-type.vala', + + 'app/app-conversation.vala', + 'app/app-conversation-monitor.vala', + 'app/app-draft-manager.vala', + 'app/app-email-store.vala', + + 'app/conversation-monitor/app-append-operation.vala', + 'app/conversation-monitor/app-conversation-operation-queue.vala', + 'app/conversation-monitor/app-conversation-operation.vala', + 'app/conversation-monitor/app-conversation-set.vala', + 'app/conversation-monitor/app-external-append-operation.vala', + 'app/conversation-monitor/app-fill-window-operation.vala', + 'app/conversation-monitor/app-local-load-operation.vala', + 'app/conversation-monitor/app-local-search-operation.vala', + 'app/conversation-monitor/app-remove-operation.vala', + 'app/conversation-monitor/app-reseed-operation.vala', + 'app/conversation-monitor/app-terminate-operation.vala', + + 'app/email-store/app-async-folder-operation.vala', + 'app/email-store/app-copy-operation.vala', + 'app/email-store/app-fetch-operation.vala', + 'app/email-store/app-list-operation.vala', + 'app/email-store/app-mark-operation.vala', + + 'common/common-message-data.vala', + + 'db/db.vala', + 'db/db-connection.vala', + 'db/db-context.vala', + 'db/db-database.vala', + 'db/db-database-error.vala', + 'db/db-result.vala', + 'db/db-statement.vala', + 'db/db-synchronous-mode.vala', + 'db/db-transaction-async-job.vala', + 'db/db-transaction-outcome.vala', + 'db/db-transaction-type.vala', + 'db/db-versioned-database.vala', + + 'imap/imap.vala', + 'imap/imap-error.vala', + 'imap/api/imap-account.vala', + 'imap/api/imap-email-flags.vala', + 'imap/api/imap-email-properties.vala', + 'imap/api/imap-folder-properties.vala', + 'imap/api/imap-folder.vala', + 'imap/api/imap-folder-root.vala', + 'imap/command/imap-append-command.vala', + 'imap/command/imap-capability-command.vala', + 'imap/command/imap-close-command.vala', + 'imap/command/imap-command.vala', + 'imap/command/imap-compress-command.vala', + 'imap/command/imap-copy-command.vala', + 'imap/command/imap-create-command.vala', + 'imap/command/imap-examine-command.vala', + 'imap/command/imap-expunge-command.vala', + 'imap/command/imap-fetch-command.vala', + 'imap/command/imap-id-command.vala', + 'imap/command/imap-idle-command.vala', + 'imap/command/imap-list-command.vala', + 'imap/command/imap-list-return-parameter.vala', + 'imap/command/imap-login-command.vala', + 'imap/command/imap-logout-command.vala', + 'imap/command/imap-message-set.vala', + 'imap/command/imap-namespace-command.vala', + 'imap/command/imap-noop-command.vala', + 'imap/command/imap-search-command.vala', + 'imap/command/imap-search-criteria.vala', + 'imap/command/imap-search-criterion.vala', + 'imap/command/imap-select-command.vala', + 'imap/command/imap-starttls-command.vala', + 'imap/command/imap-status-command.vala', + 'imap/command/imap-store-command.vala', + 'imap/message/imap-data-format.vala', + 'imap/message/imap-envelope.vala', + 'imap/message/imap-fetch-body-data-specifier.vala', + 'imap/message/imap-fetch-data-specifier.vala', + 'imap/message/imap-flag.vala', + 'imap/message/imap-flags.vala', + 'imap/message/imap-internal-date.vala', + 'imap/message/imap-mailbox-specifier.vala', + 'imap/message/imap-mailbox-parameter.vala', + 'imap/message/imap-message-data.vala', + 'imap/message/imap-message-flag.vala', + 'imap/message/imap-message-flags.vala', + 'imap/message/imap-namespace.vala', + 'imap/message/imap-sequence-number.vala', + 'imap/message/imap-status-data-type.vala', + 'imap/message/imap-tag.vala', + 'imap/message/imap-uid.vala', + 'imap/message/imap-uid-validity.vala', + 'imap/parameter/imap-atom-parameter.vala', + 'imap/parameter/imap-list-parameter.vala', + 'imap/parameter/imap-literal-parameter.vala', + 'imap/parameter/imap-nil-parameter.vala', + 'imap/parameter/imap-number-parameter.vala', + 'imap/parameter/imap-parameter.vala', + 'imap/parameter/imap-quoted-string-parameter.vala', + 'imap/parameter/imap-root-parameters.vala', + 'imap/parameter/imap-string-parameter.vala', + 'imap/parameter/imap-unquoted-string-parameter.vala', + 'imap/response/imap-capabilities.vala', + 'imap/response/imap-continuation-response.vala', + 'imap/response/imap-fetch-data-decoder.vala', + 'imap/response/imap-fetched-data.vala', + 'imap/response/imap-mailbox-attribute.vala', + 'imap/response/imap-mailbox-attributes.vala', + 'imap/response/imap-mailbox-information.vala', + 'imap/response/imap-namespace-response.vala', + 'imap/response/imap-response-code.vala', + 'imap/response/imap-response-code-type.vala', + 'imap/response/imap-server-data.vala', + 'imap/response/imap-server-data-type.vala', + 'imap/response/imap-server-response.vala', + 'imap/response/imap-status.vala', + 'imap/response/imap-status-data.vala', + 'imap/response/imap-status-response.vala', + 'imap/transport/imap-client-connection.vala', + 'imap/transport/imap-client-session-manager.vala', + 'imap/transport/imap-client-session.vala', + 'imap/transport/imap-deserializer.vala', + 'imap/transport/imap-serializer.vala', + + 'imap-db/imap-db-account.vala', + 'imap-db/imap-db-attachment.vala', + 'imap-db/imap-db-contact.vala', + 'imap-db/imap-db-database.vala', + 'imap-db/imap-db-email-identifier.vala', + 'imap-db/imap-db-folder.vala', + 'imap-db/imap-db-gc.vala', + 'imap-db/imap-db-message-addresses.vala', + 'imap-db/imap-db-message-row.vala', + 'imap-db/search/imap-db-search-email-identifier.vala', + 'imap-db/search/imap-db-search-folder.vala', + 'imap-db/search/imap-db-search-folder-properties.vala', + 'imap-db/search/imap-db-search-folder-root.vala', + 'imap-db/search/imap-db-search-query.vala', + 'imap-db/search/imap-db-search-term.vala', + 'imap-db/outbox/smtp-outbox-email-identifier.vala', + 'imap-db/outbox/smtp-outbox-email-properties.vala', + 'imap-db/outbox/smtp-outbox-folder.vala', + 'imap-db/outbox/smtp-outbox-folder-properties.vala', + 'imap-db/outbox/smtp-outbox-folder-root.vala', + + 'imap-engine/imap-engine.vala', + 'imap-engine/imap-engine-account-synchronizer.vala', + 'imap-engine/imap-engine-batch-operations.vala', + 'imap-engine/imap-engine-contact-store.vala', + 'imap-engine/imap-engine-email-flag-watcher.vala', + 'imap-engine/imap-engine-email-prefetcher.vala', + 'imap-engine/imap-engine-generic-account.vala', + 'imap-engine/imap-engine-generic-folder.vala', + 'imap-engine/imap-engine-minimal-folder.vala', + 'imap-engine/imap-engine-replay-operation.vala', + 'imap-engine/imap-engine-replay-queue.vala', + 'imap-engine/imap-engine-revokable-move.vala', + 'imap-engine/imap-engine-revokable-committed-move.vala', + 'imap-engine/imap-engine-send-replay-operation.vala', + 'imap-engine/gmail/imap-engine-gmail-account.vala', + 'imap-engine/gmail/imap-engine-gmail-all-mail-folder.vala', + 'imap-engine/gmail/imap-engine-gmail-drafts-folder.vala', + 'imap-engine/gmail/imap-engine-gmail-folder.vala', + 'imap-engine/gmail/imap-engine-gmail-search-folder.vala', + 'imap-engine/gmail/imap-engine-gmail-spam-trash-folder.vala', + 'imap-engine/other/imap-engine-other-account.vala', + 'imap-engine/other/imap-engine-other-folder.vala', + 'imap-engine/outlook/imap-engine-outlook-account.vala', + 'imap-engine/outlook/imap-engine-outlook-folder.vala', + 'imap-engine/outlook/imap-engine-outlook-drafts-folder.vala', + 'imap-engine/replay-ops/imap-engine-abstract-list-email.vala', + 'imap-engine/replay-ops/imap-engine-copy-email.vala', + 'imap-engine/replay-ops/imap-engine-create-email.vala', + 'imap-engine/replay-ops/imap-engine-empty-folder.vala', + 'imap-engine/replay-ops/imap-engine-fetch-email.vala', + 'imap-engine/replay-ops/imap-engine-list-email-by-id.vala', + 'imap-engine/replay-ops/imap-engine-list-email-by-sparse-id.vala', + 'imap-engine/replay-ops/imap-engine-mark-email.vala', + 'imap-engine/replay-ops/imap-engine-move-email-commit.vala', + 'imap-engine/replay-ops/imap-engine-move-email-prepare.vala', + 'imap-engine/replay-ops/imap-engine-move-email-revoke.vala', + 'imap-engine/replay-ops/imap-engine-remove-email.vala', + 'imap-engine/replay-ops/imap-engine-replay-append.vala', + 'imap-engine/replay-ops/imap-engine-replay-disconnect.vala', + 'imap-engine/replay-ops/imap-engine-replay-removal.vala', + 'imap-engine/replay-ops/imap-engine-server-search-email.vala', + 'imap-engine/replay-ops/imap-engine-user-close.vala', + 'imap-engine/yahoo/imap-engine-yahoo-account.vala', + 'imap-engine/yahoo/imap-engine-yahoo-folder.vala', + + 'memory/memory-buffer.vala', + 'memory/memory-byte-buffer.vala', + 'memory/memory-empty-buffer.vala', + 'memory/memory-file-buffer.vala', + 'memory/memory-growable-buffer.vala', + 'memory/memory-offset-buffer.vala', + 'memory/memory-string-buffer.vala', + 'memory/memory-unowned-byte-array-buffer.vala', + 'memory/memory-unowned-bytes-buffer.vala', + 'memory/memory-unowned-string-buffer.vala', + + 'mime/mime-content-disposition.vala', + 'mime/mime-content-parameters.vala', + 'mime/mime-content-type.vala', + 'mime/mime-data-format.vala', + 'mime/mime-disposition-type.vala', + 'mime/mime-error.vala', + 'mime/mime-multipart-subtype.vala', + + 'nonblocking/nonblocking-abstract-semaphore.vala', + 'nonblocking/nonblocking-batch.vala', + 'nonblocking/nonblocking-concurrent.vala', + 'nonblocking/nonblocking-counting-semaphore.vala', + 'nonblocking/nonblocking-error.vala', + 'nonblocking/nonblocking-mailbox.vala', + 'nonblocking/nonblocking-mutex.vala', + 'nonblocking/nonblocking-reporting-semaphore.vala', + 'nonblocking/nonblocking-variants.vala', + + 'rfc822/rfc822.vala', + 'rfc822/rfc822-error.vala', + 'rfc822/rfc822-gmime-filter-flowed.vala', + 'rfc822/rfc822-gmime-filter-blockquotes.vala', + 'rfc822/rfc822-gmime-filter-plain.vala', + 'rfc822/rfc822-mailbox-addresses.vala', + 'rfc822/rfc822-mailbox-address.vala', + 'rfc822/rfc822-message.vala', + 'rfc822/rfc822-message-data.vala', + 'rfc822/rfc822-utils.vala', + + 'smtp/smtp-authenticator.vala', + 'smtp/smtp-capabilities.vala', + 'smtp/smtp-client-connection.vala', + 'smtp/smtp-client-session.vala', + 'smtp/smtp-command.vala', + 'smtp/smtp-data-format.vala', + 'smtp/smtp-error.vala', + 'smtp/smtp-greeting.vala', + 'smtp/smtp-login-authenticator.vala', + 'smtp/smtp-plain-authenticator.vala', + 'smtp/smtp-request.vala', + 'smtp/smtp-response.vala', + 'smtp/smtp-response-code.vala', + 'smtp/smtp-response-line.vala', + + 'state/state-machine-descriptor.vala', + 'state/state-machine.vala', + 'state/state-mapping.vala', + + 'util/util-ascii.vala', + 'util/util-collection.vala', + 'util/util-connectivity-manager.vala', + 'util/util-converter.vala', + 'util/util-files.vala', + 'util/util-generic-capabilities.vala', + 'util/util-html.vala', + 'util/util-idle-manager.vala', + 'util/util-imap-utf7.vala', + 'util/util-inet.vala', + 'util/util-iterable.vala', + 'util/util-js.vala', + 'util/util-numeric.vala', + 'util/util-object.vala', + 'util/util-reference-semantics.vala', + 'util/util-scheduler.vala', + 'util/util-stream.vala', + 'util/util-string.vala', + 'util/util-synchronization.vala', + 'util/util-time.vala', + 'util/util-timeout-manager.vala', + 'util/util-trillian.vala', +) + +geary_engine_sources = [ + geary_engine_vala_sources, + geary_version_vala, +] + +geary_engine_dependencies = [ + gee, + gio, + glib, + gmime, + libunwind, + libxml, + posix, + sqlite, + webkit2gtk, +] + +geary_engine_lib = library('geary-engine', + geary_engine_sources, + dependencies: geary_engine_dependencies, + link_with: sqlite3_unicodesn_lib, + include_directories: config_h_dir, + vala_args: geary_vala_options, + c_args: geary_c_options, +) + +geary_engine_dep = declare_dependency( + link_with: [ + geary_engine_lib, + sqlite3_unicodesn_lib, + ], + include_directories: include_directories('.'), +) diff --git a/src/mailer/meson.build b/src/mailer/meson.build new file mode 100644 index 00000000..c6e604f7 --- /dev/null +++ b/src/mailer/meson.build @@ -0,0 +1,15 @@ +geary_mailer_sources = files( + 'main.vala', +) + +geary_mailer_dependencies = [ + gee, + gmime, + webkit2gtk, + geary_engine_dep, +] + +geary_mailer = executable('geary-mailer', + geary_mailer_sources, + dependencies: geary_mailer_dependencies, +) diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 00000000..1c74e816 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,100 @@ +# Version +geary_version_vala = configure_file( + input: 'geary-version.vala.in', + output: 'geary-version.vala', + configuration: conf, +) + +# Common vala options +geary_vala_options = [ + '--target-glib=@0@'.format(target_glib), + '--thread', + '--enable-checking', + '--enable-deprecated', +] + +if reference_tracking + geary_vala_options += [ '--define=REF_TRACKING' ] +endif +if not poodle + geary_vala_options += [ '--define=DISABLE_POODLE' ] +endif + +geary_c_options = [ + '-include', 'config.h', + # Vala causes a _lot_ of these to be emitted for otherwise valid + # code. Suppress them so we can actually see more useful warnings. + '-Wno-incompatible-pointer-types', + '-Wno-discarded-qualifiers', +] + +subdir('sqlite3-unicodesn') +subdir('engine') +subdir('client') +subdir('console') +subdir('mailer') + +# Web process extension library +geary_web_process = library('geary-web-process', + join_paths('client', 'web-process', 'web-process-extension.vala'), + dependencies: [ + gee, + gmime, + webkit2gtk_web_extension , + geary_engine_dep, + ], + install: true, + install_dir: join_paths(libdir, meson.project_name(), 'web-extensions'), +) + +# Now finally, make the geary executable +geary_bin_sources = files( + join_paths('client', 'application', 'main.vala'), +) + +if local_gsettings + geary_bin_sources += geary_compiled_schema +endif + +geary_bin_dependencies = [ + libmath, + gee, + gtk, + gdk, + webkit2gtk, + libsoup, + gmime, + geary_client_dep, + geary_engine_dep, +] + +geary_bin = executable('geary', + geary_bin_sources, + dependencies: geary_bin_dependencies, + vala_args: geary_vala_options, + c_args: geary_c_options, + install: true, +) + +if enable_valadoc + geary_docs = custom_target('valadoc', + build_by_default: true, + input: geary_engine_sources, + output: 'docs', + command: [ valadoc, + '--verbose', + '--force', + '--deps', + '--package-name=@0@-@1@'.format(meson.project_name(), meson.project_version()), + '--package-version=@0@'.format(meson.project_version()), + '--target-glib=@0@'.format(target_glib), + '-b', meson.current_source_dir(), + '-o', '@OUTPUT@', + '--vapidir=@0@'.format(vapi_dir), + '--vapidir=@0@'.format(meson.current_build_dir()), + # Hopefully, Meson gets baked-in valadoc support, so we don't have to do this (see also https://github.com/mesonbuild/meson/issues/894) + '--pkg', 'glib-2.0', '--pkg', 'gio-2.0', '--pkg', 'gee-0.8', '--pkg', 'sqlite3', '--pkg', 'gmime-2.6', '--pkg', 'javascriptcore-4.0', '--pkg', 'libxml-2.0', '--pkg', 'libunwind', + '@INPUT@', + ] + ) +endif diff --git a/src/sqlite3-unicodesn/meson.build b/src/sqlite3-unicodesn/meson.build new file mode 100644 index 00000000..4b6cfe5d --- /dev/null +++ b/src/sqlite3-unicodesn/meson.build @@ -0,0 +1,48 @@ +sqlite3_unicodesn_sources = [ + 'fts3_unicode2.c', + 'fts3_unicodesn.c', + 'static.c', + + join_paths('libstemmer_c', 'runtime', 'api_sq3.c'), + join_paths('libstemmer_c', 'runtime', 'utilities_sq3.c'), +] + +sqlite3_unicodesn_c_flags = [ + '-DSQLITE_ENABLE_FTS4', + '-DSQLITE_ENABLE_FTS4_UNICODE61', +] + +sqlite3_unicodesn_stemmers = [ + 'danish', + 'dutch', + 'english', + 'finnish', + 'french', + 'german', + 'hungarian', + 'italian', + 'norwegian', + 'portuguese', + 'romanian', + 'russian', + 'spanish', + 'swedish', + 'turkish', +] + +foreach stemmer: sqlite3_unicodesn_stemmers + sqlite3_unicodesn_sources += 'libstemmer_c/src_c/stem_UTF_8_@0@.c'.format(stemmer) + sqlite3_unicodesn_c_flags += '-DWITH_STEMMER_@0@'.format(stemmer) +endforeach + +sqlite3_unicodesn_includes = [ + include_directories('libstemmer_c/runtime'), + include_directories('libstemmer_c/src_c'), +] + +sqlite3_unicodesn_lib = library('sqlite3-unicodesn', + sqlite3_unicodesn_sources, + dependencies: sqlite, + c_args: sqlite3_unicodesn_c_flags, + include_directories: sqlite3_unicodesn_includes, +) diff --git a/test/meson.build b/test/meson.build new file mode 100644 index 00000000..aeb47740 --- /dev/null +++ b/test/meson.build @@ -0,0 +1,47 @@ +geary_test_sources = [ + 'main.vala', + 'testcase.vala', # Based on same file in libgee, courtesy Julien Peeters + + 'engine/api/geary-attachment-test.vala', + 'engine/api/geary-engine-test.vala', + 'engine/imap/command/imap-create-command-test.vala', + 'engine/imap/response/imap-namespace-response-test.vala', + 'engine/imap/transport/imap-deserializer-test.vala', + 'engine/mime-content-type-test.vala', + 'engine/rfc822-mailbox-address-test.vala', + 'engine/rfc822-message-test.vala', + 'engine/rfc822-message-data-test.vala', + 'engine/rfc822-utils-test.vala', + 'engine/util-html-test.vala', + 'engine/util-idle-manager-test.vala', + 'engine/util-inet-test.vala', + 'engine/util-js-test.vala', + 'engine/util-timeout-manager-test.vala', + + 'client/application/geary-configuration-test.vala', + 'client/components/client-web-view-test.vala', + 'client/components/client-web-view-test-case.vala', + 'client/composer/composer-web-view-test.vala', + + 'js/client-page-state-test.vala', + 'js/composer-page-state-test.vala', + 'js/conversation-page-state-test.vala', +] + +geary_test_dependencies = [ + gee, + gtk, + libsoup, + gmime, + webkit2gtk, + geary_engine_dep, + geary_client_dep, +] + +geary_test_bin = executable('geary-test', + geary_test_sources, + dependencies: geary_test_dependencies, + c_args: geary_c_options, + include_directories: config_h_dir, +) +test('Geary test suite', geary_test_bin) diff --git a/ui/meson.build b/ui/meson.build new file mode 100644 index 00000000..37e0db5c --- /dev/null +++ b/ui/meson.build @@ -0,0 +1,3 @@ +geary_resources = gnome.compile_resources('org.gnome.Geary', + files('org.gnome.Geary.gresource.xml'), +) diff --git a/ui/org.gnome.Geary.gresource.xml b/ui/org.gnome.Geary.gresource.xml new file mode 100644 index 00000000..d545a9af --- /dev/null +++ b/ui/org.gnome.Geary.gresource.xml @@ -0,0 +1,41 @@ + + + + account_cannot_remove.glade + account_list.glade + account_spinner.glade + certificate_warning_dialog.glade + client-web-view.js + client-web-view-allow-remote-images.js + composer-headerbar.ui + composer-link-popover.ui + composer-menus.ui + composer-widget.ui + composer-web-view.css + composer-web-view.js + conversation-email.ui + conversation-email-attachment-view.ui + conversation-email-menus.ui + conversation-message.ui + conversation-message-menus.ui + conversation-viewer.ui + conversation-web-view.css + conversation-web-view.js + edit_alternate_emails.glade + empty-placeholder.ui + find_bar.glade + folder-popover.ui + gtk/help-overlay.ui + gtk/menus.ui + login.glade + main-toolbar.ui + main-toolbar-menus.ui + main-window.ui + main-window-info-bar.ui + password-dialog.glade + preferences-dialog.ui + remove_confirm.glade + upgrade_dialog.glade + geary.css + +