martinzink commented on code in PR #1681: URL: https://github.com/apache/nifi-minifi-cpp/pull/1681#discussion_r1414205047
########## bootstrap/cli.py: ########## @@ -0,0 +1,141 @@ +import os + +import inquirer + +from minifi_option import MinifiOptions +from system_dependency import install_required + + +def install_dependencies(minifi_options: MinifiOptions): + install_required(minifi_options) + + +def run_cmake(minifi_options: MinifiOptions): + if not os.path.exists(minifi_options.build_dir): + os.mkdir(minifi_options.build_dir) + os.chdir(minifi_options.build_dir) + cmake_cmd = f"cmake -G Ninja {minifi_options.create_cmake_options_str()} {minifi_options.source_dir}" + print(f"Running {cmake_cmd}") + os.system(cmake_cmd) + + +def do_build(minifi_options: MinifiOptions): + os.chdir(minifi_options.build_dir) + os.system("cmake --build .") + + +def do_one_click_build(minifi_options: MinifiOptions) -> bool: + install_dependencies(minifi_options) + run_cmake(minifi_options) + do_build(minifi_options) + return True + + +def modify_bool_options(minifi_options: MinifiOptions): + options = [inquirer.Checkbox( + "MiNiFi C++ options", + message="Select MiNiFi C++ components", + choices=[name for name, obj in minifi_options.bool_options.items()], + default=[name for name, obj in minifi_options.bool_options.items() if obj.value == "ON"] + )] + + selection_result = inquirer.prompt(options) + for minifi_option in minifi_options.bool_options.values(): + if minifi_option.name in selection_result: + minifi_option.value = "ON" + else: + minifi_option.value = "OFF" + + +def main_menu(minifi_options: MinifiOptions): + done = False + while not done: + main_menu_options = { + f"Build dir: {minifi_options.build_dir}": build_dir_menu, + f"Build type: {minifi_options.build_type.value}": build_type_menu, + "Build options": bool_menu, + "One click build": do_one_click_build, + "Step by step build": step_by_step_menu, + "Exit": lambda options: True, + } + + questions = [ + inquirer.List( + "sub_menu", + message="Main Menu", + choices=[menu_option_name for menu_option_name in main_menu_options], + ), + ] + + main_menu_prompt = inquirer.prompt(questions) + done = main_menu_options[main_menu_prompt["sub_menu"]](minifi_options) + + +def build_type_menu(minifi_options: MinifiOptions) -> bool: + questions = [ + inquirer.List( + "build_type", + message="Build type", + choices=minifi_options.build_type.possible_values, + ), + ] + + answers = inquirer.prompt(questions) + minifi_options.build_type.value = answers["build_type"] + return False + + +def build_dir_menu(minifi_options: MinifiOptions) -> bool: + questions = [ + inquirer.Path('build_dir', + message="Build directory", + default=minifi_options.build_dir + ), + ] + minifi_options.build_dir = inquirer.prompt(questions)["build_dir"] + return False + + +def bool_menu(minifi_options: MinifiOptions) -> bool: Review Comment: I think that would be possible, but since its not trivial I think I'd rather do that in part 2 aswell. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@nifi.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org