diff options
Diffstat (limited to 'src/chroot-tools/libremakepkg')
-rwxr-xr-x | src/chroot-tools/libremakepkg | 73 |
1 files changed, 47 insertions, 26 deletions
diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg index a59315b..df4cd07 100755 --- a/src/chroot-tools/libremakepkg +++ b/src/chroot-tools/libremakepkg @@ -25,6 +25,7 @@ set -euE . $(librelib messages) . $(librelib chroot/makechrootpkg.sh) +set -o pipefail shopt -s nullglob umask 0022 @@ -34,6 +35,7 @@ NONET=true # can be changed with the -N flag # {SRC,LOG,PKG}DEST set at runtime by makepkg.conf # MAKEFLAGS, PACKAGER set at runtime by makepkg.conf # LIBREUSER, LIBREHOME are set by conf.sh +librechroot_flags=() # Hooks ######################################################################## @@ -47,6 +49,10 @@ hook_check_pkg=(:) # Boring/mundane functions ##################################################### +indent() { + sed 's/^/ | /' +} + # Usage: exit_copy $copydir $src_owner # End immediately, but copy log files out exit_copy() { @@ -62,17 +68,18 @@ exit_copy() { run_hook() { local hookname=$1; shift local hookvar="hook_${hookname}[@]" + local fails=() - msg "Running hook: %s" "$hookname" for hook in "${!hookvar}"; do - msg2 'hook: %s' "$hook" - "$hook" "$@" || { error "result: %s" $?; fails+=("$hook"); } - done + "$hook" "$@" || fails+=("$hook") + done |& indent + if [[ ${#fails[@]} -gt 0 ]]; then error "Failure(s) in %s: %s" "$hookname" "${fails[*]}" return 1 + else + return 0 fi - return 0 } # Usage: add_to_local_repo $copydir $pkgfiles... @@ -88,25 +95,31 @@ add_to_local_repo() { done } +hook_post_build+=('cleanup') +cleanup() { + local copydir=$1 + rm -f -- "$copydir"/chroot{prepare,build} +} + build() ( local copydir=$1; shift - local cmd=(/chrootbuild "$@") - - run_hook pre_build "$copydir" - trap "run_hook post_build '$copydir'" EXIT + local repack=$1; shift local netflag='' + local run=() if $INCHROOT; then - ! $NONET || netflag='-n' - unshare $netflag -- "${cmd[@]}" - else ! $NONET || netflag='-N' - librechroot $netflag \ - -r "$PWD:/startdir_host" \ - -r "$SRCDEST:/srcdest_host" \ - -l "$copydir" \ - run "${cmd[@]}" + run=(unshare) + else + ! $NONET || netflag='-n' + run=(librechroot "${librechroot_flags[@]}" run) fi + + prepare_chroot "$copydir" "$LIBREHOME" "$repack" false + "${run[@]}" /chrootprepare "$@" |& indent + run_hook pre_build "$copydir" + trap "run_hook post_build '$copydir'" EXIT + "${run[@]}" /chrootbuild "$@" |& indent ) # The main program ############################################################# @@ -212,6 +225,13 @@ main() { MAKEFLAGS="$(get_conf_makepkg MAKEFLAGS '')" PACKAGER="$(get_conf_makepkg PACKAGER '')" + librechroot_flags=( + -r "$PWD:/startdir_host" + -r "$SRCDEST:/srcdest_host" + -n "$CHROOT" + -l "$copy" + ) + # OK, we are starting now ############################################## if $INCHROOT; then @@ -222,7 +242,8 @@ main() { lock 9 "$copydir.lock" \ "Waiting for existing lock on chroot copy to be released: [%s]" "$copy" # Create the chroot if it does not exist - librechroot -n "$CHROOT" -l "$copy" make + msg 'Initializing the chroot...' + librechroot "${librechroot_flags[@]}" make |& indent fi # Set target CARCH @@ -230,20 +251,20 @@ main() { export CARCH="$(MAKEPKG_CONF=$copydir/etc/makepkg.conf get_conf_makepkg CARCH)" # Pre-build + msg 'Starting pre-build activities...' run_hook check_pkgbuild - download_sources "$copydir" "$LIBREUSER" - prepare_chroot "$copydir" "$LIBREHOME" "$repack" false - clean_chroot "$copydir" + msg 'Downloading sources...' + download_sources "$copydir" "$LIBREUSER" |& indent # Build + msg 'Starting to build the package...' trap "exit_copy '$copydir' '$LIBREUSER'" EXIT - warning 'Entering build...' - build "$copydir" "${makepkg_args[@]}" + build "$copydir" "$repack" "${makepkg_args[@]}" + # Post-build - warning 'Entering hook check_pkg...' + msg 'Starting post-build activities...' run_hook check_pkg - warning 'Entering add_to_local_repo ...' - add_to_local_repo "$copydir" "$copydir"/pkgdest/*.pkg.tar* + add_to_local_repo "$copydir" "$copydir"/pkgdest/*.pkg.tar* |& indent } main "$@" |