xbps-src: run pre-pkg hooks in the install to destdir target.

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!
This commit is contained in:
Juan RP 2014-08-25 22:34:13 +02:00
parent 94fd3b13b3
commit 3fdd0e180e
7 changed files with 132 additions and 137 deletions

View File

@ -26,56 +26,78 @@ for f in $XBPS_COMMONDIR/environment/install/*.sh; do
source_file "$f" source_file "$f"
done done
XBPS_INSTALL_DONE="$wrksrc/.xbps_${pkgname}_${XBPS_CROSS_BUILD}_install_done" XBPS_INSTALL_DONE="$wrksrc/.xbps_${sourcepkg}_${XBPS_CROSS_BUILD}_install_done"
XBPS_PRE_INSTALL_DONE="$wrksrc/.xbps_${pkgname}_${XBPS_CROSS_BUILD}_pre_install_done" XBPS_PRE_INSTALL_DONE="$wrksrc/.xbps_${sourcepkg}_${XBPS_CROSS_BUILD}_pre_install_done"
XBPS_POST_INSTALL_DONE="$wrksrc/.xbps_${pkgname}_${XBPS_CROSS_BUILD}_post_install_done" XBPS_POST_INSTALL_DONE="$wrksrc/.xbps_${sourcepkg}_${XBPS_CROSS_BUILD}_post_install_done"
if [ -f $XBPS_INSTALL_DONE ]; then if [ ! -f $XBPS_INSTALL_DONE ]; then
mkdir -p $XBPS_DESTDIR/$XBPS_CROSS_TRIPLET/$pkgname-$version
cd $wrksrc || msg_error "$pkgver: cannot access to wrksrc [$wrksrc]\n"
if [ -n "$build_wrksrc" ]; then
cd $build_wrksrc || msg_error "$pkgver: cannot access to build_wrksrc [$build_wrksrc]\n"
fi
run_pkg_hooks pre-install
# Run pre_install()
if [ ! -f $XBPS_PRE_INSTALL_DONE ]; then
if declare -f pre_install >/dev/null; then
run_func pre_install
touch -f $XBPS_PRE_INSTALL_DONE
fi
fi
# Run do_install()
if [ ! -f $XBPS_INSTALL_DONE ]; then
cd $wrksrc
[ -n "$build_wrksrc" ] && cd $build_wrksrc
if declare -f do_install >/dev/null; then
run_func do_install
else
if [ ! -r $XBPS_BUILDSTYLEDIR/${build_style}.sh ]; then
msg_error "$pkgver: cannot find build helper $XBPS_BUILDSTYLEDIR/${build_style}.sh!\n"
fi
. $XBPS_BUILDSTYLEDIR/${build_style}.sh
run_func do_install
fi
touch -f $XBPS_INSTALL_DONE
fi
# Run post_install()
if [ ! -f $XBPS_POST_INSTALL_DONE ]; then
cd $wrksrc
[ -n "$build_wrksrc" ] && cd $build_wrksrc
if declare -f post_install >/dev/null; then
run_func post_install
touch -f $XBPS_POST_INSTALL_DONE
fi
fi
exit 0 exit 0
fi fi
mkdir -p $XBPS_DESTDIR/$XBPS_CROSS_TRIPLET/$pkgname-$version # Always remove metadata files generated in a previous installation.
for f in INSTALL REMOVE files.plist props.plist rdeps shlib-provides shlib-requires; do
[ -f ${PKGDESTDIR}/${f} ] && rm -f ${PKGDESTDIR}/${f}
done
cd $wrksrc || msg_error "$pkgver: cannot access to wrksrc [$wrksrc]\n" # If it's a subpkg execute the pkg_install() function.
if [ -n "$build_wrksrc" ]; then if [ "$sourcepkg" != "$PKGNAME" ]; then
cd $build_wrksrc \ # Source all subpkg environment setup snippets.
|| msg_error "$pkgver: cannot access to build_wrksrc [$build_wrksrc]\n" for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do
fi source_file "$f"
done
${PKGNAME}_package
pkgname=$PKGNAME
run_pkg_hooks pre-install install -d $PKGDESTDIR
if declare -f pkg_install >/dev/null; then
# Run pre_install() export XBPS_PKGDESTDIR=1
if [ ! -f $XBPS_PRE_INSTALL_DONE ]; then run_func pkg_install
if declare -f pre_install >/dev/null; then
run_func pre_install
touch -f $XBPS_PRE_INSTALL_DONE
fi fi
fi fi
# Run do_install() setup_pkg_depends $pkgname
if [ ! -f $XBPS_INSTALL_DONE ]; then run_pkg_hooks post-install
cd $wrksrc
[ -n "$build_wrksrc" ] && cd $build_wrksrc
if declare -f do_install >/dev/null; then
run_func do_install
else
if [ ! -r $XBPS_BUILDSTYLEDIR/${build_style}.sh ]; then
msg_error "$pkgver: cannot find build helper $XBPS_BUILDSTYLEDIR/${build_style}.sh!\n"
fi
. $XBPS_BUILDSTYLEDIR/${build_style}.sh
run_func do_install
fi
touch -f $XBPS_INSTALL_DONE
fi
# Run post_install()
if [ ! -f $XBPS_POST_INSTALL_DONE ]; then
cd $wrksrc
[ -n "$build_wrksrc" ] && cd $build_wrksrc
if declare -f post_install >/dev/null; then
run_func post_install
touch -f $XBPS_POST_INSTALL_DONE
fi
fi
exit 0 exit 0

View File

@ -1,18 +1,20 @@
#!//bin/bash #!/bin/bash
# #
# vim: set ts=4 sw=4 et: # vim: set ts=4 sw=4 et:
# #
# Passed arguments: # Passed arguments:
# $1 - pkgname [REQUIRED] # $1 - pkgname [REQUIRED]
# $2 - cross target [OPTIONAL] # $2 - path to local repository [REQUIRED]
# $3 - cross-target [OPTIONAL]
if [ $# -lt 1 -o $# -gt 2 ]; then if [ $# -lt 2 -o $# -gt 3 ]; then
echo "$(basename $0): invalid number of arguments: pkgname [cross-target]" echo "$(basename $0): invalid number of arguments: pkgname repository [cross-target]"
exit 1 exit 1
fi fi
PKGNAME="$1" PKGNAME="$1"
XBPS_CROSS_BUILD="$2" XBPS_REPOSITORY="$2"
XBPS_CROSS_BUILD="$3"
. $XBPS_SHUTILSDIR/common.sh . $XBPS_SHUTILSDIR/common.sh
@ -22,43 +24,28 @@ done
setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD
for f in $XBPS_COMMONDIR/environment/install/*.sh; do for f in $XBPS_COMMONDIR/environment/pkg/*.sh; do
source_file "$f" source_file "$f"
done done
XBPS_PKG_DONE="$wrksrc/.xbps_${PKGNAME}_${XBPS_CROSS_BUILD}_pkg_done"
if [ -f $XBPS_PKG_DONE ]; then
exit 0
fi
#
# Always remove metadata files generated in a previous installation.
#
for f in INSTALL REMOVE files.plist props.plist rdeps shlib-provides shlib-requires; do
[ -f ${PKGDESTDIR}/${f} ] && rm -f ${PKGDESTDIR}/${f}
done
# If it's a subpkg execute the pkg_install() function.
if [ "$sourcepkg" != "$PKGNAME" ]; then if [ "$sourcepkg" != "$PKGNAME" ]; then
# Source all subpkg environment setup snippets. # Source all subpkg environment setup snippets.
for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do
source_file "$f" source_file "$f"
done done
${PKGNAME}_package ${PKGNAME}_package
pkgname=$PKGNAME pkgname=$PKGNAME
install -d $PKGDESTDIR
if declare -f pkg_install >/dev/null; then
export XBPS_PKGDESTDIR=1
run_func pkg_install
fi
fi fi
setup_pkg_depends $pkgname if [ -s $XBPS_MASTERDIR/.xbps_chroot_init ]; then
export XBPS_ARCH=$(cat $XBPS_MASTERDIR/.xbps_chroot_init)
fi
run_pkg_hooks post-install # Run do-pkg hooks.
run_pkg_hooks "do-pkg"
touch -f $XBPS_PKG_DONE # Run post-pkg hooks.
run_pkg_hooks post-pkg
exit 0 exit 0

View File

@ -1,54 +0,0 @@
#!/bin/bash
#
# vim: set ts=4 sw=4 et:
#
# Passed arguments:
# $1 - pkgname [REQUIRED]
# $2 - path to local repository [REQUIRED]
# $3 - cross-target [OPTIONAL]
if [ $# -lt 2 -o $# -gt 3 ]; then
echo "$(basename $0): invalid number of arguments: pkgname repository [cross-target]"
exit 1
fi
PKGNAME="$1"
XBPS_REPOSITORY="$2"
XBPS_CROSS_BUILD="$3"
. $XBPS_SHUTILSDIR/common.sh
for f in $XBPS_COMMONDIR/helpers/*.sh; do
source_file "$f"
done
setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD
for f in $XBPS_COMMONDIR/environment/pkg/*.sh; do
source_file "$f"
done
if [ "$sourcepkg" != "$PKGNAME" ]; then
# Source all subpkg environment setup snippets.
for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do
source_file "$f"
done
${PKGNAME}_package
pkgname=$PKGNAME
fi
if [ -s $XBPS_MASTERDIR/.xbps_chroot_init ]; then
export XBPS_ARCH=$(cat $XBPS_MASTERDIR/.xbps_chroot_init)
fi
# Run pre-pkg hooks.
run_pkg_hooks pre-pkg
# Run do-pkg hooks.
run_pkg_hooks "do-pkg"
# Run post-pkg hooks.
run_pkg_hooks post-pkg
exit 0

View File

@ -0,0 +1,43 @@
#!//bin/bash
#
# vim: set ts=4 sw=4 et:
#
# Passed arguments:
# $1 - pkgname [REQUIRED]
# $2 - cross target [OPTIONAL]
if [ $# -lt 1 -o $# -gt 2 ]; then
echo "$(basename $0): invalid number of arguments: pkgname [cross-target]"
exit 1
fi
PKGNAME="$1"
XBPS_CROSS_BUILD="$2"
. $XBPS_SHUTILSDIR/common.sh
for f in $XBPS_COMMONDIR/helpers/*.sh; do
source_file "$f"
done
setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD
for f in $XBPS_COMMONDIR/environment/install/*.sh; do
source_file "$f"
done
# If it's a subpkg execute the pkg_install() function.
if [ "$sourcepkg" != "$PKGNAME" ]; then
# Source all subpkg environment setup snippets.
for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do
source_file "$f"
done
${PKGNAME}_package
pkgname=$PKGNAME
fi
setup_pkg_depends $pkgname
run_pkg_hooks pre-pkg
exit 0

View File

@ -195,13 +195,8 @@ get_subpkgs() {
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
list+=" ${3%_package}"; shift 3 list+=" ${3%_package}"; shift 3
done done
# first all non development pkgs ...
for f in ${list}; do for f in ${list}; do
[[ $f =~ '-devel' ]] || echo "$f" echo "$f"
done
# ... and then only development pkgs
for f in ${list}; do
[[ $f =~ '-devel' ]] && echo "$f"
done done
} }

View File

@ -59,12 +59,14 @@ install_pkg() {
$XBPS_LIBEXECDIR/xbps-src-dobuild.sh $sourcepkg $cross || exit 1 $XBPS_LIBEXECDIR/xbps-src-dobuild.sh $sourcepkg $cross || exit 1
[ "$target" = "build" ] && return 0 [ "$target" = "build" ] && return 0
# Install sourcepkg into destdir. # Install pkgs into destdir.
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $sourcepkg $cross || exit 1 $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $sourcepkg $cross || exit 1
for subpkg in ${subpackages} ${sourcepkg}; do for subpkg in ${subpackages} ${sourcepkg}; do
# Run subpkg pkg_install func. $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $subpkg $cross || exit 1
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-dopkg.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 done
if [ "$XBPS_TARGET_PKG" = "$sourcepkg" ]; then if [ "$XBPS_TARGET_PKG" = "$sourcepkg" ]; then
@ -72,8 +74,8 @@ install_pkg() {
fi fi
# If install went ok generate the binpkgs. # If install went ok generate the binpkgs.
for subpkg in ${sourcepkg} ${subpackages}; do for subpkg in ${subpackages} ${sourcepkg}; do
$FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-genpkg.sh $subpkg "$XBPS_REPOSITORY" "$cross" || exit 1 $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-dopkg.sh $subpkg "$XBPS_REPOSITORY" "$cross" || exit 1
done done
# pkg cleanup # pkg cleanup