From 3fdd0e180eb52a6e497bebff07bbf57cbde63b52 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Mon, 25 Aug 2014 22:34:13 +0200 Subject: [PATCH] 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! --- .../02-prepare-32bit.sh} | 0 common/xbps-src/libexec/xbps-src-doinstall.sh | 106 +++++++++++------- common/xbps-src/libexec/xbps-src-dopkg.sh | 47 +++----- common/xbps-src/libexec/xbps-src-genpkg.sh | 54 --------- common/xbps-src/libexec/xbps-src-prepkg.sh | 43 +++++++ common/xbps-src/shutils/common.sh | 7 +- common/xbps-src/shutils/pkgtarget.sh | 12 +- 7 files changed, 132 insertions(+), 137 deletions(-) rename common/hooks/{post-install/06-prepare-32bit.sh => pre-pkg/02-prepare-32bit.sh} (100%) delete mode 100755 common/xbps-src/libexec/xbps-src-genpkg.sh create mode 100755 common/xbps-src/libexec/xbps-src-prepkg.sh diff --git a/common/hooks/post-install/06-prepare-32bit.sh b/common/hooks/pre-pkg/02-prepare-32bit.sh similarity index 100% rename from common/hooks/post-install/06-prepare-32bit.sh rename to common/hooks/pre-pkg/02-prepare-32bit.sh diff --git a/common/xbps-src/libexec/xbps-src-doinstall.sh b/common/xbps-src/libexec/xbps-src-doinstall.sh index f56104e76f7..47928f6339a 100755 --- a/common/xbps-src/libexec/xbps-src-doinstall.sh +++ b/common/xbps-src/libexec/xbps-src-doinstall.sh @@ -26,56 +26,78 @@ for f in $XBPS_COMMONDIR/environment/install/*.sh; do source_file "$f" done -XBPS_INSTALL_DONE="$wrksrc/.xbps_${pkgname}_${XBPS_CROSS_BUILD}_install_done" -XBPS_PRE_INSTALL_DONE="$wrksrc/.xbps_${pkgname}_${XBPS_CROSS_BUILD}_pre_install_done" -XBPS_POST_INSTALL_DONE="$wrksrc/.xbps_${pkgname}_${XBPS_CROSS_BUILD}_post_install_done" +XBPS_INSTALL_DONE="$wrksrc/.xbps_${sourcepkg}_${XBPS_CROSS_BUILD}_install_done" +XBPS_PRE_INSTALL_DONE="$wrksrc/.xbps_${sourcepkg}_${XBPS_CROSS_BUILD}_pre_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 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 [ -n "$build_wrksrc" ]; then - cd $build_wrksrc \ - || msg_error "$pkgver: cannot access to build_wrksrc [$build_wrksrc]\n" -fi +# 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 -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 + install -d $PKGDESTDIR + if declare -f pkg_install >/dev/null; then + export XBPS_PKGDESTDIR=1 + run_func pkg_install 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 +setup_pkg_depends $pkgname +run_pkg_hooks post-install exit 0 diff --git a/common/xbps-src/libexec/xbps-src-dopkg.sh b/common/xbps-src/libexec/xbps-src-dopkg.sh index e16bba7aa08..107b9d56b43 100755 --- a/common/xbps-src/libexec/xbps-src-dopkg.sh +++ b/common/xbps-src/libexec/xbps-src-dopkg.sh @@ -1,18 +1,20 @@ -#!//bin/bash +#!/bin/bash # # vim: set ts=4 sw=4 et: # # Passed arguments: -# $1 - pkgname [REQUIRED] -# $2 - cross target [OPTIONAL] +# $1 - pkgname [REQUIRED] +# $2 - path to local repository [REQUIRED] +# $3 - cross-target [OPTIONAL] -if [ $# -lt 1 -o $# -gt 2 ]; then - echo "$(basename $0): invalid number of arguments: pkgname [cross-target]" +if [ $# -lt 2 -o $# -gt 3 ]; then + echo "$(basename $0): invalid number of arguments: pkgname repository [cross-target]" exit 1 fi PKGNAME="$1" -XBPS_CROSS_BUILD="$2" +XBPS_REPOSITORY="$2" +XBPS_CROSS_BUILD="$3" . $XBPS_SHUTILSDIR/common.sh @@ -22,43 +24,28 @@ done 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" 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 # Source all subpkg environment setup snippets. for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do source_file "$f" done + ${PKGNAME}_package pkgname=$PKGNAME - - install -d $PKGDESTDIR - if declare -f pkg_install >/dev/null; then - export XBPS_PKGDESTDIR=1 - run_func pkg_install - 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 diff --git a/common/xbps-src/libexec/xbps-src-genpkg.sh b/common/xbps-src/libexec/xbps-src-genpkg.sh deleted file mode 100755 index 90ca2385774..00000000000 --- a/common/xbps-src/libexec/xbps-src-genpkg.sh +++ /dev/null @@ -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 diff --git a/common/xbps-src/libexec/xbps-src-prepkg.sh b/common/xbps-src/libexec/xbps-src-prepkg.sh new file mode 100755 index 00000000000..f46f583747d --- /dev/null +++ b/common/xbps-src/libexec/xbps-src-prepkg.sh @@ -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 diff --git a/common/xbps-src/shutils/common.sh b/common/xbps-src/shutils/common.sh index e9343d3e181..a3cbe5bde0e 100644 --- a/common/xbps-src/shutils/common.sh +++ b/common/xbps-src/shutils/common.sh @@ -195,13 +195,8 @@ get_subpkgs() { while [ $# -gt 0 ]; do list+=" ${3%_package}"; shift 3 done - # first all non development pkgs ... for f in ${list}; do - [[ $f =~ '-devel' ]] || echo "$f" - done - # ... and then only development pkgs - for f in ${list}; do - [[ $f =~ '-devel' ]] && echo "$f" + echo "$f" done } diff --git a/common/xbps-src/shutils/pkgtarget.sh b/common/xbps-src/shutils/pkgtarget.sh index 24e9d467aa0..13a36b25331 100644 --- a/common/xbps-src/shutils/pkgtarget.sh +++ b/common/xbps-src/shutils/pkgtarget.sh @@ -59,12 +59,14 @@ install_pkg() { $XBPS_LIBEXECDIR/xbps-src-dobuild.sh $sourcepkg $cross || exit 1 [ "$target" = "build" ] && return 0 - # Install sourcepkg into destdir. + # Install pkgs into destdir. $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $sourcepkg $cross || exit 1 for subpkg in ${subpackages} ${sourcepkg}; do - # Run subpkg pkg_install func. - $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-dopkg.sh $subpkg $cross || exit 1 + $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 @@ -72,8 +74,8 @@ install_pkg() { fi # If install went ok generate the binpkgs. - for subpkg in ${sourcepkg} ${subpackages}; do - $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-genpkg.sh $subpkg "$XBPS_REPOSITORY" "$cross" || exit 1 + for subpkg in ${subpackages} ${sourcepkg}; do + $FAKEROOT_CMD $XBPS_LIBEXECDIR/xbps-src-dopkg.sh $subpkg "$XBPS_REPOSITORY" "$cross" || exit 1 done # pkg cleanup