arkcompiler_runtime_core/scripts/install-third-party
huangyu c658ccf319 Update runtime_core code
Issue: https://gitee.com/openharmony/arkcompiler_runtime_core/issues/I5G96F
Test: Test262 suit, ark unittest, rk3568 XTS, ark previewer demo

Signed-off-by: huangyu <huangyu76@huawei.com>
Change-Id: I3f63d129a07deaa27a390f556dcaa5651c098185
2022-07-17 10:20:32 +08:00

169 lines
4.9 KiB
Bash
Executable File

#!/bin/bash -e
# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
# 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.
MSG_PREFIX="[ARK THIRD PARTY]"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
ARK_ROOT=$SCRIPT_DIR/..
ARK_THIRD_PARTY_DIR=$ARK_ROOT/ark-third-party
ARK_THIRD_PARTY_FORCE_CLONE=no
ARK_THIRD_PARTY_MANIFEST="$SCRIPT_DIR/third-party-lists/public"
function print_help
{
HELP_MESSAGE="
This script installs build-time third party dependencies for ARK Runtime.
SYNOPSIS
$0 [OPTIONS]
OPTIONS
--help, -h Show this message and exit.
--manifest=FILE Path to the manifest. Default: $ARK_THIRD_PARTY_MANIFEST
--force-clone Remove local repositories and re-clone everything anew
CAVEAT
* Manifest file format is documented in the default manifest.
"
echo "$HELP_MESSAGE"
}
for opt in "$@"
do
case $opt in
-h|--help)
print_help
exit 0
;;
--manifest=*)
ARK_THIRD_PARTY_MANIFEST=${opt//[-a-zA-Z0-9]*=/}
;;
--force-clone)
ARK_THIRD_PARTY_FORCE_CLONE=yes
;;
*)
echo "Error: Unsupported flag $opt" >&2
exit 1
;;
esac
done
function apply_patches
{
local lib_name="$1"
local lib_dir="$2"
local patch_dir="$ARK_ROOT/patches/$lib_name"
if [[ ! -d "$patch_dir" ]] ; then
echo "$MSG_PREFIX No patch directory $patch_dir for $lib_name"
exit 1
fi
pushd "$lib_dir"
readarray -t patches <<< "$(find "$patch_dir" -name '*.patch' | sort)"
for patch in "${patches[@]}"
do
git apply --ignore-space-change --check "$patch"
git am --ignore-space-change "$patch"
done
popd
}
function process_manifest
{
local manifest="$1"
while read -r component
do
component=$(echo "$component" | perl -lane 'chomp; s/^\s+//; s/\s+$//; print $_')
if [[ "$component" == "" || "$component" =~ ^# ]] ; then
continue
fi
IFS=',' read -r -a info <<< "$component"
local lib_name="${info[0]}"
local lib_repo="${info[1]}"
local commit_type="${info[2]}"
local commit_id="${info[3]}"
local patch_mode="${info[4]}"
local submodule_mode="${info[5]}"
local lib_dir="$ARK_THIRD_PARTY_DIR/$lib_name"
if [[ "$commit_type" == "branch" || "$commit_type" == "tag" ]] ; then
GIT_SSL_NO_VERIFY=true git clone --verbose --depth=1 --branch "$commit_id" "$lib_repo" "$lib_dir"
elif [[ "$commit_type" == "commit" ]] ; then
GIT_SSL_NO_VERIFY=true git clone --verbose "$lib_repo" "$lib_dir"
pushd "$lib_dir"
git checkout "$commit_id"
popd
else
echo "$MSG_PREFIX Invalid commit type for $lib_name: $commit_type"
exit 1
fi
if [[ "$patch_mode" == "with_patches" ]] ; then
apply_patches "$lib_name" "$lib_dir"
elif [[ "$patch_mode" != "no_patches" ]] ; then
echo "$MSG_PREFIX Invalid patch mode for $lib_name: $patch_mode"
exit 1
fi
if [[ "$submodule_mode" =~ ^with_submodules: ]] ; then
# Split by delimiter and remove "with_submodules" keyword:
IFS=':' read -r -a submodules <<< "$submodule_mode"
submodules=("${submodules[@]:1}")
pushd "$lib_dir"
for submodule in "${submodules[@]}"
do
git submodule update --init "$submodule"
done
popd
elif [[ "$submodule_mode" != "no_submodules" ]] ; then
echo "$MSG_PREFIX Invalid submodule mode for $lib_name: $submodule_mode"
exit 1
fi
done < "$manifest"
}
if [[ "$ARK_THIRD_PARTY_FORCE_CLONE" == "yes" ]] ; then
rm -rf "$ARK_THIRD_PARTY_DIR"
fi
if [[ -d "$ARK_THIRD_PARTY_DIR" ]] ; then
echo "$MSG_PREFIX Third-party dependencies are found in $ARK_THIRD_PARTY_DIR, exiting"
echo "$MSG_PREFIX If you need to update, restart this script with --force-clone"
exit 0
fi
echo "$MSG_PREFIX Third-party dependencies are not found in $ARK_THIRD_PARTY_DIR"
if [[ ! -f "$ARK_THIRD_PARTY_MANIFEST" ]] ; then
echo "$MSG_PREFIX Invalid manifest file '$ARK_THIRD_PARTY_MANIFEST'"
exit 1
fi
echo "$MSG_PREFIX Using manifest $ARK_THIRD_PARTY_MANIFEST"
process_manifest "$ARK_THIRD_PARTY_MANIFEST"
echo "$MSG_PREFIX Third-party dependencies installed"
exit 0