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
|
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
|
append the version needed by the binary. Appending the version yourself
|
||||||
disables automatic detection.
|
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)*::
|
*makedepends (array)*::
|
||||||
An array of packages this package depends on to build but are not
|
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
|
needed at runtime. Packages in this list follow the same format as
|
||||||
depends.
|
depends.
|
||||||
|
+
|
||||||
|
Additional architecture-specific makedepends can be added by appending an
|
||||||
|
underscore and the architecture name e.g., 'makedepends_x86_64=()'.
|
||||||
|
|
||||||
*checkdepends (array)*::
|
*checkdepends (array)*::
|
||||||
An array of packages this package depends on to run its test suite
|
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
|
but are not needed at runtime. Packages in this list follow the same
|
||||||
format as depends. These dependencies are only considered when the
|
format as depends. These dependencies are only considered when the
|
||||||
check() function is present and is to be run by makepkg.
|
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)*::
|
*optdepends (array)*::
|
||||||
An array of packages (and accompanying reasons) that are not essential for
|
An array of packages (and accompanying reasons) that are not essential for
|
||||||
|
@ -203,12 +212,18 @@ disables automatic detection.
|
||||||
for specifying optdepends is:
|
for specifying optdepends is:
|
||||||
|
|
||||||
optdepends=('fakeroot: for makepkg usage as normal user')
|
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)*::
|
*conflicts (array)*::
|
||||||
An array of packages that will conflict with this package (i.e. they
|
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
|
cannot both be installed at the same time). This directive follows the
|
||||||
same format as depends. Versioned conflicts are supported using the
|
same format as depends. Versioned conflicts are supported using the
|
||||||
operators as described in `depends`.
|
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)*::
|
*provides (array)*::
|
||||||
An array of ``virtual provisions'' this package provides. This allows
|
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
|
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
|
try to find the library in the built package and append the correct
|
||||||
version. Appending the version yourself disables automatic detection.
|
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)*::
|
*replaces (array)*::
|
||||||
An array of packages this package should replace. This can be used
|
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.
|
Sysupgrade is currently the only pacman operation that utilizes this field.
|
||||||
A normal sync or upgrade will not use its value.
|
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)*::
|
*options (array)*::
|
||||||
This array allows you to override some of makepkg's default behavior
|
This array allows you to override some of makepkg's default behavior
|
||||||
|
|
|
@ -1475,6 +1475,24 @@ source_safe() {
|
||||||
shopt -s extglob
|
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() {
|
run_function_safe() {
|
||||||
local restoretrap
|
local restoretrap
|
||||||
|
|
||||||
|
@ -1893,6 +1911,8 @@ write_pkginfo() {
|
||||||
local size="$(@DUPATH@ @DUFLAGS@)"
|
local size="$(@DUPATH@ @DUFLAGS@)"
|
||||||
size="$(( ${size%%[^0-9]*} * 1024 ))"
|
size="$(( ${size%%[^0-9]*} * 1024 ))"
|
||||||
|
|
||||||
|
merge_arch_attrs
|
||||||
|
|
||||||
msg2 "$(gettext "Generating %s file...")" ".PKGINFO"
|
msg2 "$(gettext "Generating %s file...")" ".PKGINFO"
|
||||||
printf "# Generated by makepkg %s\n" "$makepkg_version"
|
printf "# Generated by makepkg %s\n" "$makepkg_version"
|
||||||
printf "# using %s\n" "$(fakeroot -v)"
|
printf "# using %s\n" "$(fakeroot -v)"
|
||||||
|
@ -2359,13 +2379,24 @@ lint_arch() {
|
||||||
}
|
}
|
||||||
|
|
||||||
lint_provides() {
|
lint_provides() {
|
||||||
local list name provides_list ret=0
|
local a list name provides_list ret=0
|
||||||
|
|
||||||
provides_list=("${provides[@]}")
|
provides_list=("${provides[@]}")
|
||||||
|
for a in "${arch[@]}"; do
|
||||||
|
array_build list "provides_$a"
|
||||||
|
provides_list+=("${list[@]}")
|
||||||
|
done
|
||||||
|
|
||||||
for name in "${pkgname[@]}"; do
|
for name in "${pkgname[@]}"; do
|
||||||
if extract_function_var "package_$name" provides 1 list; then
|
if extract_function_var "package_$name" provides 1 list; then
|
||||||
provides_list+=("${list[@]}")
|
provides_list+=("${list[@]}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
for a in "${arch[@]}"; do
|
||||||
|
if extract_function_var "package_$name" "provides_$a" 1 list; then
|
||||||
|
provides_list+=("${list[@]}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
for provide in "${provides_list[@]}"; do
|
for provide in "${provides_list[@]}"; do
|
||||||
|
@ -2399,13 +2430,24 @@ lint_backup() {
|
||||||
}
|
}
|
||||||
|
|
||||||
lint_optdepends() {
|
lint_optdepends() {
|
||||||
local list name optdepends_list ret=0
|
local a list name optdepends_list ret=0
|
||||||
|
|
||||||
optdepends_list=("${optdepends[@]}")
|
optdepends_list=("${optdepends[@]}")
|
||||||
|
for a in "${arch[@]}"; do
|
||||||
|
array_build list "optdepends_$a"
|
||||||
|
optdepends_list+=("${list[@]}")
|
||||||
|
done
|
||||||
|
|
||||||
for name in "${pkgname[@]}"; do
|
for name in "${pkgname[@]}"; do
|
||||||
if extract_function_var "package_$name" optdepends 1 list; then
|
if extract_function_var "package_$name" optdepends 1 list; then
|
||||||
optdepends_list+=("${list[@]}")
|
optdepends_list+=("${list[@]}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
for a in "${arch[@]}"; do
|
||||||
|
if extract_function_var "package_$name" "optdepends_$a" 1 list; then
|
||||||
|
optdepends_list+=("${list[@]}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
for name in "${optdepends_list[@]}"; do
|
for name in "${optdepends_list[@]}"; do
|
||||||
|
@ -3161,7 +3203,7 @@ else
|
||||||
if [[ ${BUILDFILE:0:1} != "/" ]]; then
|
if [[ ${BUILDFILE:0:1} != "/" ]]; then
|
||||||
BUILDFILE="$startdir/$BUILDFILE"
|
BUILDFILE="$startdir/$BUILDFILE"
|
||||||
fi
|
fi
|
||||||
source_safe "$BUILDFILE"
|
source_buildfile "$BUILDFILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set defaults if they weren't specified in buildfile
|
# set defaults if they weren't specified in buildfile
|
||||||
|
|
Loading…
Add table
Reference in a new issue