]> git.draconx.ca Git - dxcommon.git/commitdiff
gettext.mk: Rewrite rules with less forking.
authorNick Bowler <nbowler@draconx.ca>
Tue, 21 Nov 2023 05:20:26 +0000 (00:20 -0500)
committerNick Bowler <nbowler@draconx.ca>
Tue, 21 Nov 2023 05:28:38 +0000 (00:28 -0500)
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

index 8f6865b8fb5c0e319e8ea4be361099cb26e44fd7..68b6113d63f2d80e1081659fab02f70404563345 100644 (file)
@@ -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