Compare commits

..

2 Commits

Author SHA1 Message Date
Felix Yan
473ef0a2e1 Merge branch 'unsupported-arch' into 'master'
feat: allow building for unsupported architecture

See merge request archlinux/devtools!294
2025-08-01 23:03:23 +00:00
Felix Yan
332ccc95ef feat: allow building for unsupported architecture
The hard check here has been prevented us (the RISC-V port) from utilizing `pkgctl build` for a while. As long as the list (DEVTOOLS_VALID_ARCHES) isn't easily extendable, I think it's a better idea to allow building with a warning when specifying `--arch` manually.

Also disables repository detection and `--repo` check for unsupported
architectures.
2024-12-29 13:58:45 +08:00
8 changed files with 15 additions and 63 deletions

View File

@@ -150,7 +150,6 @@ _pkgctl_cmds=(
db db
diff diff
issue issue
license
release release
repo repo
search search

View File

@@ -124,6 +124,7 @@ pkgctl_build() {
local RELEASE=0 local RELEASE=0
local DB_UPDATE=0 local DB_UPDATE=0
local INSTALL_TO_HOST=none local INSTALL_TO_HOST=none
local UNSUPPORTED_ARCH=0
local REPO= local REPO=
local PKGVER= local PKGVER=
@@ -165,7 +166,8 @@ pkgctl_build() {
BUILD_ARCH=("${DEVTOOLS_VALID_ARCHES[0]}") BUILD_ARCH=("${DEVTOOLS_VALID_ARCHES[0]}")
elif ! in_array "${2}" "${BUILD_ARCH[@]}"; then elif ! in_array "${2}" "${BUILD_ARCH[@]}"; then
if ! in_array "${2}" "${DEVTOOLS_VALID_ARCHES[@]}"; then if ! in_array "${2}" "${DEVTOOLS_VALID_ARCHES[@]}"; then
die 'invalid architecture: %s' "${2}" warning 'unsupported architecture: %s' "${2}"
UNSUPPORTED_ARCH=1
fi fi
BUILD_ARCH+=("${2}") BUILD_ARCH+=("${2}")
fi fi
@@ -312,7 +314,10 @@ pkgctl_build() {
# Update pacman cache for auto-detection # Update pacman cache for auto-detection
if [[ -z ${REPO} ]]; then if [[ -z ${REPO} ]]; then
update_pacman_repo_cache stable if (( UNSUPPORTED_ARCH )); then
die "Unsupported architecture specified, cannot auto-detect repository"
fi
update_pacman_repo_cache multilib
# Check valid repos if not resolved dynamically # Check valid repos if not resolved dynamically
elif ! in_array "${REPO}" "${DEVTOOLS_VALID_REPOS[@]}"; then elif ! in_array "${REPO}" "${DEVTOOLS_VALID_REPOS[@]}"; then
die "Invalid repository target: %s" "${REPO}" die "Invalid repository target: %s" "${REPO}"
@@ -343,7 +348,7 @@ pkgctl_build() {
fi fi
# fail if an existing package specifies --repo # fail if an existing package specifies --repo
if [[ -n "${repo}" ]] && [[ -n ${pkgrepo} ]]; then if [[ -n "${repo}" ]] && [[ -n ${pkgrepo} ]] && (( ! UNSUPPORTED_ARCH )); then
# allow unstable to use --repo # allow unstable to use --repo
if [[ ${pkgrepo} == *unstable ]]; then if [[ ${pkgrepo} == *unstable ]]; then
repo=${pkgrepo} repo=${pkgrepo}

View File

@@ -51,6 +51,7 @@ pkgctl_db_remove() {
local partial=0 local partial=0
local confirm=1 local confirm=1
local dbscripts_options=() local dbscripts_options=()
local lookup_repo=multilib
local pkgname local pkgname
# option checking # option checking
@@ -105,13 +106,13 @@ pkgctl_db_remove() {
update_pacman_repo_cache unstable update_pacman_repo_cache unstable
;; ;;
*-staging) *-staging)
update_pacman_repo_cache staging update_pacman_repo_cache multilib-staging
;; ;;
*-testing) *-testing)
update_pacman_repo_cache testing update_pacman_repo_cache multilib-testing
;; ;;
*) *)
update_pacman_repo_cache stable update_pacman_repo_cache multilib
;; ;;
esac esac

View File

@@ -188,7 +188,6 @@ path = [
"README.md", "README.md",
"keys/**", "keys/**",
".SRCINFO", ".SRCINFO",
".gitignore",
".nvchecker.toml", ".nvchecker.toml",
"*.install", "*.install",
"*.sysusers", "*.sysusers",

View File

@@ -124,7 +124,7 @@ pkgctl_release() {
# Update pacman cache for auto-detection # Update pacman cache for auto-detection
if [[ -z ${REPO} ]]; then if [[ -z ${REPO} ]]; then
update_pacman_repo_cache stable update_pacman_repo_cache multilib
# Check valid repos if not resolved dynamically # Check valid repos if not resolved dynamically
elif ! in_array "${REPO}" "${DEVTOOLS_VALID_REPOS[@]}"; then elif ! in_array "${REPO}" "${DEVTOOLS_VALID_REPOS[@]}"; then
die "Invalid repository target: %s" "${REPO}" die "Invalid repository target: %s" "${REPO}"

View File

@@ -1,26 +0,0 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${DEVTOOLS_INCLUDE_UTIL_MACHINE_SH:-} ]] || return 0
DEVTOOLS_INCLUDE_UTIL_MACHINE_SH=1
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
# shellcheck source=src/lib/common.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
set -eo pipefail
machine_get_hardware_name() {
uname --machine
}
machine_has_multilib() {
case "$(machine_get_hardware_name)" in
x86_64*)
return 0
;;
esac
return 1
}

