aboutsummaryrefslogtreecommitdiffstats
path: root/mk/shell.mk
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--mk/shell.mk233
1 files changed, 233 insertions, 0 deletions
diff --git a/mk/shell.mk b/mk/shell.mk
new file mode 100644
index 0000000..2747152
--- /dev/null
+++ b/mk/shell.mk
@@ -0,0 +1,233 @@
+# Copyright (C) 2015, 2016 Mattias Andrée <maandree@member.fsf.org>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+
+
+#=== These rules are used for shell tab-completion using auto-auto-complete. ===#
+
+
+# Enables the rules:
+# shell Build tab-completion for all supported shells
+# bash Build GNU Bash tab-completion
+# fish Build fish tab-completion
+# zhs Build Z shell tab-completion
+# install-shell Install tab-completion for all supported shells
+# install-bash Install GNU Bash tab-completion
+# install-fish Install fish tab-completion
+# install-zsh Install Z shell tab-completion
+#
+# This file is ignored unless
+# _AUTO_COMPLETE is defined.
+#
+# _AUTO_COMPLETE shall list all commands that
+# have an auto-auto-complete. These should be
+# named src/$(COMMAND).auto-completion, where
+# $(COMMAND) is the command with the script.
+# If all auto-auto-complete scripts translations
+# named src/$(COMMAND).$(LOCALE).auto-completion,
+# SHELL_LOCALE can be set to install exactly
+# on translation in place of the non-translated
+# versions.
+#
+# Although not used by this file, you should
+# define _SHELL_LOCALES that lists all available
+# translations. (it is used by dist.mk.)
+#
+# You should also define _WITH_SHELL if you
+# want shell tab-completion unless the user
+# specifies otherwise. If you want it for
+# just some shells, define _WITH_$(SHELL)
+# for those shells instead of _WITH_SHELL.
+
+
+ifdef _AUTO_COMPLETE
+
+
+# HELP VARIABLES:
+
+# Include all that were not explicitly excluded?
+ifdef _WITH_SHELL
+_WITH_BASH = 1
+_WITH_FISH = 1
+_WITH_ZSH = 1
+endif
+
+# Include for GNU Bash?
+ifdef WITH_BASH
+__WITH_BASH = 1
+endif
+ifndef WITH_BASH
+ifndef WITHOUT_BASH
+ifdef _WITH_BASH
+__WITH_BASH = 1
+endif
+endif
+endif
+
+# Include for fish?
+ifdef WITH_FISH
+__WITH_FISH = 1
+endif
+ifndef WITH_FISH
+ifndef WITHOUT_FISH
+ifdef _WITH_FISH
+__WITH_FISH = 1
+endif
+endif
+endif
+
+# Include for Z Shell?
+ifdef WITH_ZSH
+__WITH_ZSH = 1
+endif
+ifndef WITH_ZSH
+ifndef WITHOUT_ZSH
+ifdef _WITH_ZSH
+__WITH_ZSH = 1
+endif
+endif
+endif
+
+# WHEN TO BUILD, INSTALL, AND UNINSTALL:
+
+all: shell
+everything: shell
+install: install-shell
+install-doc: install-info install-dvi install-pdf install-ps install-html
+uninstall: uninstall-shell
+
+shell:
+install-shell:
+
+ifdef __WITH_BASH
+shell: bash
+install-shell: install-bash
+endif
+ifdef __WITH_FISH
+shell: fish
+install-shell: install-fish
+endif
+ifdef __WITH_ZSH
+shell: zsh
+install-shell: install-zsh
+endif
+
+
+# HELP VARIABLES:
+
+# Affixes on the source files.
+ifdef SHELL_LOCALE
+__AAC_L = .$(SHELL_LOCALE)
+endif
+__AAC = $(__AAC_L).auto-completion
+
+# Customised command name.
+ifdef COMMAND
+ifeq ($(shell $(PRINTF) '%s\n' $(COMMAND) | $(WC) -l),1)
+ifeq ($(shell $(PRINTF) '%s\n' $(_AUTO_COMPLETE) | $(WC) -l),1)
+__SHELL_COMMAND = "command=$(COMMAND)"
+endif
+endif
+endif
+
+
+# BUILD RULES:
+
+# Built tab-completion scripts for GNU Bash.
+.PHONY: bash
+bash: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).bash-completion)
+
+# Built tab-completion scripts for fish.
+.PHONY: fish
+fish: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).fish-completion)
+
+# Built tab-completion scripts for Z shell.
+.PHONY: zsh
+zsh: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).zsh-completion)
+
+# Built a tab-completion script for GNU Bash.
+bin/%.bash-completion: $(v)src/%$(__AAC)
+ @$(PRINTF_INFO) '\e[00;01;31mAUTO-AUTO-COMPLETE\e[34m %s\e[00m$A\n' "$@"
+ @$(MKDIR) -p bin
+ $(Q)$(AUTO_AUTO_COMPLETE) bash -o $@ -s $< $(__SHELL_COMMAND) #$Z
+ @$(ECHO_EMPTY)
+
+# Built a tab-completion script for fish.
+bin/%.fish-completion: $(v)src/%$(__AAC)
+ @$(PRINTF_INFO) '\e[00;01;31mAUTO-AUTO-COMPLETE\e[34m %s\e[00m$A\n' "$@"
+ @$(MKDIR) -p bin
+ $(Q)$(AUTO_AUTO_COMPLETE) fish -o $@ -s $< $(__SHELL_COMMAND) #$Z
+ @$(ECHO_EMPTY)
+
+# Built a tab-completion script for Z shell.
+bin/%.zsh-completion: $(v)src/%$(__AAC)
+ @$(PRINTF_INFO) '\e[00;01;31mAUTO-AUTO-COMPLETE\e[34m %s\e[00m$A\n' "$@"
+ @$(MKDIR) -p bin
+ $(Q)$(AUTO_AUTO_COMPLETE) zsh -o $@ -s $< $(__SHELL_COMMAND) #$Z
+ @$(ECHO_EMPTY)
+
+
+# INSTALL RULES:
+
+# Install tab-completion scripts for GNU Bash.
+.PHONY: install-bash
+install-bash: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).bash-completion)
+ @$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@"
+ $(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DATADIR)/bash-completion/completions"
+ifndef __SHELL_COMMAND
+ $(Q)$(foreach F,$(_AUTO_COMPLETE),$(INSTALL_DATA) bin/$(F).bash-completion -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(F)" &&) $(TRUE)
+endif
+ifdef __SHELL_COMMAND
+ $(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(COMMAND)"
+endif
+ @$(ECHO_EMPTY)
+
+# Install tab-completion scripts for fish.
+.PHONY: install-fish
+install-fish: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).fish-completion)
+ @$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@"
+ $(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DATADIR)/fish/completions"
+ifndef __SHELL_COMMAND
+ $(Q)$(foreach F,$(_AUTO_COMPLETE),$(INSTALL_DATA) bin/$(F).fish-completion -- "$(DESTDIR)$(DATADIR)/fish/completions/$(F).fish" &&) $(TRUE)
+endif
+ifdef __SHELL_COMMAND
+ $(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DATADIR)/fish/completions/$(COMMAND).fish"
+endif
+ @$(ECHO_EMPTY)
+
+# Install tab-completion scripts for Z shell.
+.PHONY: install-zsh
+install-zsh: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).zsh-completion)
+ @$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@"
+ $(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DATADIR)/zsh/site-functions"
+ifndef __SHELL_COMMAND
+ $(Q)$(foreach F,$(_AUTO_COMPLETE),$(INSTALL_DATA) bin/$(F).zsh-completion -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(F)" &&) $(TRUE)
+endif
+ifdef __SHELL_COMMAND
+ $(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(COMMAND)"
+endif
+ @$(ECHO_EMPTY)
+
+
+# UNINSTALL RULES:
+
+# Uninstall tab-completion.
+.PHONY: uninstall-shell
+uninstall-shell:
+ifndef __SHELL_COMMAND
+ -$(Q)$(RM) -- $(foreach F,$(_AUTO_COMPLETE),"$(DESTDIR)$(DATADIR)/bash-completion/completions/$(F)")
+ -$(Q)$(RM) -- $(foreach F,$(_AUTO_COMPLETE),"$(DESTDIR)$(DATADIR)/fish/completions/$(F).fish")
+ -$(Q)$(RM) -- $(foreach F,$(_AUTO_COMPLETE),"$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(F)")
+endif
+ifdef __SHELL_COMMAND
+ -$(Q)$(RM) -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(COMMAND)"
+ -$(Q)$(RM) -- "$(DESTDIR)$(DATADIR)/fish/completions/$(COMMAND).fish"
+ -$(Q)$(RM) -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(COMMAND)"
+endif
+
+
+endif
+