diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:54:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:54:43 +0000 |
commit | e4283f6d48b98e764b988b43bbc86b9d52e6ec94 (patch) | |
tree | c8f7f7a6c2f5faa2942d27cefc6fd46cca492656 /meson | |
parent | Initial commit. (diff) | |
download | gnome-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.build | 332 | ||||
-rwxr-xr-x | meson/check-version.py | 32 | ||||
-rw-r--r-- | meson/generate-manpages.py | 23 | ||||
-rw-r--r-- | meson/generate-stylesheets.py | 19 | ||||
-rw-r--r-- | meson_options.txt | 47 |
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' +) |