#!/bin/bash
install_path=${1}
install_for_all_flag=${3}
pylocal=y
function get_right() {
if [ "$install_for_all_flag" = 1 ] || [ "$UID" = "0" ]; then
mspti_right=${root_mspti_right}
right=${root_right}
else
mspti_right=${user_mspti_right}
right=${user_right}
fi
}
function install_whl_package() {
local _pylocal=$1
local _package=$2
local _pythonlocalpath=$3
print ${LEVEL_INFO} "Start to install ${_package}."
if [ ! -f "${_package}" ]; then
print ${LEVEL_ERROR} "The ${_package} does not exist."
return 1
fi
if [ "-${_pylocal}" = "-y" ]; then
pip3 install --upgrade --no-deps --force-reinstall "${_package}" -t "${_pythonlocalpath}" > /dev/null 2>&1
else
if [ "$(id -u)" -ne 0 ]; then
pip3 install --upgrade --no-deps --force-reinstall "${_package}" --user > /dev/null 2>&1
else
pip3 install --upgrade --no-deps --force-reinstall "${_package}" > /dev/null 2>&1
fi
fi
if [ $? -ne 0 ]; then
print ${LEVEL_ERROR} "Install ${_package} failed."
return 1
fi
print ${LEVEL_INFO} "Install ${_package} success."
return 0
}
function implement_install() {
create_directory ${install_path}/${MSPTI_PATH} ${right}
create_directory ${install_path}/${MSPTI_INCLUDE_PATH} ${right}
create_directory ${install_path}/${MSPTI_LIB_PATH} ${right}
create_directory ${install_path}/${MSPTI_PYTHON_PATH} ${right}
create_directory ${install_path}/share/info/mspti ${right}
create_directory ${install_path}/${UNINSTALL_SCRIPT_DIR} ${right}
for header in "${MSPTI_HEADER[@]}"; do
copy_file ${header} ${install_path}/${MSPTI_INCLUDE_PATH}/${header} ${mspti_right}
done
copy_file ${LIBMSPTI} ${install_path}/${MSPTI_LIB_PATH}/${LIBMSPTI} ${mspti_right}
copy_file ${SAMPLES} ${install_path}/${MSPTI_PATH}/${SAMPLES} ${right}
copy_file ${UNINSTALL_SCRIPT} ${install_path}/${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT} ${right}
copy_file ${UTILS_SCRIPT} ${install_path}/${UNINSTALL_SCRIPT_DIR}/${UTILS_SCRIPT} ${right}
copy_file ${VERSION_INFO} ${install_path}/${MSPTI_SHARE_INFO}/${VERSION_INFO} ${right}
remove ${install_path}/python/site-packages/mspti-*.dist-info
remove ${install_path}/${MSPTI_PYTHON_PATH}/${MSPTI_WHL}
mspti_whl_name=$(echo ${MSPTI_WHL})
mspti_whl="${install_path}/${MSPTI_PYTHON_PATH}/${mspti_whl_name}"
copy_file "${mspti_whl_name}" "${mspti_whl}" "${right}"
install_whl_package "${pylocal}" "${mspti_whl}" "${install_path}/python/site-packages"
}
function copy_file() {
local filename=${1}
local target_file=$(readlink -f ${2})
local _right=${3}
if [ ! -f "${filename}" ] && [ ! -d "${filename}" ]; then
print ${LEVEL_ERROR} "${filename} does not exist."
return 1
fi
local parent_dir=$(dirname ${target_file})
local parent_right=$(stat -c '%a' "${parent_dir}")
chmod u+w "${parent_dir}"
if [ -f "${target_file}" ] || [ -d "${target_file}" ]; then
chmod -R u+w "${target_file}"
rm -rf "${target_file}"
fi
cp -r "${filename}" "${target_file}"
chmod -R "${_right}" "${target_file}"
chmod "${parent_right}" "${parent_dir}"
print ${LEVEL_INFO} "${filename} copy success."
return 0
}
function create_directory() {
local _dir=${1}
local _right=${2}
if [ ! -d "${_dir}" ]; then
local parent_dir=$(dirname ${_dir})
if [ ! -d "${parent_dir}" ]; then
print ${LEVEL_ERROR} "parent directory '${parent_dir}' does not exist"
exit 1
fi
local parent_right=$(stat -c '%a' ${parent_dir})
chmod u+w ${parent_dir}
mkdir -p ${_dir}
chmod ${_right} ${_dir}
chmod ${parent_right} ${parent_dir}
fi
}
function register_uninstall() {
local target_line='uninstall_package "share/info/mspti/script"'
if [ ! -f "${install_path}/${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT}" ]; then
print ${LEVEL_ERROR} "No such file: ${install_path}/${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT}"
fi
if [ ! -x "${install_path}/${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT}" ]; then
print ${LEVEL_ERROR} "The file ${install_path}/${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT} is not executable."
return 1
fi
if [ ! -f "${install_path}/${CANN_UNINSTALL_SCRIPT}" ]; then
print ${LEVEL_ERROR} "Failed to register uninstall script, no such file: ${install_path}/${CANN_UNINSTALL_SCRIPT}"
return 1
fi
if grep -qxF "${target_line}" "${install_path}/${CANN_UNINSTALL_SCRIPT}"; then
return 0
fi
local script_right=$(stat -c '%a' "${install_path}/${CANN_UNINSTALL_SCRIPT}")
chmod u+w "${install_path}/${CANN_UNINSTALL_SCRIPT}"
sed -i "/^exit /i uninstall_package \"share\/info\/mspti\/script\"" "${install_path}/${CANN_UNINSTALL_SCRIPT}"
chmod ${script_right} "${install_path}/${CANN_UNINSTALL_SCRIPT}"
}
source utils.sh
right=${user_right}
get_right
implement_install
if [ $? -eq 0 ]; then
register_uninstall
fi