From bd60fa9eec529c4fe922ca12d798c8aba1e05d97 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek@redhat.com>
Date: Wed, 20 Oct 2010 17:23:11 +0200
Subject: [PATCH 1/2] Make manual pages translatable

Utilizes PO4A to extract translatable strings from Docbook XML sources
and allows translators to submit ordinary .PO files. PO4A then generates
translated Docbook documents that can be used to generate translated end
user documentation.

https://fedorahosted.org/sssd/ticket/297
---
 Makefile.am                |   47 +++----------
 configure.ac               |    4 +-
 contrib/sssd.spec.in       |    2 +
 src/man/Makefile.am        |  159 ++++++++++++++++++++++++++++++++++++++++++++
 src/man/sss_groupdel.8.xml |    2 +-
 5 files changed, 175 insertions(+), 39 deletions(-)
 create mode 100644 src/man/Makefile.am

diff --git a/Makefile.am b/Makefile.am
index 6d91cf6..2aff9bf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
 DISTCHECK_CONFIGURE_FLAGS = --with-ldb-lib-dir="$$dc_install_base"/lib/ldb
 
-SUBDIRS = po
+SUBDIRS = po src/man
 
 # Some old versions of automake don't define builddir
 builddir ?= .
@@ -971,41 +971,15 @@ pysss_la_LDFLAGS = \
     -module
 endif
 
