[PATCH] meson: install shell completion scripts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



While Meson has support for _building_ our completion scripts, it does
not yet know to also _install_ them. This omission is intentional as it
matches the status quo of our Makefile, which doesn't know to install
these scripts, either. In fact, our Makefile does not know about these
scripts at all: the "build" step that Meson performs is basically just
to copy over the files into the build directory, which is required so
that our tests know to pick them up for an out-of-tree build.

The status quo is somewhat confusing for our users though, as the build
steps need to be enabled manually by passing `-Dcontrib=completion` to
Meson. So the user explicitly asks for completion scripts, but all they
get is that we copy them into the build directory and execute tests.

Teach Meson to install completions for Bash and Zsh into the prefix. For
now, we try to do the "right thing" and install the scripts into the
installation prefix at their canonical paths. These paths should be
standardized enough these days so that this works alright for most
distributions. If we ever discover that these paths don't work well we
can still introduce build options at a later point in time.

Signed-off-by: Patrick Steinhardt <ps@xxxxxx>
---
Hi,

this patch is a result from the discussion at [1]. Thanks!

Patrick

[1]: <Z-uLqQd7QHZq-tB7@xxxxxxxxx>
---
 contrib/completion/meson.build | 38 ++++++++++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 6 deletions(-)

diff --git a/contrib/completion/meson.build b/contrib/completion/meson.build
index 3a9ddab5940..019c1457488 100644
--- a/contrib/completion/meson.build
+++ b/contrib/completion/meson.build
@@ -1,16 +1,42 @@
-foreach script : [
-  'git-completion.bash',
-  'git-completion.tcsh',
-  'git-completion.zsh',
-  'git-prompt.sh'
-]
+foreach script, config : {
+  'git-completion.bash': {
+    'filename': 'git',
+    'install_dir': get_option('datadir') / 'bash-completion/completions',
+  },
+  'git-completion.tcsh': {},
+  'git-completion.zsh': {
+    'filename': '_git',
+    'install_dir': get_option('datadir') / 'zsh/site-functions',
+  },
+  'git-prompt.sh': {},
+}
+  # We have to discern between the test dependency and the installed file. Our
+  # tests assume the completion scripts to have the same name as the in-tree
+  # files, but the installed filenames need to match the executable's basename.
   if meson.version().version_compare('>=1.3.0')
     test_dependencies += fs.copyfile(script)
+
+    if config.has_key('install_dir')
+      fs.copyfile(script, config.get('filename'),
+        install: true,
+        install_dir: config.get('install_dir'),
+      )
+    endif
   else
     configure_file(
       input: script,
       output: script,
       copy: true,
     )
+
+    if config.has_key('install_dir')
+      configure_file(
+        input: script,
+        output: config.get('filename'),
+        copy: true,
+        install: true,
+        install_dir: config.get('install_dir'),
+      )
+    endif
   endif
 endforeach

---
base-commit: 5b97a56fa0e7d580dc8865b73107407c9b3f0eff
change-id: 20250407-b4-pks-meson-install-completions-e5552f1ae2bf





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux