]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
CMake: Drop support for pre-generated po/*.gmo files
authorLasse Collin <lasse.collin@tukaani.org>
Tue, 2 Jul 2024 17:12:40 +0000 (20:12 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Tue, 2 Jul 2024 19:41:00 +0000 (22:41 +0300)
When a release tarball is created using Autotools, the tarball includes
po/*.gmo files which are binary files generated from po/*.po. Other
tarball creation methods don't and won't create the .gmo files.

It feels clearer if CMake will never install pre-generated binary files
from the source package. If people are able to install CMake, they
likely are able to install gettext tools as well (assuming they want
translations).

CMakeLists.txt

index 1a0224b07fac44980a1e24a4228f034abf7f9646..3612dc943dc87738f934766964d4f8d2d4276ffb 100644 (file)
@@ -321,7 +321,7 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
     find_package(Intl)
     find_package(Gettext)
 
-    if(Intl_FOUND)
+    if(Intl_FOUND AND GETTEXT_FOUND)
         set(XZ_NLS_DEFAULT ON)
     endif()
 endif()
@@ -340,22 +340,8 @@ if(XZ_NLS)
                             "Install libintl or set XZ_NLS=OFF.")
     endif()
 
-    # If translation support is enabled but neither gettext tools or
-    # pre-generated .gmo files exist, translation support cannot be enabled.
-    #
-    # The detection of pre-generated .gmo files is done by only
-    # checking for the existence of a single .gmo file; Ukrainian
-    # is one of many translations that gets regular updates.
-    if(NOT GETTEXT_FOUND AND
-            NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po/uk.gmo")
-        # By default this message is shown only when new enough CMake is used
-        # and library support for translations was found. The assumptions is
-        # that in this situation the user might have interest in the
-        # translations. This also keeps this code simpler.
-        message(FATAL_ERROR "Native language support (NLS) requires either "
-                            "gettext tools or pre-generated .gmo files. "
-                            "The latter are only available in distribution "
-                            "tarballs. "
+    if(NOT GETTEXT_FOUND)
+        message(FATAL_ERROR "XZ_NLS=ON but find_package(Gettext) failed. "
                             "Install gettext tools or set XZ_NLS=OFF.")
     endif()
 
@@ -2128,37 +2114,27 @@ this many MiB of RAM if xz cannot determine the amount at runtime")
 
         file(STRINGS po/LINGUAS LINGUAS)
 
-        # Where to find .gmo files. If msgfmt is available, the .po files
-        # will be converted as part of the build. Otherwise we will use
-        # the pre-generated .gmo files which are included in XZ Utils
-        # tarballs by Autotools.
-        set(GMO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/po")
-
-        if(GETTEXT_FOUND)
-            # NOTE: gettext_process_po_files' INSTALL_DESTINATION is
-            # incompatible with how Autotools requires the .po files to
-            # be named. CMake would require each .po file to be named with
-            # the translation domain and thus each .po file would need its
-            # own language-specific directory (like "po/fi/xz.po"). On top
-            # of this, INSTALL_DESTINATION doesn't allow specifying COMPONENT
-            # and thus the .mo files go into "Unspecified" component. So we
-            # can use gettext_process_po_files to convert the .po files but
-            # installation needs to be done with our own code.
-            #
-            # Also, the .gmo files will go to root of the build directory
-            # instead of neatly into a subdirectory. This is hardcoded in
-            # CMake's FindGettext.cmake.
-            foreach(LANG IN LISTS LINGUAS)
-                gettext_process_po_files("${LANG}" ALL
-                        PO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/po/${LANG}.po")
-            endforeach()
-
-            set(GMO_DIR "${CMAKE_CURRENT_BINARY_DIR}")
-        endif()
+        # NOTE: gettext_process_po_files' INSTALL_DESTINATION is
+        # incompatible with how Autotools requires the .po files to
+        # be named. CMake would require each .po file to be named with
+        # the translation domain and thus each .po file would need its
+        # own language-specific directory (like "po/fi/xz.po"). On top
+        # of this, INSTALL_DESTINATION doesn't allow specifying COMPONENT
+        # and thus the .mo files go into "Unspecified" component. So we
+        # can use gettext_process_po_files to convert the .po files but
+        # installation needs to be done with our own code.
+        #
+        # Also, the .gmo files will go to root of the build directory
+        # instead of neatly into a subdirectory. This is hardcoded in
+        # CMake's FindGettext.cmake.
+        foreach(LANG IN LISTS LINGUAS)
+            gettext_process_po_files("${LANG}" ALL
+                    PO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/po/${LANG}.po")
+        endforeach()
 
         foreach(LANG IN LISTS LINGUAS)
             install(
-                FILES "${GMO_DIR}/${LANG}.gmo"
+                FILES "${CMAKE_CURRENT_BINARY_DIR}/${LANG}.gmo"
                 DESTINATION "${CMAKE_INSTALL_LOCALEDIR}/${LANG}/LC_MESSAGES"
                 RENAME "${TRANSLATION_DOMAIN}.mo"
                 COMPONENT xz_Runtime)