| #!/bin/bash | |
| # | |
| # Copyright 2013 The Flutter Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # Exit immediately if a command exits with a non-zero status. | |
| set -e | |
| # --- Configuration --- | |
| # Get the absolute path of the directory where this script is located. This is | |
| # crucial for making all other paths relative and predictable. | |
| SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) | |
| # Default verbosity level | |
| VERBOSITY=1 | |
| # Check for QUIET environment variable | |
| if [[ -n "${QUIET}" ]]; then | |
| VERBOSITY=0 | |
| fi | |
| # --- Determine Host Profile Directory --- | |
| HOST_PROFILE_DIR="" | |
| # Check if the first argument ($1) was provided. | |
| if [ -n "$1" ]; then | |
| # Use the provided argument as the directory name. | |
| HOST_PROFILE_DIR="$1" | |
| echo "Using specified host profile directory: $HOST_PROFILE_DIR" | |
| else | |
| # If no argument is provided, guess based on the machine architecture. | |
| ARCH=$(uname -m) | |
| echo "No host profile directory specified. Guessing based on architecture: $ARCH" | |
| if [[ "$ARCH" == "arm64" || "$ARCH" == "aarch64" ]]; then | |
| HOST_PROFILE_DIR="host_profile_arm64" | |
| elif [[ "$ARCH" == "x86_64" ]]; then | |
| # This is a common directory name for x86-64 builds. | |
| HOST_PROFILE_DIR="host_profile" | |
| else | |
| # If the architecture is not recognized, exit with an error. | |
| echo "ERROR: Unsupported architecture '$ARCH'." | |
| echo "Please provide the host profile directory as the first argument." | |
| echo "Example: $0 host_profile_arm64" | |
| exit 1 | |
| fi | |
| fi | |
| # --- Define Paths Relative to the Script --- | |
| # Path to the executable to run. | |
| EXECUTABLE="$SCRIPT_DIR/../../out/$HOST_PROFILE_DIR/licenses_cpp" | |
| # The root directory for the license check. | |
| WORKING_DIR="$SCRIPT_DIR/../.." | |
| # The data directory required by the license tool. | |
| DATA_DIR="$SCRIPT_DIR/../tools/licenses_cpp/data" | |
| # The output path for the generated licenses file. This will be created | |
| # in the directory where you *run* the script from (your current working directory). | |
| LICENSES_OUTPUT_PATH="$SCRIPT_DIR/../sky/packages/sky_engine/LICENSE_CPP.new" | |
| LICENSES_PATH="$SCRIPT_DIR/../sky/packages/sky_engine/LICENSE" | |
| # --- Validation --- | |
| # Before running, check that the required executable and directories actually exist. | |
| if [ ! -f "$EXECUTABLE" ]; then | |
| echo "ERROR: Executable not found at the expected path: $EXECUTABLE" | |
| echo "Please ensure the project has been built and this script is in the correct location." | |
| exit 1 | |
| fi | |
| # --- Run Command --- | |
| "$EXECUTABLE" \ | |
| --working_dir "$WORKING_DIR" \ | |
| --data_dir "$DATA_DIR" \ | |
| --licenses_path "$LICENSES_OUTPUT_PATH" \ | |
| --root_package "flutter" \ | |
| --v $VERBOSITY | |
| if ! git diff \ | |
| --no-index \ | |
| --exit-code \ | |
| --ignore-cr-at-eol \ | |
| --ignore-matching-lines="^You may obtain a copy of this library's Source Code Form from:.*" \ | |
| "$LICENSES_PATH" \ | |
| "$LICENSES_OUTPUT_PATH"; then | |
| echo "The licenses have changed." | |
| echo "Please review added licenses and update //engine/src/flutter/sky/packages/sky_engine/LICENSE" | |
| echo "The license check can be repeated locally with //engine/src/flutter/ci/licenses_cpp.sh" | |
| echo "Make sure your licenses_cpp executable is built. For example:" | |
| echo " et build -c host_profile_arm64 //flutter/tools/licenses_cpp" | |
| echo "When executed locally the following command can update the licenses after a run:" | |
| echo "cp $LICENSES_OUTPUT_PATH $LICENSES_PATH" | |
| exit 1 | |
| fi | |
| rm "$LICENSES_OUTPUT_PATH" |