From f1c1e72d96c11194ff89752a4e22b6edffa75666 Mon Sep 17 00:00:00 2001 From: zhuyaliang <15132211195@163.com> Date: Thu, 7 Oct 2021 21:36:04 +0800 Subject: Add meson build support --- help/meson.build | 21 ++++++ meson.build | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++ meson_options.txt | 6 ++ meson_post_install.py | 15 ++++ pixmaps/meson.build | 10 +++ po/meson.build | 1 + src/meson.build | 103 +++++++++++++++++++++++++++ src/msm.gresource.xml | 2 +- src/procdialogs.cpp | 2 +- tools/meson.build | 16 +++++ 10 files changed, 364 insertions(+), 2 deletions(-) create mode 100644 help/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 meson_post_install.py create mode 100644 pixmaps/meson.build create mode 100644 po/meson.build create mode 100644 src/meson.build create mode 100644 tools/meson.build diff --git a/help/meson.build b/help/meson.build new file mode 100644 index 0000000..f1fc372 --- /dev/null +++ b/help/meson.build @@ -0,0 +1,21 @@ +gnome.yelp(meson.project_name(), + sources: [ + 'index.docbook', + 'legal.xml', + ], + media: [ + 'figures/addColumn.png', + 'figures/changePriority.png', + 'figures/colorPanel.png', + 'figures/columnContextMenu.png', + 'figures/mate-system-monitor_window.png', + 'figures/memoryMaps.png', + 'figures/moreInfo.png', + 'figures/processListing.png', + 'figures/sortButton.png', + 'figures/sortMenu2.png', + 'figures/sortMenu.png', + 'figures/systemMonitor.png', + 'figures/viewMenu.png', + ], +) diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..0fc4e20 --- /dev/null +++ b/meson.build @@ -0,0 +1,190 @@ +project('mate-system-monitor', + 'c', 'cpp', + default_options : [ + 'c_std=c11', 'cpp_std=c++11', 'warning_level=3' + ], + version: '1.26.0', + url: 'https://mate-desktop.org', + meson_version: '>=0.50.0', +) + + +gnome = import('gnome') +i18n = import('i18n') + +cc = meson.get_compiler('c') +cx = meson.get_compiler('cpp') + +gettext_package = meson.project_name() + +conf = configuration_data() +conf.set_quoted('VERSION', meson.project_version()) +conf.set_quoted('PACKAGE_URL', 'https://mate-desktop.org') +conf.set_quoted('GETTEXT_PACKAGE', gettext_package) +conf.set_quoted('MATELOCALEDIR', + join_paths(get_option('prefix'), get_option('localedir')) +) +conf.set_quoted('DATADIR', + join_paths(get_option('prefix'), get_option('datadir'))) + +conf.set_quoted('PKGLIBEXECDIR', + join_paths(get_option('prefix'), get_option('libdir'), meson.project_name(),meson.project_name()) +) +conf.set_quoted('LIBEXECDIR', + join_paths(get_option('prefix'), get_option('libexecdir'))) + +dataconf = configuration_data() +dataconf.set('VERSION', meson.project_version()) +dataconf.set('GETTEXT_PACKAGE', gettext_package) +dataconf.set('pkglibexecdir', + join_paths(get_option('prefix'),get_option('libexecdir'), meson.project_name()) +) + +prefix = get_option('prefix') +datadir = join_paths(prefix, get_option('datadir')) + +################################################################################ +# Dependencies + +giomm = dependency('giomm-2.4', version: '>=2.26.0') +glib = dependency('glib-2.0', version: '>=2.56.0') +glibmm = dependency('glibmm-2.4', version: '>=2.22') +gmodule = dependency('gmodule-2.0') +gtk3 = dependency('gtk+-3.0', version: '>=3.22.0') +gtkmm = dependency('gtkmm-3.0', version: '>=3.8.1') +libgtop = dependency('libgtop-2.0', version: '>=2.37.2') +librsvg = dependency('librsvg-2.0', version: '>=2.35') +libxml = dependency('libxml-2.0', version: '>=2.0') + +if get_option('wnck') + libwnck = dependency('libwnck-3.0', version: '>=2.91.0') +else + libwnck = dependency('', required: false) +endif +conf.set('HAVE_WNCK', libwnck.found()) + +if get_option('systemd') + libsystemd = dependency('libsystemd', version: '>=44') +else + libsystemd = dependency('', required: false) +endif +conf.set('HAVE_SYSTEMD', libsystemd.found()) + + +################################################################################ +# Compiler flags + +extra_flags = [ + '-Wcast-align', + '-Wchar-subscripts', + '-Winline', + '-Wmissing-declarations', + '-Wpointer-arith', + '-Wsign-compare', +] +extra_cflags = [ + '-Wmissing-prototypes', + '-Wnested-externs', +] +extra_cxxflags = [ + # '-fvisibility=hidden', + # '-fvisibility-inlines-hidden', +] + +cflags = extra_flags + extra_cflags +cxxflags = extra_flags + extra_cxxflags + +add_project_arguments(cc.get_supported_arguments(cflags), + language: 'c' +) +add_project_arguments(cx.get_supported_arguments(cxxflags), + language: 'cpp' +) + +configure_file( + output: 'config.h', + configuration: conf, +) + +################################################################################ +# Generate files + +desktop_files = i18n.merge_file( + input : configure_file( + configuration: dataconf, + input : 'mate-system-monitor.desktop.in.in', + output: 'mate-system-monitor.desktop.in' + ), + output: 'mate-system-monitor.desktop', + po_dir: 'po', + type: 'desktop', + install: true, + install_dir: join_paths(get_option('datadir'), 'applications'), +) + +appdata_file = i18n.merge_file( + input : 'mate-system-monitor.appdata.xml.in', + output: 'mate-system-monitor.appdata.xml', + po_dir: 'po', + install: true, + install_dir: join_paths(get_option('datadir'), 'metainfo'), +) + +i18n.merge_file( + input : configure_file( + configuration: dataconf, + input : 'org.mate.mate-system-monitor.policy.in.in', + output: 'org.mate.mate-system-monitor.policy.in' + ), + output: 'org.mate.mate-system-monitor.policy', + po_dir: 'po', + data_dirs: 'po', + install: true, + install_dir: join_paths(get_option('datadir'), 'polkit-1', 'actions'), +) + +install_man( + 'mate-system-monitor.1', +) +appstream_util = find_program('appstream-util', required: false) +if appstream_util.found() + test('validate_appdata', + appstream_util, + args: [ 'validate-relax', '--nonet', appdata_file ], + ) +endif + +desktop_validate = find_program('desktop-file-validate', required: false) +if desktop_validate.found() + test('validate_desktop', + desktop_validate, + args: [ desktop_files ], + ) +endif + +################################################################################ +# Subdirectories + +rootInclude = include_directories('.') + +subdir('po') +subdir('pixmaps') +subdir('tools') +subdir('src') +subdir('help') + + +message('\n'.join(['', +'Configuration:', +'', +' Source code location: @0@'.format(meson.source_root()), +' C Compiler: @0@ @1@'.format(cc.get_id(), cc.version()), +' C++ Compiler: @0@ @1@'.format(cx.get_id(), cx.version()), +' CFLAGS: @0@'.format(cflags), +' CXXFLAGS: @0@'.format(cxxflags), +' systemd support: @0@'.format(libsystemd.found()), +' wnck support: @0@ @1@'.format(libwnck.found(), + libwnck.found() ? '(this will likely make system-monitor segfault)' : ''), +])) + +meson.add_install_script('meson_post_install.py') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..4671783 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,6 @@ +option('wnck', type: 'boolean', value: false, + description: 'enable wnck support, this will likely make system-monitor segfault' +) +option('systemd', type: 'boolean', value: true, + description: 'systemd support' +) diff --git a/meson_post_install.py b/meson_post_install.py new file mode 100644 index 0000000..b26c88a --- /dev/null +++ b/meson_post_install.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +import os +import subprocess + +install_prefix = os.environ['MESON_INSTALL_PREFIX'] +icondir = os.path.join(install_prefix, 'share', 'icons', 'hicolor') +schemadir = os.path.join(install_prefix, 'share', 'glib-2.0', 'schemas') + +if not os.environ.get('DESTDIR'): + print('Update icon cache...') + subprocess.call(['gtk-update-icon-cache', '-f', '-t', icondir]) + + print('Compiling gsettings schemas...') + subprocess.call(['glib-compile-schemas', schemadir]) diff --git a/pixmaps/meson.build b/pixmaps/meson.build new file mode 100644 index 0000000..10ca500 --- /dev/null +++ b/pixmaps/meson.build @@ -0,0 +1,10 @@ +faces = [ + ['download.svg'], + ['side.png'], + ['upload.svg'], +] +foreach face: faces + install_data(face, + install_dir : join_paths(get_option('datadir'), 'pixmaps', 'mate-system-monitor') + ) +endforeach diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 0000000..e9b77d7 --- /dev/null +++ b/po/meson.build @@ -0,0 +1 @@ +i18n.gettext(meson.project_name(), preset: 'glib') diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..4810ad7 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,103 @@ +system_monitor_sources = [] + +msm_resource = gnome.compile_resources( + 'msm', + 'msm.gresource.xml', + source_dir: 'src', +) + +system_monitor_sources += [ + 'argv.cpp', + 'procman.cpp', + 'interface.cpp', + 'callbacks.cpp', + 'load-graph.cpp', + 'proctable.cpp', + 'prettytable.cpp', + 'util.cpp', + 'procactions.cpp', + 'procdialogs.cpp', + 'memmaps.cpp', + 'openfiles.cpp', + 'procproperties.cpp', + 'smooth_refresh.cpp', + 'disks.cpp', + 'selinux.cpp', + 'cgroups.cpp', + 'procman_gksu.cpp', + 'procman_pkexec.cpp', + 'sysinfo.cpp', + 'lsof.cpp', + 'selection.cpp', + 'settings-keys.cpp', + 'iconthemewrapper.cpp', + 'procman-app.cpp', + 'gsm_color_button.c', + msm_resource +] + +system_monitor_headers = [ + 'argv.h', + 'callbacks.h', + 'cgroups.h', + 'defaulttable.h', + 'disks.h', + 'gsm_color_button.h', + 'iconthemewrapper.h', + 'interface.h', + 'load-graph.h', + 'lsof.h', + 'memmaps.h', + 'openfiles.h', + 'prettytable.h', + 'procactions.h', + 'procdialogs.h', + 'procman-app.h', + 'procman_gksu.h', + 'procman.h', + 'procman_pkexec.h', + 'procproperties.h', + 'proctable.h', + 'selection.h', + 'selinux.h', + 'settings-keys.h', + 'smooth_refresh.h', + 'sysinfo.h', + 'util.h', +] + +msm_schemas = configure_file( + input : 'org.mate.system-monitor.gschema.xml.in', + output: 'org.mate.system-monitor.gschema.xml', + configuration: dataconf, + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas'), +) + +msm_gsettings = gnome.mkenums('org.mate.mate-system-monitor.enums.xml', + sources: system_monitor_headers, + comments: '', + fhead: '', + vhead: ' <@type@ id=\'org.mate.mate-system-monitor.@EnumName@\'>', + vprod: ' ', + vtail: ' ', + ftail: '', + install_header: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas'), +) + +executable(meson.project_name(), + system_monitor_sources, + include_directories: rootInclude, + dependencies: [ + gmodule, + gtkmm, + libgtop, + libsystemd, + libwnck, + libxml, + librsvg, + ], + install: true, + install_dir : get_option('bindir') +) diff --git a/src/msm.gresource.xml b/src/msm.gresource.xml index f9e9c0f..c77245e 100644 --- a/src/msm.gresource.xml +++ b/src/msm.gresource.xml @@ -1,6 +1,6 @@ - + preferences.ui diff --git a/src/procdialogs.cpp b/src/procdialogs.cpp index c7b3e01..7e23301 100644 --- a/src/procdialogs.cpp +++ b/src/procdialogs.cpp @@ -465,7 +465,7 @@ procdialog_create_preferences_dialog (ProcData *procdata) if (prefs_dialog) return; - builder = gtk_builder_new_from_resource("/org/mate/system-monitor/preferences.ui"); + builder = gtk_builder_new_from_resource("/org/mate/mate-system-monitor/preferences.ui"); prefs_dialog = GET_WIDGET("preferences_dialog"); notebook = GET_WIDGET("notebook"); diff --git a/tools/meson.build b/tools/meson.build new file mode 100644 index 0000000..e73131c --- /dev/null +++ b/tools/meson.build @@ -0,0 +1,16 @@ +commands = [ + 'renice', + 'kill', +] + +foreach command : commands + executable('gsm-' + command, + 'msm_execute_helper.c', + dependencies: [ + glib, + ], + c_args: '-DCOMMAND="@0@"'.format(command), + install: true, + install_dir: join_paths(get_option('libexecdir'), meson.project_name()) + ) +endforeach -- cgit v1.2.1