pack: Fix guix pack -f docker.
[jackhill/guix/guix.git] / doc / local.mk
index dc48fc2..0b79043 100644 (file)
@@ -1,9 +1,10 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
-# Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2013 Andreas Enge <andreas@enge.fr>
 # Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-# Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
+# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
+# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 #
 # This file is part of GNU Guix.
 #
 # You should have received a copy of the GNU General Public License
 # along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-info_TEXINFOS = %D%/guix.texi
+info_TEXINFOS = %D%/guix.texi \
+  %D%/guix.fr.texi
+
+%C%_guix_TEXINFOS = \
+  %D%/contributing.texi \
+  %D%/fdl-1.3.texi
 
 DOT_FILES =                                    \
   %D%/images/bootstrap-graph.dot               \
@@ -36,8 +42,6 @@ DOT_VECTOR_GRAPHICS =                         \
 
 EXTRA_DIST +=                                  \
   %D%/htmlxref.cnf                             \
-  %D%/contributing.texi                                \
-  %D%/fdl-1.3.texi                             \
   $(DOT_FILES)                                 \
   $(DOT_VECTOR_GRAPHICS)                       \
   %D%/images/coreutils-size-map.eps            \
@@ -49,10 +53,53 @@ OS_CONFIG_EXAMPLES_TEXI =                   \
   %D%/os-config-desktop.texi                   \
   %D%/os-config-lightweight-desktop.texi
 
+TRANSLATED_INFO = \
+  %D%/guix.fr.texi \
+  %D%/contributing.fr.texi
+
 # Bundle this file so that makeinfo finds it in out-of-source-tree builds.
-BUILT_SOURCES        += $(OS_CONFIG_EXAMPLES_TEXI)
-EXTRA_DIST           += $(OS_CONFIG_EXAMPLES_TEXI)
-MAINTAINERCLEANFILES  = $(OS_CONFIG_EXAMPLES_TEXI)
+BUILT_SOURCES        += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
+EXTRA_DIST           += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
+MAINTAINERCLEANFILES  = $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
+
+PO4A_PARAMS := -M UTF-8 -L UTF-8 #master and localized encoding
+PO4A_PARAMS += -k 0 # produce an output even if the translation is not complete
+PO4A_PARAMS += -f texinfo # texinfo format
+
+# When a change to guix.texi occurs, it is not translated immediately.
+# Because @pxref and @xref commands are reference to a section by name, they
+# should be translated. If a modification adds a reference to a section, this
+# reference is not translated, which means it references a section that does not
+# exist.
+# This command loops through the translated files looking for references. For
+# each of these references, it tries to find the translation and replaces the
+# reference name, even in untranslated strings.
+# The last sed is a multiline sed because some references span multiple lines.
+define xref_command
+cat "$@.tmp" | egrep '@p?x?ref' -A1 | sed 'N;s|--\n||g;P;D' | sed 's|^| |g' | \
+        tr -d '\012' | sed 's|\(@p\?x\?ref\)|\n\1|g' | egrep '@p?x?ref' | \
+        sed 's|^.*@p\?x\?ref{\([^,}]*\).*$$|\1|g' | sort | uniq | while read e; do \
+  line=$$(grep -n "^msgid \"$$e\"" "$<" | cut -f1 --delimiter=":") ;\
+  ((line++)) ;\
+  if [ "$$line" != "1" ]; then \
+    translation=$$(head -n $$line "$<" | tail -1 | grep msgstr | sed 's|msgstr "\(.*\)"|\1|') ;\
+    if [ "$$translation" != "" ]; then \
+         sed "N;s@\(p\?x\?ref\){$$(echo $$e | sed 's| |[\\n ]|g')\(,\|}\)@\1{$$translation\2@g;P;D" -i "$@.tmp" ;\
+    fi ;\
+  fi ;\
+done
+endef
+
+$(srcdir)/%D%/guix.%.texi: po/doc/guix-manual.%.po $(srcdir)/%D%/contributing.%.texi
+       -$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/guix.texi" -p "$<" -l "$@.tmp"
+       -sed -i "s|guix\.info|$$(basename "$@" | sed 's|texi$$|info|')|" "$@.tmp"
+       -$(AM_V_POXREF)$(xref_command)
+       -mv "$@.tmp" "$@"
+
+$(srcdir)/%D%/contributing.%.texi: po/doc/guix-manual.%.po
+       -$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/contributing.texi" -p "$<" -l "$@.tmp"
+       -$(AM_V_POXREF)$(xref_command)
+       -mv "$@.tmp" "$@"
 
 %D%/os-config-%.texi: gnu/system/examples/%.tmpl
        $(AM_V_GEN)$(MKDIR_P) "`dirname $@`";   \