diff options
Diffstat (limited to '')
-rw-r--r-- | meson.build | 332 |
1 files changed, 332 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') |