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

Reply via email to