mirror of
https://gitlab.alpinelinux.org/alpine/abuild.git
synced 2025-02-03 05:02:13 +00:00
feat(abuild): add support for pyX.Y providers
Now all python packages that install python modules under /usr/lib/pythonX.Y/site-packages will have a provider that indicates their MAJOR (X) and MINOR (Y) versions. pyX maps to the MAJOR version of the package, its objective is to allow users to quickly install a python module without having to search around for the correct package, doing `apk add py3.9:foo` will install whatever packages provides the foo module. The directories checked only go one level deep, so '/usr/lib/python3.9/site-packages/date' will generate py3:date=$pkgver-r$pkgrel. files ending with .py also count and are added with their .py prefix stripped away. so '/usr/lib/python3.9/site-packages/six.py' will generate py3:six=$pkgver-r$pkgrel. The reason for doing this is the same as creating pc:, so: and cmd:, it is more reliable and robust to depened on what we known of what the package provides than to try to guess via the pkgname. Co-authored-by: Chloe Kudryavtsev <toast@toast.cafe>
This commit is contained in:
parent
d3845277bc
commit
ac3ee42458
45
abuild.in
45
abuild.in
@ -1225,6 +1225,46 @@ prepare_command_provides() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prepare_py_provides() {
|
||||||
|
local dir="${subpkgdir:-$pkgdir}" py_providers=""
|
||||||
|
options_has "!tracedeps" && return 0
|
||||||
|
cd "$dir" || return 1
|
||||||
|
|
||||||
|
# Find all directories under site-packages, ignore __pycache__ and
|
||||||
|
# .egg-info packages, store the basename with the proper pyX.Y prefix
|
||||||
|
# one per-line
|
||||||
|
py_providers="$(find 'usr/lib/python'*/site-packages \
|
||||||
|
-print0 -mindepth 1 -maxdepth 1 \
|
||||||
|
-type f -iname '*.py' -o -type d \
|
||||||
|
2>/dev/null | xargs -0 -I '{}' sh -c '
|
||||||
|
d="{}"
|
||||||
|
|
||||||
|
# Check if we were given a directory then check if there
|
||||||
|
# is a file called __init__.py inside, this is required
|
||||||
|
# to import modules, if there is no __init__.py then the
|
||||||
|
# installed directory is not actually a module, this is a
|
||||||
|
# special case for packages that use c-extensions and
|
||||||
|
# install their .c and .h files to $sitelib.
|
||||||
|
if [ -d "$d" ] && [ ! -f "$d"/__init__.py ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find out which version of python we are building for
|
||||||
|
# this will find out by looking at the MAJOR and MINOR
|
||||||
|
# versions in /usr/lib/pythonMAJOR.MINOR
|
||||||
|
pyver="${d##*usr/lib/python}"
|
||||||
|
pyver="${pyver%%/*}"
|
||||||
|
|
||||||
|
# Strip the .py prefix if it exists
|
||||||
|
d="${d%%.py*}"
|
||||||
|
|
||||||
|
echo "py$pyver:${d##*/}"
|
||||||
|
')"
|
||||||
|
local i; for i in $py_providers; do
|
||||||
|
echo "$i=$pkgver-r$pkgrel" >> "$controldir"/.provides-py
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# check if dir has arch specific binaries
|
# check if dir has arch specific binaries
|
||||||
dir_has_arch_binaries() {
|
dir_has_arch_binaries() {
|
||||||
local dir="$1"
|
local dir="$1"
|
||||||
@ -1294,6 +1334,7 @@ prepare_package() {
|
|||||||
&& prepare_symlinks \
|
&& prepare_symlinks \
|
||||||
&& prepare_pkgconfig_provides \
|
&& prepare_pkgconfig_provides \
|
||||||
&& prepare_command_provides \
|
&& prepare_command_provides \
|
||||||
|
&& prepare_py_provides \
|
||||||
|| return 1
|
|| return 1
|
||||||
archcheck
|
archcheck
|
||||||
}
|
}
|
||||||
@ -1447,6 +1488,10 @@ trace_apk_deps() {
|
|||||||
sed 's/^/provides = cmd:/' "$dir"/.provides-command | sort -u \
|
sed 's/^/provides = cmd:/' "$dir"/.provides-command | sort -u \
|
||||||
>> "$dir"/.PKGINFO
|
>> "$dir"/.PKGINFO
|
||||||
fi
|
fi
|
||||||
|
if [ -f "$dir"/.provides-py ]; then
|
||||||
|
sed 's/^/provides = /' "$dir"/.provides-py | sort -u \
|
||||||
|
>> "$dir"/.PKGINFO
|
||||||
|
fi
|
||||||
[ -z "$autodeps" ] && return 0
|
[ -z "$autodeps" ] && return 0
|
||||||
for i in $autodeps; do
|
for i in $autodeps; do
|
||||||
echo "depend = $i"
|
echo "depend = $i"
|
||||||
|
Loading…
Reference in New Issue
Block a user