pkgsrc-Changes-HG archive

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

[pkgsrc/trunk]: pkgsrc/devel/hs-optparse-applicative devel/hs-optparse-applic...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/2d46a77223a8
branches:  trunk
changeset: 374484:2d46a77223a8
user:      pho <pho%pkgsrc.org@localhost>
date:      Wed Feb 23 16:08:02 2022 +0000

description:
devel/hs-optparse-applicative: Add a mk fragment application.mk

optparse-applicative has a really nice feature that enables any tools
parsing command-line arguments with the library to automatically generate
bash, fish, and zsh completion scripts via hidden options, by hidden it
means they aren't shown in the "--help" message.

Packages that install executables using optparse-applicative can now
include this file to automatically generate and install such scripts.

diffstat:

 devel/hs-optparse-applicative/application.mk |  102 +++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diffs (106 lines):

diff -r 950bbfe064cb -r 2d46a77223a8 devel/hs-optparse-applicative/application.mk
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/hs-optparse-applicative/application.mk      Wed Feb 23 16:08:02 2022 +0000
@@ -0,0 +1,102 @@
+# $NetBSD: application.mk,v 1.1 2022/02/23 16:08:02 pho Exp $
+#
+# Generate shell completion scripts automatically.
+#
+# This mk fragment should be included in packages that install executables
+# which parses command-line arguments using optparse-applicative. If the
+# package installs a library too, and the library depends on
+# optparse-applicative, the package should include both "application.mk"
+# and "buildlink3.mk" so that pkgtools/createbuildlink works correctly.
+#
+# Package-settable variables:
+#
+# OPTPARSE_APPLICATIVE_EXECUTABLES
+#      A list of names of executables supporting automatic completor
+#      generation. These executables are assumed to be installed in
+#      ${PREFIX}/bin.
+#
+#      Default value: ${PKGBASE}
+#
+# Keywords: haskell optparse-applicative
+#
+
+OPTPARSE_APPLICATIVE_EXECUTABLES?=     ${PKGBASE}
+
+.include "../../devel/hs-optparse-applicative/buildlink3.mk"
+
+# Declarations for ../../mk/misc/show.mk
+_VARGROUPS+=                                   optparse-applicative
+_PKG_VARS.optparse-applicative=                        \
+       OPTPARSE_APPLICATIVE_EXECUTABLES
+_DEF_VARS.optparse-applicative=                        \
+       PRINT_PLIST_AWK                         \
+       GENERATE_PLIST                          \
+       OA.shell-types                          \
+       OA.generate-cmds
+_USE_VARS.optparse-applicative=                        \
+       DESTDIR                                 \
+       PKGBASE                                 \
+       PREFIX                                  \
+       WRKSRC
+_IGN_VARS.optparse-applicative=                        \
+       OA.script.bash                          \
+       OA.script.fish                          \
+       OA.script.zsh
+_LISTED_VARS.optparse-applicative=             \
+       PRINT_PLIST_AWK                         \
+       GENERATE_PLIST                          \
+       OA.generate-cmds
+_SORTED_VARS.optparse-applicative=             \
+       OPTPARSE_APPLICATIVE_EXECUTABLES        \
+       OA.shell-types
+
+# A list of shell types currently supported by optparse-applicative.
+OA.shell-types=        bash fish zsh
+
+# The paths to completion script for each shell. "@exec@" will be
+# substituted later.
+OA.script.bash=        share/bash-completion/completions/@exec@
+OA.script.fish=        share/fish/completions/@exec@.fish
+OA.script.zsh= share/zsh/site-functions/_@exec@
+
+# Completion scripts should be excluded from PLIST files because the exact
+# set of installed scripts can vary depending on the version of
+# optparse-applicative. Note that we can't loop on
+# ${OPTPARSE_APPLICATIVE_EXECUTABLES} with ".for" because ${PKGBASE} is not
+# yet defined.
+PRINT_PLIST_AWK+=                                      \
+       ${OPTPARSE_APPLICATIVE_EXECUTABLES:@.exec.@     \
+               ${OA.shell-types:@.shell.@              \
+                       /^${OA.script.${.shell.}:S/@exec@/${.exec.}/:S,/,\\/,g}$$/ \
+                               { next }                \
+               @}                                      \
+       @}
+
+# Automatically insert completion scripts to PLIST.
+GENERATE_PLIST+=       \
+       ${OPTPARSE_APPLICATIVE_EXECUTABLES:@.exec.@     \
+               ${OA.shell-types:@.shell.@              \
+                       ${ECHO} ${OA.script.${.shell.}:S/@exec@/${.exec.}/:Q}; \
+               @}                                      \
+       @}
+
+# The post-install hook to generate completion scripts. We need to run the
+# executables we just built in order to generate scripts. However, unlike
+# cabal-install, the plain Cabal doesn't provide a convenient way to do
+# it. So we have to resort to something fragile.
+OA.generate-cmds=      \
+       ${OPTPARSE_APPLICATIVE_EXECUTABLES:@.exec.@     \
+               ${STEP_MSG} "Generating shell completion scripts for ${.exec.}"; \
+               ${OA.shell-types:@.shell.@              \
+                       ${INSTALL_DATA_DIR} ${DESTDIR:Q}${PREFIX:Q}/${OA.script.${.shell.}:S/@exec@/${.exec.}/:H:Q}; \
+                       ${PKGSRC_SETENV} LD_LIBRARY_PATH=${WRKSRC:Q}/dist/build \
+                               ${WRKSRC:Q}/dist/build/${.exec.:Q}/${.exec.:Q} \
+                               --${.shell.:Q}-completion-script \
+                               ${PREFIX:Q}/bin/${.exec.:Q} \
+                               > ${DESTDIR:Q}${PREFIX:Q}/${OA.script.${.shell.}:S/@exec@/${.exec.}/:Q}; \
+               @}                                      \
+       @}
+.PHONY: generate-optparse-applicative-shell-completion-scripts
+post-install: generate-optparse-applicative-shell-completion-scripts
+generate-optparse-applicative-shell-completion-scripts:
+       ${RUN}${OA.generate-cmds}



Home | Main Index | Thread Index | Old Index