mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Add functionality for generating autocompletion scripts, allowing for tab completion of tool options for bash and zsh. This functionality relies on reading the available options from the util_opt struct at runtime. The script generation happens on the build system. Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Reviewed-by: Steffen Eiden <seiden@linux.ibm.com> Signed-off-by: Szabina Korbai <szkorbai@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
82 lines
2.2 KiB
Makefile
82 lines
2.2 KiB
Makefile
# SPDX-License-Identifier: MIT
|
|
# Copyright IBM Corp. 2025
|
|
|
|
|
|
# This file defines the build process for shell autocompletion binaries
|
|
#
|
|
# How to incorporate it into tool Makefiles:
|
|
#
|
|
# 0. The file with the autocompletion script generation code should be named
|
|
# 'autocompletion_generator_host.c'
|
|
#
|
|
# 1. Define the 'bash-completions' and 'zsh-completions' variables: both must be a list
|
|
# of the names of all the shell completion scripts that belong to the tools the Makefile
|
|
# is responsible for building.
|
|
#
|
|
# (The name of a zsh completion script is the same as the name of the tool,
|
|
# prefixed by an underscore)
|
|
#
|
|
# (The name of a bash completion script is the same as the name of the tool,
|
|
# suffixed by '.bash')
|
|
#
|
|
# 2. include this file
|
|
#
|
|
# +1: Add the autocompletion scripts to the .gitignore file
|
|
#
|
|
# (See cpumf or dasdfmt as example)
|
|
|
|
|
|
autocomplete-bin := autocompletion_generator_host
|
|
|
|
autocomp-object := $(rootdir)/libutil/util_autocomp_host.o
|
|
|
|
$(autocomp-object): $(rootdir)/libutil
|
|
$(MAKE) -C $(rootdir)/libutil/ $(notdir $@)
|
|
|
|
$(autocomplete-bin).o: $(autocomplete-bin).c
|
|
$(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -I $(rootdir)/include -c $< -o $@
|
|
|
|
$(autocomplete-bin): $(autocomplete-bin).o $(autocomp-object)
|
|
$(LINK_FOR_BUILD) $^ -o $@
|
|
|
|
$(bash-completions) $(zsh-completions) &: $(autocomplete-bin)
|
|
./$(autocomplete-bin)
|
|
|
|
install-shell-completions: $(bash-completions) $(zsh-completions)
|
|
$(INSTALL) -d -m 755 $(DESTDIR)$(ZSHCOMPLETIONDIR)
|
|
$(INSTALL) -d -m 755 $(DESTDIR)$(BASHCOMPLETIONDIR)
|
|
for completion in $(bash-completions); do \
|
|
$(INSTALL) -m 644 $$completion $(DESTDIR)$(BASHCOMPLETIONDIR); \
|
|
done
|
|
for completion in $(zsh-completions); do \
|
|
$(INSTALL) -m 644 $$completion $(DESTDIR)$(ZSHCOMPLETIONDIR); \
|
|
done
|
|
|
|
all: $(zsh-completions) $(bash-completions)
|
|
|
|
install: install-shell-completions
|
|
|
|
.PHONY: install-shell-completions $(rootdir)/libutil
|
|
|
|
clean-autocomplete-bin:
|
|
$(RM) -- $(autocomplete-bin)
|
|
|
|
clean: clean-autocomplete-bin
|
|
|
|
ifdef bash-completions
|
|
clean-bash-completions:
|
|
$(RM) -- $(bash-completions)
|
|
|
|
clean: clean-bash-completions
|
|
endif
|
|
|
|
|
|
ifdef zsh-completions
|
|
clean-zsh-completions:
|
|
$(RM) -- $(zsh-completions)
|
|
|
|
clean: clean-zsh-completions
|
|
endif
|
|
|
|
.PHONY: clean-autocomplete-bin clean-bash-completions clean-zsh-completions
|