From ba84655a13dc1e6054e738dea5b1eeb4525905f8 Mon Sep 17 00:00:00 2001 From: Enno Boland Date: Fri, 17 Nov 2017 14:25:29 +0100 Subject: [PATCH] common/libexec: remove redundant pre/do/post preparation code This pullrequest removes redundant codepaths in xbps-src-do{build,configure,install}.sh and joins the code in the run_step function. This causes slightly different behavior to do_install: Do install will chdir to wrksrc only _before_ the first step. The current behavior is that pre_install will run without a chdir, do_ and post_ is runned with a chdir. This is a subtle but breaking change and may cause some templates to break at install phase. --- common/xbps-src/libexec/xbps-src-dobuild.sh | 36 +------------- .../xbps-src/libexec/xbps-src-doconfigure.sh | 35 +------------- common/xbps-src/libexec/xbps-src-doinstall.sh | 27 +---------- common/xbps-src/shutils/common.sh | 48 +++++++++++++++++++ 4 files changed, 51 insertions(+), 95 deletions(-) diff --git a/common/xbps-src/libexec/xbps-src-dobuild.sh b/common/xbps-src/libexec/xbps-src-dobuild.sh index 96f6b0da762..d7e7b6108ea 100755 --- a/common/xbps-src/libexec/xbps-src-dobuild.sh +++ b/common/xbps-src/libexec/xbps-src-dobuild.sh @@ -31,41 +31,7 @@ for f in $XBPS_COMMONDIR/environment/build/*.sh; do source_file "$f" done -cd "$wrksrc" || msg_error "$pkgver: cannot access wrksrc directory [$wrksrc]\n" -if [ -n "$build_wrksrc" ]; then - cd $build_wrksrc || \ - msg_error "$pkgver: cannot access build_wrksrc directory [$build_wrksrc]\n" -fi - -run_pkg_hooks pre-build - -# Run pre_build() -if declare -f pre_build >/dev/null; then - run_func pre_build -fi - -# Run do_build() -if declare -f do_build >/dev/null; then - run_func do_build -else - if [ -n "$build_style" ]; then - 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 - if declare -f do_build >/dev/null; then - run_func do_build - fi - fi -fi - - -# Run post_build() -if declare -f post_build >/dev/null; then - run_func post_build -fi - -run_pkg_hooks post-build +run_step build touch -f $XBPS_BUILD_DONE diff --git a/common/xbps-src/libexec/xbps-src-doconfigure.sh b/common/xbps-src/libexec/xbps-src-doconfigure.sh index 1fd38aa9309..2adeab58dc8 100755 --- a/common/xbps-src/libexec/xbps-src-doconfigure.sh +++ b/common/xbps-src/libexec/xbps-src-doconfigure.sh @@ -31,40 +31,7 @@ for f in $XBPS_COMMONDIR/environment/configure/*.sh; do source_file "$f" done -cd "$wrksrc" || msg_error "$pkgver: cannot access wrksrc directory [$wrksrc].\n" -if [ -n "$build_wrksrc" ]; then - cd $build_wrksrc || \ - msg_error "$pkgver: cannot access build_wrksrc directory [$build_wrksrc].\n" -fi - -run_pkg_hooks pre-configure - -# Run pre_configure() -if declare -f pre_configure >/dev/null; then - run_func pre_configure -fi - -# Run do_configure() -if declare -f do_configure >/dev/null; then - run_func do_configure -else - if [ -n "$build_style" ]; then - 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 - if declare -f do_configure >/dev/null; then - run_func do_configure - fi - fi -fi - -# Run post_configure() -if declare -f post_configure >/dev/null; then - run_func post_configure -fi - -run_pkg_hooks post-configure +run_step configure optional touch -f $XBPS_CONFIGURE_DONE diff --git a/common/xbps-src/libexec/xbps-src-doinstall.sh b/common/xbps-src/libexec/xbps-src-doinstall.sh index a95d2e8ab70..b0c934f13a7 100755 --- a/common/xbps-src/libexec/xbps-src-doinstall.sh +++ b/common/xbps-src/libexec/xbps-src-doinstall.sh @@ -37,32 +37,7 @@ if [ "$SUBPKG_MODE" = "no" ]; then if [ ! -f $XBPS_INSTALL_DONE ] || [ -f $XBPS_INSTALL_DONE -a -n "$XBPS_BUILD_FORCEMODE" ]; then mkdir -p $XBPS_DESTDIR/$XBPS_CROSS_TRIPLET/$pkgname-$version - # Run pre-install hooks - run_pkg_hooks pre-install - - # Run pre_install() - if declare -f pre_install >/dev/null; then - run_func pre_install - fi - - # Run do_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 - # Run post_install() - cd "$wrksrc" - [ -n "$build_wrksrc" ] && cd $build_wrksrc - if declare -f post_install >/dev/null; then - run_func post_install - fi + run_step install "" skip touch -f $XBPS_INSTALL_DONE fi diff --git a/common/xbps-src/shutils/common.sh b/common/xbps-src/shutils/common.sh index 3969948c2dc..e2b47b5285d 100644 --- a/common/xbps-src/shutils/common.sh +++ b/common/xbps-src/shutils/common.sh @@ -27,6 +27,54 @@ run_func() { set +E } +ch_wrksrc() { + cd "$wrksrc" || msg_error "$pkgver: cannot access wrksrc directory [$wrksrc]\n" + if [ -n "$build_wrksrc" ]; then + cd $build_wrksrc || \ + msg_error "$pkgver: cannot access build_wrksrc directory [$build_wrksrc]\n" + fi +} + +# runs {pre,do,post}_X tripplets +run_step() { + local step_name="$1" optional_step="$2" skip_post_hook="$3" + + run_pkg_hooks "pre-$step_name" + + ch_wrksrc + # Run pre_* Phase + if declare -f "pre_$step_name" >/dev/null; then + run_func "pre_$step_name" + fi + + # Run do_* Phase + if declare -f "do_$step_name" >/dev/null; then + run_func "do_$step_name" + elif [ -n "$build_style" ]; then + if [ -r $XBPS_BUILDSTYLEDIR/${build_style}.sh ]; then + . $XBPS_BUILDSTYLEDIR/${build_style}.sh + if declare -f "do_$step_name" >/dev/null; then + run_func "do_$step_name" + elif [ ! "$optional_step" ]; then + msg_error "$pkgver: cannot find do_$step_name() in $XBPS_BUILDSTYLEDIR/${build_style}.sh!\n" + fi + else + msg_error "$pkgver: cannot find build helper $XBPS_BUILDSTYLEDIR/${build_style}.sh!\n" + fi + elif [ ! "$optional_step" ]; then + msg_error "$pkgver: cannot find do_$step_name()!\n" + fi + + # Run post_* Phase + if declare -f "post_$step_name" >/dev/null; then + run_func "post_$step_name" + fi + + if ! [ "$skip_post_hook" ]; then + run_pkg_hooks "post-$step_name" + fi +} + error_func() { if [ -n "$1" -a -n "$2" ]; then msg_red "$pkgver: failed to run $1() at line $2.\n"