root/build-tools/mockchain-parallel
Scott Little 77576b7207 Add support CentOS-8/dnf/mock-2.6 based builds
This update will retain support for CentOS-7/yum/mock-1.4 based builds.
The build environment will be queried to discover which environment
it is building in, and modify the commands we issue accordingly.

In CentOS 8, DNF replaces both YUM and REPOQUERY.
While DNF tries to be a transparent replacement of the old tools,
there are also subtle changes to the supported arguments.

I will provide independent mock.cfg.prototypes for centos7 vs centos8.
Changes in generate-centos-repo.sh under stx-tools will be required to
select the correct prototype.

Add support for mock 2.6. Mock 2.6 is python 3, and it processes the
'root' and 'rootdir' arguments slightly differently.

Also change the order of arguments to tar within default_build_srpm.
The latest tar only honors '--exclude' if it precedes other arguments.

Story: 2006729
Depends-On: https://review.opendev.org/762700
Signed-off-by: Scott Little <scott.little@windriver.com>
Change-Id: I826be2051e535e6a4c08ad17124f453b04210668
2020-12-08 14:13:28 -05:00

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