aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2020-02-07 15:32:21 +0200
committerLasse Collin <lasse.collin@tukaani.org>2020-02-07 15:32:21 +0200
commit6f7211b6bb47a895b47f533282dba9ee9a1b0c8b (patch)
tree0a8513fe1abb9d87f9c7bc4e054a0c9aeaf44cdb /src
parentUpdate THANKS. (diff)
downloadxz-6f7211b6bb47a895b47f533282dba9ee9a1b0c8b.tar.xz
Build: Add support for translated man pages using po4a.
The dependency on po4a is optional. It's never required to install the translated man pages when xz is built from a release tarball. If po4a is missing when building from xz.git, the translated man pages won't be generated but otherwise the build will work normally. The translations are only updated automatically by autogen.sh and by "make mydist". This makes it easy to keep po4a as an optional dependency and ensures that I won't forget to put updated translations to a release tarball. The translated man pages aren't installed if --disable-nls is used. The installation of translated man pages abuses Automake internals by calling "install-man" with redefined dist_man_MANS and man_MANS. This makes the hairy script code slightly less hairy. If it breaks some day, this code needs to be fixed; don't blame Automake developers. Also, this adds more quotes to the existing shell script code in the Makefile.am "-hook"s.
Diffstat (limited to 'src')
-rw-r--r--src/scripts/Makefile.am64
-rw-r--r--src/xz/Makefile.am50
-rw-r--r--src/xzdec/Makefile.am55
3 files changed, 127 insertions, 42 deletions
diff --git a/src/scripts/Makefile.am b/src/scripts/Makefile.am
index 29bdbcd7..fe5742d0 100644
--- a/src/scripts/Makefile.am
+++ b/src/scripts/Makefile.am
@@ -25,31 +25,65 @@ links += \
endif
install-exec-hook:
- cd $(DESTDIR)$(bindir) && \
+ cd "$(DESTDIR)$(bindir)" && \
for pair in $(links); do \
target=`echo $$pair | sed 's/-.*$$//' | sed '$(transform)'` && \
link=`echo $$pair | sed 's/^.*-//' | sed '$(transform)'` && \
- rm -f $$link && \
- $(LN_S) $$target $$link; \
+ rm -f "$$link" && \
+ $(LN_S) "$$target" "$$link"; \
done
+# The installation of translated man pages abuses Automake internals
+# by calling "install-man" with redefined dist_man_MANS and man_MANS.
+# If this breaks some day, don't blame Automake developers.
install-data-hook:
- cd $(DESTDIR)$(mandir)/man1 && \
- for pair in $(links); do \
- target=`echo $$pair | sed 's/-.*$$//' | sed '$(transform)'` && \
- link=`echo $$pair | sed 's/^.*-//' | sed '$(transform)'` && \
- rm -f $$link.1 && \
- $(LN_S) $$target.1 $$link.1; \
+ languages= ; \
+ if test "$(USE_NLS)" = yes && test -d "$(top_srcdir)/po4a/man"; then \
+ languages=`ls "$(top_srcdir)/po4a/man"`; \
+ fi; \
+ for lang in $$languages; do \
+ mans= ; \
+ for man in $(dist_man_MANS); do \
+ man="$(top_srcdir)/po4a/man/$$lang/$$man" ; \
+ if test -f "$$man"; then \
+ mans="$$mans $$man"; \
+ fi; \
+ done; \
+ $(MAKE) dist_man_MANS="$$mans" man_MANS= \
+ mandir="$(mandir)/$$lang" install-man; \
+ done; \
+ for lang in . $$languages; do \
+ for pair in $(links); do \
+ target=`echo $$pair | sed 's/-.*$$//' \
+ | sed '$(transform)'` && \
+ link=`echo $$pair | sed 's/^.*-//' \
+ | sed '$(transform)'` && \
+ man1dir="$(DESTDIR)$(mandir)/$$lang/man1" && \
+ if test -f "$$man1dir/$$target.1"; then ( \
+ cd "$$man1dir" && \
+ rm -f "$$link.1" && \
+ $(LN_S) "$$target.1" "$$link.1" \
+ ); fi; \
+ done; \
done
uninstall-hook:
- cd $(DESTDIR)$(bindir) && \
+ cd "$(DESTDIR)$(bindir)" && \
for pair in $(links); do \
link=`echo $$pair | sed 's/^.*-//' | sed '$(transform)'` && \
- rm -f $$link; \
+ rm -f "$$link"; \
done
- cd $(DESTDIR)$(mandir)/man1 && \
- for pair in $(links); do \
- link=`echo $$pair | sed 's/^.*-//' | sed '$(transform)'` && \
- rm -f $$link.1; \
+ languages= ; \
+ if test "$(USE_NLS)" = yes && test -d "$(top_srcdir)/po4a/man"; then \
+ languages=`ls "$(top_srcdir)/po4a/man"`; \
+ fi; \
+ for lang in . $$languages; do \
+ for pair in $(links); do \
+ target=`echo $$pair | sed 's/-.*$$//' \
+ | sed '$(transform)'` && \
+ link=`echo $$pair | sed 's/^.*-//' \
+ | sed '$(transform)'` && \
+ rm -f "$(DESTDIR)$(mandir)/$$lang/man1/$$target.1" \
+ "$(DESTDIR)$(mandir)/$$lang/man1/$$link.1"; \
+ done; \
done
diff --git a/src/xz/Makefile.am b/src/xz/Makefile.am
index 0890aad7..4bc64f36 100644
--- a/src/xz/Makefile.am
+++ b/src/xz/Makefile.am
@@ -81,31 +81,53 @@ xzlinks += lzma unlzma lzcat
endif
install-exec-hook:
- cd $(DESTDIR)$(bindir) && \
+ cd "$(DESTDIR)$(bindir)" && \
target=`echo xz | sed '$(transform)'`$(EXEEXT) && \
for name in $(xzlinks); do \
link=`echo $$name | sed '$(transform)'`$(LN_EXEEXT) && \
- rm -f $$link && \
- $(LN_S) $$target $$link; \
+ rm -f "$$link" && \
+ $(LN_S) "$$target" "$$link"; \
done
+# The installation of translated man pages abuses Automake internals
+# by calling "install-man" with redefined dist_man_MANS and man_MANS.
+# If this breaks some day, don't blame Automake developers.
install-data-hook:
- cd $(DESTDIR)$(mandir)/man1 && \
+ languages= ; \
+ if test "$(USE_NLS)" = yes && test -d "$(top_srcdir)/po4a/man"; then \
+ languages=`ls "$(top_srcdir)/po4a/man"`; \
+ fi; \
target=`echo xz | sed '$(transform)'` && \
- for name in $(xzlinks); do \
- link=`echo $$name | sed '$(transform)'` && \
- rm -f $$link.1 && \
- $(LN_S) $$target.1 $$link.1; \
+ for lang in . $$languages; do \
+ man="$(top_srcdir)/po4a/man/$$lang/xz.1" ; \
+ if test -f "$$man"; then \
+ $(MAKE) dist_man_MANS="$$man" man_MANS= \
+ mandir="$(mandir)/$$lang" install-man; \
+ fi; \
+ man1dir="$(DESTDIR)$(mandir)/$$lang/man1" && \
+ if test -f "$$man1dir/$$target.1"; then ( \
+ cd "$$man1dir" && \
+ for name in $(xzlinks); do \
+ link=`echo $$name | sed '$(transform)'` && \
+ rm -f "$$link.1" && \
+ $(LN_S) "$$target.1" "$$link.1"; \
+ done \
+ ); fi; \
done
uninstall-hook:
- cd $(DESTDIR)$(bindir) && \
+ cd "$(DESTDIR)$(bindir)" && \
for name in $(xzlinks); do \
link=`echo $$name | sed '$(transform)'`$(LN_EXEEXT) && \
- rm -f $$link; \
+ rm -f "$$link"; \
done
- cd $(DESTDIR)$(mandir)/man1 && \
- for name in $(xzlinks); do \
- link=`echo $$name | sed '$(transform)'` && \
- rm -f $$link.1; \
+ languages= ; \
+ if test "$(USE_NLS)" = yes && test -d "$(top_srcdir)/po4a/man"; then \
+ languages=`ls "$(top_srcdir)/po4a/man"`; \
+ fi; \
+ for lang in . $$languages; do \
+ for name in xz $(xzlinks); do \
+ name=`echo $$name | sed '$(transform)'` && \
+ rm -f "$(DESTDIR)$(mandir)/$$lang/man1/$$name.1"; \
+ done; \
done
diff --git a/src/xzdec/Makefile.am b/src/xzdec/Makefile.am
index 5ff8e373..90f1e922 100644
--- a/src/xzdec/Makefile.am
+++ b/src/xzdec/Makefile.am
@@ -50,6 +50,7 @@ lzmadec_LDADD = $(xzdec_LDADD)
bin_PROGRAMS =
+lzmadecmanlink =
if COND_XZDEC
bin_PROGRAMS += xzdec
@@ -60,23 +61,51 @@ if COND_LZMADEC
bin_PROGRAMS += lzmadec
# Create the symlink lzmadec.1->xzdec.1 only if xzdec.1 was installed.
-# This is better than creating a dangling symlink, especially
-# because creating the link may fail due to the directory being missing.
-#
-# FIXME: The correct solution would be to install xzdec.1 as lzmadec.1
-# but I don't know what is the sane way to do it and since this is a bit
-# unusual situation anyway, it's not that important.
+# This is better than creating a dangling symlink. The correct solution
+# would be to install xzdec.1 as lzmadec.1 but this code is already too
+# complicated so I won't do it. Installing only lzmadec is a bit unusual
+# situation anyway so it's not that important.
if COND_XZDEC
+lzmadecmanlink += lzmadec
+endif
+endif
+
+if COND_XZDEC
+# The installation of translated man pages abuses Automake internals
+# by calling "install-man" with redefined dist_man_MANS and man_MANS.
+# If this breaks some day, don't blame Automake developers.
install-data-hook:
- cd $(DESTDIR)$(mandir)/man1 && \
+ languages= ; \
+ if test "$(USE_NLS)" = yes && test -d "$(top_srcdir)/po4a/man"; then \
+ languages=`ls "$(top_srcdir)/po4a/man"`; \
+ fi; \
target=`echo xzdec | sed '$(transform)'` && \
link=`echo lzmadec | sed '$(transform)'` && \
- rm -f $$link.1 && \
- $(LN_S) $$target.1 $$link.1
+ for lang in . $$languages; do \
+ man="$(top_srcdir)/po4a/man/$$lang/xzdec.1" ; \
+ if test -f "$$man"; then \
+ $(MAKE) dist_man_MANS="$$man" man_MANS= \
+ mandir="$(mandir)/$$lang" install-man; \
+ fi; \
+ man1dir="$(DESTDIR)$(mandir)/$$lang/man1" && \
+ if test -f "$$man1dir/$$target.1"; then \
+ if test -n "$(lzmadecmanlink)"; then ( \
+ cd "$$man1dir" && \
+ rm -f "$$link.1" && \
+ $(LN_S) "$$target.1" "$$link.1" \
+ ); fi; \
+ fi; \
+ done
uninstall-hook:
- cd $(DESTDIR)$(mandir)/man1 && \
- link=`echo lzmadec | sed '$(transform)'` && \
- rm -f $$link.1
-endif
+ languages= ; \
+ if test "$(USE_NLS)" = yes && test -d "$(top_srcdir)/po4a/man"; then \
+ languages=`ls "$(top_srcdir)/po4a/man"`; \
+ fi; \
+ for lang in . $$languages; do \
+ for name in xzdec $(lzmadecmanlink); do \
+ name=`echo $$name | sed '$(transform)'` && \
+ rm -f "$(DESTDIR)$(mandir)/$$lang/man1/$$name.1"; \
+ done; \
+ done
endif