xbps-src: make -N -a <target> work.
If required cross pkgs are not available in xbps repos, those are now built automagically.
This commit is contained in:
parent
a8549d6fb4
commit
03ef5b6804
4 changed files with 76 additions and 40 deletions
|
@ -7,8 +7,9 @@
|
|||
# $2 - target pkgname (origin) to build [REQUIRED]
|
||||
# $3 - xbps target [REQUIRED]
|
||||
# $4 - cross target [OPTIONAL]
|
||||
# $5 - internal [OPTIONAL]
|
||||
|
||||
if [ $# -lt 3 -o $# -gt 4 ]; then
|
||||
if [ $# -lt 3 -o $# -gt 5 ]; then
|
||||
echo "$(basename $0): invalid number of arguments: pkgname targetpkg target [cross-target]"
|
||||
exit 1
|
||||
fi
|
||||
|
@ -17,6 +18,7 @@ readonly PKGNAME="$1"
|
|||
readonly TARGET_PKG="$2"
|
||||
readonly TARGET="$3"
|
||||
readonly XBPS_CROSS_BUILD="$4"
|
||||
readonly XBPS_CROSS_PREPARE="$5"
|
||||
|
||||
for f in $XBPS_SHUTILSDIR/*.sh; do
|
||||
. $f
|
||||
|
@ -25,11 +27,15 @@ done
|
|||
setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD
|
||||
show_pkg_build_options
|
||||
check_pkg_arch $XBPS_CROSS_BUILD
|
||||
install_cross_pkg $XBPS_CROSS_BUILD
|
||||
|
||||
if [ -z "$XBPS_CROSS_PREPARE" ]; then
|
||||
install_cross_pkg $XBPS_CROSS_BUILD || exit $?
|
||||
prepare_cross_sysroot $XBPS_CROSS_BUILD || exit $?
|
||||
fi
|
||||
|
||||
# Install dependencies from binary packages
|
||||
if [ "$PKGNAME" != "$TARGET_PKG" -o -z "$XBPS_SKIP_DEPS" ]; then
|
||||
install_pkg_deps $PKGNAME $TARGET_PKG pkg $XBPS_CROSS_BUILD || exit $?
|
||||
install_pkg_deps $PKGNAME $TARGET_PKG pkg $XBPS_CROSS_BUILD $XBPS_CROSS_PREPARE || exit $?
|
||||
fi
|
||||
|
||||
# Fetch distfiles after installing required dependencies,
|
||||
|
|
|
@ -190,7 +190,7 @@ check_installed_pkg() {
|
|||
# Installs all dependencies required by a package.
|
||||
#
|
||||
install_pkg_deps() {
|
||||
local pkg="$1" targetpkg="$2" target="$3" cross="$4"
|
||||
local pkg="$1" targetpkg="$2" target="$3" cross="$4" cross_prepare="$5"
|
||||
local rval _realpkg curpkgdepname pkgn iver _props _exact
|
||||
local i j found rundep checkver
|
||||
|
||||
|
@ -364,7 +364,7 @@ install_pkg_deps() {
|
|||
setup_pkg $pkg $cross
|
||||
msg_error "$pkgver: required target dependency '$i' cannot be resolved!\n"
|
||||
fi
|
||||
exec env XBPS_BINPKG_EXISTS=1 $XBPS_LIBEXECDIR/build.sh $sourcepkg $pkg $target $cross || exit $?
|
||||
exec env XBPS_BINPKG_EXISTS=1 $XBPS_LIBEXECDIR/build.sh $sourcepkg $pkg $target $cross $cross_prepare || exit $?
|
||||
) || exit $?
|
||||
binpkg_deps+=("$i")
|
||||
done
|
||||
|
|
|
@ -22,49 +22,63 @@ remove_pkg_cross_deps() {
|
|||
rm -f $tmplogf
|
||||
}
|
||||
|
||||
prepare_cross_sysroot() {
|
||||
local cross="$1"
|
||||
|
||||
[ -z "$cross" -o "$cross" = "" ] && return 0
|
||||
|
||||
if [ ! -d ${XBPS_CROSS_BASE}/var/db/xbps/keys ]; then
|
||||
mkdir -p ${XBPS_CROSS_BASE}/var/db/xbps/keys
|
||||
cp ${XBPS_MASTERDIR}/var/db/xbps/keys/*.plist \
|
||||
${XBPS_CROSS_BASE}/var/db/xbps/keys
|
||||
fi
|
||||
|
||||
# Check for cross-vpkg-dummy available for the target arch, otherwise build it.
|
||||
pkg_available cross-vpkg-dummy $cross
|
||||
if [ $? -eq 0 ]; then
|
||||
$XBPS_LIBEXECDIR/build.sh cross-vpkg-dummy cross-vpkg-dummy pkg $cross init || return $?
|
||||
fi
|
||||
|
||||
errlog=$(mktemp)
|
||||
msg_normal "Installing $cross cross pkg: cross-vpkg-dummy ...\n"
|
||||
$XBPS_INSTALL_XCMD -r $XBPS_CROSS_BASE -SAyd cross-vpkg-dummy &>$errlog
|
||||
rval=$?
|
||||
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
|
||||
msg_error "cannot continue due to errors above\n"
|
||||
fi
|
||||
rm -f $errlog
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
install_cross_pkg() {
|
||||
local cross="$1" rval errlog
|
||||
|
||||
[ -z "$cross" -o "$cross" = "" ] && return 0
|
||||
|
||||
source_file ${XBPS_CROSSPFDIR}/${cross}.sh
|
||||
|
||||
if [ -z "$CHROOT_READY" ]; then
|
||||
echo "ERROR: chroot mode not activated (install a bootstrap)."
|
||||
exit 1
|
||||
elif [ -z "$IN_CHROOT" ]; then
|
||||
return 0
|
||||
# Check if the cross compiler pkg is available in repos, otherwise build it.
|
||||
msg_normal "Installing $cross cross compiler: cross-${XBPS_CROSS_TRIPLET} ...\n"
|
||||
pkg_available cross-${XBPS_CROSS_TRIPLET}
|
||||
rval=$?
|
||||
if [ $rval -eq 0 ]; then
|
||||
$XBPS_LIBEXECDIR/build.sh cross-${XBPS_CROSS_TRIPLET} cross-${XBPS_CROSS_TRIPLET} pkg || return $rval
|
||||
fi
|
||||
|
||||
# Install required pkgs for cross building.
|
||||
if [ "$XBPS_TARGET" != "remove-autodeps" ]; then
|
||||
errlog=$(mktemp)
|
||||
check_installed_pkg cross-${XBPS_CROSS_TRIPLET}-0.1_1
|
||||
if [ $? -ne 0 ]; then
|
||||
msg_normal "Installing cross pkg: cross-${XBPS_CROSS_TRIPLET} ...\n"
|
||||
$XBPS_INSTALL_CMD -Syd cross-${XBPS_CROSS_TRIPLET} &>$errlog
|
||||
rval=$?
|
||||
if [ $rval -ne 0 -a $rval -ne 17 ]; then
|
||||
msg_red "failed to install cross-${XBPS_CROSS_TRIPLET} (error $rval)\n"
|
||||
cat $errlog
|
||||
rm -f $errlog
|
||||
msg_error "cannot continue due to errors above\n"
|
||||
fi
|
||||
fi
|
||||
if [ ! -d ${XBPS_CROSS_BASE}/var/db/xbps/keys ]; then
|
||||
mkdir -p ${XBPS_CROSS_BASE}/var/db/xbps/keys
|
||||
cp ${XBPS_MASTERDIR}/var/db/xbps/keys/*.plist \
|
||||
${XBPS_CROSS_BASE}/var/db/xbps/keys
|
||||
fi
|
||||
$XBPS_INSTALL_CMD -r ${XBPS_CROSS_BASE} -SAyd cross-vpkg-dummy &>$errlog
|
||||
rval=$?
|
||||
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
|
||||
msg_error "cannot continue due to errors above\n"
|
||||
fi
|
||||
errlog=$(mktemp)
|
||||
$XBPS_INSTALL_CMD -Syd cross-${XBPS_CROSS_TRIPLET} &>$errlog
|
||||
rval=$?
|
||||
if [ $rval -ne 0 -a $rval -ne 17 ]; then
|
||||
msg_red "failed to install cross-${XBPS_CROSS_TRIPLET} (error $rval)\n"
|
||||
cat $errlog
|
||||
rm -f $errlog
|
||||
msg_error "cannot continue due to errors above\n"
|
||||
fi
|
||||
rm -f $errlog
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
remove_cross_pkg() {
|
||||
|
|
|
@ -24,6 +24,22 @@ check_pkg_arch() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Returns 1 if pkg is available in xbps repositories, 0 otherwise.
|
||||
pkg_available() {
|
||||
local pkg="$1" cross="$2" pkgver
|
||||
|
||||
if [ -n "$cross" ]; then
|
||||
pkgver=$($XBPS_QUERY_XCMD -R -ppkgver "${pkg}" 2>/dev/null)
|
||||
else
|
||||
pkgver=$($XBPS_QUERY_CMD -R -ppkgver "${pkg}" 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [ -z "$pkgver" ]; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
remove_pkg_autodeps() {
|
||||
local rval= tmplogf=
|
||||
|
||||
|
|
Loading…
Reference in a new issue