[PATCH 1/4] pkg.in: factored out bin/archdep-*

Michael Shigorin mike at altlinux.org
Tue Jul 16 22:41:59 MSK 2019


These were just asking to be unified as a (hasty)
internal fork between implementations has actually
occured to date (which is a total shame); the overall
number of fork()s should go down a bit, too.

The archdep-filter is now able to handle both a file
specified on the command line and stdin (don't you
do inplace substitution on the same file in a pipe
though, it's a race condition that occured to be
overly subtle to me this evening).

Thanks: Dmitry Levin <ldv at altlinux.org>
---
 bin/archdep-filter       | 36 ++++++++++++++++++++++++++++++++++++
 bin/archdep-grep         |  9 +++++++++
 pkg.in/lists/Makefile    | 10 +---------
 pkg.in/profiles/Makefile | 10 +---------
 4 files changed, 47 insertions(+), 18 deletions(-)
 create mode 100755 bin/archdep-filter
 create mode 100755 bin/archdep-grep

diff --git a/bin/archdep-filter b/bin/archdep-filter
new file mode 100755
index 0000000..3a81b2d
--- /dev/null
+++ b/bin/archdep-filter
@@ -0,0 +1,36 @@
+#!/bin/sh
+# transform texts including lines like entity at arch
+
+[ -n "$ARCH" ] || {
+	echo "** error: ARCH not set" >&2
+	exit 1
+}
+
+# -n is definitely not a typo
+process() {
+	sed -r -e 's/\<([^@ ]*)@X86\>/\1 at i586 \1 at x86_64/g' \
+	       -e 's/\<([^@ ]*)@IA32\>/\1 at i586 i586-\1 at x86_64/g' \
+	       -e 's/\<([^@ ]*)@E2K\>/\1 at e2k \1 at e2kv4/g' |
+	sed -r -n 's/\<([^@ ]*)\>|\<([^@ ]*)@'"$ARCH"'\>/\1\2/pg' |
+	sed -r -e 's/\<([^@ ]*)@[^@ ]+\> *//g' \
+	       -e 's/^ +//;s/ +$//'
+}
+
+exit_handler()
+{
+	local rc=$1
+	rm -f -- "$tmpfile"
+	exit $rc
+}
+
+tmpfile="$(mktemp)"
+trap 'exit_handler $?' EXIT HUP PIPE INT QUIT TERM
+
+# arguments can be a single file or none
+# (in which case stdout gets processed)
+if [ -f "$1" ]; then
+	process < "$1" > "$tmpfile" &&
+	cat "$tmpfile" > "$1"
+else
+	process
+fi
diff --git a/bin/archdep-grep b/bin/archdep-grep
new file mode 100755
index 0000000..a3c3b9d
--- /dev/null
+++ b/bin/archdep-grep
@@ -0,0 +1,9 @@
+#!/bin/sh
+# used twice at least
+
+[ -d "$1" ] || {
+	echo "** error: missing directory argument" >&2
+	exit 1
+}
+
+find "$1" -type f | xargs -rL1 -I '__' archdep-filter __
diff --git a/pkg.in/lists/Makefile b/pkg.in/lists/Makefile
index 1be3792..afc5035 100644
--- a/pkg.in/lists/Makefile
+++ b/pkg.in/lists/Makefile
@@ -35,16 +35,8 @@ copy-groups:
 	@echo $(call groups2lists) \
 	| xargs -r -- cp --parents -at $(TARGET) --
 
-grep-archdep: a = $(ARCH)
 grep-archdep:
-	@# xargs -L 1024 -n 1024 ? -- breaks -I
-	@find $(TARGET) -type f \
-	| xargs -I '__' sh -c '\
-		sed -ri  "s/\\<([^@ ]*)@X86\\>/\\1 at i586 \\1 at x86_64/g" __; \
-		sed -ri  "s/\\<([^@ ]*)@IA32\\>/\\1 at i586 i586-\\1 at x86_64/g" __;\
-		sed -rni "s/\\<([^@ ]*)\\>|\\<([^@ ]*)@$a\\>/\\1\\2/pg" __; \
-		sed -ri  "s/\\<([^@ ]*)@[^@ ]+\\> *//g" __; \
-		sed -ri  "s/^ +//;s/ +$$//" __'
+	@archdep-grep $(TARGET)
 
 # do beforehand as foreach gets expanded before recipe execution
 $(TARGET):
diff --git a/pkg.in/profiles/Makefile b/pkg.in/profiles/Makefile
index 5251436..056a754 100644
--- a/pkg.in/profiles/Makefile
+++ b/pkg.in/profiles/Makefile
@@ -18,16 +18,8 @@ copy-profiles:
 			$(addsuffix .directory,$(THE_PROFILES)); \
 	fi
 
-### exact copy of a snippet from ../lists/Makefile
-grep-archdep: a = $(ARCH)
 grep-archdep:
-	@# xargs -L 1024 -n 1024 ? -- breaks -I
-	@find $(TARGET) -type f \
-	| xargs -I '__' sh -c '\
-		sed -ri  "s/\\<([^@ ]*)@X86\\>/\\1 at i586 \\1 at x86_64/g" __; \
-		sed -ri  "s/\\<([^@ ]*)@IA32\\>/\\1 at i586 i586-\\1 at x86_64/g" __;\
-		sed -rni "s/\\<([^@ ]*)\\>|\\<([^@ ]*)@$a\\>/\\1\\2/pg" __; \
-		sed -ri  "s/\\<([^@ ]*)@[^@ ]+\\> *//g" __'
+	@archdep-grep $(TARGET)
 
 $(TARGET):
 	@mkdir -p $(TARGET)
-- 
2.10.4


--k1lZvvs/B4yU6o8G
Content-Type: text/x-patch; charset=us-ascii
Content-Disposition: attachment; filename="0002-image.in-functions.mk-automatic-profiles2groups.patch"



More information about the devel-distro mailing list