From fa5afbc30b68912eb7f16d434a27faf787c3da9c Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Tue, 27 Jul 2021 19:22:19 +0800 Subject: checkpkg: set makepkg vars from build root to support none host archs When building for an architecture different from the host, the correct old package was downloaded as "$copydir"'s pacman was configured with the target CARCH, but checkpkg doesn't know this and tries to search the cache for host CARCH instead, producing the following error: `==> ERROR: tarball not found for package: xxx` This change fixes this by passing the appropriate makepkg config explicitly, so that checkpkg behaves consistently. Co-Authored-by: Levente Polyak Signed-off-by: Levente Polyak --- checkpkg.in | 96 ++++++++++++++++++++++++++----------------------- doc/checkpkg.1.asciidoc | 3 ++ makechrootpkg.in | 2 +- zsh_completion.in | 1 + 4 files changed, 57 insertions(+), 45 deletions(-) diff --git a/checkpkg.in b/checkpkg.in index f40989d..aa862c5 100644 --- a/checkpkg.in +++ b/checkpkg.in @@ -6,23 +6,6 @@ shopt -s extglob m4_include(lib/common.sh) -# Source makepkg.conf; fail if it is not found -if [[ -r '/etc/makepkg.conf' ]]; then - # shellcheck source=makepkg-x86_64.conf - source '/etc/makepkg.conf' -else - die '/etc/makepkg.conf not found!' -fi - -# Source user-specific makepkg.conf overrides -if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then - # shellcheck source=/dev/null - source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" -elif [[ -r "$HOME/.makepkg.conf" ]]; then - # shellcheck source=/dev/null - source "$HOME/.makepkg.conf" -fi - usage() { cat <<- _EOF_ Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] @@ -35,40 +18,65 @@ usage() { list for both packages and a library list for both packages. OPTIONS - -r, --rmdir Remove the temporary directory - -w, --warn Print a warning in case of differences - -h, --help Show this help text + -r, --rmdir Remove the temporary directory + -w, --warn Print a warning in case of differences + -M, --makepkg-config Set an alternate makepkg configuration file + -h, --help Show this help text _EOF_ } RMDIR=0 WARN=0 +MAKEPKG_CONF=/etc/makepkg.conf + +# option checking +while (( $# )); do + case $1 in + -h|--help) + usage + exit 0 + ;; + -r|--rmdir) + RMDIR=1 + shift + ;; + -w|--warn) + WARN=1 + shift + ;; + -M|--makepkg-config) + MAKEPKG_CONF="$2" + shift 2 + ;; + --) + shift + break + ;; + -*,--*) + die "invalid argument: %s" "$1" + ;; + *) + break + ;; + esac +done -OPT_SHORT='rwh' -OPT_LONG=('rmdir' 'warn' 'help') -if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then - exit 1 +# Source makepkg.conf; fail if it is not found +if [[ -r "${MAKEPKG_CONF}" ]]; then + # shellcheck source=makepkg-x86_64.conf + source "${MAKEPKG_CONF}" +else + die "${MAKEPKG_CONF} not found!" +fi + +# Source user-specific makepkg.conf overrides +if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then + # shellcheck source=/dev/null + source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" +elif [[ -r "$HOME/.makepkg.conf" ]]; then + # shellcheck source=/dev/null + source "$HOME/.makepkg.conf" fi -set -- "${OPTRET[@]}" - -while :; do - case $1 in - -r|--rmdir) - RMDIR=1 - ;; - -w|--warn) - WARN=1 - ;; - -h|--help) - usage - exit 0 - ;; - --) - shift; break - ;; - esac - shift -done if [[ ! -f PKGBUILD ]]; then die 'This must be run in the directory of a built package.' diff --git a/doc/checkpkg.1.asciidoc b/doc/checkpkg.1.asciidoc index 6a70dbb..d95f350 100644 --- a/doc/checkpkg.1.asciidoc +++ b/doc/checkpkg.1.asciidoc @@ -29,6 +29,9 @@ Options *-w, --warn*:: Print a warning instead of a regular message in case of soname differences. +*-M, --makepkg-config*:: + Set an alternate makepkg configuration file. + *-h, --help*:: Show a help text diff --git a/makechrootpkg.in b/makechrootpkg.in index 7944ada..126d1da 100644 --- a/makechrootpkg.in +++ b/makechrootpkg.in @@ -408,7 +408,7 @@ else done msg2 "Checking packages" - sudo -u "$makepkg_user" checkpkg --rmdir --warn "${remotepkgs[@]/#file:\/\//}" + sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${remotepkgs[@]/#file:\/\//}" fi true fi diff --git a/zsh_completion.in b/zsh_completion.in index 7a3516a..f640086 100644 --- a/zsh_completion.in +++ b/zsh_completion.in @@ -77,6 +77,7 @@ _rebuildpkgs_args=( _checkpkg_args=( '(-r --rmdir)'{-r,--rmdir}'[Remove the temporary directory]' '(-w --warn)'{-w,--warn}'[Print a warning in case of differences]' + '(-M --makepkg-config)'{-M,--makepkg-config}'[Location of a makepkg config file]:makepkg_config:_files -g "*.conf(.)"' '(-h --help)'{-h,--help}'[Display usage]' ) -- cgit v1.2.3-70-g09d2