Ship as Federated Calendar, with the application ID computer.federated.FederatedCalendar and the executable federated-calendar, so it can be installed and run alongside GNOME Calendar. The settings schema follows the application ID too, so the two don't share settings or install the same schema. The project name sets the executable, gettext domain and data directory; the desktop file, D-Bus service, search provider, metainfo and icons follow the application ID. Internal resource paths and the template file names are unchanged, to keep merging from GNOME Calendar simple. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
237 lines
6.4 KiB
Meson
237 lines
6.4 KiB
Meson
project(
|
|
'federated-calendar',
|
|
'c',
|
|
version: '52.alpha',
|
|
license: 'GPL3+',
|
|
meson_version: '>= 0.58.0'
|
|
)
|
|
|
|
|
|
###########
|
|
# Version #
|
|
###########
|
|
|
|
calendar_version = meson.project_version()
|
|
version_array = calendar_version.split('.')
|
|
calendar_major_version = version_array[0]
|
|
calendar_minor_version = version_array[1]
|
|
|
|
|
|
#################
|
|
# Default paths #
|
|
#################
|
|
|
|
calendar_prefix = get_option('prefix')
|
|
calendar_bindir = calendar_prefix / get_option('bindir')
|
|
calendar_localedir = calendar_prefix / get_option('localedir')
|
|
calendar_datadir = calendar_prefix / get_option('datadir')
|
|
calendar_pkgdatadir = calendar_datadir / meson.project_name()
|
|
calendar_schemadir = calendar_datadir / 'glib-2.0' / 'schemas'
|
|
|
|
|
|
###########
|
|
# Options #
|
|
###########
|
|
|
|
if get_option('profile') == 'development'
|
|
find_program('git')
|
|
rev_txt = run_command('git','rev-parse','--short','HEAD', check: true).stdout().strip()
|
|
profile = 'Devel'
|
|
name_suffix = ' (Development)'
|
|
rev = '-@0@'.format(rev_txt)
|
|
else
|
|
profile = ''
|
|
name_suffix = ''
|
|
rev = ''
|
|
endif
|
|
|
|
base_application_id = 'computer.federated.FederatedCalendar'
|
|
if profile == ''
|
|
application_id = base_application_id
|
|
else
|
|
application_id = '@0@.@1@'.format(base_application_id, profile)
|
|
endif
|
|
|
|
# Settings are shared between profiles, but not with GNOME Calendar
|
|
settings_schema_id = base_application_id
|
|
settings_schema_path = '/' + settings_schema_id.replace('.', '/') + '/'
|
|
calendar_buildtype = get_option('buildtype')
|
|
development_release = calendar_minor_version.startswith('alpha') or \
|
|
calendar_minor_version.startswith('beta') or \
|
|
calendar_minor_version.startswith('rc')
|
|
calendar_debug = development_release or calendar_buildtype.contains('debug')
|
|
enable_tracing = get_option('tracing')
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
config_h = configuration_data()
|
|
|
|
package_bugreport = 'http://bugzilla.gnome.org/enter_bug.cgi?product=' + meson.project_name()
|
|
|
|
# release tag for the about dialog and metainfo release infos
|
|
if development_release
|
|
release_tag = calendar_version.replace('.', '~')
|
|
else
|
|
release_tag = calendar_version
|
|
endif
|
|
|
|
# package
|
|
set_defines = [
|
|
['PACKAGE', meson.project_name()],
|
|
['PACKAGE_BUGREPORT', package_bugreport],
|
|
['PACKAGE_NAME', meson.project_name()],
|
|
['PACKAGE_STRING', '@0@ @1@'.format(meson.project_name(), calendar_version)],
|
|
['PACKAGE_TARNAME', meson.project_name()],
|
|
['PACKAGE_URL', 'https://apps.gnome.org/Calendar/'],
|
|
['MAJOR_VERSION', calendar_major_version],
|
|
['RELEASE_TAG', release_tag],
|
|
['PACKAGE_VERSION', calendar_version + rev],
|
|
['VERSION', calendar_version + rev],
|
|
['GETTEXT_PACKAGE', meson.project_name()],
|
|
['PROFILE', profile],
|
|
['NAME_SUFFIX', name_suffix],
|
|
['APPLICATION_ID', application_id],
|
|
['SETTINGS_SCHEMA_ID', settings_schema_id],
|
|
]
|
|
|
|
foreach define: set_defines
|
|
config_h.set_quoted(define[0], define[1])
|
|
endforeach
|
|
|
|
assert(cc.has_function('strerror'), '"strerror" not found')
|
|
|
|
# options
|
|
config_h.set('ENABLE_TRACING', enable_tracing)
|
|
config_h.set('ENABLE_FEDERATED_CORE', get_option('federated_core'))
|
|
config_h.set('HANDY_USE_UNSTABLE_API', true)
|
|
|
|
# _NL_TIME_FIRST_WEEKDAY is an enum and not a define
|
|
nl_time_first_weekday_src = '''
|
|
#include <langinfo.h>
|
|
int main() {
|
|
nl_langinfo(_NL_TIME_FIRST_WEEKDAY);
|
|
};
|
|
'''
|
|
|
|
config_h.set('HAVE__NL_TIME_FIRST_WEEKDAY', cc.compiles(nl_time_first_weekday_src),
|
|
description: 'Define if _NL_TIME_FIRST_WEEKDAY is available')
|
|
|
|
# Not all systems support nl_langinfo (ALTMON_*)
|
|
altmon_src = '''
|
|
/* _GNU_SOURCE is required by glibc 2.27. */
|
|
#define _GNU_SOURCE
|
|
#include <langinfo.h>
|
|
int main() {
|
|
nl_langinfo (ALTMON_1);
|
|
nl_langinfo (ALTMON_2);
|
|
nl_langinfo (ALTMON_3);
|
|
nl_langinfo (ALTMON_4);
|
|
nl_langinfo (ALTMON_5);
|
|
nl_langinfo (ALTMON_6);
|
|
nl_langinfo (ALTMON_7);
|
|
nl_langinfo (ALTMON_8);
|
|
nl_langinfo (ALTMON_9);
|
|
nl_langinfo (ALTMON_10);
|
|
nl_langinfo (ALTMON_11);
|
|
nl_langinfo (ALTMON_12);
|
|
};
|
|
'''
|
|
|
|
config_h.set('HAVE_ALTMON', cc.compiles(altmon_src),
|
|
description: 'Define if ALTMON_* constants are available')
|
|
|
|
# Compiler flags
|
|
common_flags = [
|
|
'-DHAVE_CONFIG_H',
|
|
'-DPACKAGE_LOCALE_DIR="@0@"'.format(calendar_localedir),
|
|
'-DPACKAGE_DATA_DIR="@0@"'.format(calendar_pkgdatadir),
|
|
'-DUI_DATA_DIR="@0@"'.format(calendar_datadir, 'style'),
|
|
'-DEDS_DISABLE_DEPRECATED',
|
|
'-DGWEATHER_I_KNOW_THIS_IS_UNSTABLE'
|
|
]
|
|
|
|
if calendar_debug
|
|
common_flags += [
|
|
'-DG_DISABLE_CAST_CHECKS'
|
|
]
|
|
elif calendar_buildtype == 'release'
|
|
common_flags += [
|
|
'-DG_DISABLE_ASSERT',
|
|
'-DG_DISABLE_CHECKS',
|
|
'-DG_DISABLE_CAST_CHECKS'
|
|
]
|
|
endif
|
|
|
|
add_project_arguments(common_flags, language: 'c')
|
|
|
|
|
|
################
|
|
# Dependencies #
|
|
################
|
|
libical_dep = dependency('libical', version: '>= 1.0')
|
|
config_h.set('HAVE_LIBICAL', libical_dep.found())
|
|
|
|
assert(cc.has_function('icaltime_days_in_year', dependencies: libical_dep),
|
|
'Error: icaltime_days_in_year() not found in libical!. Upgrade your libical library.')
|
|
|
|
gsettings_desktop_schemas_dep = dependency('gsettings-desktop-schemas', version: '>= 50.alpha')
|
|
libedataserverui_dep = dependency('libedataserverui4-1.0', version: '>= 3.45.1')
|
|
libedataserver_dep = dependency('libedataserver-1.2', version: '>= 3.45.1')
|
|
libecal_dep = dependency('libecal-2.0', version: '>= 3.45.1')
|
|
libsoup_dep = dependency('libsoup-3.0')
|
|
libadwaita_dep = dependency('libadwaita-1', version: '>= 1.8.alpha')
|
|
fribidi_dep = dependency('fribidi')
|
|
glib_dep = dependency('glib-2.0', version: '>= 2.80.0')
|
|
gtk_dep = dependency('gtk4', version: '>= 4.21.2')
|
|
gio_dep = dependency('gio-2.0', version: '>= 2.58.0')
|
|
gweather_dep = dependency('gweather4')
|
|
geoclue_dep = dependency('libgeoclue-2.0', version: '>=2.4')
|
|
m_dep = cc.find_library('m')
|
|
|
|
gnome = import('gnome')
|
|
i18n = import('i18n')
|
|
pkg = import('pkgconfig')
|
|
|
|
top_inc = include_directories('.')
|
|
|
|
data_dir = meson.global_source_root() / 'data'
|
|
po_dir = meson.global_source_root() / 'po'
|
|
src_dir = meson.global_source_root() / 'src'
|
|
|
|
|
|
###########
|
|
# Subdirs #
|
|
###########
|
|
|
|
subdir('data')
|
|
subdir('src')
|
|
subdir('po')
|
|
subdir('tests')
|
|
|
|
configure_file(
|
|
output: 'config.h',
|
|
configuration: config_h
|
|
)
|
|
|
|
summary({
|
|
'Source': meson.global_source_root(),
|
|
'Prefix': calendar_prefix,
|
|
})
|
|
summary({
|
|
'Federated Core': get_option('federated_core'),
|
|
}, section: 'Features')
|
|
summary({
|
|
'Debug': calendar_debug,
|
|
'Tracing': enable_tracing,
|
|
}, section: 'Development')
|
|
|
|
|
|
###########
|
|
# Scripts #
|
|
###########
|
|
|
|
gnome.post_install(
|
|
glib_compile_schemas: true,
|
|
gtk_update_icon_cache: true,
|
|
)
|