project('rssuper-linux', 'vala', 'c', version: '0.1.0', default_options: [ 'c_std=c11', 'warning_level=3', 'werror=false', ] ) vala = find_program('valac') meson_version_check = run_command(vala, '--version', check: true) # Dependencies glib_dep = dependency('glib-2.0', version: '>= 2.58') gio_dep = dependency('gio-2.0', version: '>= 2.58') json_dep = dependency('json-glib-1.0', version: '>= 1.4') sqlite_dep = dependency('sqlite3', version: '>= 3.0') gobject_dep = dependency('gobject-2.0', version: '>= 2.58') xml_dep = dependency('libxml-2.0', version: '>= 2.0') soup_dep = dependency('libsoup-3.0', version: '>= 3.0') gtk_dep = dependency('gtk4', version: '>= 4.0') # GSettings schemas schema_files = [ 'gsettings/org.rssuper.notification.preferences.gschema.xml', 'gsettings/org.rssuper.app.settings.gschema.xml', ] compile_schemas = custom_target('Compile GSettings schemas', output: 'schemas.glibdir', command: glib_dep.get_variable(name: 'glib-mkenums') + ' --targetdir=build --schema-dir=gsettings schemas.glibdir', dependencies: glib_dep, install: false ) # Source files models = files( 'src/models/feed-item.vala', 'src/models/feed.vala', 'src/models/feed-subscription.vala', 'src/models/search-result.vala', 'src/models/search-filters.vala', 'src/models/notification-preferences.vala', 'src/models/reading-preferences.vala', 'src/models/bookmark.vala', ) # Settings files settings = files( 'src/settings-store.vala', 'src/app-settings.vala', 'src/notification-preferences-store.vala', ) # Database files database = files( 'src/database/db-error.vala', 'src/database/database.vala', 'src/database/subscription-store.vala', 'src/database/feed-item-store.vala', 'src/database/search-history-store.vala', 'src/database/bookmark-store.vala', ) # Repository files repositories = files( 'src/repository/bookmark-repository.vala', 'src/repository/bookmark-repository-impl.vala', ) # Service files services = files( 'src/service/search-service.vala', ) # Parser files parser = files( 'src/parser/feed-type.vala', 'src/parser/parse-result.vala', 'src/parser/rss-parser.vala', 'src/parser/atom-parser.vala', 'src/parser/feed-parser.vala', ) # Network files network = files( 'src/network/network-error.vala', 'src/network/http-auth-credentials.vala', 'src/network/fetch-result.vala', 'src/network/feed-fetcher.vala', ) # Main library models_lib = library('rssuper-models', models, dependencies: [glib_dep, gio_dep, json_dep], install: false ) # Settings library settings_lib = library('rssuper-settings', settings, dependencies: [glib_dep, gio_dep, json_dep], link_with: [models_lib], install: false ) # Database library database_lib = library('rssuper-database', database, dependencies: [glib_dep, gio_dep, json_dep, sqlite_dep, gobject_dep], link_with: [models_lib], install: false, vala_args: ['--vapidir', 'src/database', '--pkg', 'sqlite3'] ) # Repository library repository_lib = library('rssuper-repositories', repositories, dependencies: [glib_dep, gio_dep, json_dep, sqlite_dep], link_with: [models_lib, database_lib], install: false, vala_args: ['--vapidir', 'src/repository'] ) # Parser library parser_lib = library('rssuper-parser', parser, dependencies: [glib_dep, gio_dep, json_dep, xml_dep], link_with: [models_lib], install: false, vala_args: ['--vapidir', 'src/parser', '--pkg', 'libxml-2.0'] ) # Network library network_lib = library('rssuper-network', network, dependencies: [glib_dep, gio_dep, json_dep, soup_dep], link_with: [models_lib], install: false, vala_args: ['--vapidir', 'src/network', '--pkg', 'libsoup-3.0'] ) # Test executable test_exe = executable('database-tests', 'src/tests/database-tests.vala', dependencies: [glib_dep, gio_dep, json_dep, sqlite_dep, gobject_dep, xml_dep], link_with: [models_lib, database_lib, parser_lib], vala_args: ['--vapidir', '.', '--pkg', 'sqlite3', '--pkg', 'libxml-2.0'], install: false ) # Parser test executable parser_test_exe = executable('parser-tests', 'src/tests/parser-tests.vala', dependencies: [glib_dep, gio_dep, json_dep, xml_dep], link_with: [models_lib, parser_lib], vala_args: ['--vapidir', '.', '--pkg', 'libxml-2.0'], install: false ) # Feed fetcher test executable fetcher_test_exe = executable('feed-fetcher-tests', 'src/tests/feed-fetcher-tests.vala', dependencies: [glib_dep, gio_dep, json_dep, xml_dep, soup_dep], link_with: [models_lib, parser_lib, network_lib], vala_args: ['--vapidir', '.', '--pkg', 'libxml-2.0', '--pkg', 'libsoup-3.0'], install: false ) # Notification service test executable notification_service_test_exe = executable('notification-service-tests', 'src/tests/notification-service-tests.vala', dependencies: [glib_dep, gio_dep, json_dep, gobject_dep], link_with: [models_lib], vala_args: ['--vapidir', '.', '--pkg', 'gio-2.0'], install: false ) # Notification manager test executable notification_manager_test_exe = executable('notification-manager-tests', 'src/tests/notification-manager-tests.vala', dependencies: [glib_dep, gio_dep, json_dep, gobject_dep, gtk_dep], link_with: [models_lib], vala_args: ['--vapidir', '.', '--pkg', 'gio-2.0', '--pkg', 'gtk4'], install: false ) # Settings store test executable settings_store_test_exe = executable('settings-store-tests', 'src/tests/settings-store-tests.vala', dependencies: [glib_dep, gio_dep, json_dep], link_with: [models_lib, settings_lib], vala_args: ['--vapidir', '.', '--pkg', 'gio-2.0'], install: false ) # Test definitions test('database tests', test_exe) test('parser tests', parser_test_exe) test('feed fetcher tests', fetcher_test_exe) test('notification service tests', notification_service_test_exe) test('notification manager tests', notification_manager_test_exe) test('settings store tests', settings_store_test_exe)