root/build-tools/mockchain-parallel

115 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
#
#
# Copyright (c) 2018 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
#
# The following tries to choose the best mockchain-parallel-* implementation
# to use, based on the version of /usr/bin/mockchain
#
# We want to use a compatable API, and to use the same python version.
#
interpreter_path () {
local path=${1}
if [ ! -f ${path} ]; then
return 1
fi
readlink -f $(head -n 1 ${path} | sed 's/^#!//' | awk '{ print $1 }' )
}
get__version__ () {
local path=${1}
local var=""
if [ ! -f ${path} ]; then
return 1
fi
if file ${path} | grep -q 'Python script'; then
ver=$(grep __VERSION__= ${path} | cut -d '=' -f 2 | sed 's/"//g')
else
ver=$(${path} --version 2> /dev/null)
fi
echo $ver
}
VC_LESS_THAN=0
VC_EQUAL=1
VC_GREATER_THAN=2
ver_comp () {
local v1=${1}
local v2=${2}
local v_greater=""
if [ "${v1}" == "${v2}" ]; then
echo $VC_EQUAL
return
fi
v_greater=$((echo ${v1}; echo ${v2}) | sort -rV | head -n 1)
if [ "${v1}" == "${v_greater}" ]; then
echo $VC_GREATER_THAN
return
fi
echo $VC_LESS_THAN
}
MOCKCHAIN_PATH="/usr/bin/mockchain"
MOCKCHAIN_PARALLEL_PATH_ROOT="${MY_REPO}/build-tools/mockchain-parallel"
DEFAULT_MOCKCHAIN_PARALLEL_PATH="${MOCKCHAIN_PARALLEL_PATH_ROOT}-1.3.4"
MOCKCHAIN_INTERPRETER_PATH=$(interpreter_path ${MOCKCHAIN_PATH})
MOCKCHAIN_VER=$(get__version__ ${MOCKCHAIN_PATH})
if [ -z "${MOCKCHAIN_VER}" ]; then
MOCKCHAIN_VER=$(rpm -q --queryformat '%{VERSION}' mock)
if [ -z "${MOCKCHAIN_VER}" ]; then
echo "Error: Failed to determine version of '${MOCKCHAIN_PATH}'"
exit 1
fi
fi
BEST_VER=""
BEST_MOCKCHAIN_PARALLEL_PATH=""
for MOCKCHAIN_PARALLEL_PATH in $(ls -1 ${MOCKCHAIN_PARALLEL_PATH_ROOT}-*); do
MOCKCHAIN_PARALLEL_VER=$(get__version__ ${MOCKCHAIN_PARALLEL_PATH})
if [ -z "${MOCKCHAIN_PARALLEL_VER}" ]; then
echo "Warning: Failed to determine version of '${MOCKCHAIN_PARALLEL_PATH}'"
continue
fi
COMP=$(ver_comp "${MOCKCHAIN_VER}" "${MOCKCHAIN_PARALLEL_VER}")
echo $MOCKCHAIN_PARALLEL_PATH $MOCKCHAIN_PARALLEL_VER $COMP
if [ $COMP -eq $VC_EQUAL ]; then
BEST_VER=${MOCKCHAIN_PARALLEL_VER}
BEST_MOCKCHAIN_PARALLEL_PATH=${MOCKCHAIN_PARALLEL_PATH}
break
fi
if [ $COMP -gt $VC_EQUAL ]; then
if [ "${BEST_VER}" == "" ]; then
BEST_VER=${MOCKCHAIN_PARALLEL_VER}
BEST_MOCKCHAIN_PARALLEL_PATH=${MOCKCHAIN_PARALLEL_PATH}
continue
fi
COMP=$(ver_comp ${MOCKCHAIN_PARALLEL_VER} ${BEST_VER})
if [ $COMP -gt $VC_EQUAL ]; then
BEST_VER=${MOCKCHAIN_PARALLEL_VER}
BEST_MOCKCHAIN_PARALLEL_PATH=${MOCKCHAIN_PARALLEL_PATH}
fi
fi
done
MOCKCHAIN_PARALLEL_INTERPRETER_PATH=${BEST_MOCKCHAIN_PARALLEL_INTERPRETER_PATH}
MOCKCHAIN_PARALLEL_PATH=${BEST_MOCKCHAIN_PARALLEL_PATH}
if [ -z "${MOCKCHAIN_PARALLEL_PATH}" ]; then
MOCKCHAIN_PARALLEL_PATH="${DEFAULT_MOCKCHAIN_PARALLEL_PATH}"
fi
echo "PYTHONDONTWRITEBYTECODE=true exec ${MOCKCHAIN_PARALLEL_INTERPRETER_PATH} ${MOCKCHAIN_PARALLEL_PATH} $@"
PYTHONDONTWRITEBYTECODE=true exec ${MOCKCHAIN_PARALLEL_INTERPRETER_PATH} ${MOCKCHAIN_PARALLEL_PATH} "$@"