e01eb44f2c
Currently all flock packages have a common base version of 1.0 or 1.0.0 defined in specfiles. The build system creates tarballs and whl files with the base version (without TIS_PATCH_VER) and the version is also attached the generated RPM file (with TIS_PATCH_VER). This patch addes PBR (OpenStack's Python Build Reasonableness) support, which can generate the version by parsing semantically-versioned Git tags and walking the Git history back to the last release tag. A new variable named PBR_VERSION is supported in build_srpm.data. If its is not set, the build system still uses TIS_PATCH_VER like before. If PBR_VERSION=auto, the build system will generate the version by PBR and create tarballs, whl files and RPM files with this version. If PBR_VERSION is set manually, the build system will use it directly. Story: 2006703 Task: 37014 Change-Id: Ic377e3ae3344b291d2d9c0d0fca8f681d1a007b5 Signed-off-by: Bin Yang <bin.yang@intel.com> Signed-off-by: Yang, Bin <bin.yang@intel.com>
714 lines
22 KiB
Plaintext
714 lines
22 KiB
Plaintext
RPM_MACRO_FILE=/usr/lib/rpm/macros
|
|
|
|
spec_query_with_macros () {
|
|
local SPEC_FILE=$1; shift
|
|
local BUILD_DIR=$1; shift
|
|
local TIS_PATCH_VER=$1; shift
|
|
local PBR_VERSION=$1; shift
|
|
local rc
|
|
|
|
TMPSPEC=$(mktemp /tmp/spec-utils-XXXXXX)
|
|
cat $SPEC_FILE | sed 's/%(rpm.*)/%(echo 0)/' > $TMPSPEC
|
|
|
|
rpmspec -P \
|
|
--define="_tis_build_type ${BUILD_TYPE:-std}" \
|
|
--define="_tis_dist .tis" \
|
|
--define="tis_patch_ver ${TIS_PATCH_VER:-0}" \
|
|
--define="pbr_version ${PBR_VERSION:-0}" \
|
|
--define="platform_release ${PLATFORM_RELEASE:-00.00}" \
|
|
--define="%_topdir $BUILD_DIR" \
|
|
"${@}" \
|
|
$TMPSPEC 2>> /dev/null
|
|
rc=$?
|
|
|
|
\rm -f $TMPSPEC
|
|
return $rc
|
|
}
|
|
|
|
spec_evaluate () {
|
|
local RAW_VALUE=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
|
|
local LAST_SPEC_EVALUATING="$SPEC_EVALUATING"
|
|
local MACRO=""
|
|
local MACRO_VALUE=""
|
|
local RC=0
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
MACRO=$(expr match "$RAW_VALUE" '.*\(%{[^}]*}\)')
|
|
if [ $? -ne 0 ]; then
|
|
echo "$RAW_VALUE"
|
|
return 0
|
|
fi
|
|
|
|
if [ "x$SPEC_EVALUATING" == "x" ]; then
|
|
SPEC_EVALUATING=":$MACRO:"
|
|
else
|
|
echo "$SPEC_EVALUATING" | grep -q ":$MACRO:"
|
|
if [ $? -eq 0 ]; then
|
|
# Break a recursion
|
|
>&2 echo "ERROR: evaluation of macro '$MACRO' failed due to recursion"
|
|
return 1
|
|
fi
|
|
SPEC_EVALUATING="$LAST_SPEC_EVALUATING$MACRO:"
|
|
fi
|
|
|
|
# >&2 echo "spec_evaluate: MACRO=$MACRO"
|
|
local MACRO_NAME2=${MACRO#%{}
|
|
local MACRO_NAME3=${MACRO_NAME2%\}}
|
|
local PREFIX=$(expr match "$MACRO_NAME3" '\([!?]*\)')
|
|
local MACRO_NAME=${MACRO_NAME3#${PREFIX}}
|
|
|
|
# >&2 echo "spec_evaluate: MACRO_NAME=$MACRO_NAME"
|
|
MACRO_VALUE=$(spec_find_macro $MACRO_NAME $SPEC_FILE $RPMBUILD_DIR)
|
|
if [ $? -ne 0 ]; then
|
|
# >&2 echo "CALL: spec_find_global $MACRO_NAME $SPEC_FILE $RPMBUILD_DIR"
|
|
MACRO_VALUE=$(spec_find_global $MACRO_NAME $SPEC_FILE $RPMBUILD_DIR)
|
|
if [ $? -ne 0 ]; then
|
|
MACRO_VALUE=$(spec_find_tag ${MACRO_NAME^} $SPEC_FILE $RPMBUILD_DIR)
|
|
if [ $? -ne 0 ]; then
|
|
MACRO_VALUE=$(macro_find_macro $MACRO_NAME $SPEC_FILE $RPMBUILD_DIR)
|
|
if [ $? -ne 0 ]; then
|
|
MACRO_VALUE=$(spec_find_macro_via_rpm $MACRO_NAME $SPEC_FILE $RPMBUILD_DIR)
|
|
if [ $? -ne 0 ]; then
|
|
case "$MACRO_NAME" in
|
|
|
|
_tis_build_type) MACRO_VALUE="${BUILD_TYPE}" ;;
|
|
_tis_dist) MACRO_VALUE=".tis" ;;
|
|
tis_patch_ver) MACRO_VALUE="{TIS_PATCH_VER:-0}" ;;
|
|
pbr_version) MACRO_VALUE="{PBR_VERSION:-0}" ;;
|
|
platform_release) MACRO_VALUE="$PLATFORM_RELEASE" ;;
|
|
_topdir) MACRO_VALUE="$BUILD_DIR" ;;
|
|
*) ;;
|
|
esac
|
|
|
|
if [ "x$MACRO_VALUE" == "x" ]; then
|
|
if [ "$PREFIX" == '?' ]; then
|
|
>&2 echo "NOTE: optional macro '$MACRO' not defined"
|
|
else
|
|
>&2 echo "ERROR: evaluation of macro '$MACRO' failed"
|
|
SPEC_EVALUATING="$LAST_SPEC_EVALUATING"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# >&2 echo "spec_evaluate: MACRO_VALUE=$MACRO_VALUE"
|
|
local NEW_VALUE=${RAW_VALUE/"${MACRO}"/${MACRO_VALUE}}
|
|
# >&2 echo "spec_evaluate: NEW_VALUE=$NEW_VALUE"
|
|
spec_evaluate "$NEW_VALUE" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
RC=$?
|
|
SPEC_EVALUATING="$LAST_SPEC_EVALUATING"
|
|
return $RC
|
|
}
|
|
|
|
macro_find_macro () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local LINE=""
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
# >&2 echo "grep ^%$TARGET $RPM_MACRO_FILE"
|
|
LINE=$(grep "^%$TARGET[[:space:]]" $RPM_MACRO_FILE)
|
|
if [ $? -eq 1 ]; then
|
|
>&2 echo "macro_find_macro: '%$TARGET' not found in file '$RPM_MACRO_FILE'"
|
|
echo ""
|
|
return 1
|
|
fi
|
|
|
|
# >&2 echo "macro_find_macro: LINE=$LINE"
|
|
local UNSTRIPED_VALUE=${LINE##"%$TARGET"}
|
|
# >&2 echo "macro_find_macro: UNSTRIPED_VALUE=$UNSTRIPED_VALUE"
|
|
local RAW_VALUE=${UNSTRIPED_VALUE//[[:space:]]/}
|
|
# >&2 echo "macro_find_macro: RAW_VALUE=$RAW_VALUE"
|
|
|
|
spec_evaluate "$RAW_VALUE" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
}
|
|
|
|
spec_find_macro_via_rpm () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
|
|
local RC=1
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
# >&2 echo "spec_find_macro_via_rpm: TARGET=$TARGET"
|
|
|
|
case "$TARGET" in
|
|
name|_name) (spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{NAME}\n' | head -n 1 ; exit ${PIPESTATUS[0]} ); RC=$? ;;
|
|
version|_version) (spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{VERSION}\n' | head -n 1 ; exit ${PIPESTATUS[0]} ); RC=$? ;;
|
|
release|_release) (spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{RELEASE}\n' | head -n 1 ; exit ${PIPESTATUS[0]} ); RC=$? ;;
|
|
*) ;;
|
|
esac
|
|
|
|
if [ $RC -ne 0 ]; then
|
|
echo ""
|
|
fi
|
|
return $RC
|
|
}
|
|
|
|
spec_find_macro () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$2
|
|
local LINE=""
|
|
local UNSTRIPED_VALUE=""
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
# >&2 echo "grep ^%define $TARGET $SPEC_FILE"
|
|
LINE=$(grep "^%define $TARGET[[:space:]]" $SPEC_FILE)
|
|
if [ $? -eq 1 ]; then
|
|
LINE=$(grep "^%$TARGET[[:space:]]" $SPEC_FILE)
|
|
if [ $? -eq 1 ]; then
|
|
>&2 echo "spec_find_macro: Neither '%define $TARGET' nor '%$TARGET' found in file '$SPEC_FILE'"
|
|
echo ""
|
|
return 1
|
|
else
|
|
UNSTRIPED_VALUE=${LINE##"%$TARGET"}
|
|
fi
|
|
else
|
|
UNSTRIPED_VALUE=${LINE##"%define $TARGET"}
|
|
fi
|
|
|
|
# >&2 echo "spec_find_macro: LINE=$LINE"
|
|
# >&2 echo "spec_find_macro: UNSTRIPED_VALUE=$UNSTRIPED_VALUE"
|
|
local RAW_VALUE=$(echo ${UNSTRIPED_VALUE} | sed -e 's/^ *//g;s/ *$//g')
|
|
# >&2 echo "spec_find_macro: RAW_VALUE=$RAW_VALUE"
|
|
|
|
spec_evaluate "$RAW_VALUE" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
}
|
|
|
|
spec_find_tag () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local TIS_PATCH_VER=$4
|
|
local PBR_VERSION=$5
|
|
local LINE=""
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
local SPEC_FILE2=$(mktemp /tmp/tmp_spec_XXXXXX.spec)
|
|
|
|
# Note: ${VAR:-val} is bash syntax for providing a default value.
|
|
# ie. if $VAR is not set, use 'val' as default value
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} > $SPEC_FILE2
|
|
if [ $? != 0 ]; then
|
|
# spec_query_with_macros can fail on grub2 if it's just a spec file without SOURCES
|
|
\cp $SPEC_FILE $SPEC_FILE2
|
|
fi
|
|
|
|
LINE=$(grep "^$TARGET:" $SPEC_FILE2 | head -n 1 ; exit ${PIPESTATUS[0]})
|
|
if [ $? -eq 1 ]; then
|
|
LINE=$(grep "^${TARGET^}:" $SPEC_FILE2 | head -n 1 ; exit ${PIPESTATUS[0]})
|
|
if [ $? -eq 1 ]; then
|
|
>&2 echo "spec_find_tag: '$TARGET:' not found in file '$SPEC_FILE'"
|
|
echo ""
|
|
\rm -f "$SPEC_FILE2"
|
|
return 1
|
|
else
|
|
TARGET=${TARGET^}
|
|
fi
|
|
fi
|
|
\rm -f "$SPEC_FILE2"
|
|
|
|
# >&2 echo "spec_find_tag: LINE=$LINE"
|
|
local UNSTRIPED_VALUE=${LINE##"$TARGET:"}
|
|
# >&2 echo "spec_find_tag: UNSTRIPED_VALUE=$UNSTRIPED_VALUE"
|
|
local RAW_VALUE=${UNSTRIPED_VALUE//[[:space:]]/}
|
|
# >&2 echo "spec_find_tag: RAW_VALUE=$RAW_VALUE"
|
|
|
|
spec_evaluate "$RAW_VALUE" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
}
|
|
|
|
spec_find_multi_tag () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$2
|
|
local LINE=""
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
while read LINE; do
|
|
# >&2 echo "spec_find_multi_tag: LINE=$LINE"
|
|
local UNSTRIPED_VALUE=${LINE##"$TARGET:"}
|
|
# >&2 echo "spec_find_multi_tag: UNSTRIPED_VALUE=$UNSTRIPED_VALUE"
|
|
local RAW_VALUE=${UNSTRIPED_VALUE//[[:space:]]/}
|
|
# >&2 echo "spec_find_multi_tag: RAW_VALUE=$RAW_VALUE"
|
|
|
|
spec_evaluate "$RAW_VALUE" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
done << EOF
|
|
$(grep "^$TARGET:" $SPEC_FILE)
|
|
EOF
|
|
}
|
|
|
|
spec_find_global () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local LINE=""
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
LINE=$(grep "^%global $TARGET" $SPEC_FILE)
|
|
if [ $? -eq 1 ]; then
|
|
>&2 echo "spec_find_global: '%global $TARGET' not found in file '$SPEC_FILE'"
|
|
echo ""
|
|
return 1
|
|
fi
|
|
|
|
# >&2 echo "spec_find_global: LINE=$LINE"
|
|
local UNSTRIPED_VALUE=${LINE##"%global $TARGET"}
|
|
# >&2 echo "spec_find_global: UNSTRIPED_VALUE=$UNSTRIPED_VALUE"
|
|
local RAW_VALUE=${UNSTRIPED_VALUE//[[:space:]]/}
|
|
# >&2 echo "spec_find_global: RAW_VALUE=$RAW_VALUE"
|
|
|
|
spec_evaluate "$RAW_VALUE" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
}
|
|
|
|
spec_find_patch_args () {
|
|
local PATCH_NO="$1"
|
|
local SPEC_FILE="$2"
|
|
local RPMBUILD_DIR="$3"
|
|
|
|
local LINE=""
|
|
local LINE2=""
|
|
local PATCH_LOWER_NO
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
PATCH_LOWER_NO=$(echo $PATCH_NO | tr '[:upper:]' '[:lower:]')
|
|
LINE=$(grep "^%$PATCH_LOWER_NO " $SPEC_FILE)
|
|
if [ $? -eq 1 ]; then
|
|
>&2 echo "pec_find_patch_args: $PATCH_LOWER_NO' not found in file '$SPEC_FILE'"
|
|
echo "-p1"
|
|
return 1
|
|
fi
|
|
LINE2=$(spec_evaluate "$LINE" "$SPEC_FILE" "$RPMBUILD_DIR")
|
|
|
|
echo $LINE2 | cut -d' ' -f2- | sed 's/-b/-b -z/'
|
|
return 0
|
|
}
|
|
|
|
spec_list_packages () {
|
|
local SPEC_FILE=$1
|
|
local RPMBUILD_DIR=$2
|
|
|
|
local d=$(dirname $SPEC_FILE)
|
|
local bd=$(basename $d)
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
if [ "$bd" == "SPECS" ]; then
|
|
local dd=$(dirname $d)
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}\n' --define="%_topdir $dd" 2>> /dev/null
|
|
else
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}\n' 2>> /dev/null
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
# spec_query_with_macros can fail on grub2 if it's just a spec file without SOURCES
|
|
local NAME=$(spec_find_tag Name "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "ERROR: failed to evaluate 'Name'"
|
|
return 1
|
|
fi
|
|
echo $NAME
|
|
|
|
grep "^%package" $SPEC_FILE | while read PACKAGE_LINE; do
|
|
local PKG_NAME=""
|
|
local PKG_NAME_RAW=$(echo $PACKAGE_LINE | awk '{ print $2 }')
|
|
# >&2 echo "spec_list_packages: PKG_NAME_RAW=$PKG_NAME_RAW"
|
|
|
|
local PKG_NAME_TEMP=""
|
|
if [ "$PKG_NAME_RAW" == "-n" ]; then
|
|
PKG_NAME_TEMP=$(echo $PACKAGE_LINE | awk '{ print $3 }')
|
|
else
|
|
PKG_NAME_TEMP="$NAME-$PKG_NAME_RAW"
|
|
fi
|
|
# >&2 echo "spec_list_packages: PKG_NAME_TEMP=$PKG_NAME_TEMP"
|
|
|
|
PKG_NAME=$(spec_evaluate "$PKG_NAME_TEMP" "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "ERROR: failed to evaluate package '$PACKAGE_LINE'"
|
|
return 1
|
|
fi
|
|
# >&2 echo "spec_list_packages: PKG_NAME=$PKG_NAME"
|
|
|
|
echo $PKG_NAME
|
|
done
|
|
fi
|
|
}
|
|
|
|
spec_list_versioned_packages () {
|
|
local SPEC_FILE=$1
|
|
local RPMBUILD_DIR=$2
|
|
|
|
local d=$(dirname $SPEC_FILE)
|
|
local bd=$(basename $d)
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
if [ "$bd" == "SPECS" ]; then
|
|
local dd=$(dirname $d)
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}-%{version}\n' --define="%_topdir $dd" 2>> /dev/null
|
|
else
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}-%{version}\n' 2>> /dev/null
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
# spec_query_with_macros can fail on grub2 if it's just a spec file without SOURCES
|
|
local NAME=$(spec_find_tag Name "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "ERROR: failed to evaluate 'Name'"
|
|
return 1
|
|
fi
|
|
|
|
local VERSION=$(spec_find_tag Version "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
echo "$NAME-$VERSION"
|
|
|
|
grep "^%package" $SPEC_FILE | while read PACKAGE_LINE; do
|
|
local PKG_NAME=""
|
|
local PKG_NAME_RAW=$(echo $PACKAGE_LINE | awk '{ print $2 }')
|
|
# >&2 echo "spec_list_packages: PKG_NAME_RAW=$PKG_NAME_RAW"
|
|
|
|
local PKG_NAME_TEMP=""
|
|
if [ "$PKG_NAME_RAW" == "-n" ]; then
|
|
PKG_NAME_TEMP=$(echo $PACKAGE_LINE | awk '{ print $3 }')
|
|
else
|
|
PKG_NAME_TEMP="$NAME-$PKG_NAME_RAW"
|
|
fi
|
|
# >&2 echo "spec_list_packages: PKG_NAME_TEMP=$PKG_NAME_TEMP"
|
|
|
|
PKG_NAME=$(spec_evaluate "$PKG_NAME_TEMP" "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "ERROR: failed to evaluate package '$PACKAGE_LINE'"
|
|
return 1
|
|
fi
|
|
# >&2 echo "spec_list_packages: PKG_NAME=$PKG_NAME"
|
|
|
|
echo "$PKG_NAME-$VERSION"
|
|
done
|
|
fi
|
|
}
|
|
|
|
spec_name_ver_rel () {
|
|
local SPEC_FILE=$1
|
|
local RPMBUILD_DIR=$2
|
|
|
|
local NAME=""
|
|
local d=$(dirname $SPEC_FILE)
|
|
local bd=$(basename $d)
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
NAME=$(spec_find_tag Name $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
VERSION=$(spec_find_tag Version $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
RELEASE=$(spec_find_tag Release $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
echo "$NAME-$VERSION-$RELEASE"
|
|
}
|
|
|
|
spec_list_ver_rel_packages () {
|
|
local SPEC_FILE=$1
|
|
local RPMBUILD_DIR=$2
|
|
|
|
local d=$(dirname $SPEC_FILE)
|
|
local bd=$(basename $d)
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
if [ "$bd" == "SPECS" ]; then
|
|
local dd=$(dirname $d)
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}-%{version}-%{release}\n' --define="%_topdir $dd" 2>> /dev/null
|
|
else
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}-%{version}-%{release}\n' 2>> /dev/null
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
# spec_query_with_macros can fail on grub2 if it's just a spec file without SOURCES
|
|
local NAME=$(spec_find_tag Name "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "ERROR: failed to evaluate 'Name'"
|
|
return 1
|
|
fi
|
|
|
|
local VERSION=$(spec_find_tag Version "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
local RELEASE=$(spec_find_tag Release "$SPEC_FILE" $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0})
|
|
echo "$NAME-$VERSION-$RELEASE"
|
|
|
|
grep "^%package" $SPEC_FILE | while read PACKAGE_LINE; do
|
|
local PKG_NAME=""
|
|
local PKG_NAME_RAW=$(echo $PACKAGE_LINE | awk '{ print $2 }')
|
|
# >&2 echo "spec_list_packages: PKG_NAME_RAW=$PKG_NAME_RAW"
|
|
|
|
local PKG_NAME_TEMP=""
|
|
if [ "$PKG_NAME_RAW" == "-n" ]; then
|
|
PKG_NAME_TEMP=$(echo $PACKAGE_LINE | awk '{ print $3 }')
|
|
else
|
|
PKG_NAME_TEMP="$NAME-$PKG_NAME_RAW"
|
|
fi
|
|
# >&2 echo "spec_list_packages: PKG_NAME_TEMP=$PKG_NAME_TEMP"
|
|
|
|
PKG_NAME=$(spec_evaluate "$PKG_NAME_TEMP" "$SPEC_FILE" $RPMBUILD_DIR)
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "ERROR: failed to evaluate package '$PACKAGE_LINE'"
|
|
return 1
|
|
fi
|
|
# >&2 echo "spec_list_packages: PKG_NAME=$PKG_NAME"
|
|
|
|
echo "$PKG_NAME-$VERSION-$RELEASE"
|
|
done
|
|
fi
|
|
}
|
|
|
|
spec_list_ver_rel_arch_packages () {
|
|
local SPEC_FILE=$1
|
|
local RPMBUILD_DIR=$2
|
|
|
|
local d=$(dirname $SPEC_FILE)
|
|
local bd=$(basename $d)
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
if [ "$bd" == "SPECS" ]; then
|
|
local dd=$(dirname $d)
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}-%{version}-%{release}.%{arch}\n' --define="%_topdir $dd" 2>> /dev/null
|
|
else
|
|
spec_query_with_macros $SPEC_FILE $RPMBUILD_DIR ${TIS_PATCH_VER:-0} ${PBR_VERSION:-0} -q --qf '%{name}-%{version}-%{release}.%{arch}\n' 2>> /dev/null
|
|
fi
|
|
}
|
|
|
|
|
|
spec_match_package_list () {
|
|
local Aname=$1[@]
|
|
local TARGET_LIST=("${!Aname}")
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local TARGET
|
|
local PKG_NAME
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
for PKG_NAME in $(spec_list_packages "$SPEC_FILE" "$RPMBUILD_DIR"); do
|
|
for TARGET in "${TARGET_LIST[@]}"; do
|
|
if [ "$PKG_NAME" == "$TARGET" ]; then
|
|
echo $TARGET
|
|
return 0
|
|
fi
|
|
if [ $BUILD_TYPE == "rt" ] && [ "$PKG_NAME" == "${TARGET}-rt" ]; then
|
|
echo $TARGET
|
|
return 0
|
|
fi
|
|
done
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
|
|
spec_match_package () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local PKG_NAME
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
for PKG_NAME in $(spec_list_packages "$SPEC_FILE" "$RPMBUILD_DIR"); do
|
|
if [ "$PKG_NAME" == "$TARGET" ]; then
|
|
echo "found target '$TARGET' in file '$SPEC_FILE' as a package name"
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
spec_match_target_list () {
|
|
local Aname=$1[@]
|
|
local TARGET_LIST=("${!Aname}")
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local TARGET
|
|
local NAME
|
|
local SERVICE
|
|
local PKG_NAME
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
NAME=$(spec_find_tag Name "$SPEC_FILE" "$RPMBUILD_DIR")
|
|
if [ $? -eq 0 ]; then
|
|
for TARGET in "${TARGET_LIST[@]}"; do
|
|
if [ "$NAME" == "$TARGET" ]; then
|
|
echo $TARGET
|
|
return 0
|
|
fi
|
|
if [ $BUILD_TYPE == "rt" ] && [ "$NAME" == "${TARGET}-rt" ]; then
|
|
echo $TARGET
|
|
return 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
SERVICE=$(spec_find_global service "$SPEC_FILE" "$RPMBUILD_DIR")
|
|
if [ $? -eq 0 ]; then
|
|
for TARGET in "${TARGET_LIST[@]}"; do
|
|
if [ "$SERVICE" == "$TARGET" ]; then
|
|
echo $TARGET
|
|
return 0
|
|
fi
|
|
if [ $BUILD_TYPE == "rt" ] && [ "$SERVICE" == "${TARGET}-rt" ]; then
|
|
echo $TARGET
|
|
return 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
spec_match_package_list TARGET_LIST "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
if [ $? -eq 0 ]; then
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
|
|
spec_match_target () {
|
|
local TARGET=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
local NAME
|
|
local SERVICE
|
|
local PKG_NAME
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
NAME=$(spec_find_tag Name "$SPEC_FILE" "$RPMBUILD_DIR")
|
|
if [ $? -eq 0 ]; then
|
|
if [ "$NAME" == "$TARGET" ]; then
|
|
echo "found target '$TARGET' in file '$SPEC_FILE' as a name"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
SERVICE=$(spec_find_global service "$SPEC_FILE" "$RPMBUILD_DIR")
|
|
if [ $? -eq 0 ]; then
|
|
if [ "$SERVICE" == "$TARGET" ]; then
|
|
echo "found target '$TARGET' in file '$SPEC_FILE' as a service"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
spec_match_package "$TARGET" "$SPEC_FILE" "$RPMBUILD_DIR"
|
|
if [ $? -eq 0 ]; then
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
|
|
spec_build_requires () {
|
|
local SPEC_FILE=$1
|
|
local RPMBUILD_DIR=$2
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
spec_find_multi_tag BuildRequires $SPEC_FILE $RPMBUILD_DIR
|
|
}
|
|
|
|
spec_untar_path () {
|
|
local SOURCE_NO=$1
|
|
local SPEC_FILE=$2
|
|
local RPMBUILD_DIR=$3
|
|
|
|
>&2 echo "spec_untar_path SOURCE_NO=$SOURCE_NO SPEC_FILE=$SPEC_FILE"
|
|
local UNTAR_PATH="."
|
|
local AFTER=""
|
|
|
|
if [ "x$RPMBUILD_DIR" == "x" ];then
|
|
RPMBUILD_DIR=$(dirname $(dirname $SPEC_FILE))
|
|
fi
|
|
|
|
local SETUP=$(spec_find_macro setup $SPEC_FILE $RPMBUILD_DIR)
|
|
AFTER=$(echo "$SETUP " | grep -o -e "[-]a[[:space:]]$SOURCE_NO[[:space:]]")
|
|
if [ $? -eq 0 ]; then
|
|
UNTAR_PATH=$(echo "$SETUP " | grep -o -e '[-]n[[:space:]][^[:space:]]*[[:space:]]' | awk '{ print $2}'; exit ${PIPESTATUS[1]})
|
|
if [ $? -ne 0 ]; then
|
|
NAME=$( spec_find_tag Name $SPEC_FILE $RPMBUILD_DIR)
|
|
VERSION=$(spec_find_tag Version $SPEC_FILE $RPMBUILD_DIR)
|
|
UNTAR_PATH="$NAME-$VERSION"
|
|
fi
|
|
fi
|
|
echo "$UNTAR_PATH"
|
|
return 0
|
|
}
|
|
|
|
|
|
spec_validate_tis_release () {
|
|
local SPEC_FILE=$1
|
|
|
|
if rpmspec --define='_tis_dist .tis' -P $SPEC_FILE 2>/dev/null | grep '^Version:' | grep '%{pbr_version}'; then
|
|
return 0
|
|
fi
|
|
|
|
# TIS Release value must include either %{?_tis_dist}.%{tis_patch_ver} or %{tis_patch_ver}%{?_tis_dist}
|
|
# Because spec_query_with_macros defines tis_patch_ver, we're using rpmspec directly here
|
|
rpmspec --define='_tis_dist .tis' -P $SPEC_FILE 2>/dev/null | grep '^Release:' \
|
|
| grep -qvE '\.tis\.%{tis_patch_ver}|%{tis_patch_ver}\.tis'
|
|
if [ $? -eq 0 ]; then
|
|
>&2 echo "ERROR: $SPEC_FILE: 'Release' must use %{?_tis_dist}.%{tis_patch_ver} or %{tis_patch_ver}%{?_tis_dist}"
|
|
>&2 grep 'Release:' $SPEC_FILE
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|