View File

@@ -8,8 +8,6 @@ DEVTOOLS_INCLUDE_UTIL_PACMAN_SH=1
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@} _DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
# shellcheck source=src/lib/common.sh # shellcheck source=src/lib/common.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
# shellcheck source=src/lib/util/machine.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/machine.sh
set -e set -e
@@ -20,8 +18,7 @@ readonly _DEVTOOLS_MAKEPKG_CONF_DIR=${_DEVTOOLS_LIBRARY_DIR}/makepkg.conf.d
update_pacman_repo_cache() { update_pacman_repo_cache() {
local repo=${1:-stable} local repo=${1:-multilib}
repo=$(pacman_resolve_virtual_repo_name "${repo}")
mkdir -p "${_DEVTOOLS_PACMAN_CACHE_DIR}" mkdir -p "${_DEVTOOLS_PACMAN_CACHE_DIR}"
msg "Updating pacman database cache" msg "Updating pacman database cache"
@@ -35,8 +32,7 @@ update_pacman_repo_cache() {
get_pacman_repo_from_pkgbuild() { get_pacman_repo_from_pkgbuild() {
local path=${1:-PKGBUILD} local path=${1:-PKGBUILD}
local repo=${2:-stable} local repo=${2:-multilib}
repo=$(pacman_resolve_virtual_repo_name "${repo}")
local -a pkgnames local -a pkgnames
# shellcheck source=contrib/makepkg/PKGBUILD.proto # shellcheck source=contrib/makepkg/PKGBUILD.proto
@@ -76,7 +72,6 @@ get_pkgnames_from_repo_pkgbase() {
# update the pacman repo cache if it doesn't exist yet # update the pacman repo cache if it doesn't exist yet
if [[ ! -d "${_DEVTOOLS_PACMAN_CACHE_DIR}" ]]; then if [[ ! -d "${_DEVTOOLS_PACMAN_CACHE_DIR}" ]]; then
# TODO: universe includes multilib, switch for architecture
update_pacman_repo_cache universe update_pacman_repo_cache universe
fi fi
@@ -96,23 +91,3 @@ get_pkgnames_from_repo_pkgbase() {
printf "%s\n" "${pkgnames[@]}" printf "%s\n" "${pkgnames[@]}"
return 0 return 0
} }
pacman_resolve_virtual_repo_name() {
local repo=$1
local repo_class=extra
if machine_has_multilib; then
repo_class=multilib
fi
case "${repo}" in
stable)
repo=${repo_class}
;;
testing|staging)
repo="${repo_class}-${repo}"
;;
esac
printf "%s" "${repo}"
}

View File

@@ -6,7 +6,6 @@
# shellcheck disable=2034 # shellcheck disable=2034
DEVTOOLS_VALID_BINARY_ARCHES=( DEVTOOLS_VALID_BINARY_ARCHES=(
x86_64 x86_64
aarch64
) )
# shellcheck disable=2034 # shellcheck disable=2034