[devel-distro] [PATCH 1/4] bin/archdep-filter: implement multi-matching

Michael Shigorin mike at altlinux.org
Mon Nov 22 21:45:15 MSK 2021


This has been inspired by a few commits that cared
for package availability reasons on a particular
architecture; the problem at hand is that pkglists
might need to include groups of packages that are
(un)available on groups of arches, and tackling that
with plain pkg at arch just results in combinatorial
explosion of that matrix.

Arches are handled one-by-one with a few hardcoded
macro substitutions.

Exploding a "pkg at arch1,arch2" string into a set of:

pkg at arch1
pkg at arch2

with subsequent archdep pruning would do the trick;
so here's another sed oneliner that does just that:

$ echo 'pkg at X86,ARM,ppc64le' |
  sed -r ':loop; s/^((([^@]+@)[^,]+)+),([^,]+)/\1\n\3\4/; t loop'
pkg at X86
pkg at ARM
pkg at ppc64le

See-also: 9601a9e7ce92c7a521fd154f59d8e17524f12a95
See-also: 5581dc91ec6f3330c338995d1cdfbca285298011
See-also: http://stackoverflow.com/a/55781741/561921
---
 bin/archdep-filter | 1 +
 doc/archdep.txt    | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/bin/archdep-filter b/bin/archdep-filter
index 69ff9c0a4..58cd076e9 100755
--- a/bin/archdep-filter
+++ b/bin/archdep-filter
@@ -34,6 +34,7 @@ esac
 
 # NB: pipe runs in parallel => faster than -e -e
 cat ${f:+"$f"} |
+sed -r  ':loop; s/^((([^@]+@)[^,]+)+),([a-zA-Z0-9_]+)/\1\n\3\4/; t loop' |
 sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$A\>/\1\2/pg" |
 sed -rn "s/\<([^@ ]*)\>|\<[^@ ]*@\!$A\> */\1/pg" |
 sed -r  "s/\<([^@ ]*)@IA32\>/\1 at i586 i586-\1 at x86_64/g" |
diff --git a/doc/archdep.txt b/doc/archdep.txt
index 4a33233ef..d1a1c3e91 100644
--- a/doc/archdep.txt
+++ b/doc/archdep.txt
@@ -48,6 +48,11 @@
 ARM (armh или aarch64), а также выборка "для любой архитектуры, кроме"
 (например, @!E2K, или "@!ARM).
 
+С версии 1.4.21 поддерживается перечисление архитектур через запятую
+после "@":
+
+  LibreOffice-still at X86,aarch64,ppc64le,mipsel
+
 Для преобразования можно воспользоваться следующей командой:
 
   sed -r -e 's/@I586_ONLY@([^\t ]+)/\1 at i586/g' \
-- 
2.33.0



More information about the devel-distro mailing list