From ed04bed43efece46d2b476fbb0260f1d1b8aa1fe Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 21 Nov 2023 00:20:26 -0500 Subject: [PATCH] gettext.mk: Rewrite rules with less forking. Use a pure shell solution to parse the .mo filenames instead of forking out to expr, and don't use subshells with "set -x" to print commands when we can almost as easily use plain echo. --- snippet/gettext.mk | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/snippet/gettext.mk b/snippet/gettext.mk index 8f6865b..68b6113 100644 --- a/snippet/gettext.mk +++ b/snippet/gettext.mk @@ -20,36 +20,41 @@ EXTRA_DIST += po/LINGUAS $(POFILES) $(ALL_MOFILES) MAINTAINERCLEANFILES += $(ALL_MOFILES) .po.mo: - $(AM_V_at) $(MKDIR_P) $(@D) + $(AM_V_at) $(MKDIR_P) ./$(@D) $(AM_V_GEN) $(MSGFMT) $(MSGFMTFLAGS) -c -o $@ $< install-data-local: install-mofiles install-mofiles: $(MOFILES) - mos='$?'; for mo in $$mos; do \ - lang=`expr "$$mo" : '.*/\(.*\)\.mo' \| "$$mo" : '\(.*\)\.mo'`; \ - test x"$$lang" = x"" && exit 1; \ - inst="$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES"; \ - (set -x; $(MKDIR_P) "$$inst") || exit; \ - (set -x; $(INSTALL_DATA) "$$mo" "$$inst/$(PACKAGE).mo") || exit; \ + mos='$(MOFILES)'; for mo in $$mos; do \ + save_IFS=$$IFS; IFS=/.; \ + set x $$mo; shift; eval 'set x $$mo; lang=$$'$$#; \ + IFS=$$save_IFS; \ + d="$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES"; \ + echo "$(MKDIR_P) $$d"; $(MKDIR_P) "$$d" || exit; \ + test -f "$$mo" && s="$$mo" || s="$(srcdir)/$$mo"; \ + d="$$d/$(PACKAGE).mo"; \ + echo "$(INSTALL_DATA) $$s $$d"; $(INSTALL_DATA) "$$s" "$$d" || exit; \ done .PHONY: install-mofiles installdirs-local: installdirs-mofiles installdirs-mofiles: - mos='$(MOFILES)'; for mo in $$mos; do \ - lang=`expr "$$mo" : '.*/\(.*\)\.mo' \| "$$mo" : '\(.*\)\.mo'`; \ - test x"$$lang" = x"" && exit 1; \ - inst="$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES"; \ - (set -x; $(MKDIR_P) "$$inst") || exit; \ - done + d= mos='$(MOFILES)'; for mo in $$mos; do \ + save_IFS=$$IFS; IFS=/.; \ + set x $$mo; shift; eval 'set x $$mo; lang=$$'$$#; \ + IFS=$$save_IFS; \ + d="$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES"; \ + echo "$(MKDIR_P) $$d"; $(MKDIR_P) "$$d" || exit; \ + done; .PHONY: installdirs-mofiles uninstall-local: uninstall-mofiles uninstall-mofiles: mos='$(ALL_MOFILES)'; for mo in $$mos; do \ - lang=`expr "$$mo" : '.*/\(.*\)\.mo' \| "$$mo" : '\(.*\)\.mo'`; \ - test x"$$lang" = x"" && exit 1; \ - inst="$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES"; \ - (set -x; cd "$$inst" && rm -f '$(PACKAGE).mo'); \ + save_IFS=$$IFS; IFS=/.; \ + set x $$mo; shift; eval 'set x $$mo; lang=$$'$$#; \ + IFS=$$save_IFS; \ + d="$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo"; \ + echo "rm -f $$d"; rm -f "$$d"; :; \ done .PHONY: uninstall-mofiles -- 2.43.2