makepkg: remove libdepends and libprovides
This will be replaced by a better system Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
26ee6ff6ad
commit
354a300cd2
2 changed files with 0 additions and 127 deletions
|
@ -187,11 +187,6 @@ contain whitespace characters.
|
||||||
than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
|
than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
|
||||||
(greater than), or `<` (less than).
|
(greater than), or `<` (less than).
|
||||||
+
|
+
|
||||||
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
|
Additional architecture-specific depends can be added by appending an
|
||||||
underscore and the architecture name e.g., 'depends_x86_64=()'.
|
underscore and the architecture name e.g., 'depends_x86_64=()'.
|
||||||
|
|
||||||
|
@ -245,10 +240,6 @@ example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0' dependency of
|
||||||
other packages. Provisions involving the `>` and `<` operators are invalid as
|
other packages. Provisions involving the `>` and `<` operators are invalid as
|
||||||
only specific versions of a package may be provided.
|
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
|
Additional architecture-specific provides can be added by appending an
|
||||||
underscore and the architecture name e.g., 'provides_x86_64=()'.
|
underscore and the architecture name e.g., 'provides_x86_64=()'.
|
||||||
|
|
||||||
|
|
|
@ -463,121 +463,6 @@ run_package() {
|
||||||
run_function_safe "package${1:+_$1}"
|
run_function_safe "package${1:+_$1}"
|
||||||
}
|
}
|
||||||
|
|
||||||
find_libdepends() {
|
|
||||||
local d sodepends
|
|
||||||
|
|
||||||
sodepends=0
|
|
||||||
for d in "${depends[@]}"; do
|
|
||||||
if [[ $d = *.so ]]; then
|
|
||||||
sodepends=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if (( sodepends == 0 )); then
|
|
||||||
(( ${#depends[@]} )) && printf '%s\n' "${depends[@]}"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
local libdeps filename soarch sofile soname soversion
|
|
||||||
declare -A libdeps
|
|
||||||
|
|
||||||
while IFS= read -rd '' filename; do
|
|
||||||
# get architecture of the file; if soarch is empty it's not an ELF binary
|
|
||||||
soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p')
|
|
||||||
[[ -n "$soarch" ]] || continue
|
|
||||||
|
|
||||||
# process all libraries needed by the binary
|
|
||||||
for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p')
|
|
||||||
do
|
|
||||||
# extract the library name: libfoo.so
|
|
||||||
soname="${sofile%.so?(+(.+([0-9])))}".so
|
|
||||||
# extract the major version: 1
|
|
||||||
soversion="${sofile##*\.so\.}"
|
|
||||||
|
|
||||||
if [[ ${libdeps[$soname]} ]]; then
|
|
||||||
if [[ ${libdeps[$soname]} != *${soversion}-${soarch}* ]]; then
|
|
||||||
libdeps[$soname]+=" ${soversion}-${soarch}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
libdeps[$soname]="${soversion}-${soarch}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done < <(find "$pkgdir" -type f -perm -u+x -print0)
|
|
||||||
|
|
||||||
local libdepends v
|
|
||||||
for d in "${depends[@]}"; do
|
|
||||||
case "$d" in
|
|
||||||
*.so)
|
|
||||||
if [[ ${libdeps[$d]} ]]; then
|
|
||||||
for v in ${libdeps[$d]}; do
|
|
||||||
libdepends+=("$d=$v")
|
|
||||||
done
|
|
||||||
else
|
|
||||||
warning "$(gettext "Library listed in %s is not required by any files: %s")" "'depends'" "$d"
|
|
||||||
libdepends+=("$d")
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
libdepends+=("$d")
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
(( ${#libdepends[@]} )) && printf '%s\n' "${libdepends[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
find_libprovides() {
|
|
||||||
local p versioned_provides libprovides missing
|
|
||||||
for p in "${provides[@]}"; do
|
|
||||||
missing=0
|
|
||||||
versioned_provides=()
|
|
||||||
case "$p" in
|
|
||||||
*.so)
|
|
||||||
mapfile -t filename < <(find "$pkgdir" -type f -name $p\* | LC_ALL=C sort)
|
|
||||||
if [[ $filename ]]; then
|
|
||||||
# packages may provide multiple versions of the same library
|
|
||||||
for fn in "${filename[@]}"; do
|
|
||||||
# check if we really have a shared object
|
|
||||||
if LC_ALL=C readelf -h "$fn" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
|
|
||||||
# get the string binaries link to (e.g. libfoo.so.1.2 -> libfoo.so.1)
|
|
||||||
local sofile=$(LC_ALL=C readelf -d "$fn" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p')
|
|
||||||
if [[ -z "$sofile" ]]; then
|
|
||||||
warning "$(gettext "Library listed in %s is not versioned: %s")" "'provides'" "$p"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# get the library architecture (32 or 64 bit)
|
|
||||||
local soarch=$(LC_ALL=C readelf -h "$fn" | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p')
|
|
||||||
|
|
||||||
# extract the library major version
|
|
||||||
local soversion="${sofile##*\.so\.}"
|
|
||||||
|
|
||||||
versioned_provides+=("${p}=${soversion}-${soarch}")
|
|
||||||
else
|
|
||||||
warning "$(gettext "Library listed in %s is not a shared object: %s")" "'provides'" "$p"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
missing=1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if (( missing )); then
|
|
||||||
warning "$(gettext "Cannot find library listed in %s: %s")" "'provides'" "$p"
|
|
||||||
fi
|
|
||||||
if (( ${#versioned_provides[@]} > 0 )); then
|
|
||||||
libprovides+=("${versioned_provides[@]}")
|
|
||||||
else
|
|
||||||
libprovides+=("$p")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
(( ${#libprovides[@]} )) && printf '%s\n' "${libprovides[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
write_kv_pair() {
|
write_kv_pair() {
|
||||||
local key="$1"
|
local key="$1"
|
||||||
shift
|
shift
|
||||||
|
@ -617,9 +502,6 @@ write_pkginfo() {
|
||||||
write_kv_pair "size" "$size"
|
write_kv_pair "size" "$size"
|
||||||
write_kv_pair "arch" "$pkgarch"
|
write_kv_pair "arch" "$pkgarch"
|
||||||
|
|
||||||
mapfile -t provides < <(find_libprovides)
|
|
||||||
mapfile -t depends < <(find_libdepends)
|
|
||||||
|
|
||||||
write_kv_pair "license" "${license[@]}"
|
write_kv_pair "license" "${license[@]}"
|
||||||
write_kv_pair "replaces" "${replaces[@]}"
|
write_kv_pair "replaces" "${replaces[@]}"
|
||||||
write_kv_pair "group" "${groups[@]}"
|
write_kv_pair "group" "${groups[@]}"
|
||||||
|
|
Loading…
Add table
Reference in a new issue