PKGBUILD: handle arch specific attributes
This introduces support for architecture-specific conflicts, depends, optdepends, makedepends, replaces, and conflicts by appending "_$CARCH" to the array name. For example, in the global section: arch=('i686' 'x86_64') depends=('foo') depends_x86_64=('bar') This will generate depends of 'foo' and 'bar' on x86_64, but only 'foo' on i686. Moreover, this is supported in the package functions with the same heuristics as the generic names, e.g. ... arch=('i686' 'x86_64') depends=('foo') ... package_somepkg() { depends_x86_64=('bar') ... } Again, will cause x86_64 to have depends of 'foo' and 'bar', but only 'foo' for i686.
This commit is contained in:
parent
cbd6c300b5
commit
2b556d89de
2 changed files with 66 additions and 3 deletions
|
@ -183,17 +183,26 @@ If the dependency name appears to be a library (ends with .so), makepkg will
|
|||
try to find a binary that depends on the library in the built package and
|
||||
append the version needed by the binary. Appending the version yourself
|
||||
disables automatic detection.
|
||||
+
|
||||
Additional architecture-specific depends can be added by appending an
|
||||
underscore and the architecture name e.g., 'depends_x86_64=()'.
|
||||
|
||||
*makedepends (array)*::
|
||||
An array of packages this package depends on to build but are not
|
||||
needed at runtime. Packages in this list follow the same format as
|
||||
depends.
|
||||
+
|
||||
Additional architecture-specific makedepends can be added by appending an
|
||||
underscore and the architecture name e.g., 'makedepends_x86_64=()'.
|
||||
|
||||
*checkdepends (array)*::
|
||||
An array of packages this package depends on to run its test suite
|
||||
but are not needed at runtime. Packages in this list follow the same
|
||||
format as depends. These dependencies are only considered when the
|
||||
check() function is present and is to be run by makepkg.
|
||||
+
|
||||
Additional architecture-specific checkdepends can be added by appending an
|
||||
underscore and the architecture name e.g., 'checkdepends_x86_64=()'.
|
||||
|
||||
*optdepends (array)*::
|
||||
An array of packages (and accompanying reasons) that are not essential for
|
||||
|
@ -203,12 +212,18 @@ disables automatic detection.
|
|||
for specifying optdepends is:
|
||||
|
||||
optdepends=('fakeroot: for makepkg usage as normal user')
|
||||
+
|
||||
Architecture-specific optdepends can be added by appending an underscore and
|
||||
the architecture name e.g., 'optdepends_x86_64=()'.
|
||||
|
||||
*conflicts (array)*::
|
||||
An array of packages that will conflict with this package (i.e. they
|
||||
cannot both be installed at the same time). This directive follows the
|
||||
same format as depends. Versioned conflicts are supported using the
|
||||
operators as described in `depends`.
|
||||
+
|
||||
Additional architecture-specific conflicts can be added by appending an
|
||||
underscore and the architecture name e.g., 'conflicts_x86_64=()'.
|
||||
|
||||
*provides (array)*::
|
||||
An array of ``virtual provisions'' this package provides. This allows
|
||||
|
@ -224,6 +239,9 @@ only specific versions of a package may be provided.
|
|||
If the provision name appears to be a library (ends with .so), makepkg will
|
||||
try to find the library in the built package and append the correct
|
||||
version. Appending the version yourself disables automatic detection.
|
||||
+
|
||||
Additional architecture-specific provides can be added by appending an
|
||||
underscore and the architecture name e.g., 'provides_x86_64=()'.
|
||||
|
||||
*replaces (array)*::
|
||||
An array of packages this package should replace. This can be used
|
||||
|
@ -234,6 +252,9 @@ version. Appending the version yourself disables automatic detection.
|
|||
+
|
||||
Sysupgrade is currently the only pacman operation that utilizes this field.
|
||||
A normal sync or upgrade will not use its value.
|
||||
+
|
||||
Additional architecture-specific replaces can be added by appending an
|
||||
underscore and the architecture name e.g., 'replaces_x86_64=()'.
|
||||
|
||||
*options (array)*::
|
||||
This array allows you to override some of makepkg's default behavior
|
||||
|
|
|
@ -1475,6 +1475,24 @@ source_safe() {
|
|||
shopt -s extglob
|
||||
}
|
||||
|
||||
merge_arch_attrs() {
|
||||
local attr supported_attrs=(
|
||||
provides conflicts depends replaces optdepends
|
||||
makedepends checkdepends)
|
||||
|
||||
for attr in "${supported_attrs[@]}"; do
|
||||
eval "$attr+=(\"\${${attr}_$CARCH[@]}\")"
|
||||
done
|
||||
|
||||
# ensure that calling this function is idempotent.
|
||||
unset -v "${supported_attrs[@]/%/_$CARCH}"
|
||||
}
|
||||
|
||||
source_buildfile() {
|
||||
source_safe "$@"
|
||||
merge_arch_attrs
|
||||
}
|
||||
|
||||
run_function_safe() {
|
||||
local restoretrap
|
||||
|
||||
|
@ -1893,6 +1911,8 @@ write_pkginfo() {
|
|||
local size="$(@DUPATH@ @DUFLAGS@)"
|
||||
size="$(( ${size%%[^0-9]*} * 1024 ))"
|
||||
|
||||
merge_arch_attrs
|
||||
|
||||
msg2 "$(gettext "Generating %s file...")" ".PKGINFO"
|
||||
printf "# Generated by makepkg %s\n" "$makepkg_version"
|
||||
printf "# using %s\n" "$(fakeroot -v)"
|
||||
|
@ -2359,13 +2379,24 @@ lint_arch() {
|
|||
}
|
||||
|
||||
lint_provides() {
|
||||
local list name provides_list ret=0
|
||||
local a list name provides_list ret=0
|
||||
|
||||
provides_list=("${provides[@]}")
|
||||
for a in "${arch[@]}"; do
|
||||
array_build list "provides_$a"
|
||||
provides_list+=("${list[@]}")
|
||||
done
|
||||
|
||||
for name in "${pkgname[@]}"; do
|
||||
if extract_function_var "package_$name" provides 1 list; then
|
||||
provides_list+=("${list[@]}")
|
||||
fi
|
||||
|
||||
for a in "${arch[@]}"; do
|
||||
if extract_function_var "package_$name" "provides_$a" 1 list; then
|
||||
provides_list+=("${list[@]}")
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
for provide in "${provides_list[@]}"; do
|
||||
|
@ -2399,13 +2430,24 @@ lint_backup() {
|
|||
}
|
||||
|
||||
lint_optdepends() {
|
||||
local list name optdepends_list ret=0
|
||||
local a list name optdepends_list ret=0
|
||||
|
||||
optdepends_list=("${optdepends[@]}")
|
||||
for a in "${arch[@]}"; do
|
||||
array_build list "optdepends_$a"
|
||||
optdepends_list+=("${list[@]}")
|
||||
done
|
||||
|
||||
for name in "${pkgname[@]}"; do
|
||||
if extract_function_var "package_$name" optdepends 1 list; then
|
||||
optdepends_list+=("${list[@]}")
|
||||
fi
|
||||
|
||||
for a in "${arch[@]}"; do
|
||||
if extract_function_var "package_$name" "optdepends_$a" 1 list; then
|
||||
optdepends_list+=("${list[@]}")
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
for name in "${optdepends_list[@]}"; do
|
||||
|
@ -3161,7 +3203,7 @@ else
|
|||
if [[ ${BUILDFILE:0:1} != "/" ]]; then
|
||||
BUILDFILE="$startdir/$BUILDFILE"
|
||||
fi
|
||||
source_safe "$BUILDFILE"
|
||||
source_buildfile "$BUILDFILE"
|
||||
fi
|
||||
|
||||
# set defaults if they weren't specified in buildfile
|
||||
|
|
Loading…
Add table
Reference in a new issue