Skip to Content.
Sympa Menu

sm-commit - [SM-Commit] GIT changes to master grimoire by Remko van der Vossen (d7f8ec1a3ee101319b3fdf2c1787121d5a361adc)

sm-commit AT lists.ibiblio.org

Subject: Source Mage code commit list

List archive

Chronological Thread  
  • From: Remko van der Vossen <scm AT sourcemage.org>
  • To: sm-commit AT lists.ibiblio.org
  • Subject: [SM-Commit] GIT changes to master grimoire by Remko van der Vossen (d7f8ec1a3ee101319b3fdf2c1787121d5a361adc)
  • Date: Mon, 14 Aug 2017 14:46:09 +0000

GIT changes to master grimoire by Remko van der Vossen <wich AT sourcemage.org>:

ChangeLog | 3
find_depends.function | 244
+++++++++++++++++++++++++++++++++++++++
graphics-libs/libpng/HISTORY | 3
graphics-libs/libpng/UP_TRIGGERS | 39 +-----
4 files changed, 259 insertions(+), 30 deletions(-)

New commits:
commit a63bda148e7a1b0a5a908254242d1f4902d78aaf
Author: Remko van der Vossen <wich AT sourcemage.org>
Commit: Remko van der Vossen <wich AT sourcemage.org>

graphics-libs/libpng: use find_depends.function in UP_TRIGGERS

commit 1a331b88c284d388491e39101b2df8072645c2a8
Author: Remko van der Vossen <wich AT sourcemage.org>
Commit: Remko van der Vossen <wich AT sourcemage.org>

find_depends.function: Dependency discovery functions

Created some dependency discovery functions. These functions can be used
to find libtool and shared object dependencies between spells that are
not necessarily recorded in sorcery's administration.

