summaryrefslogtreecommitdiffstats
path: root/meson
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:54:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:54:43 +0000
commite4283f6d48b98e764b988b43bbc86b9d52e6ec94 (patch)
treec8f7f7a6c2f5faa2942d27cefc6fd46cca492656 /meson
parentInitial commit. (diff)
downloadgnome-shell-e4283f6d48b98e764b988b43bbc86b9d52e6ec94.tar.xz
gnome-shell-e4283f6d48b98e764b988b43bbc86b9d52e6ec94.zip
Adding upstream version 43.9.upstream/43.9upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--meson.build332
-rwxr-xr-xmeson/check-version.py32
-rw-r--r--meson/generate-manpages.py23
-rw-r--r--meson/generate-stylesheets.py19
-rw-r--r--meson_options.txt47
5 files changed, 453 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..1fa4311
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,332 @@
+project('gnome-shell', 'c',
+ version: '43.9',
+ meson_version: '>= 0.58.0',
+ license: 'GPLv2+'
+)
+
+split_version = meson.project_version().split('.')
+
+# We depend on a specific version of the libmutter API. The mutter variants of
+# the Cogl and Clutter libraries also use this API version.
+# The API version is increased each development cycle,
+# starting with 0 in 3.23.x
+mutter_api_version = '11'
+
+clutter_pc = 'mutter-clutter-' + mutter_api_version
+cogl_pc = 'mutter-cogl-' + mutter_api_version
+cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
+libmutter_pc = 'libmutter-' + mutter_api_version
+libmutter_test_pc = 'libmutter-test-' + mutter_api_version
+
+ecal_req = '>= 3.33.1'
+eds_req = '>= 3.33.1'
+gcr_req = '>= 3.90.0'
+gio_req = '>= 2.56.0'
+gi_req = '>= 1.49.1'
+gjs_req = '>= 1.73.1'
+gtk_req = '>= 3.15.0'
+mutter_req = '>= 43.0'
+polkit_req = '>= 0.100'
+schemas_req = '>= 42.beta'
+startup_req = '>= 0.11'
+ibus_req = '>= 1.5.19'
+gnome_desktop_req = '>= 3.35.90'
+
+nm_req = '>= 1.10.4'
+secret_req = '>= 0.18'
+
+fs = import('fs')
+gnome = import('gnome')
+i18n = import('i18n')
+
+prefix = get_option('prefix')
+
+bindir = join_paths(prefix, get_option('bindir'))
+datadir = join_paths(prefix, get_option('datadir'))
+libdir = join_paths(prefix, get_option('libdir'))
+libexecdir = join_paths(prefix, get_option('libexecdir'))
+mandir = join_paths(prefix, get_option('mandir'))
+sysconfdir = join_paths(prefix, get_option('sysconfdir'))
+
+pkgdatadir = join_paths(datadir, meson.project_name())
+pkglibdir = join_paths(libdir, meson.project_name())
+
+autostartdir = join_paths(sysconfdir, 'xdg', 'autostart')
+desktopdir = join_paths(datadir, 'applications')
+icondir = join_paths(datadir, 'icons')
+ifacedir = join_paths(datadir, 'dbus-1', 'interfaces')
+localedir = join_paths(datadir, 'locale')
+metainfodir = join_paths(datadir, 'metainfo')
+portaldir = join_paths(datadir, 'xdg-desktop-portal', 'portals')
+schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
+servicedir = join_paths(datadir, 'dbus-1', 'services')
+
+keybindings_dep = dependency('gnome-keybindings', required: false)
+if keybindings_dep.found()
+ keysdir = keybindings_dep.get_variable('keysdir', pkgconfig_define: ['datadir', datadir])
+else
+ keysdir = join_paths(datadir, 'gnome-control-center', 'keybindings')
+endif
+
+atk_bridge_dep = dependency('atk-bridge-2.0')
+ecal_dep = dependency('libecal-2.0', version: ecal_req)
+eds_dep = dependency('libedataserver-1.2', version: eds_req)
+gcr_dep = dependency('gcr-4', version: gcr_req)
+gdk_x11_dep = dependency('gdk-x11-3.0')
+gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
+gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
+gio_dep = dependency('gio-2.0', version: gio_req)
+gio_unix_dep = dependency('gio-unix-2.0', version: gio_req)
+gjs_dep = dependency('gjs-1.0', version: gjs_req)
+gtk_dep = dependency('gtk+-3.0', version: gtk_req)
+libxml_dep = dependency('libxml-2.0')
+clutter_dep = dependency(clutter_pc, version: mutter_req)
+cogl_dep = dependency(cogl_pc, version: mutter_req)
+cogl_pango_dep = dependency(cogl_pango_pc, version: mutter_req)
+mutter_dep = dependency(libmutter_pc, version: mutter_req)
+polkit_dep = dependency('polkit-agent-1', version: polkit_req)
+startup_dep = dependency('libstartup-notification-1.0', version: startup_req)
+ibus_dep = dependency('ibus-1.0', version: ibus_req)
+x11_dep = dependency('x11')
+schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
+gnome_desktop_dep = dependency('gnome-desktop-3.0', version: gnome_desktop_req)
+
+nm_deps = []
+if get_option('networkmanager')
+ nm_deps += dependency('libnm', version: nm_req)
+ nm_deps += dependency('libsecret-1', version: secret_req)
+
+ have_networkmanager = true
+else
+ have_networkmanager = false
+endif
+
+if get_option('systemd')
+ libsystemd_dep = dependency('libsystemd')
+ systemd_dep = dependency('systemd')
+ systemduserunitdir = systemd_dep.get_variable('systemduserunitdir',
+ pkgconfig_define: ['prefix', prefix])
+ have_systemd = true
+else
+ libsystemd_dep = []
+ have_systemd = false
+endif
+
+have_soup2 = get_option('soup2')
+
+if get_option('man')
+ if fs.exists('man/gnome-shell.1')
+ install_man('man/gnome-shell.1')
+ else
+ a2x = find_program('a2x')
+ subdir('man')
+ endif
+endif
+
+mutter_typelibdir = mutter_dep.get_variable('typelibdir')
+python = find_program('python3')
+gjs = find_program('gjs')
+
+cc = meson.get_compiler('c')
+
+m_dep = cc.find_library('m', required: false)
+
+cdata = configuration_data()
+cdata.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+cdata.set_quoted('VERSION', meson.project_version())
+cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
+
+cdata.set('HAVE_NETWORKMANAGER', have_networkmanager)
+cdata.set('HAVE_SYSTEMD', have_systemd)
+
+# New API added in glib-2.57.2
+cdata.set('HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS',
+ cc.has_function('g_desktop_app_info_launch_uris_as_manager_with_fds',
+ dependencies : gio_dep)
+)
+cdata.set('HAVE_FDWALK', cc.has_function('fdwalk'))
+cdata.set('HAVE_MALLINFO', cc.has_function('mallinfo'))
+cdata.set('HAVE_MALLINFO2', cc.has_function('mallinfo2'))
+cdata.set('HAVE_SYS_RESOURCE_H', cc.has_header('sys/resource.h'))
+cdata.set('HAVE__NL_TIME_FIRST_WEEKDAY',
+ cc.has_header_symbol('langinfo.h', '_NL_TIME_FIRST_WEEKDAY')
+)
+
+cdata.set('HAVE_FDWALK',
+ cc.has_function('fdwalk')
+)
+
+polkit_has_autocleanup = cc.compiles(
+'''
+ #define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE
+ #include <polkitagent/polkitagent.h>
+ void main(void) { g_autoptr(PolkitAgentListener) agent = NULL; }
+''',
+ dependencies: polkit_dep)
+cdata.set('HAVE_POLKIT_AUTOCLEANUP', polkit_has_autocleanup)
+
+buildtype = get_option('buildtype')
+if buildtype != 'plain'
+ all_warnings = [
+ '-fno-strict-aliasing',
+ '-Wpointer-arith',
+ '-Wmissing-declarations',
+ '-Wimplicit-function-declaration',
+ '-Wformat=2',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Wstrict-prototypes',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wold-style-definition',
+ '-Wundef',
+ '-Wunused',
+ '-Wcast-align',
+ '-Wmissing-noreturn',
+ '-Wmissing-format-attribute',
+ '-Wmissing-include-dirs',
+ '-Wlogical-op',
+ '-Wignored-qualifiers',
+ '-Werror=redundant-decls',
+ '-Werror=implicit',
+ '-Werror=nonnull',
+ '-Werror=init-self',
+ '-Werror=main',
+ '-Werror=missing-braces',
+ '-Werror=sequence-point',
+ '-Werror=return-type',
+ '-Werror=trigraphs',
+ '-Werror=array-bounds',
+ '-Werror=write-strings',
+ '-Werror=address',
+ '-Werror=int-to-pointer-cast',
+ '-Werror=pointer-to-int-cast',
+ '-Werror=empty-body',
+ '-Werror=write-strings',
+ ]
+ supported_warnings = cc.get_supported_arguments(all_warnings)
+ add_project_arguments(supported_warnings, language: 'c')
+endif
+
+if get_option('debug')
+ debug_c_args = [
+ '-DG_ENABLE_DEBUG',
+ '-fno-omit-frame-pointer'
+ ]
+ supported_debug_c_args = cc.get_supported_arguments(debug_c_args)
+ add_project_arguments(supported_debug_c_args, language: 'c')
+endif
+
+config_h = configure_file(
+ input: 'config.h.meson',
+ output: 'config.h',
+ configuration: cdata
+)
+
+conf_inc = include_directories('.')
+
+libgvc = subproject('gvc',
+ default_options: [
+ 'package_name=' + meson.project_name(),
+ 'package_version=' + meson.project_version(),
+ 'pkgdatadir=' + pkgdatadir,
+ 'pkglibdir=' + pkglibdir,
+ 'static=false',
+ 'introspection=true',
+ 'alsa=false'
+ ]
+)
+libgvc_gir = libgvc.get_variable('libgvc_gir')
+
+libshew = subproject('shew',
+ default_options: [
+ 'package_name=@0@'.format(meson.project_name()),
+ ]
+)
+
+libshew_version = libshew.get_variable('package_version')
+assert(libshew_version == meson.project_version(),
+ 'shew version does not match project version')
+
+if get_option('extensions_tool')
+ extension_tool = subproject('extensions-tool',
+ default_options: [
+ 'package_name=@0@'.format(meson.project_name()),
+ ]
+ )
+
+ extension_tool_version = extension_tool.get_variable('package_version')
+ assert(extension_tool_version == meson.project_version(),
+ 'extension-tool version does not match project version'
+ )
+endif
+
+if get_option('extensions_app')
+ extensions_app = subproject('extensions-app',
+ default_options: [
+ 'package_name=@0@'.format(meson.project_name()),
+ ]
+ )
+
+ extensions_app_version = extensions_app.get_variable('package_version')
+ assert(extensions_app_version == meson.project_version(),
+ 'Extensions app version does not match project version'
+ )
+endif
+
+
+po_dir = join_paths(meson.current_source_dir(), 'po')
+
+subdir('js')
+subdir('src')
+subdir('po')
+subdir('data')
+subdir('tools')
+
+if get_option('tests')
+ subdir('tests')
+endif
+
+if get_option('gtk_doc')
+ subdir('docs/reference')
+endif
+
+gnome.post_install(
+ glib_compile_schemas: true,
+ gtk_update_icon_cache: true
+)
+
+meson.add_dist_script('meson/generate-manpages.py')
+meson.add_dist_script('meson/generate-stylesheets.py')
+meson.add_dist_script('meson/check-version.py', meson.project_version(), 'NEWS')
+
+summary_options = {
+ 'networkmanager': get_option('networkmanager'),
+ 'systemd': get_option('systemd'),
+ 'extensions_app': get_option('extensions_app'),
+ 'extensions_tool': get_option('extensions_tool'),
+ 'man': get_option('man'),
+ 'gtk_doc': get_option('gtk_doc'),
+}
+
+summary_build = {
+ 'buildtype': get_option('buildtype'),
+ 'debug': get_option('debug'),
+}
+
+summary_dirs = {
+ 'prefix': get_option('prefix'),
+ 'bindir': get_option('bindir'),
+ 'libdir': get_option('libdir'),
+ 'libexecdir': get_option('libexecdir'),
+ 'datadir': get_option('datadir'),
+ 'sysconfdir': get_option('sysconfdir'),
+}
+
+if get_option('man')
+ summary_dirs += { 'mandir': get_option('mandir') }
+endif
+
+summary(summary_dirs, section: 'Directories')
+summary(summary_build, section: 'Build Configuration')
+summary(summary_options, section: 'Build Options')
diff --git a/meson/check-version.py b/meson/check-version.py
new file mode 100755
index 0000000..81750c9
--- /dev/null
+++ b/meson/check-version.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+
+import os, sys
+from pathlib import Path
+import argparse, subprocess
+
+def check_version(version, file, type='news'):
+ if type == 'news':
+ line = file.open().readline()
+ ok = line.startswith(version)
+ print("{}: {}".format(file, "OK" if ok else "FAILED"))
+ if not ok:
+ raise Exception("{} does not start with {}".format(file, version))
+ elif type == 'metainfo':
+ subprocess.run(['appstream-util', 'validate-version', file, version],
+ check=True)
+ else:
+ raise Exception('Not implemented')
+
+parser = argparse.ArgumentParser(description='Check release version information.')
+parser.add_argument('--type', choices=['metainfo','news'], default='news')
+parser.add_argument('version', help='the version to check for')
+parser.add_argument('files', nargs='+', help='files to check')
+args = parser.parse_args()
+
+distroot = os.environ.get('MESON_DIST_ROOT', './')
+
+try:
+ for file in args.files:
+ check_version(args.version, Path(distroot, file), args.type)
+except:
+ sys.exit(1)
diff --git a/meson/generate-manpages.py b/meson/generate-manpages.py
new file mode 100644
index 0000000..e12df61
--- /dev/null
+++ b/meson/generate-manpages.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+
+import os
+from pathlib import PurePath
+import subprocess
+
+man_pages = [
+ 'man/gnome-shell.1',
+ 'subprojects/extensions-tool/man/gnome-extensions.1',
+]
+
+sourceroot = os.environ.get('MESON_SOURCE_ROOT')
+distroot = os.environ.get('MESON_DIST_ROOT')
+
+for man_page in man_pages:
+ page_path = PurePath(man_page)
+ src = PurePath(sourceroot, page_path.with_suffix('.txt'))
+ dst = PurePath(distroot, page_path)
+ stylesheet = src.with_name('stylesheet.xsl')
+
+ subprocess.call(['a2x', '--xsl-file', os.fspath(stylesheet),
+ '--format', 'manpage', '--destination-dir', os.fspath(dst.parent),
+ os.fspath(src)])
diff --git a/meson/generate-stylesheets.py b/meson/generate-stylesheets.py
new file mode 100644
index 0000000..bd6b641
--- /dev/null
+++ b/meson/generate-stylesheets.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python3
+
+import os
+from pathlib import PurePath
+import subprocess
+
+stylesheets = [
+ 'data/theme/gnome-shell-high-contrast.css',
+ 'data/theme/gnome-shell.css'
+]
+
+sourceroot = os.environ.get('MESON_SOURCE_ROOT')
+distroot = os.environ.get('MESON_DIST_ROOT')
+
+for stylesheet in stylesheets:
+ stylesheet_path = PurePath(stylesheet)
+ src = PurePath(sourceroot, stylesheet_path.with_suffix('.scss'))
+ dst = PurePath(distroot, stylesheet_path)
+ subprocess.run(['sassc', '-a', src, dst], check=True)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..46ca8e7
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,47 @@
+option('extensions_tool',
+ type: 'boolean',
+ value: true,
+ description: 'Build gnome-extensions CLI tool'
+)
+
+option('extensions_app',
+ type: 'boolean',
+ value: true,
+ description: 'Build gnome-extensions GUI application'
+)
+
+option('gtk_doc',
+ type: 'boolean',
+ value: false,
+ description: 'Build API reference'
+)
+
+option('man',
+ type: 'boolean',
+ value: true,
+ description: 'Generate man pages'
+)
+
+option('tests',
+ type: 'boolean',
+ value: true,
+ description: 'Enable tests'
+)
+
+option('networkmanager',
+ type: 'boolean',
+ value: true,
+ description: 'Enable NetworkManager support'
+)
+
+option('systemd',
+ type: 'boolean',
+ value: true,
+ description: 'Enable systemd integration'
+)
+
+option('soup2',
+ type: 'boolean',
+ value: false,
+ description: 'Use Soup 2.4 instead of Soup 3. Must be in sync with libgweather'
+)