-############
-# MANPAGES #
-############
-
-#Special Rules:
-export SGML_CATALOG_FILES
-DOCBOOK_XSLT = http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
-XMLLINT_FLAGS = --catalogs --postvalid --nonet --xinclude --noout
-XSLTPROC_FLAGS = --catalogs --xinclude --nonet
-
-man_MANS = \
-    src/man/sss_useradd.8 src/man/sss_userdel.8 src/man/sss_usermod.8 \
-    src/man/sss_groupadd.8 src/man/sss_groupdel.8 src/man/sss_groupmod.8 \
-    src/man/sssd.8 src/man/sssd.conf.5 src/man/sssd-ldap.5 \
-    src/man/sssd-krb5.5 src/man/sssd-ipa.5 src/man/sssd-simple.5 \
-    src/man/sssd_krb5_locator_plugin.8 src/man/sss_groupshow.8 \
-    src/man/pam_sss.8 src/man/sss_obfuscate.8
-EXTRA_DIST += $(man_MANS:%=%.xml) $(wildcard $(srcdir)/src/man/include/*.xml)
-
-SUFFIXES = .1.xml .1 .3.xml .3 .5.xml .5 .8.xml .8
-.1.xml.1:
-	$(XMLLINT) $(XMLLINT_FLAGS) $<
-	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
-
-.3.xml.3:
-	$(XMLLINT) $(XMLLINT_FLAGS) $<
-	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
-
-.5.xml.5:
-	$(XMLLINT) $(XMLLINT_FLAGS) $<
-	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
-
-.8.xml.8:
-	$(XMLLINT) $(XMLLINT_FLAGS) $<
-	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
+################
+# TRANSLATIONS #
+################
+update-po:
+	$(MAKE) -C src/man update-po
+	$(MAKE) -C po update-po
+
+translated-manpages:
+	$(MAKE) -C src/man translate
 
 #######################
 # Installation Extras #
@@ -1097,7 +1071,6 @@ if BUILD_PYTHON_BINDINGS
 	cd $(srcdir)/src/config; $(PYTHON) setup.py build --build-base $(abs_builddir)/src/config clean --all
 endif
 	rm -Rf doc
-	rm -f $(man_MANS)
 
 CLEANFILES = *.X */*.X */*/*.X
 
diff --git a/configure.ac b/configure.ac
index 1ebf2f7..6192c53 100644
--- a/configure.ac
+++ b/configure.ac
@@ -142,6 +142,8 @@ if test x$HAVE_MANPAGES != x; then
     CHECK_STYLESHEET([$SGML_CATALOG_FILES],
                      [http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
                      [Docbook XSL templates])
+    AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
+    AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
 fi
 
 if test x$HAVE_PYTHON_BINDINGS != x; then
@@ -184,6 +186,6 @@ AC_DEFINE_UNQUOTED([ABS_BUILD_DIR], ["$abs_build_dir"], [Absolute path to the bu
 AC_SUBST([abs_builddir], $abs_build_dir)
 
 AC_CONFIG_FILES([Makefile contrib/sssd.spec src/examples/rwtab src/doxy.config
-                 src/sysv/systemd/sssd.service po/Makefile.in])
+                 src/sysv/systemd/sssd.service po/Makefile.in src/man/Makefile])
 AC_OUTPUT
 
diff --git a/contrib/sssd.spec.in b/contrib/sssd.spec.in
index 6416128..cf24698 100644
--- a/contrib/sssd.spec.in
+++ b/contrib/sssd.spec.in
@@ -73,6 +73,7 @@ BuildRequires: bind-utils
 BuildRequires: keyutils-libs-devel
 BuildRequires: libnl-devel
 BuildRequires: nscd
+BuildRequires: po4a
 
 %description
 Provides a set of daemons to manage access to remote directories and
@@ -105,6 +106,7 @@ service.
     --disable-rpath
 
 make %{?_smp_mflags}
+make translated-manpages
 
 %check
 export CK_TIMEOUT_MULTIPLIER=10
diff --git a/src/man/Makefile.am b/src/man/Makefile.am
new file mode 100644
index 0000000..7febd6c
--- /dev/null
+++ b/src/man/Makefile.am
@@ -0,0 +1,159 @@
+# The following variable is dependent on placement of this file
+top_builddir = ../..
+
+############
+# MANPAGES #
+############
+
+#Special Rules:
+export SGML_CATALOG_FILES
+DOCBOOK_XSLT = http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
+XMLLINT_FLAGS = --catalogs --postvalid --nonet --xinclude --noout
+XSLTPROC_FLAGS = --catalogs --xinclude --nonet
+
+man_MANS = \
+    sss_useradd.8 sss_userdel.8 sss_usermod.8 \
+    sss_groupadd.8 sss_groupdel.8 sss_groupmod.8 \
+    sssd.8 sssd.conf.5 sssd-ldap.5 \
+    sssd-krb5.5 sssd-ipa.5 sssd-simple.5 \
+    sssd_krb5_locator_plugin.8 sss_groupshow.8 \
+    pam_sss.8 sss_obfuscate.8
+EXTRA_DIST = $(man_MANS:%=%.xml) $(wildcard include/*.xml)
+
+SUFFIXES = .1.xml .1 .3.xml .3 .5.xml .5 .8.xml .8
+.1.xml.1:
+	$(XMLLINT) $(XMLLINT_FLAGS) $<
+	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
+
+.3.xml.3:
+	$(XMLLINT) $(XMLLINT_FLAGS) $<
+	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
+
+.5.xml.5:
+	$(XMLLINT) $(XMLLINT_FLAGS) $<
+	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
+
+.8.xml.8:
+	$(XMLLINT) $(XMLLINT_FLAGS) $<
+	$(XSLTPROC) -o $@  $(XSLTPROC_FLAGS) $(DOCBOOK_XSLT) $<
+
+########################
+# MANPAGE TRANSLATIONS #
+########################
+
+PO4A=@PO4A@
+SED=@SED@
+
+PACKAGE_DOC=sssd-docs
+
+POTFILE=$(srcdir)/po/$(PACKAGE_DOC).pot
+PO4A_CONFIG=$(srcdir)/po/po4a.cfg
+LINGUAS=$(srcdir)/po/LINGUAS
+
+PO4A_COMMON_OPTS = --option doctype=docbook \
+		   --package-name $(PACKAGE_DOC) \
+		   --package-version $(PACKAGE_VERSION) \
+		   --msgid-bugs-address sssd-devel@redhat.com \
+		   --copyright-holder "Red Hat"
+
+
+# The list of files to translate
+XML_DOC=$(wildcard *.xml) $(wildcard include/*.xml)
+LANGUAGES=$(shell $(SED) 's/\#.*//' $(LINGUAS))
+
+EXTRA_DIST += \
+	$(POTFILE)	\
+	$(LINGUAS)	\
+	$(LANGUAGES:%=po/%.po)
+
+if HAVE_PO4A
+
+prepare.stamp: $(LINGUAS)
+	for lang in $(LANGUAGES); do \
+		$(mkdir_p) $$lang; \
+	done
+	touch $@
+
+$(PO4A_CONFIG): prepare.stamp $(XML_DOC)
+	rm -f $@
+	echo "[po4a_langs] $(shell $(SED) 's/\#.*//' $(LINGUAS))" >> $@
+	echo "[po4a_paths] $(POTFILE) \$$lang:po/\$$lang.po" >> $@
+	for file in $(XML_DOC); do \
+	    echo "[type:docbook] $$file \$$lang:\$$lang/$$file" >> $@; \
+	done
+
+# Extract translatable strings from the original Docbook sources
+$(POTFILE): $(XML_DOC) $(PO4A_CONFIG)
+	$(PO4A) $(PO4A_COMMON_OPTS) --no-backups --no-translations $(PO4A_CONFIG)
+
+update-po: $(POTFILE)
+
+# Generate translated XML documents from the .PO files
+translate-xml.stamp: $(PO4A_CONFIG)
+	$(PO4A) $(PO4A_COMMON_OPTS) $(PO4A_CONFIG)
+	touch $@
+
+# Generate translated manual pages
+translate: translate-xml.stamp
+	if [ -z $$recursion ]; then \
+	    for lang in $(LANGUAGES); do \
+		if [ -d $$lang ]; then \
+		    sources=$$(ls $$lang/*.xml); \
+		    manpages=$$(echo $$sources | $(SED) 's/\.xml//'); \
+		    $(MAKE) recursion=1 man_MANS="$$manpages"; \
+		fi \
+	    done \
+	fi
+
+dist-hook: translate-xml.stamp
+
+clean-local: clean-local-@USE_NLS@
+distclean-local: clean-local-@USE_NLS@
+mostlyclean-local: clean-local-@USE_NLS@
+maintainer-clean-local: clean-local-@USE_NLS@
+
+clean-local-no:
+clean-local-yes:
+	if [ -f $(PO4A_CONFIG) ]; then \
+		$(PO4A) --rm-backups --rm-translations $(PO4A_CONFIG); \
+		rm -f $(PO4A_CONFIG); \
+	fi
+	for lang in $(LANGUAGES); do \
+	    if [ -d $$lang ]; then \
+	    	rm -rf $$lang;	   \
+	    fi \
+	done
+	rm -f prepare.stamp
+	rm -f translate-xml.stamp
+	rm -f $(man_MANS)
+
+install-data-local: install-data-local-@USE_NLS@
+install-data-local-no:
+install-data-local-yes:
+	for lang in $(LANGUAGES); do \
+	    if [ -d $$lang ]; then \
+		sources=$$(ls $$lang/*.xml); \
+		manpages=$$(echo $$sources | $(SED) 's/\.xml//'); \
+		$(MAKE) install-man \
+			mandir="$(mandir)/$$lang" \
+			man_MANS="$$manpages"; \
+	    fi \
+	done
+
+uninstall-local: uninstall-local-@USE_NLS@
+uninstall-local-no:
+uninstall-local-yes:
+	for lang in $(LANGUAGES); do \
+	    if [ -d $$lang ]; then \
+		sources=$$(ls $$lang/*.xml); \
+		manpages=$$(echo $$sources | $(SED) 's/\.xml//'); \
+		$(MAKE) uninstall-man \
+			mandir="$(mandir)/$$lang" \
+			man_MANS="$$manpages"; \
+	    fi \
+	done
+
+else
+translate:
+	@echo No po4a, skipping translations
+endif
diff --git a/src/man/sss_groupdel.8.xml b/src/man/sss_groupdel.8.xml
index 22f4fca..978fc73 100644
--- a/src/man/sss_groupdel.8.xml
+++ b/src/man/sss_groupdel.8.xml
@@ -13,7 +13,7 @@
 
     <refnamediv id='name'>
         <refname>sss_groupdel</refname>
-        <refpurpose>create a new group</refpurpose>
+        <refpurpose>delete a group</refpurpose>
     </refnamediv>
 
     <refsynopsisdiv id='synopsis'>
-- 
1.7.3.2

