diff --git a/.gitignore b/.gitignore
index 5becaf99..74d89dd3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,6 +55,22 @@ stamp-h*
*.tmp
ChangeLog
+doc/tools/cardos-tool
+doc/tools/cryptoflex-tool
+doc/tools/eidenv
+doc/tools/iasecc-tool
+doc/tools/netkey-tool
+doc/tools/openpgp-tool
+doc/tools/opensc-explorer
+doc/tools/opensc-tool
+doc/tools/piv-tool
+doc/tools/pkcs11-tool
+doc/tools/pkcs15-crypt
+doc/tools/pkcs15-init
+doc/tools/pkcs15-tool
+doc/tools/sc-hsm-tool
+doc/tools/westcos-tool
+
etc/opensc.conf.win
etc/opensc.conf
src/common/compat_getopt_main
diff --git a/doc/tools/Makefile.am b/doc/tools/Makefile.am
index fb514fb3..aa0862ee 100644
--- a/doc/tools/Makefile.am
+++ b/doc/tools/Makefile.am
@@ -10,6 +10,9 @@ man1_MANS = $(patsubst $(srcdir)/%.xml, %, $(wildcard $(srcdir)/*.1.xml))
man5_MANS = $(patsubst $(srcdir)/%.xml, %, $(wildcard $(srcdir)/*.5.xml))
endif
+completion_DATA = $(patsubst $(srcdir)/%.1.xml, %, $(wildcard $(srcdir)/*.1.xml))
+completiondir = $(sysconfdir)/bash_completion.d
+
tools.html: $(srcdir)/tools.xml $(wildcard $(srcdir)/*.1.xml) $(wildcard $(srcdir)/*.5.xml)
$(XSLTPROC) --nonet --path "$(srcdir)/..:$(xslstylesheetsdir)/html" --xinclude -o $@ html.xsl $<
@@ -21,5 +24,21 @@ tools.html: $(srcdir)/tools.xml $(wildcard $(srcdir)/*.1.xml) $(wildcard $(srcdi
sed -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' < $< \
| $(XSLTPROC) --nonet --path "$(srcdir)/..:$(xslstylesheetsdir)/manpages" --xinclude -o $@ man.xsl $<
+%: $(srcdir)/%.1.xml
+ echo $< $@
+ cat completion-template \
+ | sed "s,ALLOPTS,\
+ $(shell sed -n 's,\s\s\s*.*,\1,pg' $< \
+ | sort -u | grep -- '^\-' | tr '\n' ' ')," \
+ | sed "s,OPTSWITHARGS,\
+ $(shell sed -n 's,\s\s\s*.*.*,\1,pg' $< \
+ | sort -u | grep -- '^\-' | tr '\n' '|' | sed 's,|$$,,')," \
+ | sed "s,FILEOPTS,\
+ $(shell sed -n 's,\s\s\s*.*.*filename.*,\1,pg' $< \
+ | sort -u | grep -- '^\-' | tr '\n' '|')," \
+ | sed "s,FUNCTION_NAME,$(shell echo $@ | sed s,-,_,g)," \
+ | sed "s,PROGRAM_NAME,$@," \
+ > $@
+
clean-local:
- -rm -rf $(html_DATA) $(man1_MANS) $(man5_MANS)
+ -rm -rf $(html_DATA) $(man1_MANS) $(man5_MANS) $(completion_DATA)
diff --git a/doc/tools/completion-template b/doc/tools/completion-template
new file mode 100644
index 00000000..e0796b62
--- /dev/null
+++ b/doc/tools/completion-template
@@ -0,0 +1,45 @@
+# this was auto-generated by OpenSC/doc/tools/Makefile.am
+_FUNCTION_NAME()
+{
+ COMPREPLY=()
+ local cur prev split=false
+ _get_comp_words_by_ref cur prev
+
+ _split_longopt && split=true
+
+ opts="ALLOPTS"
+
+ if [ ${COMP_CWORD} -eq 1 ]; then
+ COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+ return 0
+ fi
+
+ case "${prev}" in
+ OPTSWITHARGS)
+ return 0
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+ return 0
+ ;;
+ esac
+
+ $split && return 0
+
+ if [[ "$cur" == -* ]]; then
+ _longopt $1
+ return
+ fi
+
+ _filedir
+}
+complete -F _FUNCTION_NAME PROGRAM_NAME
+
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 4
+# sh-indent-comment: t
+# indent-tabs-mode: nil
+# End:
+# ex: ts=4 sw=4 et filetype=sh