build(console): added simple bash console

added a simple bash console to handle meson commands and tests
This commit is contained in:
2025-02-23 14:10:19 -05:00
parent 205f32a76f
commit 6d36a6f059

205
4DSSEConsole.sh Executable file
View File

@@ -0,0 +1,205 @@
#!/bin/bash
# --- Functions ---
# Display the main menu
display_menu() {
clear # Clear the screen for a clean menu
echo "--- Project Install Console ---"
echo "1. Reconfigure (with tests)"
echo "2. Reconfigure (without tests)"
echo "3. Build"
echo "4. Run Tests"
echo "5. Run Test with gdb (Specify test name)"
echo "6. Wipe (Clean build directory)"
echo "7. Generate Documentation" # Added documentation option
echo "8. Exit"
echo "-------------------------------"
echo -n "Enter your choice [1-8]: "
}
# Reconfigure the project (meson setup)
reconfigure() {
local test_flag="$1" # Use local to avoid global variable pollution
if [[ "$test_flag" == "true" ]]; then
meson setup build -Dbuild_tests=true --buildtype=debug
else
meson setup build -Dbuild_tests=false --buildtype=release
fi
if [[ $? -eq 0 ]]; then # Check exit code for success
echo "Reconfiguration successful."
else
echo "Reconfiguration failed."
return 1 # Return a non-zero exit code to signal failure
fi
}
# Build the project
build_project() {
meson compile -C build
if [[ $? -eq 0 ]]; then
echo "Build successful."
else
echo "Build failed."
return 1
fi
}
# Run tests
run_tests() {
meson test -C build
if [[ $? -eq 0 ]]; then
echo "Tests passed." # More specific message.
else
echo "Tests failed."
return 1
fi
}
# Run a specific test with GDB
run_test_gdb() {
local test_dir="build/tests" # Store the base test directory
local selected_test=""
local test_options=()
local test_index=1
local choice
# --- Find test executables ---
# Use find to get a list of potential test executables, *excluding* .p and .cpp.o files
# We sort it for consistent ordering. The '-type f' ensures we only find files.
# The '-executable' ensures the files are actually executable.
find "$test_dir" -type f -executable \
! -name "*.p" ! -name "*.cpp.o" ! -name "*.h.gch" | sort | while read -r file; do
# Remove the 'build/tests/' prefix and the file extension
test_name=$(basename "$file")
test_options+=("$test_name")
echo "$test_index. $test_name"
test_index=$((test_index + 1))
done
# Check if any tests were found
if [[ ${#test_options[@]} -eq 0 ]]; then
echo "No test executables found in build/tests."
return 1
fi
# --- Prompt for test selection ---
echo "-------------------------------"
echo -n "Enter the number of the test to debug (or 0 to cancel): "
read -r choice
# --- Input Validation ---
if ! [[ "$choice" =~ ^[0-9]+$ ]]; then # Check if input is a number
echo "Invalid input. Please enter a number."
return 1
fi
if [[ "$choice" -eq 0 ]]; then
echo "Test selection cancelled."
return 0
fi
if [[ "$choice" -lt 1 || "$choice" -gt ${#test_options[@]} ]]; then
echo "Invalid test number. Please enter a number within the valid range."
return 1
fi
# --- Get the selected test name ---
selected_test="${test_options[$((choice - 1))]}" # Adjust for 0-based array indexing
# --- Run GDB ---
# Construct full path. More reliable than changing directories.
local full_test_path="$test_dir/$selected_test"
if [[ ! -x "$full_test_path" ]]; then
echo "Error: Test executable '$full_test_path' not found or not executable."
return 1
fi
gdb --args "$full_test_path"
}
# Wipe the build directory
wipe_build() {
echo -n "Are you sure you want to wipe the build directory? (y/N): "
read -r confirm
if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
rm -rf build
echo "Build directory wiped."
else
echo "Wipe cancelled."
fi
}
generate_docs() {
echo "Generating documentation..."
doxygen
if [[ $? -ne 0 ]]; then # Check if doxygen succeeded
echo "Error: Doxygen failed."
return 1
fi
if [[ -d docs/latex ]]; then #Check if directory exist
cd docs/latex || return #cd into docs/latex and exit the function if unsuccesful
make
if [[ $? -ne 0 ]]; then #Check make
echo "Error: make in docs/latex failed."
cd ../.. || exit #go back, or exit the script if it fails
return 1
fi
cd ../.. || exit # Go back to the project root
else
echo "Warning: docs/latex directory not found. Skipping LaTeX build."
fi
echo "Documentation generated."
}
# --- Main Loop ---
while true; do
display_menu
read -r choice
case "$choice" in
1)
reconfigure "true"
;;
2)
reconfigure "false"
;;
3)
build_project
;;
4)
run_tests
;;
5)
run_test_gdb
;;
6)
wipe_build
;;
7)
generate_docs
;;
8)
echo "Exiting..."
break # Exit the while loop
;;
*)
echo "Invalid choice. Please enter a number between 1 and 8."
;;
esac
echo -n "Press Enter to continue..."
read -r # Wait for Enter key press
done
exit 0 #Good practice