changeset 244:498da86d1cd7

cmake: create a unique TARGET-po target to update translations
author David Demelier <markand@malikania.fr>
date Mon, 30 Nov 2020 09:48:52 +0100
parents 71b3b7036de7
children 97f55f6b9593
files cmake/MolkoBuildTranslations.cmake libmlk-adventure/nls/libmlk-adventure.pot libmlk-core/nls/fr.po libmlk-core/nls/libmlk-core.pot libmlk-rpg/nls/fr.po libmlk-rpg/nls/libmlk-rpg.pot
diffstat 6 files changed, 68 insertions(+), 74 deletions(-) [+]
line wrap: on
line diff
--- a/cmake/MolkoBuildTranslations.cmake	Sat Nov 28 22:37:30 2020 +0100
+++ b/cmake/MolkoBuildTranslations.cmake	Mon Nov 30 09:48:52 2020 +0100
@@ -29,7 +29,7 @@
 #   TRANSLATIONS        list of localizations
 # )
 #
-# Generate targets and output commands for NLS (via GNU gettext) support for the
+# Generate target and output commands for NLS (via GNU gettext) support for the
 # given TARGET name.
 #
 # The argument SOURCES must contain sources to extract gettext keywords, it will
@@ -42,18 +42,14 @@
 # The argument TRANSLATIONS should contain a list of languages supported in the
 # gettext form (ll_LL@variant, see ISO 639 and ISO 3166 for more details).
 #
-# This macro also provides specific targets to update both .pot and .po files.
-#
-# Target <TARGET>-pot will generate a <TARGET>.pot file under the nls/ directory
-# from the current project.
+# This macro create a <TARGET>-po target that will recreate the .pot file and
+# every .po files in the nls/ directory for each language specified in
+# TRANSLATIONS. Note, if you add a new language into translations but do not
+# copy the .pot file, a warning will be issued and you should copy the .pot file
+# as the new .po language file.
 #
-# Target <TARGET>-po will merge every .po files in the nls/ directory for every
-# language specified in TRANSLATIONS. Note, if you add a new language into
-# translations but do not copy the .pot file, a warning will be issued and you
-# should copy the .pot file as the new .po language file.
-#
-# Since those targets are modifying files directly in the source tree they are
-# not included in any build process and must be invoked manually.
+# Since the target is modifying files directly in the source tree they are not
+# included in any build process and must be invoked manually.
 #
 
 if (MOLKO_WITH_NLS)
@@ -84,23 +80,28 @@
 		list(FILTER NLS_SOURCES INCLUDE REGEX "\\.[ch$]")
 		set(pot ${CMAKE_CURRENT_SOURCE_DIR}/nls/${NLS_TARGET}.pot)
 
-		# Generate .pot file.
-		add_custom_target(
-			${NLS_TARGET}-pot
-			ALL
-			VERBATIM
-			COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/nls
-			COMMAND ${XGETTEXT_EXE} -cj -k_ -kN_ -LC -s -o ${pot} ${NLS_SOURCES}
-			COMMENT "Generating reference translation ${pot}"
+		# First command to generate the .pot.
+		list(
+			APPEND
+			commands
+				COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/nls
+				COMMAND ${XGETTEXT_EXE} -cj -k_ -kN_ -LC -s -o ${pot} ${NLS_SOURCES}
 		)
-		set_target_properties(${NLS_TARGET}-pot PROPERTIES FOLDER translations)
 
-		# For every translation create a msgmerge target and output file.
+		#
+		# For every translation create a msgmerge command and output
+		# file.
+		#
 		set(outputs)
 
 		foreach (t ${NLS_TRANSLATIONS})
 			set(po ${CMAKE_CURRENT_SOURCE_DIR}/nls/${t}.po)
 
+			#
+			# If library dir isn't absolute, install them in the
+			# build directory so we can use translations during
+			# development.
+			#
 			if (NOT IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR})
 				set(modir ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_INSTALL_LOCALEDIR}/${t}/LC_MESSAGES)
 				set(mo ${modir}/${NLS_TARGET}.mo)
@@ -113,16 +114,8 @@
 				message(WARNING "Missing translation ${po}")
 			endif ()
 
