|  | #!/bin/bash | 
|  |  | 
|  | # | 
|  | # Copyright (c) 2024 Project CHIP Authors | 
|  | # | 
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | # you may not use this file except in compliance with the License. | 
|  | # You may obtain a copy of the License at | 
|  | # | 
|  | # http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, software | 
|  | # distributed under the License is distributed on an "AS IS" BASIS, | 
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | # See the License for the specific language governing permissions and | 
|  | # limitations under the License. | 
|  |  | 
|  | { | 
|  | echo "          __  __       _   _               _____ _____  _  __  _____             _             " | 
|  | echo "         |  \/  |     | | | |             / ____|  __ \| |/ / |  __ \           | |            " | 
|  | echo "         | \  / | __ _| |_| |_ ___ _ __  | (___ | |  | | ' /  | |  | | ___   ___| |_ ___  _ __ " | 
|  | echo '         | |\/| |/ _` | __| __/ _ \ `__|  \___ \| |  | |  <   | |  | |/ _ \ / __| __/ _ \| `__|' | 
|  | echo "         | |  | | (_| | |_| ||  __/ |     ____) | |__| | . \  | |__| | (_) | (__| || (_) | |   " | 
|  | echo "         |_|  |_|\__,_|\__|\__\___|_|    |_____/|_____/|_|\_\ |_____/ \___/ \___|\__\___/|_|   " | 
|  | echo "                                                                                               " | 
|  |  | 
|  | usage() { | 
|  | echo "Displays Matter SDK setup information." | 
|  | echo | 
|  | echo "Usage:" | 
|  | echo | 
|  | echo "    Show Matter SDK Version, SHA, repository details:  $0" | 
|  | echo "    Show Matter SDK git submodule information:         $0 --git-sub" | 
|  | echo "    Show Matter SDK host OS system information:        $0 --system" | 
|  | echo "    Show all available Matter SDK details:             $0 --complete" | 
|  | echo | 
|  | } | 
|  |  | 
|  | width=104 | 
|  |  | 
|  | # Get the date string | 
|  | date_string=$(date) | 
|  |  | 
|  | # Calculate the length of the date string | 
|  | date_length=${#date_string} | 
|  |  | 
|  | # Calculate the padding on each side | 
|  | padding=$(((width - date_length) / 2)) | 
|  |  | 
|  | # Print spaces for left padding | 
|  | printf "%${padding}s" | 
|  |  | 
|  | # Print the date string | 
|  | echo "$date_string" | 
|  | echo | 
|  |  | 
|  | ROOT_DIR=$(realpath "$(dirname "$0")"/../..) | 
|  | TH_DEV_SCRIPTS_DIR=$ROOT_DIR/scripts/sdk-doctor | 
|  | cd "$ROOT_DIR" | 
|  |  | 
|  | # Check for arguments | 
|  | if [ "$#" -gt 1 ]; then | 
|  | echo "Error: Too many arguments." | 
|  | usage | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | print_framed_text() { | 
|  | # Get the text and title from function arguments | 
|  | input_text="$1" | 
|  | title="$2" | 
|  |  | 
|  | # Ensure 'width' is set and has a reasonable value | 
|  | if [ -z "$width" ] || [ "$width" -lt 10 ]; then | 
|  | echo "Error: 'width' is not set or too small." | 
|  | return 1 | 
|  | fi | 
|  |  | 
|  | max_line_length=$((width - 6)) # Maximum characters in a line before wrapping | 
|  |  | 
|  | # Word-wrap the input text | 
|  | input_text_wrapped=$(echo -e "$input_text" | fold -w "$max_line_length" -s) | 
|  |  | 
|  | # Calculate height based on the number of lines in the input text | 
|  | height=$(echo -e "$input_text_wrapped" | wc -l) | 
|  | height=$((height + 4)) # Add 4 to account for the top and bottom frame borders and inner padding | 
|  |  | 
|  | # Print the top border with title | 
|  | title_with_padding=" $title " | 
|  | title_padding_left=$(((width - 2 - ${#title_with_padding}) / 2)) | 
|  | [ "$title_padding_left" -lt 0 ] && title_padding_left=0 | 
|  | title_padding_right=$((width - 2 - ${#title_with_padding} - title_padding_left)) | 
|  | [ "$title_padding_right" -lt 0 ] && title_padding_right=0 | 
|  | echo '+'"$(printf "%0.s-" "$(seq 1 "$title_padding_left")")$title_with_padding""$(printf "%0.s-" "$(seq 1 "$title_padding_right")")"'+' | 
|  |  | 
|  | # Inner top padding | 
|  | echo "|$(printf ' %.0s' "$(seq 1 $((width - 2)))")|" | 
|  |  | 
|  | # Print each line of wrapped input text with frame borders and padding | 
|  | echo -e "$input_text_wrapped" | while IFS= read -r line; do | 
|  | padding_right=$((width - 4 - ${#line} - 2)) # Subtract 4 for the borders and 2 for the left padding | 
|  | [ "$padding_right" -lt 0 ] && padding_right=0 | 
|  | echo "|  $line$(printf ' %.0s' "$(seq 1 "$padding_right")")  |" | 
|  | done | 
|  |  | 
|  | # Inner bottom padding | 
|  | echo "|$(printf ' %.0s' "$(seq 1 $((width - 2)))")|" | 
|  |  | 
|  | # Print the bottom border | 
|  | echo '+'"$(printf "%0.s-" "$(seq 1 $((width - 2)))")"'+' | 
|  | echo | 
|  | } | 
|  |  | 
|  | show_system() { | 
|  | # OS | 
|  | os_output=$("$TH_DEV_SCRIPTS_DIR/_os.sh") | 
|  | print_framed_text "$os_output" "OS" | 
|  |  | 
|  | # Network | 
|  | network_output=$("$TH_DEV_SCRIPTS_DIR/_network.sh") | 
|  | print_framed_text "$network_output" "Network" | 
|  | } | 
|  |  | 
|  | # Matter SDK Version | 
|  | th_version_output=$("$TH_DEV_SCRIPTS_DIR/_version.sh") | 
|  | print_framed_text "$th_version_output" "Matter SDK Version" | 
|  |  | 
|  | # Git Status | 
|  | if [[ "$1" = "--git-sub" ]] || [[ "$1" = "--complete" ]]; then | 
|  | repository_branches_output=$("$TH_DEV_SCRIPTS_DIR/_repo.sh" "--git-sub") | 
|  | print_framed_text "$repository_branches_output" "Git Status" | 
|  | else | 
|  | repository_branches_output=$("$TH_DEV_SCRIPTS_DIR/_repo.sh" "--git") | 
|  | print_framed_text "$repository_branches_output" "Git Status" | 
|  | fi | 
|  |  | 
|  | # Handle arguments | 
|  | case "$1" in | 
|  | --system) | 
|  | show_system | 
|  | usage | 
|  | ;; | 
|  | --complete) | 
|  | show_system | 
|  | usage | 
|  | ;; | 
|  | *) | 
|  | usage | 
|  | exit 1 | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | } 2>&1 | tee sdk-doctor.txt |