From bae1fe254a0f730a82cd14dfd3deab06c753a8c7 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 4 Apr 2017 13:42:50 -0400 Subject: [PATCH] completion: Place the completion helper in libexec This patch reorganize the bash completion scripts in order to install the binary helper (gst-completion-helper) in libexec path rather then share folder. Most Linux hierarchy compliance requires that no binary executable are placed in share. We also cleanup the unused .pc entries and remove copy pasted parts of the script. Note that other project including the common helper, should now use $_GST_HELPER to read the binary executable gst-completion-helper. This helper is not longer version, as it is placed in a versionned subfolder (libexec/gstreamer.10) just like the other helpers (scanner and ptp). --- configure.ac | 20 +++++++++++---- data/Makefile.am | 5 +++- .../completions/gst-inspect-1.0 | 13 +++++----- .../completions/gst-launch-1.0 | 14 +++++----- data/bash-completion/helpers/.gitignore | 1 + .../gst => data/bash-completion/helpers/gst.in | 24 ++++++++++++++++- libs/gst/helpers/.gitignore | 2 +- libs/gst/helpers/Makefile.am | 30 +++++----------------- pkgconfig/gstreamer-uninstalled.pc.in | 2 +- pkgconfig/gstreamer.pc.in | 2 -- 10 files changed, 64 insertions(+), 49 deletions(-) rename data/{ => bash-completion}/completions/gst-inspect-1.0 (86%) rename data/{ => bash-completion}/completions/gst-launch-1.0 (89%) create mode 100644 data/bash-completion/helpers/.gitignore rename libs/gst/helpers/gst => data/bash-completion/helpers/gst.in (69%) diff --git a/configure.ac b/configure.ac index 34a7979..47401f9 100644 --- a/configure.ac +++ b/configure.ac @@ -153,11 +153,14 @@ then fi PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], - [BASH_COMPLETION_DIR="`eval pkg-config $extra_args --variable=completionsdir bash-completion`"], - [BASH_COMPLETION_DIR="$datadir/bash-completion/completions"]) - PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], - [BASH_HELPERS_DIR="`eval pkg-config $extra_args --variable=helpersdir bash-completion`"], - [BASH_HELPERS_DIR="$datadir/bash-completion/helpers"]) + [ + BASH_COMPLETION_DIR="`eval pkg-config $extra_args --variable=completionsdir bash-completion`" + BASH_HELPERS_DIR="`eval pkg-config $extra_args --variable=helpersdir bash-completion`" + ], + [ + BASH_COMPLETION_DIR="$datadir/bash-completion/completions" + BASH_HELPERS_DIR="$datadir/bash-completion/helpers" + ]) else BASH_COMPLETION_DIR="$with_bash_completion_dir/completions" BASH_HELPERS_DIR="$with_bash_completion_dir/helpers" @@ -1013,6 +1016,12 @@ AC_DEFINE_UNQUOTED(GST_PLUGIN_SCANNER_INSTALLED, "$GST_PLUGIN_SCANNER_INSTALLED", [location of the installed gst-plugin-scanner]) AC_SUBST(GST_PLUGIN_SCANNER_INSTALLED) +dnl completion helper locations +AS_AC_EXPAND(GST_COMPLETION_HELPER_INSTALLED,${libexecdir}/gstreamer-$GST_API_VERSION/gst-completion-helper) +AC_DEFINE_UNQUOTED(GST_COMPLETION_HELPER_INSTALLED, + "$GST_COMPLETION_HELPER_INSTALLED", [location of the installed gst-completion-helper]) +AC_SUBST(GST_COMPLETION_HELPER_INSTALLED) + dnl ptp helper locations AS_AC_EXPAND(GST_PTP_HELPER_INSTALLED,${libexecdir}/gstreamer-$GST_API_VERSION/gst-ptp-helper) AC_DEFINE_UNQUOTED(GST_PTP_HELPER_INSTALLED, @@ -1026,6 +1035,7 @@ AG_GST_CHECK_CHECKS AC_CONFIG_FILES( Makefile data/Makefile +data/bash-completion/helpers/gst gst/Makefile gst/gstconfig.h gst/gstversion.h diff --git a/data/Makefile.am b/data/Makefile.am index 7098492..16214fc 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,4 +1,7 @@ if ENABLE_BASH_COMPLETION +bashhelpersdir = $(BASH_HELPERS_DIR) +dist_bashhelpers_DATA = bash-completion/helpers/gst bashcompletiondir = $(BASH_COMPLETION_DIR) -dist_bashcompletion_DATA = completions/gst-inspect-1.0 completions/gst-launch-1.0 +dist_bashcompletion_DATA = bash-completion/completions/gst-inspect-1.0 \ + bash-completion/completions/gst-launch-1.0 endif diff --git a/data/completions/gst-inspect-1.0 b/data/bash-completion/completions/gst-inspect-1.0 similarity index 86% rename from data/completions/gst-inspect-1.0 rename to data/bash-completion/completions/gst-inspect-1.0 index 980e140..667e503 100644 --- a/data/completions/gst-inspect-1.0 +++ b/data/bash-completion/completions/gst-inspect-1.0 @@ -21,7 +21,7 @@ _GST_HELPERDIR="${BASH_SOURCE[0]%/*}/../helpers" if [[ ! -d "$_GST_HELPERDIR" ]]; then - _GST_HELPERDIR="$(pkg-config --variable=helpersdir gstreamer-1.0)" + _GST_HELPERDIR="$(pkg-config --variable=bashhelpersdir gstreamer-1.0)" else _GST_HELPERDIR=`cd "$_GST_HELPERDIR"; pwd` fi @@ -29,11 +29,9 @@ fi # Common definitions . "$_GST_HELPERDIR"/gst -_GST_HELPER="$_GST_HELPERDIR/gst-completion-helper-1.0" - _gst_inspect_all_arguments () { - COMPREPLY=( $(compgen -W "$(gst-inspect-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) + _gst_all_arguments gst-inspect-1.0 } _gst_inspect_all_elements () @@ -41,7 +39,7 @@ _gst_inspect_all_elements () COMPREPLY=( $(compgen -W "$($_GST_HELPER -l)" -- $cur) ) } -_gstinspect___atleast_version () { _gst_mandatory_argument; } +_gstinspect___atleast_version () { _gst_mandatory_argument gst-inspect-1.0; } _gstinspect___exists () { @@ -56,7 +54,7 @@ __inspect_main () do local var var="${COMP_WORDS[i]}" - if [[ "$var" == "--"* ]] + if [[ "$var" == "-"* ]] then command="$var" fi @@ -73,7 +71,8 @@ __inspect_main () function_exists=$? - if [[ "$cur" == "--"* ]]; then + if [[ "$cur" == "-"* ]] + then _gst_inspect_all_arguments elif [ $function_exists -eq 0 ] then diff --git a/data/completions/gst-launch-1.0 b/data/bash-completion/completions/gst-launch-1.0 similarity index 89% rename from data/completions/gst-launch-1.0 rename to data/bash-completion/completions/gst-launch-1.0 index 941cf84..80ad34c 100644 --- a/data/completions/gst-launch-1.0 +++ b/data/bash-completion/completions/gst-launch-1.0 @@ -21,7 +21,7 @@ _GST_HELPERDIR="${BASH_SOURCE[0]%/*}/../helpers" if [[ ! -d "$_GST_HELPERDIR" ]]; then - _GST_HELPERDIR="$(pkg-config --variable=helpersdir gstreamer-1.0)" + _GST_HELPERDIR="$(pkg-config --variable=bashhelpersdir gstreamer-1.0)" else _GST_HELPERDIR=`cd "$_GST_HELPERDIR"; pwd` fi @@ -29,11 +29,9 @@ fi # Common definitions . "$_GST_HELPERDIR"/gst -_GST_HELPER="$_GST_HELPERDIR/gst-completion-helper-1.0" - _gst_launch_all_arguments () { - COMPREPLY=( $(compgen -W "$(gst-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) + _gst_all_arguments gst-launch-1.0 } _gst_complete_compatible_elements () @@ -51,7 +49,7 @@ _gst_complete_element_properties () COMPREPLY=( $(compgen -W "$($_GST_HELPER --element-properties $previous_element)" -- $cur) ) } -_gstlaunch___exclude_ () { _gst_mandatory_argument; } +_gstlaunch___exclude_ () { _gst_mandatory_argument gst-launch-1.0; } _gst_launch_main () { @@ -61,7 +59,7 @@ _gst_launch_main () do local var var="${COMP_WORDS[i]}" - if [[ "$var" == "--"* ]] + if [[ "$var" == "-"* ]] then command="$var" fi @@ -74,7 +72,7 @@ _gst_launch_main () local var var="${COMP_WORDS[i]}" - if [[ "$var" == "--"* ]] + if [[ "$var" == "-"* ]] then i=$(($i+1)) continue @@ -105,7 +103,7 @@ _gst_launch_main () function_exists=$? - if [[ "$cur" == "--"* ]]; then + if [[ "$cur" == "-"* ]]; then _gst_launch_all_arguments elif [ $function_exists -eq 0 ] then diff --git a/data/bash-completion/helpers/.gitignore b/data/bash-completion/helpers/.gitignore new file mode 100644 index 0000000..446b11b --- /dev/null +++ b/data/bash-completion/helpers/.gitignore @@ -0,0 +1 @@ +gst diff --git a/libs/gst/helpers/gst b/data/bash-completion/helpers/gst.in similarity index 69% rename from libs/gst/helpers/gst rename to data/bash-completion/helpers/gst.in index bd34abf..0acca06 100644 --- a/libs/gst/helpers/gst +++ b/data/bash-completion/helpers/gst.in @@ -18,17 +18,39 @@ # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, # Boston, MA 02110-1301, USA. +_GST_HELPER="@GST_COMPLETION_HELPER_INSTALLED@" +if [[ ! -x "$_GST_HELPER" ]] +then + helper="$(pkg-config --variable=helpersdir gstreamer-@GST_API_VERSION@)/gst-completion-helper" + + if [ -x "$helper" ] + then + _GST_HELPER=$helper + fi +fi + ___gst_debug_level () { _gst_mandatory_argument; } ___gst_debug () { _gst_mandatory_argument; } ___gst_debug_color_mode () { _gst_mandatory_argument; } ___gst_plugin_path () { _gst_mandatory_argument; } ___gst_plugin_load () { _gst_mandatory_argument; } +_gst_all_arguments () +{ + COMPREPLY=( $(compgen -W "$($1 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*\|-[[:alpha:]],' | cut -d'=' -f1 | cut -d',' -f1)" -- $cur) ) +} + _gst_mandatory_argument () { + __app=$1 + if [[ -z $__app ]] + then + __app=gst-launch-1.0 + fi + if [[ "$prev" != "$command" ]] then - COMPREPLY=( $(compgen -W "$(gst-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) + _gst_all_arguments $__app else COMPREPLY=("$cur") fi diff --git a/libs/gst/helpers/.gitignore b/libs/gst/helpers/.gitignore index b6c1ed6..2a86569 100644 --- a/libs/gst/helpers/.gitignore +++ b/libs/gst/helpers/.gitignore @@ -1,4 +1,4 @@ gst-plugin-scanner -gst-completion-helper-?.?* +gst-completion-helper gst-ptp-helper *.o diff --git a/libs/gst/helpers/Makefile.am b/libs/gst/helpers/Makefile.am index 0067779..66b19ca 100644 --- a/libs/gst/helpers/Makefile.am +++ b/libs/gst/helpers/Makefile.am @@ -1,14 +1,3 @@ -if ENABLE_BASH_COMPLETION -bin_PROGRAMS = gst-completion-helper-@GST_API_VERSION@ - -gst_completion_helper_@GST_API_VERSION@_SOURCES = gst-completion-helper.c -gst_completion_helper_@GST_API_VERSION@_CFLAGS = $(GST_OBJ_CFLAGS) -gst_completion_helper_@GST_API_VERSION@_LDADD = $(GST_OBJ_LIBS) - -bashhelpersdir = $(BASH_HELPERS_DIR) -dist_bashhelpers_DATA = gst -endif - helpers_PROGRAMS = gst-plugin-scanner helpersdir=$(libexecdir)/gstreamer-$(GST_API_VERSION) @@ -16,6 +5,13 @@ gst_plugin_scanner_SOURCES = gst-plugin-scanner.c gst_plugin_scanner_CFLAGS = $(GST_OBJ_CFLAGS) gst_plugin_scanner_LDADD = $(GST_OBJ_LIBS) +if ENABLE_BASH_COMPLETION +helpers_PROGRAMS += gst-completion-helper +gst_completion_helper_SOURCES = gst-completion-helper.c +gst_completion_helper_CFLAGS = $(GST_OBJ_CFLAGS) +gst_completion_helper_LDADD = $(GST_OBJ_LIBS) +endif + if HAVE_PTP helpers_PROGRAMS += gst-ptp-helper gst_ptp_helper_SOURCES = gst-ptp-helper.c @@ -23,18 +19,6 @@ gst_ptp_helper_CFLAGS = $(GST_OBJ_CFLAGS) $(GIO_CFLAGS) gst_ptp_helper_LDADD = $(GST_OBJ_LIBS) $(GIO_LIBS) $(CAP_LIBS) endif -if ENABLE_BASH_COMPLETION -install-exec-hook: - $(MKDIR_P) $(DESTDIR)$(BASH_HELPERS_DIR) && \ - cd $(DESTDIR)$(bindir) && \ - $(INSTALL) `echo "gst-completion-helper-" | sed '$(transform)'`@GST_API_VERSION@$(EXEEXT) \ - $(DESTDIR)$(BASH_HELPERS_DIR)/gst-completion-helper-@GST_API_VERSION@$(EXEEXT) && \ - rm `echo "gst-completion-helper-" | sed '$(transform)'`@GST_API_VERSION@$(EXEEXT) - -uninstall-hook: - rm -f $(DESTDIR)$(BASH_HELPERS_DIR)/gst-completion-helper-@GST_API_VERSION@$(EXEEXT) -endif - install-data-hook: if HAVE_PTP if HAVE_PTP_HELPER_SETUID diff --git a/pkgconfig/gstreamer-uninstalled.pc.in b/pkgconfig/gstreamer-uninstalled.pc.in index 8f69dd5..b8dcdf8 100644 --- a/pkgconfig/gstreamer-uninstalled.pc.in +++ b/pkgconfig/gstreamer-uninstalled.pc.in @@ -7,7 +7,7 @@ includedir=@abs_top_builddir@ toolsdir=@abs_top_builddir@/tools pluginsdir=@abs_top_builddir@ girdir=@abs_top_builddir@/gst -completionsdir=@abs_top_builddir@/data/completions +bashhelpersdir=@abs_top_builddir@/data/bash-completion/helpers helpersdir=@abs_top_builddir@/libs/gst/helpers typelibdir=@abs_top_builddir@/gst diff --git a/pkgconfig/gstreamer.pc.in b/pkgconfig/gstreamer.pc.in index 78b8aa9..b949d6c 100644 --- a/pkgconfig/gstreamer.pc.in +++ b/pkgconfig/gstreamer.pc.in @@ -7,8 +7,6 @@ pluginsdir=@libdir@/gstreamer-@GST_API_VERSION@ datarootdir=${prefix}/share datadir=${datarootdir} girdir=${datadir}/gir-1.0 -completionsdir=@BASH_COMPLETION_DIR@ -helpersdir=@BASH_HELPERS_DIR@ typelibdir=${libdir}/girepository-1.0 Name: GStreamer -- 2.7.4