#!/bin/bash
CUR_DIR=$(dirname $(readlink -f $0))
TOP_DIR=${CUR_DIR}/..
UNINSTALL_SCRIPT=uninstall.sh
OPENSOURCE_DIR=${TOP_DIR}/opensource
THIRDPARTY_LIST="${OPENSOURCE_DIR}/makeself"
if [ -n "$1" ]; then
if [ "$1" == "force" ]; then
echo "force delete origin opensource files"
echo ${THIRDPARTY_LIST}
rm -rf ${THIRDPARTY_LIST}
fi
fi
function patch_makeself() {
cd ${OPENSOURCE_DIR}
git clone -b v2.5.0.x https://gitcode.com/cann-src-third-party/makeself.git
cd ${OPENSOURCE_DIR}/makeself
tar -zxf makeself-release-2.5.0.tar.gz
cd makeself-release-2.5.0
ulimit -n 8192
patch -p1 < ../makeself-2.5.0.patch
cd ${OPENSOURCE_DIR}/makeself
cp -r makeself-release-2.5.0 ${OPENSOURCE_DIR}
cd ${OPENSOURCE_DIR}
rm -rf makeself
mv makeself-release-2.5.0 makeself
}
mkdir -p ${OPENSOURCE_DIR} && cd ${OPENSOURCE_DIR}
[ ! -d "makeself" ] && patch_makeself
TRANSPLT_TEMP_DIR=${TOP_DIR}/build/msfmktransplt
rm -rf ${TRANSPLT_TEMP_DIR}
mkdir -p ${TRANSPLT_TEMP_DIR}
MAKESELF_DIR=${TOP_DIR}/opensource/makeself
CREATE_RUN_SCRIPT=${MAKESELF_DIR}/makeself.sh
CONTROL_PARAM_SCRIPT=${MAKESELF_DIR}/makeself-header.sh
OUTPUT_DIR=${TOP_DIR}/output
mkdir -p "${OUTPUT_DIR}"
RUN_SCRIPT_DIR=${TOP_DIR}/scripts/run_script
CONF_DIR=${TOP_DIR}/scripts/conf
FILTER_PARAM_SCRIPT=${CONF_DIR}/help.info
MAIN_SCRIPT=main_transplt.sh
COMMON_SCRIPT=common.sh
INSTALL_SCRIPT=install.sh
UTILS_SCRIPT=utils.sh
VERSION_SCRIPT=version.info
TRANSPLT_RUN_NAME="Ascend-mindstudio-transplt"
PKG_LIMIT_SIZE=524288000
function parse_script_args() {
version=""
while [ $# -gt 0 ]; do
case "$1" in
--build_version)
if [ -n "${version}" ]; then
echo "[ERROR] Duplicate argument: --build_version"
exit 1
fi
shift
if [ -z "$1" ] || [[ "$1" == --* ]]; then
echo "[ERROR] Missing value for --build_version"
exit 1
fi
version="$1"
;;
--build_version=*)
if [ -n "${version}" ]; then
echo "[ERROR] Duplicate argument: --build_version"
exit 1
fi
version="${1#*=}"
if [ -z "${version}" ]; then
echo "[ERROR] Missing value for --build_version"
exit 1
fi
;;
-h|--help)
echo "Usage: $0 [--build_version <version>]"
exit 0
;;
*)
echo "[ERROR] Unknown argument: $1"
echo "Usage: $0 [--build_version <version>]"
exit 1
;;
esac
shift
done
if [ -n "${version}" ]; then
update_version_info "${version}"
fi
}
function update_version_info() {
local version="$1"
local config_file="${CUR_DIR}/run_script/version.info"
if [ -z "${version}" ]; then
echo "[ERROR] update_version_info: empty version."
exit 1
fi
if [ ! -f "${config_file}" ]; then
echo "[ERROR] ${config_file} does not exist."
exit 1
fi
if grep -qE '^Version=' "${config_file}"; then
sed -i "s/^Version=.*/Version=${version}/" "${config_file}"
else
echo "Version=${version}" >> "${config_file}"
fi
}
function create_temp_dir() {
local temp_dir=${1}
local transplt_dir=${TOP_DIR}/msfmktransplt/src/ms_fmk_transplt
cp -r ${transplt_dir} ${temp_dir}
copy_script ${MAIN_SCRIPT} ${temp_dir}
copy_script ${COMMON_SCRIPT} ${temp_dir}
copy_script ${UNINSTALL_SCRIPT} ${temp_dir}
copy_script ${VERSION_SCRIPT} ${temp_dir}
}
function copy_script() {
local script_name=${1}
local temp_dir=${2}
if [ -f "${temp_dir}/${script_name}" ]; then
rm -f "${temp_dir}/${script_name}"
fi
cp ${RUN_SCRIPT_DIR}/${script_name} ${temp_dir}/${script_name}
chmod 500 "${temp_dir}/${script_name}"
}
function get_package_name() {
CONFIG_FILE="${CUR_DIR}/run_script/version.info"
NAME=$(grep -E '^Name=' "$CONFIG_FILE" | cut -d'=' -f2)
if [ -z "${VERSION}" ]; then
VERSION=$(grep -E '^Version=' "$CONFIG_FILE" | cut -d'=' -f2)
fi
local os_arch=$(arch)
echo "${NAME}_${VERSION}_linux_${os_arch}.run"
}
function create_run_package() {
local run_name=${1}
local temp_dir=${2}
local main_script=${MAIN_SCRIPT}
local package_name=$(get_package_name)
${CREATE_RUN_SCRIPT} \
--header ${CONTROL_PARAM_SCRIPT} \
--help-header ${FILTER_PARAM_SCRIPT} \
--pigz \
--tar-quietly \
--complevel 4 \
--nomd5 \
--sha256 \
--chown \
${temp_dir} \
${OUTPUT_DIR}/${package_name} \
${run_name} \
./${main_script}
}
function check_file_exist() {
local temp_dir=${1}
check_package ${temp_dir}/ms_fmk_transplt ${PKG_LIMIT_SIZE}
check_package ${temp_dir}/${MAIN_SCRIPT} ${PKG_LIMIT_SIZE}
check_package ${temp_dir}/${COMMON_SCRIPT} ${PKG_LIMIT_SIZE}
check_package ${temp_dir}/${UNINSTALL_SCRIPT} ${PKG_LIMIT_SIZE}}
check_package ${temp_dir}/${VERSION_SCRIPT} ${PKG_LIMIT_SIZE}
}
function check_package() {
local _path="$1"
local _limit_size=$2
echo "check ${_path} exists"
if [ ! -e "${_path}" ]; then
echo "${_path} does not exist."
exit 1
fi
if [ -f "${_path}" ]; then
local _file_size=$(stat -c%s "${_path}")
if [ "${_file_size}" -gt "${_limit_size}" ] || [ "${_file_size}" -eq 0 ]; then
echo "package size exceeds limit:${_limit_size}"
exit 1
fi
fi
}
function main() {
parse_script_args "$@"
create_temp_dir ${TRANSPLT_TEMP_DIR}
check_file_exist ${TRANSPLT_TEMP_DIR}
create_run_package ${TRANSPLT_RUN_NAME} ${TRANSPLT_TEMP_DIR} ${main_script}
check_package ${OUTPUT_DIR}/$(get_package_name) ${PKG_LIMIT_SIZE}
}
main "$@"