Blame SOURCES/appstream-0.15.5-downgrade-meson.patch

d2fab8
From b7f7e5dfc1e441fb443837b9a95a70fca1df7fb1 Mon Sep 17 00:00:00 2001
d2fab8
From: Neal Gompa <ngompa@centosproject.org>
d2fab8
Date: Fri, 14 Oct 2022 06:34:43 -0400
d2fab8
Subject: [PATCH] meson: Revert upgrade to Meson 0.62
d2fab8
d2fab8
Red Hat Enterprise Linux 9 is currently stuck at Meson 0.58,
d2fab8
with a rebase to Meson 0.62 not expected anytime soon.
d2fab8
---
d2fab8
 data/meson.build                  | 49 ++++++++++++++++++++++++-----
d2fab8
 data/translate-metainfo.py        | 51 +++++++++++++++++++++++++++++++
d2fab8
 docs/api/compose/meson.build      | 18 ++++++-----
d2fab8
 docs/api/meson.build              | 18 ++++++-----
d2fab8
 docs/meson.build                  | 38 +++++++++++++++++------
d2fab8
 meson.build                       |  2 +-
d2fab8
 po/meson.build                    | 18 ++++++++++-
d2fab8
 tests/ci/Dockerfile-debian-stable |  3 --
d2fab8
 8 files changed, 158 insertions(+), 39 deletions(-)
d2fab8
 create mode 100755 data/translate-metainfo.py
d2fab8
d2fab8
diff --git a/data/meson.build b/data/meson.build
d2fab8
index aea0cb2..53f31cb 100644
d2fab8
--- a/data/meson.build
d2fab8
+++ b/data/meson.build
d2fab8
@@ -17,14 +17,47 @@ metainfo_with_relinfo = custom_target('gen-output',
d2fab8
     command : [ascli_exe, 'news-to-metainfo', '--limit=6', '@INPUT0@', '@INPUT1@', '@OUTPUT@']
d2fab8
 )
d2fab8
 
d2fab8
-metainfo_i18n = i18n.itstool_join(
d2fab8
-    input:  metainfo_with_relinfo,
d2fab8
-    output: 'org.freedesktop.appstream.cli.metainfo.xml',
d2fab8
-    mo_targets: i18n_result[0],
d2fab8
-    its_files: [join_paths(meson.current_source_dir(), 'its', 'metainfo.its')],
d2fab8
-    install: true,
d2fab8
-    install_dir: metainfo_dir,
d2fab8
-)
d2fab8
+if meson.version().version_compare('>=0.60')
d2fab8
+    # starting with Meson 0.60 we can use a crazy hack to generate sane output data
d2fab8
+    # using itstool - hopefully Meson will gain the ability to do this natively soon
d2fab8
+    itstool_exe = find_program('itstool', required: true)
d2fab8
+    python_exe = find_program('python3', required: true)
d2fab8
+
d2fab8
+    known_locale = run_command(python_exe,
d2fab8
+                               '-c',
d2fab8
+                               'print(open("'
d2fab8
+                                    + join_paths(source_root, 'po', 'LINGUAS') +
d2fab8
+                                    '", "r", encoding="utf-8").read())',
d2fab8
+                               check: true).stdout().split()
d2fab8
+
d2fab8
+    metainfo_i18n = custom_target('metainfo-i18n',
d2fab8
+        input : [metainfo_with_relinfo, i18n_result[0]],
d2fab8
+        output : 'org.freedesktop.appstream.cli.metainfo.xml',
d2fab8
+        command : [python_exe,
d2fab8
+                join_paths(meson.current_source_dir(), 'translate-metainfo.py'),
d2fab8
+                itstool_exe,
d2fab8
+                '@INPUT0@',
d2fab8
+                '@OUTPUT@',
d2fab8
+                'appstream',
d2fab8
+                join_paths(meson.current_source_dir(), 'its', 'metainfo.its'),
d2fab8
+                join_paths(meson.project_build_root(), 'po'),
d2fab8
+                known_locale,
d2fab8
+        ],
d2fab8
+        install: true,
d2fab8
+        install_dir: metainfo_dir
d2fab8
+    )
d2fab8
+else
d2fab8
+    # generates XML with mangled description markup tags, but better than nothing...
d2fab8
+    metainfo_i18n = i18n.merge_file (
d2fab8
+        input:  metainfo_with_relinfo,
d2fab8
+        output: 'org.freedesktop.appstream.cli.metainfo.xml',
d2fab8
+        type: 'xml',
d2fab8
+        data_dirs: [meson.current_source_dir()],
d2fab8
+        po_dir: join_paths (source_root, 'po'),
d2fab8
+        install: true,
d2fab8
+        install_dir: metainfo_dir
d2fab8
+    )
d2fab8
+endif
d2fab8
 
