From 448d8549750c995fed8d88b4e57417fad03cb375 Mon Sep 17 00:00:00 2001 From: Robin Jarry Date: Fri, 24 Oct 2025 15:31:43 +0200 Subject: [PATCH] build: move file installation to meson Previously, systemd service files, bash completions, and configuration files were installed through package-specific scripts (debian/rules and rpm/grout.spec). This approach required maintaining duplicate installation logic across different packaging systems and made it harder to support other distributions or installation methods. By moving this logic to meson.build files, the installation becomes uniform across all platforms and packaging systems. The systemd service is now installed using the canonical pkg-config method to determine the correct system unit directory. Bash completions are installed to the standard datadir location. Configuration files are installed to sysconfdir. Package-specific install files (debian/grout.install) are updated to reference the new meson-installed paths, and manual install commands are removed from packaging scripts since meson handles them now. Signed-off-by: Robin Jarry Reviewed-by: Christophe Fontaine --- .github/workflows/package.yml | 2 +- cli/meson.build | 6 ++++++ debian/control | 1 + debian/grout.bash-completion | 2 -- debian/grout.install | 3 +++ debian/grout.service | 1 - debian/rules | 2 -- main/meson.build | 24 ++++++++++++++++++++++++ rpm/grout.spec | 5 ----- 9 files changed, 35 insertions(+), 11 deletions(-) delete mode 100644 debian/grout.bash-completion delete mode 120000 debian/grout.service diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index e1b8e69cc..1717c158d 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -31,7 +31,7 @@ jobs: libjson-c-dev libnuma-dev libprotobuf-c-dev libreadline-dev \ librtr-dev libsmartcols-dev libtool libyang-dev meson ninja-build \ patch pkg-config protobuf-c-compiler python3-dev python3-pyelftools \ - texinfo + systemd-dev texinfo - uses: actions/checkout@v4 with: fetch-depth: 0 # force fetch all history diff --git a/cli/meson.build b/cli/meson.build index af22f6373..32589bbe2 100644 --- a/cli/meson.build +++ b/cli/meson.build @@ -23,3 +23,9 @@ if not compiler.has_function( endif cli_inc += include_directories('.') + +install_data( + files('grcli.bash-completion'), + rename: ['grcli'], + install_dir: get_option('datadir') / 'bash-completion/completions', +) diff --git a/debian/control b/debian/control index 1aed0f8f4..a55f239f8 100644 --- a/debian/control +++ b/debian/control @@ -21,6 +21,7 @@ Build-Depends: patch, pkg-config, python3-pyelftools, + systemd-dev, Standards-Version: 4.7.0 Rules-Requires-Root: no Homepage: https://github.com/DPDK/grout diff --git a/debian/grout.bash-completion b/debian/grout.bash-completion deleted file mode 100644 index b92095326..000000000 --- a/debian/grout.bash-completion +++ /dev/null @@ -1,2 +0,0 @@ -main/grout.bash-completion grcli -cli/grcli.bash-completion grout diff --git a/debian/grout.install b/debian/grout.install index 033c8531a..a54dbb56f 100644 --- a/debian/grout.install +++ b/debian/grout.install @@ -2,5 +2,8 @@ /etc/grout.init /usr/bin/grcli /usr/bin/grout +/usr/lib/systemd/system/grout.service +/usr/share/bash-completion/completions/grcli +/usr/share/bash-completion/completions/grout /usr/share/man/man1/grcli.1 /usr/share/man/man8/grout.8 diff --git a/debian/grout.service b/debian/grout.service deleted file mode 120000 index 05f1f9e6e..000000000 --- a/debian/grout.service +++ /dev/null @@ -1 +0,0 @@ -../main/grout.service \ No newline at end of file diff --git a/debian/rules b/debian/rules index 3076767a8..51793cdff 100755 --- a/debian/rules +++ b/debian/rules @@ -22,8 +22,6 @@ override_dh_auto_configure: override_dh_auto_install: meson install -C $(build) --skip-subprojects --destdir=$(dest) - install -D -m 644 main/grout.default $(dest)/etc/default/grout - install -D -m 644 main/grout.init $(dest)/etc/grout.init install -D -m 0755 subprojects/dpdk/usertools/dpdk-telemetry-exporter.py \ $(dest)/usr/bin/grout-telemetry-exporter install -D -m 0644 -t $(dest)/usr/share/dpdk/telemetry-endpoints \ diff --git a/main/meson.build b/main/meson.build index f3a11b200..5f5eeff53 100644 --- a/main/meson.build +++ b/main/meson.build @@ -27,3 +27,27 @@ tests += [ ], }, ] + +systemd_dep = dependency('systemd', required: false) +if systemd_dep.found() + systemd_system_unit_dir = systemd_dep.get_variable( + pkgconfig: 'systemdsystemunitdir', + pkgconfig_define: ['prefix', get_option('prefix')] + ) + install_data( + files('grout.service'), + install_dir: systemd_system_unit_dir, + ) + install_data( + files('grout.default'), + rename: ['grout'], + install_dir: get_option('sysconfdir') / 'default', + ) + install_data('grout.init', install_dir: get_option('sysconfdir')) +endif + +install_data( + files('grout.bash-completion'), + rename: ['grout'], + install_dir: get_option('datadir') / 'bash-completion/completions', +) diff --git a/rpm/grout.spec b/rpm/grout.spec index 02c8645b0..4b75edbd6 100644 --- a/rpm/grout.spec +++ b/rpm/grout.spec @@ -81,11 +81,6 @@ FRR dplane plugin for grout %install %meson_install --skip-subprojects -install -D -m 0644 main/grout.default %{buildroot}%{_sysconfdir}/default/grout -install -D -m 0644 main/grout.init %{buildroot}%{_sysconfdir}/grout.init -install -D -m 0644 main/grout.service %{buildroot}%{_unitdir}/grout.service -install -D -m 0644 main/grout.bash-completion %{buildroot}%{_datadir}/bash-completion/completions/grout -install -D -m 0644 cli/grcli.bash-completion %{buildroot}%{_datadir}/bash-completion/completions/grcli install -D -m 0755 subprojects/dpdk/usertools/dpdk-telemetry-exporter.py %{buildroot}%{_bindir}/grout-telemetry-exporter install -D -m 0644 -t %{buildroot}%{_datadir}/dpdk/telemetry-endpoints subprojects/dpdk/usertools/telemetry-endpoints/*