#!/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} "$@"