diff --git a/ChangeLog b/ChangeLog
index 3a11229..e2adbef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2017-08-14 Remko van der Vossen <wich AT sourcemage.org>
+ * find_depends.function: dependency discovery functions
+
2017-08-14 Treeve Jelbert <treeve AT sourcemage.org>
* kirigami2: move to kde-frameworks
* kde5-extra/kirigami: deleted
diff --git a/find_depends.function b/find_depends.function
new file mode 100644
index 0000000..21756ef
--- /dev/null
+++ b/find_depends.function
@@ -0,0 +1,244 @@
+#---------------------------------------------------------------------
+## @Synopsis Set of functions for dependency discovery
+##
+## @Copyright Source Mage Team
+#---------------------------------------------------------------------
+
+#---------------------------------------------------------------------
+## Find all spells that depend on at least one of a given list of
+## libtool archives and a given list of shared objects.
+##
+## @param dependencies_var: output variable name
+## @param libtool_names: a list of libtool archive names
+## @param so_names: a list of shared object names
+## @param excluded_spells: a list of spells to be excluded
+## @stdout progress messages
+#---------------------------------------------------------------------
+function find_libtool_so_dependencies() {
+ local dependencies_var="$1" &&
+ local libtool_names="$2" &&
+ local so_names="$3" &&
+ local excluded_spells="$4" &&
+
+ LANG= &&
+ local spells=$(gaze installed | cut -d: -f1) &&
+ local spell_count=$(wc -l <<< "$spells") &&
+ local spell_index=0 &&
+ for spell in $spells; do
+ ((spell_index++)) &&
+ message -n "${DEFAULT_COLOR}[${spell_index}/${spell_count}
${spell}]\e[K\r" &&
+ if list_find "$excluded_spells" "$spell"; then
+ continue
+ fi &&
+ if spell_has_libtool_dependency $spell "$libtool_names"; then
+ list_add "$dependencies_var" $spell &&
+ continue
+ fi &&
+ if spell_has_shared_object_dependency $spell "$so_names"; then
+ list_add "$dependencies_var" "$spell"
+ fi
+ done &&
+ message
+}
+
+#---------------------------------------------------------------------
+## Find all spells that depend on at least one of a given list of
+## libtool archives
+##
+## @param dependencies_var: output variable name
+## @param libtool_names: a list of libtool archive names
+## @param excluded_spells: a list of spells to be excluded
+## @stdout progress messages
+#---------------------------------------------------------------------
+function find_libtool_dependencies() {
+ local dependencies_var="$1" &&
+ local libtool_names="$2" &&
+ local excluded_spells="$3" &&
+
+ LANG= &&
+ local spells=$(gaze installed | cut -d: -f1) &&
+ local spell_count=$(wc -l <<< "$spells") &&
+ local spell_index=0 &&
+ for spell in $spells; do
+ ((spell_index++)) &&
+ message "${DEFAULT_COLOR}[${spell_index}/${spell_count} ${spell}]\e[K\r"
&&
+ if list_find "$excluded_spells" "$spell"; then
+ continue
+ fi &&
+ if spell_has_libtool_dependency $spell "$libtool_names"; then
+ list_add "$dependencies_var" $spell
+ fi
+ done &&
+ message
+}
+
+#---------------------------------------------------------------------
+## Find all spells that depend on at least one of a given list of
+## shared objects.
+##
+## @param dependencies_var: output variable name
+## @param so_names: a list of shared object names
+## @param excluded_spells: a list of spells to be excluded
+## @stdout progress messages
+#---------------------------------------------------------------------
+function find_shared_object_dependencies() {
+ local dependencies_var="$1" &&
+ local so_names="$2" &&
+ local excluded_spells="$3" &&
+
+ LANG= &&
+ local spells=$(gaze installed | cut -d: -f1) &&
+ local spell_count=$(wc -l <<< "$spells") &&
+ local spell_index=0 &&
+ for spell in $spells; do
+ ((spell_index++)) &&
+ message "${DEFAULT_COLOR}[${spell_index}/${spell_count} ${spell}]\e[K\r"
&&
+ if list_find "$excluded_spells" "$spell"; then
+ continue
+ fi &&
+ if spell_has_shared_object_dependency $spell "$so_names"; then
+ list_add "$dependencies_var" "$spell"
+ fi
+ done &&
+ message
+}
+
+#---------------------------------------------------------------------
+## Determine whether the given spell depends on at least one of a
+## given list of libtool archives
+##
+## @param spell: spell to check for dependency
+## @param libtool_names: a list of libtool archive names
+##
+## @return 0 if the given spell depends on any of the given libtool archives
+## @return 1 if the given spell does not depend on any of the given libtool
archives
+## @return 2 if any error occurs
+#---------------------------------------------------------------------
+function spell_has_libtool_dependency() {
+ local spell="$1"
+ local libtool_names="$2"
+
+ find_spell_libtool_archives "$spell" \
+ | xargs grep --quiet --basic-regexp --file=<(sed -e 's/[.[^$\*]/\\&/g' -e
's/.*/^dependency_libs.*&/' <<< "$libtool_names")
+
+ return $(( ${PIPESTATUS[0]} > 0 ? 2 : ${PIPESTATUS[-1]} ))
+}
+
+#---------------------------------------------------------------------
+## Determine whether the given spell depends on at least one of a
+## given list of shared objects
+##
+## @param spell: spell to check for dependency
+## @param so_names: a list of shared object names
+##
+## @return 0 if the given spell depends on any of the given shared objects
+## @return 1 if the given spell does not depend on any of the given shared
objects
+## @return 2 if any error occurs
+#---------------------------------------------------------------------
+function spell_has_shared_object_dependency() {
+ local spell="$1"
+ local so_names="$2"
+
+ find_spell_dynamically_linked_ELF_objects "$spell" \
+ | xargs readelf -d 2> /dev/null \
+ | grep --quiet --basic-regexp --file=<(sed -e 's/[.[^$\*]/\\&/g' -e
's/.*/NEEDED)[[:space:]]*Shared library: \\[&/' <<< "$so_names")
+
+ return $(( (${PIPESTATUS[0]} > 0 || ${PIPESTATUS[1]} > 0) ? 2 :
${PIPESTATUS[-1]} ))
+}
+
+#---------------------------------------------------------------------
+## List all libtool archives installed by a spell
+##
+## @param spell: spell to list libtool archives for
+## @stdout a list of all libtool archives installed by the spell
+#---------------------------------------------------------------------
+function find_spell_libtool_archives() {
+ local -a file_opts
+ OPTIND=1
+ while getopts ':L' opt; do
+ case "$opt" in
+ L)
+ file_opts+=("--dereference")
+ ;;
+ \?)
+ return 1
+ ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+ local spell="$1"
+
+ local magic="\
+0 search/80 .la\ -\ a\ libtool\ library\ file libtool
library file"
+
+ LANG=
+ gaze install "$spell" \
+ | file --magic-file <(echo "$magic") "${file_opts[@]}" --files-from - \
+ | sed -n -e '/\<libtool library file\>/s/:.*//p'
+}
+
+#---------------------------------------------------------------------
+## List all shared objects installed by a spell
+##
+## @param spell: spell to list shared objects for
+## @stdout a list of all shared objects installed by the spell
+#---------------------------------------------------------------------
+function find_spell_shared_objects() {
+ local -a file_opts
+ OPTIND=1
+ while getopts ':L' opt; do
+ case $opt in
+ L)
+ file_opts+=("--dereference")
+ ;;
+ \?)
+ return 1
+ ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+ local spell="$1"
+
+ local magic="\
+0 string \177ELF ELF
+>5 byte 1 LSB
+>>16 leshort 3 shared object,
+>5 byte 2 MSB
+>>16 beshort 3 shared object,"
+
+ LANG=
+ gaze install "$spell" \
+ | file --magic-file <(echo "$magic") "${file_opts[@]}" --files-from - \
+ | sed -n -e '/\<ELF\>.*\<shared object\>/s/:.*//p'
+}
+
+#---------------------------------------------------------------------
+## List all dynamically linked ELF objects installed by a spell
+##
+## @param spell: spell to list dynamically linked ELF objects for
+## @stdout a list of all dynamically linked ELF objects installed by the
spell
+#---------------------------------------------------------------------
+function find_spell_dynamically_linked_ELF_objects() {
+ local -a file_opts
+ OPTIND=1
+ while getopts ':L' opt; do
+ case "$opt" in
+ L)
+ file_opts+=("--dereference")
+ ;;
+ \?)
+ return 1
+ ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+ local spell="$1"
+
+ local magic="\
+0 string \177ELF ELF"
+
+ LANG=
+ gaze install "$spell" \
+ | file --magic-file <(echo "$magic") "${file_opts[@]}" --files-from - \
+ | sed -n -e '/\<ELF\>.*\<dynamically linked\>/s/:.*//p'
+}
diff --git a/graphics-libs/libpng/HISTORY b/graphics-libs/libpng/HISTORY
index 7102a55..20026a0 100644
--- a/graphics-libs/libpng/HISTORY
+++ b/graphics-libs/libpng/HISTORY
@@ -1,3 +1,6 @@
+2017-08-14 Remko van der Vossen <wich AT sourcemage.org>
+ * UP_TRIGGERS: use find_depends.function
+
2017-07-30 Treeve Jelbert <treeve AT sourcemage.org>
* DETAILS: version 1.6.31

