Revert "xbps-src: multiple performance improvements."

This reverts commit 2a4e178e35.
This commit is contained in:
Jürgen Buchmüller 2019-07-05 12:08:45 +02:00
parent 3dc3a61144
commit 17ba00b095
13 changed files with 608 additions and 407 deletions

View file

@ -32,16 +32,16 @@ genpkg() {
_preserve=${preserve:+-p}
if [ -s ${PKGDESTDIR}/rdeps ]; then
_deps="$(<${PKGDESTDIR}/rdeps)"
_deps="$(cat ${PKGDESTDIR}/rdeps)"
fi
if [ -s ${PKGDESTDIR}/shlib-provides ]; then
_shprovides="$(<${PKGDESTDIR}/shlib-provides)"
_shprovides="$(cat ${PKGDESTDIR}/shlib-provides)"
fi
if [ -s ${PKGDESTDIR}/shlib-requires ]; then
_shrequires="$(<${PKGDESTDIR}/shlib-requires)"
_shrequires="$(cat ${PKGDESTDIR}/shlib-requires)"
fi
if [ -s ${XBPS_STATEDIR}/gitrev ]; then
_gitrevs="$(<${XBPS_STATEDIR}/gitrev)"
_gitrevs="$(cat ${XBPS_STATEDIR}/gitrev)"
fi
# Stripping whitespaces

View file

@ -5,7 +5,7 @@
# - Generates shlib-requires file for xbps-create(1)
add_rundep() {
local dep="$1" i= rpkgdep= _depname= found=
local dep="$1" i= rpkgdep= _depname= _rdeps= found=
_depname="$($XBPS_UHELPER_CMD getpkgdepname ${dep} 2>/dev/null)"
if [ -z "${_depname}" ]; then
@ -68,19 +68,26 @@ hook() {
exec < $depsftmp
while read f; do
lf=${f#${PKGDESTDIR}}
if [ "${skiprdeps/${lf}/}" != "${skiprdeps}" ]; then
msg_normal "Skipping dependency scan for ${lf}\n"
continue
fi
if [ "${skiprdeps/${lf}/}" != "${skiprdeps}" ]; then
msg_normal "Skipping dependency scan for ${lf}\n"
continue
fi
case "$(file -bi "$f")" in
application/x-*executable*|application/x-sharedlib*)
for nlib in $($OBJDUMP -p "$f"|grep NEEDED|awk '{print $2}'); do
[ -z "$verify_deps" ] && verify_deps="$nlib" && continue
found=0
if [ -z "$verify_deps" ]; then
verify_deps="$nlib"
continue
fi
for j in ${verify_deps}; do
[[ $j == $nlib ]] && found=1 && break
[ "$j" != "$nlib" ] && continue
found_dup=1
break
done
[[ $found -eq 0 ]] && verify_deps="$verify_deps $nlib"
if [ -z "$found_dup" ]; then
verify_deps="$verify_deps $nlib"
fi
unset found_dup
done
;;
esac
@ -90,13 +97,13 @@ hook() {
#
# Add required run time packages by using required shlibs resolved
# above, the mapping is done thru the common/shlibs file.
# above, the mapping is done thru the mapping_shlib_binpkg.txt file.
#
for f in ${verify_deps}; do
unset _f j rdep _rdep rdepcnt soname _pkgname _rdepver found
_f=$(echo "$f"|sed -E 's|\+|\\+|g')
rdep="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|cut -d ' ' -f2)"
rdepcnt="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|cut -d ' ' -f2|wc -l)"
rdep="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|awk '{print $2}')"
rdepcnt="$(grep -E "^${_f}[[:blank:]]+.*$" $mapshlibs|awk '{print $2}'|wc -l)"
if [ -z "$rdep" ]; then
# Ignore libs by current pkg
soname=$(find ${PKGDESTDIR} -name "$f")
@ -114,9 +121,15 @@ hook() {
_pkgname=$($XBPS_UHELPER_CMD getpkgname "$j")
# if there's a SONAME matching pkgname, use it.
for x in ${pkgname} ${subpackages}; do
[[ $_pkgname == $x ]] && found=1 && break
if [ "${_pkgname}" = "${x}" ]; then
found=1
break
fi
done
[[ $found ]] && _rdep=$j && break
if [ -n "$found" ]; then
_rdep=$j
break
fi
done
if [ -z "${_rdep}" ]; then
# otherwise pick up the first one.

View file

@ -119,7 +119,7 @@ hook() {
msg_red "${pkgver}: SONAME bump detected: ${libname}.so.${conflictRev} -> ${libname}.so.${rev}\n"
msg_red "${pkgver}: please update common/shlibs with this line: \"${libname}.so.${rev} ${pkgver}\"\n"
msg_red "${pkgver}: all reverse dependencies should also be revbumped to be rebuilt against ${libname}.so.${rev}:\n"
_revdeps=$($XBPS_QUERY_XCMD -Rs ${libname}.so -p shlib-requires|cut -d ' ' -f1)
_revdeps=$($XBPS_QUERY_XCMD -Rs ${libname}.so -p shlib-requires|awk '{print $1}')
for x in ${_revdeps}; do
msg_red " ${x%:}\n"
done
@ -128,7 +128,7 @@ hook() {
# Try to match provided shlibs in virtual packages.
for f in ${provides}; do
_vpkgname="$($XBPS_UHELPER_CMD getpkgname ${f} 2>/dev/null)"
_spkgname="$(grep "^${filename}" $mapshlibs | cut -d ' ' -f2)"
_spkgname="$(grep "^${filename}" $mapshlibs | awk '{print $2}')"
_libpkgname="$($XBPS_UHELPER_CMD getpkgname ${_spkgname} 2>/dev/null)"
if [ -z "${_spkgname}" -o -z "${_libpkgname}" ]; then
continue

View file

@ -43,6 +43,10 @@ if [ "$PKGNAME" != "$XBPS_TARGET_PKG" -o -z "$XBPS_SKIP_DEPS" ]; then
install_pkg_deps $PKGNAME $XBPS_TARGET_PKG pkg $XBPS_CROSS_BUILD $XBPS_CROSS_PREPARE || exit $?
fi
if [ -z "$XBPS_CROSS_PREPARE" ]; then
install_cross_pkg $XBPS_CROSS_BUILD || exit $?
fi
# Fetch distfiles after installing required dependencies,
# because some of them might be required for do_fetch().
$XBPS_LIBEXECDIR/xbps-src-dofetch.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1

View file

@ -1,9 +1,9 @@
# vim: set ts=4 sw=4 et:
#
setup_pkg_depends() {
local pkg="$1" out="$2" j _rpkgname _depname foo _deps
local pkg="$1" j _pkgdepname _pkgdep _rpkgname _depname _depver _replacement
if [[ $pkg ]]; then
if [ -n "$pkg" ]; then
# subpkg
if declare -f ${pkg}_package >/dev/null; then
${pkg}_package
@ -13,65 +13,85 @@ setup_pkg_depends() {
for j in ${depends}; do
_rpkgname="${j%\?*}"
_depname="${j#*\?}"
if [[ ${_rpkgname} == virtual ]]; then
if [ -s ${XBPS_DISTDIR}/etc/virtual ]; then
foo=$(egrep "^${_depname}[[:blank:]]" ${XBPS_DISTDIR}/etc/virtual|cut -d ' ' -f2)
elif [ -s ${XBPS_DISTDIR}/etc/defaults.virtual ]; then
foo=$(egrep "^${_depname}[[:blank:]]" ${XBPS_DISTDIR}/etc/defaults.virtual|cut -d ' ' -f2)
fi
if [ -z "$foo" ]; then
_pkgdepname="$($XBPS_UHELPER_CMD getpkgdepname ${_depname} 2>/dev/null)"
if [ -z "${_pkgdepname}" ]; then
_pkgdepname="$($XBPS_UHELPER_CMD getpkgname ${_depname} 2>/dev/null)"
fi
if [ -s ${XBPS_DISTDIR}/etc/virtual ]; then
_replacement=$(egrep "^${_pkgdepname:-${_depname}}[[:blank:]]" ${XBPS_DISTDIR}/etc/virtual|cut -d ' ' -f2)
elif [ -s ${XBPS_DISTDIR}/etc/defaults.virtual ]; then
_replacement=$(egrep "^${_pkgdepname:-${_depname}}[[:blank:]]" ${XBPS_DISTDIR}/etc/defaults.virtual|cut -d ' ' -f2)
fi
if [ "${_rpkgname}" = "virtual" ]; then
if [ -z "${_replacement}" ]; then
msg_error "$pkgver: failed to resolve virtual dependency for '$j' (missing from etc/virtual)\n"
fi
_deps+="$foo "
else
foo="$($XBPS_UHELPER_CMD getpkgdepname ${_depname} 2>/dev/null)"
if [ -z "$foo" ]; then
foo="$($XBPS_UHELPER_CMD getpkgname ${_depname} 2>/dev/null)"
[ -z "$foo" ] && foo="${_depname}"
_pkgdepname="$($XBPS_UHELPER_CMD getpkgdepname ${_replacement} 2>/dev/null)"
if [ -z "${_pkgdepname}" ]; then
_pkgdepname="$($XBPS_UHELPER_CMD getpkgname ${_replacement} 2>/dev/null)"
fi
_deps+="$foo "
if [ -z "${_pkgdepname}" ]; then
_pkgdepname="${_replacement}>=0"
fi
run_depends+=" ${_depname}?${_pkgdepname}"
#echo "Adding dependency virtual: ${_depname}?${_pkgdepname}"
else
if [ -z "${_pkgdepname}" ]; then
_pkgdep="${_depname}>=0"
else
_pkgdep="${_depname}"
fi
run_depends+=" ${_pkgdep}"
fi
run_depends+="${_depname} "
done
[[ $out && $_deps ]] && echo "$_deps"
return 0
for j in ${hostmakedepends}; do
_depname="${j%\?*}"
_depver=$(srcpkg_get_version ${_depname}) || exit $?
host_build_depends+=" ${_depname}-${_depver}"
done
if [ -n "$XBPS_CHECK_PKGS" ]; then
for j in ${checkdepends}; do
_depname="${j%\?*}"
_depver=$(srcpkg_get_version ${_depname}) || exit $?
host_check_depends+=" ${_depname}-${_depver}"
done
fi
for j in ${makedepends}; do
_depname="${j%\?*}"
_depver=$(srcpkg_get_version ${_depname}) || exit $?
build_depends+=" ${_depname}-${_depver}"
done
}
# Install a required package dependency, like:
#
# Install required package dependencies, like:
#
# xbps-install -AIy <pkgs>
#
# -A automatic mode
# -I to ignore file conflicts
# -y yes
# xbps-install -IAy <pkgname>
#
# Returns 0 if package already installed or installed successfully.
# Any other error number otherwise.
#
# SUCCESS (0): package installed successfully.
# ENOENT (2): package missing in repositories.
# ENXIO (6): package depends on invalid dependencies.
# EAGAIN (11): package conflicts.
# EEXIST (17): file conflicts in transaction (XBPS_FLAG_IGNORE_FILE_CONFLICTS unset)
# ENODEV (19): package depends on missing dependencies.
# ENOTSUP (95): no repositories registered.
#
install_pkg_from_repos() {
local cross="$1" rval tmplogf cmd
shift
[ $# -eq 0 ] && return 0
local pkg="$1" cross="$2" rval= tmplogf=
mkdir -p $XBPS_STATEDIR
tmplogf=${XBPS_STATEDIR}/xbps_${XBPS_TARGET_MACHINE}_bdep_${pkg}.log
cmd=$XBPS_INSTALL_CMD
[[ $cross ]] && cmd=$XBPS_INSTALL_XCMD
$cmd ${XBPS_SKIP_REMOTEREPOS:+-i} -AIy "$@" >$tmplogf 2>&1
if [ -n "$cross" ]; then
$XBPS_INSTALL_XCMD -IAy "$pkg" >$tmplogf 2>&1
else
$XBPS_INSTALL_CMD -IAy "$pkg" >$tmplogf 2>&1
fi
rval=$?
# xbps-install can return:
#
# SUCCESS (0): package installed successfully.
# ENOENT (2): package missing in repositories.
# ENXIO (6): package depends on invalid dependencies.
# EAGAIN (11): package conflicts.
# EEXIST (17): file conflicts in transaction (XBPS_FLAG_IGNORE_FILE_CONFLICTS unset)
# ENODEV (19): package depends on missing dependencies.
# ENOTSUP (95): no repositories registered.
#
case "$rval" in
0) # success, check if there are errors.
errortmpf=$(mktemp) || exit 1
@ -91,6 +111,39 @@ install_pkg_from_repos() {
return $rval
}
#
# Returns 0 if pkgpattern in $1 is matched against current installed
# package, 1 if no match and 2 if not installed.
#
check_pkgdep_matched() {
local pkg="$1" checkver="$2" cross="$3" uhelper= pkgn= iver=
[ "$build_style" = "meta" ] && return 2
[ -z "$pkg" ] && return 255
pkgn="$($XBPS_UHELPER_CMD getpkgdepname ${pkg} 2>/dev/null)"
if [ -z "$pkgn" ]; then
pkgn="$($XBPS_UHELPER_CMD getpkgname ${pkg} 2>/dev/null)"
fi
[ -z "$pkgn" ] && return 255
if [ -n "$cross" ]; then
uhelper="$XBPS_UHELPER_XCMD"
else
uhelper="$XBPS_UHELPER_CMD"
fi
iver="$($uhelper $checkver $pkgn)"
if [ $? -eq 0 -a -n "$iver" ]; then
$XBPS_UHELPER_CMD pkgmatch "${pkgn}-${iver}" "${pkg}"
[ $? -eq 1 ] && return 0
else
return 2
fi
return 1
}
#
# Returns 0 if pkgpattern in $1 is installed and greater than current
# installed package, otherwise 1.
@ -103,8 +156,12 @@ check_installed_pkg() {
pkgn="$($XBPS_UHELPER_CMD getpkgname ${pkg})"
[ -z "$pkgn" ] && return 2
uhelper=$XBPS_UHELPER_CMD
[[ $cross ]] && uhelper=$XBPS_UHELPER_XCMD
if [ -n "$cross" ]; then
uhelper="$XBPS_UHELPER_XCMD"
else
uhelper="$XBPS_UHELPER_CMD"
fi
iver="$($uhelper version $pkgn)"
if [ $? -eq 0 -a -n "$iver" ]; then
$XBPS_CMPVER_CMD "${pkgn}-${iver}" "${pkg}"
@ -114,20 +171,42 @@ check_installed_pkg() {
return 1
}
srcpkg_get_version() {
local pkg="$1"
# Run this in a sub-shell to avoid polluting our env.
(
unset XBPS_BINPKG_EXISTS
setup_pkg $pkg || exit $?
echo "${version}_${revision}"
) || msg_error "$pkgver: failed to transform dependency $pkg\n"
}
srcpkg_get_pkgver() {
local pkg="$1"
# Run this in a sub-shell to avoid polluting our env.
(
unset XBPS_BINPKG_EXISTS
setup_pkg $pkg || exit $?
echo "${sourcepkg}-${version}_${revision}"
) || msg_error "$pkgver: failed to transform dependency $pkg\n"
}
#
# Build all dependencies required to build and run.
# Installs all dependencies required by a package.
#
install_pkg_deps() {
local pkg="$1" targetpkg="$2" target="$3" cross="$4" cross_prepare="$5"
local _vpkg curpkgdepname
local i j found style
local rval _realpkg _vpkg _curpkg curpkgdepname pkgn iver
local i j found rundep repo style
local -a host_binpkg_deps binpkg_deps
local -a host_missing_deps missing_deps missing_rdeps
local -a host_binpkg_deps check_binpkg_deps binpkg_deps
local -a host_missing_deps check_missing_deps missing_deps missing_rdeps
[ -z "$pkgname" ] && return 2
[ -z "$XBPS_CHECK_PKGS" ] && unset checkdepends
[[ $build_style ]] && style=" [$build_style]"
setup_pkg_depends
[ -n "$build_style" ] && style=" [$build_style]"
for s in $build_helper; do
style+=" [$s]"
@ -139,151 +218,197 @@ install_pkg_deps() {
msg_normal "$pkgver: building${style} ...\n"
fi
if [ -z "$build_depends" -a -z "$host_build_depends" -a -z "$host_check_depends" -a -z "$run_depends" ]; then
return 0
fi
#
# Host build dependencies.
#
if [[ ${hostmakedepends} ]]; then
while read -r _depname _deprepover _depver _subpkg _repourl; do
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
echo " [host] ${_vpkg}: found (${_repourl})"
host_binpkg_deps+=("${_vpkg}")
for i in ${host_build_depends}; do
_realpkg=$($XBPS_UHELPER_CMD getpkgname "$i" 2>/dev/null)
check_pkgdep_matched "$i" version
local rval=$?
if [ $rval -eq 0 ]; then
echo " [host] ${i}: installed."
continue
elif [ $rval -eq 1 ]; then
iver=$($XBPS_UHELPER_CMD version ${_realpkg})
if [ $? -eq 0 -a -n "$iver" ]; then
echo " [host] ${i}: installed $iver (virtualpkg)."
continue
fi
# binary package not found
if [[ $_depname != $_subpkg ]]; then
# subpkg, check if it's a subpkg of itself
found=0
for f in ${subpackages}; do
if [[ ${_subpkg} == ${f} ]]; then
found=1
break
fi
done
if [[ $found -eq 1 ]]; then
echo " [host] ${_vpkg}: not found (subpkg, ignored)"
else
echo " [host] ${_vpkg}: not found"
host_missing_deps+=("$_vpkg")
fi
else
echo " [host] ${_vpkg}: not found"
host_missing_deps+=("$_vpkg")
echo " [host] ${i}: unresolved build dependency!"
return 1
fi
done < <($XBPS_CHECKVERS_CMD ${XBPS_SKIP_REMOTEREPOS:+-i} -D $XBPS_DISTDIR -sm ${hostmakedepends})
fi
else
repo=$($XBPS_QUERY_CMD -R -prepository ${i} 2>/dev/null)
if [ -n "${repo}" ]; then
echo " [host] ${i}: found ($repo)"
host_binpkg_deps+=("${i}")
continue
else
echo " [host] ${i}: not found."
if [ -z "$cross" ]; then
if [ "${_realpkg}" = "$targetpkg" ]; then
msg_error "${pkg}: [host] build loop detected: ${_realpkg} <-> ${targetpkg} [depends on itself]\n"
elif [ "${_realpkg}" = "$pkg" ]; then
msg_error "${pkg}: [host] build loop detected: $pkg <-> ${_realpkg}\n"
fi
fi
fi
fi
host_missing_deps+=("${i}")
done
#
# Host check dependencies.
#
if [[ ${checkdepends} ]] && [[ $XBPS_CHECK_PKGS ]]; then
while read -r _depname _deprepover _depver _subpkg _repourl; do
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
echo " [check] ${_vpkg}: found (${_repourl})"
host_binpkg_deps+=("${_vpkg}")
for i in ${host_check_depends}; do
_realpkg="$($XBPS_UHELPER_CMD getpkgname $i 2>/dev/null)"
check_pkgdep_matched "$i" version
local rval=$?
if [ $rval -eq 0 ]; then
echo " [check] ${i}: installed."
continue
elif [ $rval -eq 1 ]; then
iver=$($XBPS_UHELPER_CMD version ${_realpkg})
if [ $? -eq 0 -a -n "$iver" ]; then
echo " [check] ${i}: installed $iver (virtualpkg)."
continue
fi
# binary package not found
if [[ $_depname != $_subpkg ]]; then
# subpkg, check if it's a subpkg of itself
found=0
for f in ${subpackages}; do
if [[ ${_subpkg} == ${f} ]]; then
found=1
break
fi
done
if [[ $found -eq 1 ]]; then
echo " [check] ${_vpkg}: not found (subpkg, ignored)"
else
echo " [check] ${_vpkg}: not found"
host_missing_deps+=("$_vpkg")
fi
else
echo " [check] ${_vpkg}: not found"
host_missing_deps+=("$_vpkg")
echo " [check] ${i}: unresolved check dependency!"
return 1
fi
done < <($XBPS_CHECKVERS_CMD ${XBPS_SKIP_REMOTEREPOS:+-i} -D $XBPS_DISTDIR -sm ${checkdepends})
fi
else
repo=$($XBPS_QUERY_CMD -R -prepository ${i} 2>/dev/null)
if [ -n "${repo}" ]; then
echo " [check] ${i}: found ($repo)"
check_binpkg_deps+=("${i}")
continue
else
echo " [check] ${i}: not found."
if [ "${_realpkg}" = "$targetpkg" ]; then
msg_error "${pkg}: [check] build loop detected: ${_realpkg} <-> ${targetpkg} [depends on itself]!\n"
elif [ "${_realpkg}" = "$pkg" ]; then
msg_error "${pkg}: [check] build loop detected: $pkg <-> ${_realpkg}\n"
fi
fi
fi
check_missing_deps+=("${i}")
done
#
# Target build dependencies.
#
if [[ ${makedepends} ]]; then
while read -r _depname _deprepover _depver _subpkg _repourl; do
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
echo " [target] ${_vpkg}: found (${_repourl})"
binpkg_deps+=("${_vpkg}")
for i in ${build_depends}; do
_realpkg="$($XBPS_UHELPER_CMD getpkgname $i 2>/dev/null)"
# Check if dependency is a subpkg, if it is, ignore it.
unset found
for j in ${subpackages}; do
[ "$j" = "${_realpkg}" ] && found=1 && break
done
[ -n "$found" ] && continue
check_pkgdep_matched "${i}" version $cross
local rval=$?
if [ $rval -eq 0 ]; then
echo " [target] ${i}: installed."
continue
elif [ $rval -eq 1 ]; then
iver=$($XBPS_UHELPER_XCMD version ${_realpkg})
if [ $? -eq 0 -a -n "$iver" ]; then
echo " [target] ${i}: installed $iver (virtualpkg)."
continue
fi
# binary package not found
if [[ $_depname != $_subpkg ]]; then
# subpkg, check if it's a subpkg of itself
found=0
for f in ${subpackages}; do
if [[ ${_subpkg} == ${f} ]]; then
found=1
break
fi
done
if [[ $found -eq 1 ]]; then
echo " [target] ${_vpkg}: not found (subpkg, ignored)"
else
echo " [target] ${_vpkg}: not found"
missing_deps+=("$_vpkg")
fi
else
echo " [target] ${_vpkg}: not found"
missing_deps+=("$_vpkg")
echo " [target] ${i}: unresolved build dependency!"
return 1
fi
done < <($XBPS_CHECKVERS_XCMD ${XBPS_SKIP_REMOTEREPOS:+-i} -D $XBPS_DISTDIR -sm ${makedepends})
fi
else
repo=$($XBPS_QUERY_XCMD -R -prepository ${i} 2>/dev/null)
if [ -n "${repo}" ]; then
echo " [target] ${i}: found ($repo)"
binpkg_deps+=("${i}")
continue
else
echo " [target] ${i}: not found."
if [ "${_realpkg}" = "$targetpkg" ]; then
msg_error "${pkg}: [target] build loop detected: ${_realpkg} <-> ${targetpkg} [depends on itself]\n"
elif [ "${_realpkg}" = "$pkg" ]; then
msg_error "${pkg}: [target] build loop detected: $pkg <-> ${_realpkg}\n"
fi
fi
fi
missing_deps+=("${i}")
done
#
# Target run time dependencies
#
if [[ ${depends} ]]; then
_deps=$(setup_pkg_depends "" 1)
while read -r _depname _deprepover _depver _subpkg _repourl; do
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
echo " [runtime] ${_vpkg}: found (${_repourl})"
continue
for i in ${run_depends}; do
_realpkg="${i%\?*}"
_curpkg="${_realpkg}"
_vpkg="${i#*\?}"
if [ "${_realpkg}" != "${_vpkg}" ]; then
_realpkg="${_vpkg}"
else
unset _curpkg
fi
pkgn=$($XBPS_UHELPER_CMD getpkgdepname "${_realpkg}")
if [ -z "$pkgn" ]; then
pkgn=$($XBPS_UHELPER_CMD getpkgname "${_realpkg}")
if [ -z "$pkgn" ]; then
msg_error "$pkgver: invalid runtime dependency: ${_realpkg}\n"
fi
# binary package not found
if [[ $_depname != $_subpkg ]]; then
# subpkg, check if it's a subpkg of itself
found=0
for f in ${subpackages}; do
if [[ ${_subpkg} == ${f} ]]; then
found=1
break
fi
done
if [[ $found -eq 1 ]]; then
echo " [runtime] ${_vpkg}: not found (subpkg, ignored)"
fi
# Check if dependency is a subpkg, if it is, ignore it.
unset found
for j in ${subpackages}; do
[ "$j" = "${pkgn}" ] && found=1 && break
done
[ -n "$found" ] && continue
_props=$($XBPS_QUERY_XCMD -R -ppkgver,repository ${_realpkg} 2>/dev/null)
if [ -n "${_props}" ]; then
set -- ${_props}
$XBPS_UHELPER_CMD pkgmatch ${1} "${_realpkg}"
if [ $? -eq 1 ]; then
if [ -n "${_curpkg}" ]; then
echo " [runtime] ${_curpkg}:${_realpkg} (virtual dependency): found $1 ($2)"
else
echo " [runtime] ${_vpkg}: not found"
missing_rdeps+=("$_vpkg")
echo " [runtime] ${_realpkg}: found $1 ($2)"
fi
shift 2
continue
else
echo " [runtime] ${_vpkg}: not found"
missing_rdeps+=("$_vpkg")
if [ -n "${_curpkg}" ]; then
echo " [runtime] ${_curpkg}:${_realpkg} (virtual dependency): not found."
else
echo " [runtime] ${_realpkg}: not found."
fi
fi
done < <($XBPS_CHECKVERS_XCMD ${XBPS_SKIP_REMOTEREPOS:+-i} -D $XBPS_DISTDIR -sm $_deps)
unset _deps
fi
shift 2
else
if [ -n "${_curpkg}" ]; then
echo " [runtime] ${_curpkg}:${_realpkg} (virtual dependency): not found."
else
echo " [runtime] ${_realpkg}: not found."
fi
fi
if [ "${_realpkg}" = "$targetpkg" ]; then
msg_error "${pkg}: [run] build loop detected: ${_realpkg} <-> ${targetpkg} [depends on itself]\n"
elif [ "${_realpkg}" = "$pkg" ]; then
msg_error "${pkg}: [run] build loop detected: $pkg <-> ${_realpkg}\n"
fi
missing_rdeps+=("${_realpkg}")
done
if [ -n "$XBPS_BUILD_ONLY_ONE_PKG" ]; then
for i in ${host_missing_deps[@]}; do
msg_error "dep ${i} not found: -1 passed: instructed not to build\n"
done
for i in ${check_missing_deps[@]}; do
msg_error "dep ${i} not found: -1 passed: instructed not to build\n"
done
for i in ${missing_rdeps[@]}; do
msg_error "dep ${i} not found: -1 passed: instructed not to build\n"
done
@ -304,6 +429,18 @@ install_pkg_deps() {
host_binpkg_deps+=("$i")
done
# Missing check dependencies, build from srcpkgs.
for i in ${check_missing_deps[@]}; do
# packages not found in repos, install from source.
(
curpkgdepname=$($XBPS_UHELPER_CMD getpkgname "$i" 2>/dev/null)
setup_pkg $curpkgdepname
exec env XBPS_DEPENDENCY=1 XBPS_BINPKG_EXISTS=1 \
$XBPS_LIBEXECDIR/build.sh $sourcepkg $pkg $target || exit $?
) || exit $?
check_binpkg_deps+=("$i")
done
# Missing target dependencies, build from srcpkgs.
for i in ${missing_deps[@]}; do
# packages not found in repos, install from source.
@ -334,25 +471,22 @@ install_pkg_deps() {
) || exit $?
done
if [[ ${host_binpkg_deps} ]]; then
if [ -z "$XBPS_QUIET" ]; then
# normal messages in bold
[[ $NOCOLORS ]] || printf "\033[1m"
echo "=> $pkgver: installing host dependencies: ${host_binpkg_deps[@]} ..."
[[ $NOCOLORS ]] || printf "\033[m"
fi
install_pkg_from_repos "" "${host_binpkg_deps[@]}"
if [ "$pkg" != "$targetpkg" ]; then
msg_normal "$pkg: building${style} (dependency of $targetpkg) ...\n"
fi
if [[ ${binpkg_deps} ]]; then
if [ -z "$XBPS_QUIET" ]; then
# normal messages in bold
[[ $NOCOLORS ]] || printf "\033[1m"
echo "=> $pkgver: installing target dependencies: ${binpkg_deps[@]} ..."
[[ $NOCOLORS ]] || printf "\033[m"
fi
install_pkg_from_repos "$cross" "${binpkg_deps[@]}"
fi
for i in ${host_binpkg_deps[@]}; do
msg_normal "$pkgver: installing host dependency '$i' ...\n"
install_pkg_from_repos "${i}"
done
return 0
for i in ${check_binpkg_deps[@]}; do
msg_normal "$pkgver: installing check dependency '$i' ...\n"
install_pkg_from_repos "${i}"
done
for i in ${binpkg_deps[@]}; do
msg_normal "$pkgver: installing target dependency '$i' ...\n"
install_pkg_from_repos "$i" $cross
done
}

View file

@ -1,11 +1,36 @@
# vim: set ts=4 sw=4 et:
bulk_getlink() {
local p="${1##*/}"
local target="$(readlink $XBPS_SRCPKGDIR/$p)"
if [ $? -eq 0 -a -n "$target" ]; then
p=$target
fi
echo $p
}
bulk_sortdeps() {
local _pkgs _pkg pkgs pkg found f x tmpf
pkgs="$@"
tmpf=$(mktemp) || exit 1
_pkgs="$@"
# Iterate over the list and make sure that only real pkgs are
# added to our pkglist.
for pkg in ${_pkgs}; do
found=0
f=$(bulk_getlink $pkg)
for x in ${pkgs}; do
if [ "$x" = "${f}" ]; then
found=1
break
fi
done
if [ $found -eq 0 ]; then
pkgs+="${f} "
fi
done
tmpf=$(mktemp) || exit 1
# Now make the real dependency graph of all pkgs to build.
# Perform a topological sort of all pkgs but only with build dependencies
# that are found in previous step.
@ -13,11 +38,16 @@ bulk_sortdeps() {
_pkgs="$(./xbps-src show-build-deps $pkg 2>/dev/null)"
found=0
for x in ${_pkgs}; do
_pkg=$(bulk_getlink $x)
for f in ${pkgs}; do
[[ $f == $x ]] && found=1 && echo "${pkg} ${f}" >> $tmpf
if [ "${f}" != "${_pkg}" ]; then
continue
fi
found=1
echo "${pkg} ${f}" >> $tmpf
done
done
[[ $found -eq 0 ]] && echo "${pkg} ${pkg}" >> $tmpf
[ $found -eq 0 ] && echo "${pkg} ${pkg}" >> $tmpf
done
tsort $tmpf|tac
rm -f $tmpf
@ -33,7 +63,7 @@ bulk_build() {
msg_error "xbps-src: cannot find xbps-checkvers(8) command!\n"
fi
bulk_sortdeps "$(xbps-checkvers -f '%n' ${1} --distdir=$XBPS_DISTDIR)"
bulk_sortdeps "$(xbps-checkvers ${1} --distdir=$XBPS_DISTDIR | awk '{print $2}')"
}
bulk_update() {

View file

@ -169,7 +169,7 @@ chroot_handler() {
[ -z "$action" -a -z "$pkg" ] && return 1
case "$action" in
fetch|extract|patch|configure|build|check|install|pkg|bootstrap-update|chroot)
fetch|extract|patch|build|check|configure|install|install-destdir|pkg|build-pkg|bootstrap-update|chroot)
chroot_prepare || return $?
chroot_init || return $?
chroot_sync_repos || return $?
@ -181,13 +181,30 @@ chroot_handler() {
$XBPS_MASTERDIR $XBPS_DISTDIR "$XBPS_HOSTDIR" "$XBPS_CHROOT_CMD_ARGS" /bin/xbps-shell
rv=$?
else
[ -n "$XBPS_CROSS_BUILD" ] && arg="$arg -a $XBPS_CROSS_BUILD"
[ -n "$XBPS_KEEP_ALL" ] && arg="$arg -C"
[ -n "$NOCOLORS" ] && arg="$arg -L"
[ -n "$XBPS_BUILD_FORCEMODE" ] && arg="$arg -f"
[ -n "$XBPS_MAKEJOBS" ] && arg="$arg -j$XBPS_MAKEJOBS"
[ -n "$XBPS_DEBUG_PKGS" ] && arg="$arg -g"
[ -n "$XBPS_CHECK_PKGS" ] && arg="$arg -Q"
[ -n "$XBPS_BUILD_ONLY_ONE_PKG" ] && arg="$arg -1"
[ -n "$XBPS_QUIET" ] && arg="$arg -q"
[ -n "$XBPS_SKIP_DEPS" ] && arg="$arg -I"
[ -n "$XBPS_ALT_REPOSITORY" ] && arg="$arg -r $XBPS_ALT_REPOSITORY"
[ -n "$XBPS_USE_GIT_REVS" ] && arg="$arg -G"
[ -n "$XBPS_PKG_OPTIONS" ] && arg="$arg -o $XBPS_PKG_OPTIONS"
[ -n "$XBPS_TEMP_MASTERDIR" ] && arg="$arg -t -C"
[ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
action="$arg $action"
env -i -- PATH="/usr/bin" SHELL=/bin/sh \
HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \
$XBPS_COMMONDIR/chroot-style/${XBPS_CHROOT_CMD:=uunshare}.sh \
$XBPS_MASTERDIR $XBPS_DISTDIR "$XBPS_HOSTDIR" "$XBPS_CHROOT_CMD_ARGS" \
/void-packages/xbps-src $XBPS_OPTIONS $action $pkg
/void-packages/xbps-src $action $pkg
rv=$?
fi

View file

@ -294,7 +294,7 @@ setup_pkg() {
XBPS_REMOVE_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_REMOVE_CMD -r $XBPS_CROSS_BASE"
XBPS_RINDEX_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_RINDEX_CMD"
XBPS_UHELPER_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE xbps-uhelper -r $XBPS_CROSS_BASE"
XBPS_CHECKVERS_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE xbps-checkvers --repository=$XBPS_REPOSITORY"
else
export XBPS_TARGET_MACHINE=${XBPS_ARCH:-$XBPS_MACHINE}
unset XBPS_CROSS_BASE XBPS_CROSS_LDFLAGS XBPS_CROSS_FFLAGS
@ -307,7 +307,7 @@ setup_pkg() {
XBPS_REMOVE_XCMD="$XBPS_REMOVE_CMD"
XBPS_RINDEX_XCMD="$XBPS_RINDEX_CMD"
XBPS_UHELPER_XCMD="$XBPS_UHELPER_CMD"
XBPS_CHECKVERS_XCMD="$XBPS_CHECKVERS_CMD"
fi
export XBPS_INSTALL_XCMD XBPS_QUERY_XCMD XBPS_RECONFIGURE_XCMD \
@ -402,7 +402,7 @@ setup_pkg() {
arch="$XBPS_TARGET_MACHINE"
fi
if [ -n "$XBPS_BINPKG_EXISTS" ]; then
if [ "$($XBPS_QUERY_XCMD -i -R -ppkgver $pkgver 2>/dev/null)" = "$pkgver" ]; then
if [ "$($XBPS_QUERY_XCMD -R -ppkgver $pkgver 2>/dev/null)" = "$pkgver" ]; then
exit_and_cleanup
fi
fi
@ -556,17 +556,17 @@ setup_pkg() {
wrksrc="$XBPS_BUILDDIR/$wrksrc"
fi
if [ "$cross" -a "$nocross" -a "$show_problems" != "ignore-problems" ]; then
if [ "$cross" -a "$nocross" -a "z$show_problems" != "zignore-problems" ]; then
msg_red "$pkgver: cannot be cross compiled, exiting...\n"
msg_red "$pkgver: $nocross\n"
exit 2
elif [ "$broken" -a "$show_problems" != "ignore-problems" ]; then
elif [ "$broken" -a "z$show_problems" != "zignore-problems" ]; then
msg_red "$pkgver: cannot be built, it's currently broken; see the build log:\n"
msg_red "$pkgver: $broken\n"
exit 2
fi
if [ -n "$restricted" -a -z "$XBPS_ALLOW_RESTRICTED" -a "$show_problems" != "ignore-problems" ]; then
if [ -n "$restricted" -a -z "$XBPS_ALLOW_RESTRICTED" -a "z$show_problems" != "zignore-problems" ]; then
msg_red "$pkgver: does not allow redistribution of sources/binaries (restricted license).\n"
msg_red "If you really need this software, run 'echo XBPS_ALLOW_RESTRICTED=yes >> etc/conf'\n"
exit 2
@ -575,7 +575,9 @@ setup_pkg() {
export XBPS_STATEDIR="${XBPS_BUILDDIR}/.xbps-${sourcepkg}"
export XBPS_WRAPPERDIR="${XBPS_STATEDIR}/wrappers"
mkdir -p $XBPS_STATEDIR $XBPS_WRAPPERDIR
if [ -n "$bootstrap" -a -z "$CHROOT_READY" -o -n "$IN_CHROOT" ]; then
mkdir -p $XBPS_WRAPPERDIR
fi
source_file $XBPS_COMMONDIR/environment/build-style/${build_style}.sh

View file

@ -24,12 +24,11 @@ remove_pkg_cross_deps() {
prepare_cross_sysroot() {
local cross="$1"
local statefile="$XBPS_MASTERDIR/.xbps-${cross}-done"
[ -z "$cross" -o "$cross" = "" -o -f $statefile ] && return 0
[ -z "$cross" -o "$cross" = "" ] && return 0
# Check for cross-vpkg-dummy available for the target arch, otherwise build it.
pkg_available 'cross-vpkg-dummy>=0.31_1' $cross
pkg_available 'cross-vpkg-dummy>=0.30_1' $cross
if [ $? -eq 0 ]; then
$XBPS_LIBEXECDIR/build.sh cross-vpkg-dummy cross-vpkg-dummy pkg $cross init || return $?
fi
@ -41,7 +40,7 @@ prepare_cross_sysroot() {
errlog=$(mktemp) || exit 1
$XBPS_INSTALL_XCMD -Syfd cross-vpkg-dummy &>$errlog
rval=$?
if [ $rval -ne 0 ]; then
if [ $rval -ne 0 -a $rval -ne 17 ]; then
msg_red "failed to install cross-vpkg-dummy (error $rval)\n"
cat $errlog
rm -f $errlog
@ -49,15 +48,11 @@ prepare_cross_sysroot() {
fi
rm -f $errlog
# Create top level symlinks in sysroot.
XBPS_ARCH=$XBPS_TARGET_MACHINE xbps-reconfigure -r $XBPS_CROSS_BASE -f base-files &>/dev/null
XBPS_ARCH=$XBPS_TARGET_MACHINE xbps-reconfigure -r $XBPS_CROSS_BASE -f base-directories base-files &>/dev/null
# Create a sysroot/include and sysroot/lib symlink just in case.
ln -s usr/include ${XBPS_CROSS_BASE}/include
ln -s usr/lib ${XBPS_CROSS_BASE}/lib
install_cross_pkg $cross || return 1
touch -f $statefile
return 0
}

View file

@ -54,10 +54,6 @@ remove_pkg_autodeps() {
$XBPS_RECONFIGURE_CMD -a >> $tmplogf 2>&1
echo yes | $XBPS_REMOVE_CMD -Ryod >> $tmplogf 2>&1
rval=$?
if [ $rval -eq 0 ]; then
echo yes | $XBPS_REMOVE_CMD -Ryod >> $tmplogf 2>&1
rval=$?
fi
if [ $rval -ne 0 ]; then
msg_red "${pkgver:-xbps-src}: failed to remove autodeps: (returned $rval)\n"

View file

@ -61,22 +61,44 @@ show_avail() {
}
show_pkg_build_depends() {
local f x _pkgname _srcpkg found result
local f x _pkgname _srcpkg _dep found result
local _deps="$1"
result=$(mktemp) || exit 1
# build time deps
for f in ${_deps}; do
# ignore virtual deps
local _rpkg="${f%\?*}"
local _vpkg="${f#*\?}"
# ignore virtual dependencies
[[ ${f%\?*} != ${f#*\?} ]] && f=${f#*\?}
if [ "${_rpkg}" != "${_vpkg}" ]; then
f="${_vpkg}"
fi
unset found
# check for subpkgs
for x in ${subpackages}; do
[[ $f == $x ]] && found=1 && break
_pkgname="$($XBPS_UHELPER_CMD getpkgdepname $f 2>/dev/null)"
if [ -z "${_pkgname}" ]; then
_pkgname="$($XBPS_UHELPER_CMD getpkgname $f 2>/dev/null)"
fi
if [ "${_pkgname}" = "$x" ]; then
found=1
break
fi
done
[[ $found ]] && continue
_pkgname=${f/-32bit}
if [ -n "$found" ]; then
continue
fi
_pkgname="$($XBPS_UHELPER_CMD getpkgdepname $f 2>/dev/null)"
if [ -z "${_pkgname}" ]; then
_pkgname="$($XBPS_UHELPER_CMD getpkgname $f 2>/dev/null)"
fi
if [ -z "${_pkgname}" ]; then
_pkgname="$f"
fi
_pkgname=${_pkgname/-32bit}
_srcpkg=$(readlink -f ${XBPS_SRCPKGDIR}/${_pkgname})
_srcpkg=${_srcpkg##*/}
echo "${_srcpkg}" >> $result
@ -86,15 +108,18 @@ show_pkg_build_depends() {
}
show_pkg_build_deps() {
show_pkg_build_depends "${hostmakedepends} ${makedepends} $(setup_pkg_depends '' 1)"
setup_pkg_depends
show_pkg_build_depends "${host_build_depends} ${build_depends} ${run_depends}"
}
show_pkg_hostmakedepends() {
show_pkg_build_depends "${hostmakedepends}"
setup_pkg_depends
show_pkg_build_depends "${host_build_depends}"
}
show_pkg_makedepends() {
show_pkg_build_depends "${makedepends}"
setup_pkg_depends
show_pkg_build_depends "${build_depends}"
}
show_pkg_build_options() {