-			add_custom_target(
-				${NLS_TARGET}-po-${t}
-				VERBATIM
-				DEPENDS ${NLS_TARGET}-pot
-				COMMAND ${MSGMERGE_EXE} --backup=off -U ${po} ${pot}
-				COMMENT "Merging translation in ${po}"
-			)
-			set_target_properties(${NLS_TARGET}-po-${t} PROPERTIES FOLDER translations)
-
-			list(APPEND po-targets ${NLS_TARGET}-po-${t})
+			# Commands to generate .po files from the .pot.
+			list(APPEND commands COMMAND ${MSGMERGE_EXE} --backup=off -q -U ${po} ${pot})
 
 			# Finally generate a .mo output from po file.
 			add_custom_command(
@@ -136,24 +129,25 @@
 
 			list(APPEND outputs ${mo})
 
-			# TODO: naming should be changed maybe.
 			install(
 				FILES ${mo}
 				DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${t}/LC_MESSAGES
-				RENAME mlk-${NLS_TARGET}.mo
+				RENAME ${NLS_TARGET}.mo
 			)
 		endforeach ()
 
 		set(${NLS_OUTPUTS} ${outputs})
 		source_group("mo" FILES ${outputs})
 
+		# User target to update .pot and .po files.
 		add_custom_target(
 			${NLS_TARGET}-po
-			DEPENDS ${po-targets}
-			COMMENT "Merging all po files"
+			VERBATIM
+			COMMENT "Generating translations for ${NLS_TARGET}"
+			${commands}
 		)
 
-		set_target_properties(${NLS_TARGET}-po PROPERTIES FOLDER translations)
+		set_target_properties(${NLS_TARGET}-po PROPERTIES FOLDER nls)
 	endmacro()
 else ()
 	function(molko_build_translations)
--- a/libmlk-adventure/nls/libmlk-adventure.pot	Sat Nov 28 22:37:30 2020 +0100
+++ b/libmlk-adventure/nls/libmlk-adventure.pot	Mon Nov 30 09:48:52 2020 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 22:34+0100\n"
+"POT-Creation-Date: 2020-11-30 09:48+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
--- a/libmlk-core/nls/fr.po	Sat Nov 28 22:37:30 2020 +0100
+++ b/libmlk-core/nls/fr.po	Mon Nov 30 09:48:52 2020 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 16:45+0100\n"
+"POT-Creation-Date: 2020-11-28 22:34+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,21 +17,21 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libcore/core/panic.c:30
+#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:30
 #, c-format
 msgid "abort: %s\n"
 msgstr "fatal: %s\n"
 
-#: /Users/markand/Dev/molko/libcore/core/panic.c:76
+#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:76
 #, c-format
 msgid "abort: panic handler returned\n"
 msgstr "fatal: la fonction de panique n'aurait pas du continuer\n"
 
-#: /Users/markand/Dev/molko/libcore/core/save.c:85
+#: /Users/markand/Dev/molko/libmlk-core/core/save.c:85
 msgid "database not initialized correctly"
 msgstr "database non initialisée"
 
-#: /Users/markand/Dev/molko/libcore/core/save.c:175
+#: /Users/markand/Dev/molko/libmlk-core/core/save.c:175
 #, c-format
 msgid "property '%s' was not found"
 msgstr "propriété '%s' non trouvée"
--- a/libmlk-core/nls/libmlk-core.pot	Sat Nov 28 22:37:30 2020 +0100
+++ b/libmlk-core/nls/libmlk-core.pot	Mon Nov 30 09:48:52 2020 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 22:34+0100\n"
+"POT-Creation-Date: 2020-11-30 09:42+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
--- a/libmlk-rpg/nls/fr.po	Sat Nov 28 22:37:30 2020 +0100
+++ b/libmlk-rpg/nls/fr.po	Mon Nov 30 09:48:52 2020 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 17:41+0100\n"
+"POT-Creation-Date: 2020-11-30 09:48+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,118 +17,118 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/librpg/rpg/battle-bar.c:127
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:127
 msgid "Attack"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/battle-bar.c:134
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:134
 msgid "Magic"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/battle-bar.c:141
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:141
 msgid "Objects"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/battle-bar.c:148
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:148
 msgid "Special"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/battle-state-victory.c:88
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-state-victory.c:88
 msgid "Victory!"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/battle-state-lost.c:87
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-state-lost.c:87
 msgid "You have been defeated..."
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/tileset-file.c:241
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:241
 msgid "could not parse image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:130
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:130
 msgid "could not parse tileset"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:92
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:92
 #, c-format
 msgid "ignoring action %d,%d,%u,%u,%s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:61
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:61
 #, c-format
 msgid "invalid layer type: %s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:175
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:175
 msgid "invalid origin"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/message.c:277
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:277
 msgid "message has null dimensions"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/message.c:140
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:140
 #, c-format
 msgid "message height too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/message.c:171
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:171
 msgid "message is automatic but has zero timeout"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/message.c:138
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:138
 #, c-format
 msgid "message width too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:236
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:236
 msgid "missing background layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:238
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:238
 msgid "missing foreground layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:114
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:114
 msgid "missing layer type definition"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:110
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:110
 msgid "missing map dimensions before layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/tileset-file.c:239
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:239
 msgid "missing tile dimensions before image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:240
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:240
 msgid "missing tileset"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/tileset-file.c:298
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:298
 msgid "missing tileset image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:229
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:229
 msgid "missing title"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:157
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:157
 msgid "null map columns"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:166
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:166
 msgid "null map rows"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/map-file.c:146
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:146
 msgid "null map title"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/tileset-file.c:142
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:142
 msgid "tileheight is null"
 msgstr ""
 
-#: /Users/markand/Dev/molko/librpg/rpg/tileset-file.c:133
+#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:133
 msgid "tilewidth is null"
 msgstr ""
--- a/libmlk-rpg/nls/libmlk-rpg.pot	Sat Nov 28 22:37:30 2020 +0100
+++ b/libmlk-rpg/nls/libmlk-rpg.pot	Mon Nov 30 09:48:52 2020 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 22:34+0100\n"
+"POT-Creation-Date: 2020-11-30 09:48+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"