diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2022-02-07 20:22:15 -0500 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2023-12-14 17:13:11 -0500 |
commit | 8471798b4447d9fe50d441a69b0d6d01dcf3d325 (patch) | |
tree | 6486735372e1f869afb4b020f760e528db41e498 | |
parent | 82af74f6a240a6ba834c0074cd151168a3c39a4b (diff) |
[lddtree-parabola-packages]: wip
-rwxr-xr-x | lddtree-parabola-packages | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/lddtree-parabola-packages b/lddtree-parabola-packages index 8d51273..28ee75b 100755 --- a/lddtree-parabola-packages +++ b/lddtree-parabola-packages @@ -1,22 +1,41 @@ #!/bin/bash -LogLibErr() { echo "ERROR: no lib $lib" >&2 ; } ; -LogPkgErr() { echo "ERROR: no pkg $pkg for lib $lib" >&2 ; } ; +readonly REPOS_RX='^(libre|nonprism|nonsystem|pcr)' + + +LogLibErr() { echo "ERROR: no lib ${lib}" >&2 ; } ; +LogPkgErr() { echo "ERROR: no pkg ${pkg} for lib ${lib}" >&2 ; } ; Main() { local a_bin="$(which $1)" + local libs=() + local pkg + local lib + local file_meta + local repo + local name + local parabola_pkgs=() + local upstream_pkgs=() + + [[ -x "${a_bin}" ]] || ! echo "USAGE: $0 <elf_file>" >&2 || return 1 - [[ -x "$a_bin" ]] || ! echo "USAGE: $0 <elf_file>" >&2 || return 1 + libs=( $(lddtree ${a_bin} | cut -d '>' -f 2 | sort -u | grep '\.so[^\)]*$') ) - for pkg in $( for lib in $(lddtree $a_bin | cut -d '>' -f 2 | sort -u) - do [[ -f "$lib" ]] && pkgfile $lib || LogLibErr + echo "digging the linkage chain for: '${a_bin}'" + for pkg in $( for lib in "${libs[@]}" + do file_meta="$(file --dereference "${lib}")" + + [[ "${file_meta}" =~ "${lib}: ELF " ]] && pkgfile ${lib} || LogLibErr done | sort -u ) do repo=${pkg/\/*/} name=${pkg/*\//} - [[ "$repo" =~ ^(libre|nonprism|nonsystem|pcr) ]] && echo "is parabola package: $pkg $name $repo" + [[ "${repo}" =~ ${REPOS_RX} ]] && parabola_pkgs+=(${pkg}) || upstream_pkgs+=(${pkg}) done + + echo -e "\nupstream packages:" ; (( ${#upstream_pkgs[@]} )) && printf "\t%s\n" "${upstream_pkgs[@]}" + echo -e "\nparabola packages:" ; (( ${#parabola_pkgs[@]} )) && printf "\t%s\n" "${parabola_pkgs[@]}" } |