From fed39defd3b23b681d63d5d6405ca7d7f330510d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 2 Feb 2022 09:56:12 +0100 Subject: [PATCH] update helper script --- scripts/helper.py | 93 ++++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/scripts/helper.py b/scripts/helper.py index 1234a943..4e8a62b4 100755 --- a/scripts/helper.py +++ b/scripts/helper.py @@ -9,36 +9,44 @@ import webbrowser import shutil import sys import time +from shutil import which from typing import List -UNITTEST_FOLDER_NAME = 'build-tests' -DOCS_FOLDER_NAME = 'build-docs' +UNITTEST_FOLDER_NAME = "build-tests" +DOCS_FOLDER_NAME = "build-docs" def main(): parser = argparse.ArgumentParser(description="FSFW helper script") - choices = ('docs', 'tests') + choices = ("docs", "tests") parser.add_argument( - 'type', metavar='type', choices=choices, - help=f'Target type. Choices: {choices}' + "type", metavar="type", choices=choices, help=f"Target type. Choices: {choices}" ) parser.add_argument( - '-a', '--all', action='store_true', - help='Create, build and open specified type' + "-a", "--all", action="store_true", help="Create, build and open specified type" ) parser.add_argument( - '-c', '--create', action='store_true', - help='Create docs or test build configuration' + "-c", + "--create", + action="store_true", + help="Create docs or test build configuration", ) parser.add_argument( - '-b', '--build', action='store_true', - help='Build the specified type' + "-b", "--build", action="store_true", help="Build the specified type" ) parser.add_argument( - '-o', '--open', action='store_true', - help='Open test or documentation data in webbrowser' + "-o", + "--open", + action="store_true", + help="Open test or documentation data in webbrowser", + ) + parser.add_argument( + "-v", + "--valgrind", + action="store_true", + help="Run valgrind on generated test binary", ) args = parser.parse_args() @@ -46,26 +54,26 @@ def main(): args.build = True args.create = True args.open = True - elif not args.build and not args.create and not args.open: + elif not args.build and not args.create and not args.open and not args.valgrind: print( - 'Please select at least one operation to perform. ' - 'Use helper.py -h for more information' + "Please select at least one operation to perform. " + "Use helper.py -h for more information" ) sys.exit(1) # This script can be called from root and from script folder - if not os.path.isfile('README.md'): - os.chdir('..') + if not os.path.isfile("README.md"): + os.chdir("..") build_dir_list = [] if not args.create: build_dir_list = build_build_dir_list() - if args.type == 'tests': + if args.type == "tests": handle_tests_type(args, build_dir_list) - elif args.type == 'docs': + elif args.type == "docs": handle_docs_type(args, build_dir_list) else: - print('Invalid or unknown type') + print("Invalid or unknown type") sys.exit(1) @@ -76,7 +84,9 @@ def handle_docs_type(args, build_dir_list: list): create_docs_build_cfg() build_directory = DOCS_FOLDER_NAME elif len(build_dir_list) == 0: - print('No valid CMake docs build directory found. Trying to set up docs build system') + print( + "No valid CMake docs build directory found. Trying to set up docs build system" + ) shutil.rmtree(DOCS_FOLDER_NAME) create_docs_build_cfg() build_directory = DOCS_FOLDER_NAME @@ -87,18 +97,18 @@ def handle_docs_type(args, build_dir_list: list): build_directory = determine_build_dir(build_dir_list) os.chdir(build_directory) if args.build: - os.system('cmake --build . -j') + os.system("cmake --build . -j") if args.open: - if not os.path.isfile('docs/sphinx/index.html'): + if not os.path.isfile("docs/sphinx/index.html"): # try again.. - os.system('cmake --build . -j') - if not os.path.isfile('docs/sphinx/index.html'): + os.system("cmake --build . -j") + if not os.path.isfile("docs/sphinx/index.html"): print( "No Sphinx documentation file detected. " "Try to build it first with the -b argument" ) sys.exit(1) - webbrowser.open('docs/sphinx/index.html') + webbrowser.open("docs/sphinx/index.html") def handle_tests_type(args, build_dir_list: list): @@ -109,8 +119,8 @@ def handle_tests_type(args, build_dir_list: list): build_directory = UNITTEST_FOLDER_NAME elif len(build_dir_list) == 0: print( - 'No valid CMake tests build directory found. ' - 'Trying to set up test build system' + "No valid CMake tests build directory found. " + "Trying to set up test build system" ) create_tests_build_cfg() build_directory = UNITTEST_FOLDER_NAME @@ -123,26 +133,33 @@ def handle_tests_type(args, build_dir_list: list): if args.build: perform_lcov_operation(build_directory, False) if args.open: - if not os.path.isdir('fsfw-tests_coverage'): - print("No Unittest folder detected. Try to build them first with the -b argument") + if not os.path.isdir("fsfw-tests_coverage"): + print( + "No Unittest folder detected. Try to build them first with the -b argument" + ) sys.exit(1) - webbrowser.open('fsfw-tests_coverage/index.html') + webbrowser.open("fsfw-tests_coverage/index.html") + if args.valgrind: + if which("valgrind") is None: + print("Please install valgrind first") + sys.exit(1) + os.chdir(UNITTEST_FOLDER_NAME) + os.system("valgrind --leak-check=full ./fsfw-tests") + os.chdir("..") def create_tests_build_cfg(): os.mkdir(UNITTEST_FOLDER_NAME) os.chdir(UNITTEST_FOLDER_NAME) - cmake_cmd = "cmake -DFSFW_OSAL=host -DFSFW_BUILD_UNITTESTS=ON .." - print(f"Executing CMake command {cmake_cmd}") - os.system(cmake_cmd) - os.chdir('..') + os.system("cmake -DFSFW_OSAL=host -DFSFW_BUILD_UNITTESTS=ON ..") + os.chdir("..") def create_docs_build_cfg(): os.mkdir(DOCS_FOLDER_NAME) os.chdir(DOCS_FOLDER_NAME) - os.system('cmake -DFSFW_OSAL=host -DFSFW_BUILD_DOCS=ON ..') - os.chdir('..') + os.system("cmake -DFSFW_OSAL=host -DFSFW_BUILD_DOCS=ON ..") + os.chdir("..") def build_build_dir_list() -> list: