diff options
| -rw-r--r-- | mesonbuild/mesonlib.py | 15 | ||||
| -rw-r--r-- | mesonbuild/modules/gnome.py | 26 | ||||
| -rw-r--r-- | mesonbuild/modules/i18n.py | 13 | 
3 files changed, 29 insertions, 25 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 5df73110b..1adc7523a 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -20,7 +20,7 @@ import time  import platform, subprocess, operator, os, shlex, shutil, re  import collections  from enum import Enum -from functools import lru_cache +from functools import lru_cache, update_wrapper  import typing  import uuid @@ -1496,6 +1496,19 @@ def get_wine_shortpath(winecmd, wine_paths):      return wine_path.strip(';') +def run_once(func): +    ret = [] + +    def wrapper(*args, **kwargs): +        if ret: +            return ret[0] + +        val = func(*args, **kwargs) +        ret.append(val) +        return val + +    return update_wrapper(wrapper, func) +  class OptionProxy:      def __init__(self, value): diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 5c9d3dd29..78a28fd44 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -42,8 +42,6 @@ gresource_dep_needed_version = '>= 2.51.1'  native_glib_version = None  girwarning_printed = False -gdbuswarning_printed = False -gresource_warning_printed = False  _gir_has_option = {}  def gir_has_option(intr_obj, option): @@ -84,24 +82,20 @@ class GnomeModule(ExtensionModule):                  native_glib_version = '2.54'          return native_glib_version +    @mesonlib.run_once      def __print_gresources_warning(self, state): -        global gresource_warning_printed -        if not gresource_warning_printed: -            if not mesonlib.version_compare(self._get_native_glib_version(state), gresource_dep_needed_version): -                mlog.warning('GLib compiled dependencies do not work reliably with \n' -                             'the current version of GLib. See the following upstream issue:', -                             mlog.bold('https://bugzilla.gnome.org/show_bug.cgi?id=774368')) -            gresource_warning_printed = True -        return [] +        if not mesonlib.version_compare(self._get_native_glib_version(state), +                                        gresource_dep_needed_version): +            mlog.warning('GLib compiled dependencies do not work reliably with \n' +                         'the current version of GLib. See the following upstream issue:', +                         mlog.bold('https://bugzilla.gnome.org/show_bug.cgi?id=774368'))      @staticmethod +    @mesonlib.run_once      def _print_gdbus_warning(): -        global gdbuswarning_printed -        if not gdbuswarning_printed: -            mlog.warning('Code generated with gdbus_codegen() requires the root directory be added to\n' -                         '  include_directories of targets with GLib < 2.51.3:', -                         mlog.bold('https://github.com/mesonbuild/meson/issues/1387')) -            gdbuswarning_printed = True +        mlog.warning('Code generated with gdbus_codegen() requires the root directory be added to\n' +                     '  include_directories of targets with GLib < 2.51.3:', +                     mlog.bold('https://github.com/mesonbuild/meson/issues/1387'))      @FeatureNewKwargs('gnome.compile_resources', '0.37.0', ['gresource_bundle', 'export', 'install_header'])      @permittedKwargs({'source_dir', 'c_name', 'dependencies', 'export', 'gresource_bundle', 'install_header', diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py index 1efc7b579..80ec8bd4d 100644 --- a/mesonbuild/modules/i18n.py +++ b/mesonbuild/modules/i18n.py @@ -16,7 +16,7 @@ import shutil  from os import path  from .. import coredata, mesonlib, build, mlog -from ..mesonlib import MesonException +from ..mesonlib import MesonException, run_once  from . import ModuleReturnValue  from . import ExtensionModule  from ..interpreterbase import permittedKwargs, FeatureNew, FeatureNewKwargs @@ -58,13 +58,10 @@ PRESET_ARGS = {  class I18nModule(ExtensionModule): -    nogettext_warning_printed = False - -    @classmethod -    def nogettext_warning(cls): -        if not cls.nogettext_warning_printed: -            mlog.warning('Gettext not found, all translation targets will be ignored.') -            cls.nogettext_warning_printed = True +    @staticmethod +    @run_once +    def nogettext_warning(): +        mlog.warning('Gettext not found, all translation targets will be ignored.')          return ModuleReturnValue(None, [])      @staticmethod  | 