d2fab8
 test('as-validate_metainfo.cli',
d2fab8
     ascli_exe,
d2fab8
diff --git a/data/translate-metainfo.py b/data/translate-metainfo.py
d2fab8
new file mode 100755
d2fab8
index 0000000..db85882
d2fab8
--- /dev/null
d2fab8
+++ b/data/translate-metainfo.py
d2fab8
@@ -0,0 +1,51 @@
d2fab8
+#!/usr/bin/env python3
d2fab8
+#
d2fab8
+# Copyright (C) 2021-2022 Matthias Klumpp <mak@debian.org>
d2fab8
+#
d2fab8
+# SPDX-License-Identifier: LGPL-2.1+
d2fab8
+
d2fab8
+#
d2fab8
+# This is a hack around msgfmt ignoring inline markup tags, and Meson not
d2fab8
+# having itstool integration in old versions.
d2fab8
+# FIXME: This is a terrible workaround that should go away as soon as possible.
d2fab8
+#
d2fab8
+
d2fab8
+import os
d2fab8
+import sys
d2fab8
+import shutil
d2fab8
+import subprocess
d2fab8
+
d2fab8
+
d2fab8
+def main(args):
d2fab8
+    itstool_exe = args[0]
d2fab8
+    input_fname = args[1]
d2fab8
+    output_fname = args[2]
d2fab8
+    domain = args[3]
d2fab8
+    its_fname = args[4]
d2fab8
+    locale_dir = args[5]
d2fab8
+
d2fab8
+    temp_mo_dir = output_fname + '.mo'
d2fab8
+    shutil.rmtree(temp_mo_dir, ignore_errors=True)
d2fab8
+    os.makedirs(temp_mo_dir, exist_ok=True)
d2fab8
+
d2fab8
+    mo_files = []
d2fab8
+    for locale in args[6:]:
d2fab8
+        locale = locale.strip()
d2fab8
+        mo_src = os.path.join(locale_dir, locale, 'LC_MESSAGES', domain + '.mo')
d2fab8
+        mo_dst = os.path.join(temp_mo_dir, locale + '.mo')
d2fab8
+        shutil.copy(mo_src, mo_dst, follow_symlinks=False)
d2fab8
+        mo_files.append(mo_dst)
d2fab8
+
d2fab8
+    cmd = [itstool_exe,
d2fab8
+            '-i', its_fname,
d2fab8
+            '-j', input_fname,
d2fab8
+            '-o', output_fname]
d2fab8
+    cmd.extend(mo_files)
d2fab8
+    subprocess.run(cmd, check=True)
d2fab8
+
d2fab8
+    # cleanup
d2fab8
+    shutil.rmtree(temp_mo_dir, ignore_errors=True)
d2fab8
+
d2fab8
+
d2fab8
+if __name__ == '__main__':
d2fab8
+    main(sys.argv[1:])
d2fab8
diff --git a/docs/api/compose/meson.build b/docs/api/compose/meson.build
d2fab8
index ca1d8b3..6c2300c 100644
d2fab8
--- a/docs/api/compose/meson.build
d2fab8
+++ b/docs/api/compose/meson.build
d2fab8
@@ -14,11 +14,13 @@ glib.gtkdoc (
d2fab8
     install_dir: join_paths(get_option('prefix'), as_composeapi_doc_target_dir) # requires an absolute path
d2fab8
 )
d2fab8
 
d2fab8
-# we need to install the empty dir, as the gtkdoc generation happens last
d2fab8
-# and a symlink target must exist first.
d2fab8
-install_emptydir(join_paths(get_option('prefix'), as_composeapi_doc_target_dir))
d2fab8
-install_symlink(
d2fab8
-    'appstream-compose',
d2fab8
-    pointing_to: '..' / '..' / '..' / as_composeapi_doc_target_dir,
d2fab8
-    install_dir: gtk_doc_root
d2fab8
-)
d2fab8
+if meson.version().version_compare('>=0.61')
d2fab8
+    # we need to install the empty dir, as the gtkdoc generation happens last
d2fab8
+    # and a symlink target must exist first.
d2fab8
+    install_emptydir(join_paths(get_option('prefix'), as_composeapi_doc_target_dir))
d2fab8
+    install_symlink(
d2fab8
+        'appstream-compose',
d2fab8
+        pointing_to: '..' / '..' / '..' / as_composeapi_doc_target_dir,
d2fab8
+        install_dir: gtk_doc_root
d2fab8
+    )
d2fab8
+endif
d2fab8
diff --git a/docs/api/meson.build b/docs/api/meson.build
d2fab8
index 6053c4a..ec06ab4 100644
d2fab8
--- a/docs/api/meson.build
d2fab8
+++ b/docs/api/meson.build
d2fab8
@@ -19,14 +19,16 @@ glib.gtkdoc (
d2fab8
 # We hardcore the gtk-doc path here, because gtkdoc_html_dir('appstream') creates a
d2fab8
 # wrong path due to a Meson bug at the moment
d2fab8
 gtk_doc_root = join_paths(get_option('prefix'), get_option('datadir'), 'gtk-doc', 'html')
d2fab8
-# we need to install the empty dir, as the gtkdoc generation happens last
d2fab8
-# and a symlink target must exist first.
d2fab8
-install_emptydir(join_paths(get_option('prefix'), as_api_doc_target_dir))
d2fab8
-install_symlink(
d2fab8
-    'appstream',
d2fab8
-    pointing_to: '..' / '..' / '..' / as_api_doc_target_dir,
d2fab8
-    install_dir: gtk_doc_root
d2fab8
-)
d2fab8
+if meson.version().version_compare('>=0.61')
d2fab8
+    # we need to install the empty dir, as the gtkdoc generation happens last
d2fab8
+    # and a symlink target must exist first.
d2fab8
+    install_emptydir(join_paths(get_option('prefix'), as_api_doc_target_dir))
d2fab8
+    install_symlink(
d2fab8
+        'appstream',
d2fab8
+        pointing_to: '..' / '..' / '..' / as_api_doc_target_dir,
d2fab8
+        install_dir: gtk_doc_root
d2fab8
+    )
d2fab8
+endif
d2fab8
 
d2fab8
 #
d2fab8
 # Build API documentation for libappstream-compose,
d2fab8
diff --git a/docs/meson.build b/docs/meson.build
d2fab8
index 15ad472..e8fc381 100644
d2fab8
--- a/docs/meson.build
d2fab8
+++ b/docs/meson.build
d2fab8
@@ -120,11 +120,20 @@ if get_option('docs')
d2fab8
 
d2fab8
     if get_option('install-docs')
d2fab8
         install_subdir('html', install_dir: as_doc_target_dir)
d2fab8
-        if fs.is_file(hljs_installed_file)
d2fab8
-            install_symlink(
d2fab8
-                'highlight.min.js',
d2fab8
-                pointing_to: hljs_installed_file,
d2fab8
-                install_dir: join_paths(get_option('prefix'), as_doc_target_dir, 'html', 'static', 'js')
d2fab8
+
d2fab8
+        if meson.version().version_compare('>=0.61')
d2fab8
+            if fs.is_file(hljs_installed_file)
d2fab8
+                install_symlink(
d2fab8
+                    'highlight.min.js',
d2fab8
+                    pointing_to: hljs_installed_file,
d2fab8
+                    install_dir: join_paths(get_option('prefix'), as_doc_target_dir, 'html', 'static', 'js')
d2fab8
+                )
d2fab8
+            endif
d2fab8
+        else
d2fab8
+            meson.add_install_script('sh', '-c',
d2fab8
+                          'if [ -f "@0@" ]; then mkdir -p $DESTDIR/@1@ && ln -sf @0@ $DESTDIR/@1@; fi'
d2fab8
+                          .format(hljs_installed_file,
d2fab8
+                                  join_paths(get_option('prefix'), as_doc_target_dir, 'html', 'static', 'js'))
d2fab8
             )
d2fab8
         endif
d2fab8
     endif
d2fab8
@@ -141,11 +150,20 @@ elif get_option('install-docs')
d2fab8
     if fs.is_dir(join_paths(meson.current_source_dir(), 'html'))
d2fab8
         # install documentation, if it exists
d2fab8
         install_subdir('html', install_dir: as_doc_target_dir)
d2fab8
-        if fs.is_file(hljs_installed_file)
d2fab8
-            install_symlink(
d2fab8
-                'highlight.min.js',
d2fab8
-                pointing_to: hljs_installed_file,
d2fab8
-                install_dir: join_paths(get_option('prefix'), as_doc_target_dir, 'html', 'static', 'js')
d2fab8
+
d2fab8
+        if meson.version().version_compare('>=0.61')
d2fab8
+            if fs.is_file(hljs_installed_file)
d2fab8
+                install_symlink(
d2fab8
+                    'highlight.min.js',
d2fab8
+                    pointing_to: hljs_installed_file,
d2fab8
+                    install_dir: join_paths(get_option('prefix'), as_doc_target_dir, 'html', 'static', 'js')
d2fab8
+                )
d2fab8
+            endif
d2fab8
+        else
d2fab8
+            meson.add_install_script('sh', '-c',
d2fab8
+                          'if [ -f "@0@" ]; then mkdir -p $DESTDIR/@1@ && ln -sf @0@ $DESTDIR/@1@; fi'
d2fab8
+                          .format(hljs_installed_file,
d2fab8
+                                  join_paths(get_option('prefix'), as_doc_target_dir, 'html', 'static', 'js'))
d2fab8
             )
d2fab8
         endif
d2fab8
     endif
d2fab8
diff --git a/meson.build b/meson.build
d2fab8
index 0849b05..3504554 100644
d2fab8
--- a/meson.build
d2fab8
+++ b/meson.build
d2fab8
@@ -1,5 +1,5 @@
d2fab8
 project('AppStream', 'c',
d2fab8
-  meson_version: '>=0.62',
d2fab8
+  meson_version: '>=0.56',
d2fab8
   default_options: ['c_std=c11', 'cpp_std=gnu++14'],
d2fab8
 
d2fab8
   license: 'LGPL-2.1+',
d2fab8
diff --git a/po/meson.build b/po/meson.build
d2fab8
index e9ede19..20c68fa 100644
d2fab8
--- a/po/meson.build
d2fab8
+++ b/po/meson.build
d2fab8
@@ -1,6 +1,21 @@
d2fab8
 
d2fab8
 as_gettext_domain = 'appstream'
d2fab8
-i18n_result = i18n.gettext(as_gettext_domain,
d2fab8
+
d2fab8
+if meson.version().version_compare('>=0.60')
d2fab8
+    i18n_result = i18n.gettext(as_gettext_domain,
d2fab8
+        preset : 'glib',
d2fab8
+        data_dirs: [join_paths(source_root, 'data')],
d2fab8
+        args: [
d2fab8
+            '--default-domain=' + as_gettext_domain,
d2fab8
+            '--from-code=UTF-8',
d2fab8
+            '-i', '-F', '-c', '--no-wrap',
d2fab8
+            '--package-name=' + as_gettext_domain,
d2fab8
+            '--copyright-holder=Matthias Klumpp',
d2fab8
+            '--msgid-bugs-address=appstream@lists.freedesktop.org'
d2fab8
+        ]
d2fab8
+    )
d2fab8
+else
d2fab8
+i18n.gettext(as_gettext_domain,
d2fab8
     preset : 'glib',
d2fab8
     data_dirs: [join_paths(source_root, 'data')],
d2fab8
     args: [
d2fab8
@@ -12,6 +27,7 @@ i18n_result = i18n.gettext(as_gettext_domain,
d2fab8
         '--msgid-bugs-address=appstream@lists.freedesktop.org'
d2fab8
     ]
d2fab8
 )
d2fab8
+endif
d2fab8
 
d2fab8
 run_target ('make-linguas',
d2fab8
     command: ['sh',
d2fab8
diff --git a/tests/ci/Dockerfile-debian-stable b/tests/ci/Dockerfile-debian-stable
d2fab8
index eb8cff4..483c8f3 100644
d2fab8
--- a/tests/ci/Dockerfile-debian-stable
d2fab8
+++ b/tests/ci/Dockerfile-debian-stable
d2fab8
@@ -10,8 +10,5 @@ RUN mkdir -p /build/ci/
d2fab8
 COPY install-deps-deb.sh /build/ci/
d2fab8
 RUN chmod +x /build/ci/install-deps-deb.sh && /build/ci/install-deps-deb.sh
d2fab8
 
d2fab8
-RUN eatmydata apt-get install -yq --no-install-recommends python3-pip
d2fab8
-RUN pip install 'meson~=0.62'
d2fab8
-
d2fab8
 # finish
d2fab8
 WORKDIR /build
d2fab8
-- 
d2fab8
2.36.1
d2fab8