diff --git a/graphics-libs/libpng/UP_TRIGGERS
b/graphics-libs/libpng/UP_TRIGGERS
index cea76ff..8776834 100755
--- a/graphics-libs/libpng/UP_TRIGGERS
+++ b/graphics-libs/libpng/UP_TRIGGERS
@@ -1,40 +1,18 @@
-
if spell_ok $SPELL; then
+ . "$GRIMOIRE/find_depends.function"
+
local OLD_SPELL_VERSION="$(installed_version $SPELL)" &&
if [[ "${VERSION%.*}" != "${OLD_SPELL_VERSION%.*}" ]]; then
message
message "${MESSAGE_COLOR}This is an ABI incompatible update of
${SPELL_COLOR}${SPELL}${MESSAGE_COLOR}..." &&
message "Determining which spells need to be recast, this may take a
while." &&

- LANG= &&
- local spells=$(gaze installed | cut -d: -f1) &&
- local spell_count=$(wc -w <<< "$spells") &&
- local spell_index=0 &&
- local recast_list= &&
- for other_spell in $spells; do
- ((spell_index++)) &&
- echo -ne "[${spell_index}/${spell_count} ${other_spell}]\e[K\r" &&
- if [[ "$other_spell" == "$SPELL" ]]; then
- continue
- fi &&
- if gaze install $other_spell \
- | file -f - -e apptype -e cdf -e compress -e elf -e encoding -e
soft -e tar \
- | grep '\<libtool library file\>' \
- | cut -d: -f1 \
- | xargs cat 2> /dev/null \
- | grep -q "^dependency_libs.*${SPELL}[0-9]*\.la"; then
- list_add recast_list $other_spell &&
- continue
- fi &&
- if gaze install $other_spell \
- | file -f - -e apptype -e ascii -e cdf -e compress -e encoding -e
soft -e tar \
- | grep '\<ELF\>.*\<dynamically linked\>' \
- | cut -d: -f1 \
- | xargs readelf -d 2> /dev/null \
- | grep -q "NEEDED)[[:space:]]*Shared library: \[$SPELL"; then
- list_add recast_list $other_spell
- fi
- done
+ local recast_list &&
+ local libtool_names="$(find_spell_libtool_archives -L "$SPELL" | xargs
basename -a)"
+ local so_names="$(find_spell_shared_objects "$SPELL" | xargs readelf -d
| sed -n -e '/SONAME/s/^.*\[\([^]]*\).*/\1/p')"
+
+ find_libtool_so_dependencies recast_list "$libtool_names" "$so_names"
"$SPELL"
+
if [[ -n "${recast_list}" ]]; then
message "
${SPELL_COLOR}${PROBLEM_COLOR}You are about to upgrade (downgrade)
${SPELL_COLOR}${SPELL}${PROBLEM_COLOR} to a different major version.
@@ -47,6 +25,7 @@ cast." &&
message "${MESSAGE_COLOR}The following spells will be dispelled and
recast:" &&
message $(fold -s -w 72 <<< "${SPELL_COLOR}${recast_list}") &&
query "${QUERY_COLOR}Do you wish to upgrade (downgrade)
${SPELL_COLOR}${SPELL}${QUERY_COLOR} now?" n &&
+ local other_spell &&
for other_spell in $recast_list; do
dispel $other_spell &&
up_trigger $other_spell cast_self



  • [SM-Commit] GIT changes to master grimoire by Remko van der Vossen (d7f8ec1a3ee101319b3fdf2c1787121d5a361adc), Remko van der Vossen, 08/15/2017

Archive powered by MHonArc 2.6.24.

Top of Page