From 6611790d4084a9769d5dd3b4bb17c4a22cd0f4c4 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 29 Jun 2022 10:47:07 -0300 Subject: [PATCH] [Install checker] Added support for downloaded tools --- src/kibot-check | 45 +++++++++++++++++++++++++++++++++++++-------- src/kibot-check.in | 45 +++++++++++++++++++++++++++++++++++++-------- 2 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/kibot-check b/src/kibot-check index f3cbc446..198e3f80 100755 --- a/src/kibot-check +++ b/src/kibot-check @@ -6,15 +6,16 @@ # Project: KiBot (formerly KiPlot) # # This is the installation checker, should help people to detect installation issues and install needed tools -import os -import re -import sys -import platform -import subprocess -import json -import importlib -from shutil import which from contextlib import contextmanager +import importlib +import json +import os +import platform +import re +from shutil import which +import site +import subprocess +import sys deps = '{\ "Colorama": {\ @@ -714,8 +715,36 @@ is_x86 = is_64 = is_linux = False ver_re = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?(?:[\.-](\d+))?') +def check_tool_binary_python(name): + base = os.path.join(site.USER_BASE, 'bin') + full_name = os.path.join(base, name) + if not os.path.isfile(full_name) or not os.access(full_name, os.X_OK): + return None + return full_name + + +def check_tool_binary_local(name): + home = os.environ.get('HOME') or os.environ.get('username') + if home is None: + return None + home_bin = os.path.join(home, '.local', 'share', 'kibot', 'bin') + full_name = os.path.join(home_bin, name) + if not os.path.isfile(full_name) or not os.access(full_name, os.X_OK): + return None + return full_name + + def run_command(cmd, only_first_line=True, pre_ver_text=None, no_err_2=False): global last_ok + cmd_full = which(cmd[0]) + if not cmd_full: + cmd_full = check_tool_binary_python(cmd[0]) + if not cmd_full: + cmd_full = check_tool_binary_local(cmd[0]) + if not cmd_full: + last_ok = False + return NOT_AVAIL + cmd[0] = cmd_full try: cmd_output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) except FileNotFoundError as e: diff --git a/src/kibot-check.in b/src/kibot-check.in index 27dfd862..89339f99 100755 --- a/src/kibot-check.in +++ b/src/kibot-check.in @@ -6,15 +6,16 @@ # Project: KiBot (formerly KiPlot) # # This is the installation checker, should help people to detect installation issues and install needed tools -import os -import re -import sys -import platform -import subprocess -import json -import importlib -from shutil import which from contextlib import contextmanager +import importlib +import json +import os +import platform +import re +from shutil import which +import site +import subprocess +import sys deps = '@json_dep@' # Dirs to look for plugins @@ -34,8 +35,36 @@ is_x86 = is_64 = is_linux = False ver_re = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?(?:[\.-](\d+))?') +def check_tool_binary_python(name): + base = os.path.join(site.USER_BASE, 'bin') + full_name = os.path.join(base, name) + if not os.path.isfile(full_name) or not os.access(full_name, os.X_OK): + return None + return full_name + + +def check_tool_binary_local(name): + home = os.environ.get('HOME') or os.environ.get('username') + if home is None: + return None + home_bin = os.path.join(home, '.local', 'share', 'kibot', 'bin') + full_name = os.path.join(home_bin, name) + if not os.path.isfile(full_name) or not os.access(full_name, os.X_OK): + return None + return full_name + + def run_command(cmd, only_first_line=True, pre_ver_text=None, no_err_2=False): global last_ok + cmd_full = which(cmd[0]) + if not cmd_full: + cmd_full = check_tool_binary_python(cmd[0]) + if not cmd_full: + cmd_full = check_tool_binary_local(cmd[0]) + if not cmd_full: + last_ok = False + return NOT_AVAIL + cmd[0] = cmd_full try: cmd_output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) except FileNotFoundError as e: