You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2021/02/04 07:53:54 UTC

[buildstream] 05/06: setup.py: Generate the bash completions scriptlet at install time.

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch tristan/bst2-separation
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 6f423b69e4b32e3b0443ff38c631df46ea60e7f8
Author: Tristan Van Berkom <tr...@codethink.co.uk>
AuthorDate: Tue Apr 9 15:50:25 2019 +0900

    setup.py: Generate the bash completions scriptlet at install time.
    
    The completions scriptlet needs to install the completions for
    the name of the program it installs, since BuildStream 2 can be
    installed as either `bst` or `bst2`, we need to generate this
    file with the appropriate name.
---
 buildstream2/data/bst | 21 ---------------------
 setup.py              | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/buildstream2/data/bst b/buildstream2/data/bst
deleted file mode 100644
index e38720f..0000000
--- a/buildstream2/data/bst
+++ /dev/null
@@ -1,21 +0,0 @@
-# BuildStream bash completion scriptlet.
-#
-# On systems which use the bash-completion module for
-# completion discovery with bash, this can be installed at:
-#
-#   pkg-config --variable=completionsdir bash-completion
-#
-# If BuildStream is not installed system wide, you can
-# simply source this script to enable completions or append
-# this script to your ~/.bash_completion file.
-#
-_bst_completion() {
-    local IFS=$'
-'
-    COMPREPLY=( $( env COMP_WORDS="${COMP_WORDS[*]}" \
-                   COMP_CWORD=$COMP_CWORD \
-                   _BST_COMPLETION=complete $1 ) )
-    return 0
-}
-
-complete -F _bst_completion -o nospace bst;
diff --git a/setup.py b/setup.py
index 7076e8b..f348c93 100755
--- a/setup.py
+++ b/setup.py
@@ -151,6 +151,51 @@ if not os.environ.get('BST_ARTIFACTS_ONLY', ''):
         '{} = buildstream2._frontend:cli'.format(bst_entry_point)
     ]
 
+
+#####################################################
+#       Generate the bash completion scriptlet      #
+#####################################################
+#
+# Generate the bash completion scriptlet as 'bst' or 'bst2'
+# depending on the selected entry point name.
+#
+COMPLETION_SCRIPTLET = """# BuildStream bash completion scriptlet.
+#
+# On systems which use the bash-completion module for
+# completion discovery with bash, this can be installed at:
+#
+#   pkg-config --variable=completionsdir bash-completion
+#
+# If BuildStream is not installed system wide, you can
+# simply source this script to enable completions or append
+# this script to your ~/.bash_completion file.
+#
+_{entry_point}_completion() {{
+    local IFS=$'
+'
+    COMPREPLY=( $( env COMP_WORDS="${{COMP_WORDS[*]}}" \\
+                   COMP_CWORD=$COMP_CWORD \\
+                   _BST_COMPLETION=complete $1 ) )
+    return 0
+}}
+
+complete -F _bst_completion -o nospace {entry_point};
+""".format(entry_point=bst_entry_point)
+
+
+def get_completions_scriptlet():
+    bst_dir = os.path.dirname(os.path.abspath(__file__))
+    path = os.path.join(bst_dir, 'buildstream2', 'data', bst_entry_point)
+
+    # Generate the file on demand, only in response to
+    # actually installing.
+    with open(path, 'w') as f:
+        f.write(COMPLETION_SCRIPTLET)
+
+    # Return the relative path
+    return os.path.join('buildstream2', 'data', bst_entry_point)
+
+
 #####################################################
 #    Monkey-patching setuptools for performance     #
 #####################################################
@@ -352,7 +397,7 @@ setup(name='BuildStream2',
           #
           ('share/man/man1', list_man_pages()),
           ('share/bash-completion/completions', [
-              os.path.join('buildstream2', 'data', 'bst')
+              get_completions_scriptlet()
           ])
       ],
       install_requires=install_requires,