
The prepare-32bit hook has been moved to the pre-pkg stage and now those hooks are executed as part of the install phase. That means that pre-pkg hooks are now independently run for the subpkgs and the sourcepkg after the install-destdir phase and pre/do/install hooks. As bonus, finally correct rdeps can now be collected for the 32bit pkgs and works for all them, without the need to sort the order of subpkgs!
159 lines
4.9 KiB
Bash
159 lines
4.9 KiB
Bash
# vim: set ts=4 sw=4 et:
|
|
|
|
check_pkg_arch() {
|
|
local cross="$1"
|
|
|
|
if [ -n "$BEGIN_INSTALL" -a -n "$only_for_archs" ]; then
|
|
if [ -n "$cross" ]; then
|
|
_arch="$XBPS_TARGET_MACHINE"
|
|
elif [ -n "$XBPS_ARCH" ]; then
|
|
_arch="$XBPS_ARCH"
|
|
else
|
|
_arch="$XBPS_MACHINE"
|
|
fi
|
|
for f in ${only_for_archs}; do
|
|
if [ "$f" = "${_arch}" ]; then
|
|
found=1
|
|
break
|
|
fi
|
|
done
|
|
if [ -z "$found" ]; then
|
|
msg_red "$pkgname: this package cannot be built for ${_arch}.\n"
|
|
exit 0
|
|
fi
|
|
fi
|
|
}
|
|
|
|
install_pkg() {
|
|
local target="$1" cross="$2" lrepo subpkg opkg
|
|
|
|
[ -z "$pkgname" ] && return 1
|
|
|
|
show_pkg_build_options
|
|
check_pkg_arch $cross
|
|
install_cross_pkg $cross
|
|
|
|
if [ -z "$XBPS_SKIP_DEPS" ]; then
|
|
install_pkg_deps $sourcepkg $cross || return 1
|
|
if [ "$TARGETPKG_PKGDEPS_DONE" ]; then
|
|
setup_pkg $XBPS_TARGET_PKG $cross
|
|
unset TARGETPKG_PKGDEPS_DONE
|
|
install_cross_pkg $cross
|
|
fi
|
|
fi
|
|
|
|
# Fetch distfiles after installing required dependencies,
|
|
# because some of them might be required for do_fetch().
|
|
$XBPS_LIBEXECDIR/xbps-src-dofetch.sh $sourcepkg $cross || exit 1
|
|
[ "$target" = "fetch" ] && return 0
|
|
|
|
# Fetch, extract, build and install into the destination directory.
|
|
$XBPS_LIBEXECDIR/xbps-src-doextract.sh $sourcepkg $cross || exit 1
|
|
[ "$target" = "extract" ] && return 0
|
|
|
|
# Run configure phase
|
|
$XBPS_LIBEXECDIR/xbps-src-doconfigure.sh $sourcepkg $cross || exit 1
|
|
[ "$target" = "configure" ] && return 0
|
|
|
|
# Run build phase
|
|
$XBPS_LIBEXECDIR/xbps-src-dobuild.sh $sourcepkg $cross || exit 1
|
|
[ "$target" = "build" ] && return 0
|
|
|
|
# Install pkgs into destdir.
|
|
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $sourcepkg $cross || exit 1
|
|
|
|
for subpkg in ${subpackages} ${sourcepkg}; do
|
|
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $subpkg $cross || exit 1
|
|
done
|
|
for subpkg in ${subpackages} ${sourcepkg}; do
|
|
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-prepkg.sh $subpkg $cross || exit 1
|
|
done
|
|
|
|
if [ "$XBPS_TARGET_PKG" = "$sourcepkg" ]; then
|
|
[ "$target" = "install" -o "$target" = "install-destdir" ] && return 0
|
|
fi
|
|
|
|
# If install went ok generate the binpkgs.
|
|
for subpkg in ${subpackages} ${sourcepkg}; do
|
|
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-dopkg.sh $subpkg "$XBPS_REPOSITORY" "$cross" || exit 1
|
|
done
|
|
|
|
# pkg cleanup
|
|
if declare -f do_clean >/dev/null; then
|
|
run_func do_clean
|
|
fi
|
|
|
|
opkg=$pkgver
|
|
if [ -z "$XBPS_KEEP_ALL" ]; then
|
|
remove_pkg_autodeps
|
|
remove_pkg_wrksrc
|
|
setup_pkg $sourcepkg $cross
|
|
remove_pkg $cross
|
|
fi
|
|
|
|
# If base-chroot not installed, install binpkg into masterdir
|
|
# from local repository.
|
|
if [ -z "$CHROOT_READY" ]; then
|
|
msg_normal "Installing $opkg into masterdir...\n"
|
|
local _log=$(mktemp --tmpdir|| exit 1)
|
|
if [ -n "$XBPS_BUILD_FORCEMODE" ]; then
|
|
local _flags="-f"
|
|
fi
|
|
$XBPS_INSTALL_CMD ${_flags} -y $opkg >${_log} 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
msg_red "Failed to install $opkg into masterdir, see below for errors:\n"
|
|
cat ${_log}
|
|
rm -f ${_log}
|
|
msg_error "Cannot continue!"
|
|
fi
|
|
rm -f ${_log}
|
|
fi
|
|
|
|
if [ "$XBPS_TARGET_PKG" = "$sourcepkg" ]; then
|
|
# Package built successfully. Exit directly due to nested install_pkg
|
|
# and install_pkg_deps functions.
|
|
remove_cross_pkg $cross
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
remove_pkg_wrksrc() {
|
|
if [ -d "$wrksrc" ]; then
|
|
msg_normal "$pkgver: cleaning build directory...\n"
|
|
rm -rf $wrksrc
|
|
fi
|
|
}
|
|
|
|
remove_pkg() {
|
|
local cross="$1" _destdir f
|
|
|
|
[ -z $pkgname ] && msg_error "unexistent package, aborting.\n"
|
|
|
|
if [ -n "$cross" ]; then
|
|
_destdir="$XBPS_DESTDIR/$XBPS_CROSS_TRIPLET"
|
|
else
|
|
_destdir="$XBPS_DESTDIR"
|
|
fi
|
|
|
|
[ ! -d ${_destdir} ] && return
|
|
|
|
for f in ${sourcepkg} ${subpackages}; do
|
|
if [ -d "${_destdir}/${f}-${version}" ]; then
|
|
msg_normal "$f: removing files from destdir...\n"
|
|
rm -rf ${_destdir}/${f}-${version}
|
|
fi
|
|
if [ -d "${_destdir}/${f}-dbg-${version}" ]; then
|
|
msg_normal "$f: removing dbg files from destdir...\n"
|
|
rm -rf ${_destdir}/${f}-dbg-${version}
|
|
fi
|
|
if [ -d "${_destdir}/${f}-32bit-${version}" ]; then
|
|
msg_normal "$f: removing 32bit files from destdir...\n"
|
|
rm -rf ${_destdir}/${f}-32bit-${version}
|
|
fi
|
|
rm -f $wrksrc/.xbps_${f}_${cross}_pre_install_done
|
|
rm -f $wrksrc/.xbps_${f}_${cross}_install_done
|
|
rm -f $wrksrc/.xbps_${f}_${cross}_post_install_done
|
|
rm -f $wrksrc/.xbps_${f}_${cross}_pkg_done
|
|
rm -f $wrksrc/.xbps_${f}_${cross}_strip_done
|
|
done
|
|
}
|