From 8d1d75fc4048dba9a04058bc709a0e41286ae366 Mon Sep 17 00:00:00 2001 From: bernard Date: Fri, 5 Apr 2024 09:57:44 +0800 Subject: [PATCH] [tools] Add install env script --- tools/install_env.py | 191 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 tools/install_env.py diff --git a/tools/install_env.py b/tools/install_env.py new file mode 100644 index 0000000000..e98ac60d42 --- /dev/null +++ b/tools/install_env.py @@ -0,0 +1,191 @@ +#! /usr/bin/env python +#coding=utf-8 + +# +# File : env.py +# This file is part of RT-Thread RTOS +# COPYRIGHT (C) 2024, RT-Thread Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Change Logs: +# Date Author Notes +# 2024-04-05 Bernard Add copyright information +# + +import os +import sys +import platform +import shutil +import zipfile + +PKG_URL = 'https://github.com/RT-Thread/packages.git' +SDK_URL = 'https://github.com/RT-Thread/sdk.git' +ENV_URL = 'https://github.com/RT-Thread/env.git' + +def help_info(): + print("**********************************************************************************\n" + "* Help infomation:\n" + "* Git tool install step.\n" + "* If your system is linux, you can use command below to install git.\n" + "* $ sudo yum install git\n" + "* $ sudo apt-get install git\n" + "* If your system is windows, you should download git software(msysGit).\n" + "* Download path: http://git-scm.com/download/win\n" + "* After you install it, be sure to add the git command execution PATH \n" + "* to your system PATH.\n" + "* Usually, git command PATH is $YOUR_INSTALL_DIR\\Git\\bin\n" + "* If your system is OSX, please download git and install it.\n" + "* Download path: http://git-scm.com/download/mac\n" + "**********************************************************************************\n") + +def touch_env(): + if sys.platform != 'win32': + home_dir = os.environ['HOME'] + else: + home_dir = os.environ['USERPROFILE'] + + pkg_url = os.getenv('RTT_PACKAGE_URL') or PKG_URL + sdk_url = os.getenv('RTT_SDK_URL') or SDK_URL + env_url = os.getenv('RTT_ENV_URL') or ENV_URL + if len(sys.argv) == 2 and sys.argv[1] == '--gitee': + # "Install RT-Thread Environment from Gitee" + sdk_url = 'https://gitee.com/RT-Thread-Mirror/sdk.git' + pkg_url = 'https://gitee.com/RT-Thread-Mirror/packages.git' + env_url = 'https://gitee.com/RT-Thread-Mirror/env.git' + + # make .env and other directories + env_dir = os.path.join(home_dir, '.env') + if not os.path.exists(env_dir): + os.mkdir(env_dir) + os.mkdir(os.path.join(env_dir, 'local_pkgs')) + os.mkdir(os.path.join(env_dir, 'packages')) + os.mkdir(os.path.join(env_dir, 'tools')) + kconfig = open(os.path.join(env_dir, 'packages', 'Kconfig'), 'w') + kconfig.close() + + # git clone packages + if not os.path.exists(os.path.join(env_dir, 'packages', 'packages')): + try: + ret = os.system('git clone %s %s' % (pkg_url, os.path.join(env_dir, 'packages', 'packages'))) + if ret != 0: + shutil.rmtree(os.path.join(env_dir, 'packages', 'packages')) + print("********************************************************************************\n" + "* Warnning:\n" + "* Run command error for \"git clone https://github.com/RT-Thread/packages.git\".\n" + "* This error may have been caused by not found a git tool or network error.\n" + "* If the git tool is not installed, install the git tool first.\n" + "* If the git utility is installed, check whether the git command is added to \n" + "* the system PATH.\n" + "* This error may cause the RT-Thread packages to not work properly.\n" + "********************************************************************************\n") + help_info() + else: + kconfig = open(os.path.join(env_dir, 'packages', 'Kconfig'), 'w') + kconfig.write('source "$PKGS_DIR/packages/Kconfig"') + kconfig.close() + except: + print("**********************************************************************************\n" + "* Warnning:\n" + "* Run command error for \"git clone https://github.com/RT-Thread/packages.git\". \n" + "* This error may have been caused by not found a git tool or git tool not in \n" + "* the system PATH. \n" + "* This error may cause the RT-Thread packages to not work properly. \n" + "**********************************************************************************\n") + help_info() + + # git clone env scripts + if not os.path.exists(os.path.join(env_dir, 'tools', 'scripts')): + try: + ret = os.system('git clone %s %s' % (env_url, os.path.join(env_dir, 'tools', 'scripts'))) + if ret != 0: + shutil.rmtree(os.path.join(env_dir, 'tools', 'scripts')) + print("********************************************************************************\n" + "* Warnning:\n" + "* Run command error for \"git clone https://github.com/RT-Thread/env.git\".\n" + "* This error may have been caused by not found a git tool or network error.\n" + "* If the git tool is not installed, install the git tool first.\n" + "* If the git utility is installed, check whether the git command is added \n" + "* to the system PATH.\n" + "* This error may cause script tools to fail to work properly.\n" + "********************************************************************************\n") + help_info() + except: + print("********************************************************************************\n" + "* Warnning:\n" + "* Run command error for \"git clone https://github.com/RT-Thread/env.git\". \n" + "* This error may have been caused by not found a git tool or git tool not in \n" + "* the system PATH. \n" + "* This error may cause script tools to fail to work properly. \n" + "********************************************************************************\n") + help_info() + + # git clone sdk + if not os.path.exists(os.path.join(env_dir, 'packages', 'sdk')): + try: + ret = os.system('git clone %s %s' % (sdk_url, os.path.join(env_dir, 'packages', 'sdk'))) + if ret != 0: + shutil.rmtree(os.path.join(env_dir, 'packages', 'sdk')) + print("********************************************************************************\n" + "* Warnning:\n" + "* Run command error for \"git clone https://github.com/RT-Thread/sdk.git\".\n" + "* This error may have been caused by not found a git tool or network error.\n" + "* If the git tool is not installed, install the git tool first.\n" + "* If the git utility is installed, check whether the git command is added \n" + "* to the system PATH.\n" + "* This error may cause the RT-Thread SDK to not work properly.\n" + "********************************************************************************\n") + help_info() + except: + print("********************************************************************************\n" + "* Warnning:\n" + "* Run command error for \"https://github.com/RT-Thread/sdk.git\".\n" + "* This error may have been caused by not found a git tool or git tool not in \n" + "* the system PATH. \n" + "* This error may cause the RT-Thread SDK to not work properly. \n" + "********************************************************************************\n") + help_info() + + # try to create an empty .config file + if not os.path.exists(os.path.join(env_dir, 'tools', '.config')): + kconfig = open(os.path.join(env_dir, 'tools', '.config'), 'w') + kconfig.close() + + # copy env.sh or env.ps1, Kconfig + shutil.copy(os.path.join(env_dir, 'tools', 'scripts', 'Kconfig'), os.path.join(home_dir, '.env', 'tools')) + if sys.platform != 'win32': + shutil.copy(os.path.join(env_dir, 'tools', 'scripts', 'env.sh'), os.path.join(home_dir, '.env', 'env.sh')) + else: + shutil.copy(os.path.join(env_dir, 'tools', 'scripts', 'env.ps1'), os.path.join(home_dir, '.env', 'env.ps1')) + # unzip kconfig-mconf.zip + zip_file = os.path.join(env_dir, 'tools', 'scripts', 'kconfig-mconf.zip') + if os.path.exists(zip_file): + zip_file_dir = os.path.join(env_dir, 'tools', 'bin') + if os.path.exists(zip_file_dir): + shutil.rmtree(zip_file_dir) + zip_file_obj = zipfile.ZipFile(zip_file, 'r') + for file in zip_file_obj.namelist(): + zip_file_obj.extract(file, zip_file_dir) + zip_file_obj.close() + +def main(): + print("Install RT-Thread Environment") + + touch_env() + + return + +if __name__ == "__main__": + main()