Add helper to print warnings once

The helper is general, although in this patch it is only used for
warnings. No functional change intended.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-09-24 11:25:44 +02:00
parent c4f96e00a6
commit 3a6920ebdc
3 changed files with 29 additions and 25 deletions

View File

@ -20,7 +20,7 @@ import time
import platform, subprocess, operator, os, shlex, shutil, re import platform, subprocess, operator, os, shlex, shutil, re
import collections import collections
from enum import Enum from enum import Enum
from functools import lru_cache from functools import lru_cache, update_wrapper
import typing import typing
import uuid import uuid
@ -1496,6 +1496,19 @@ def get_wine_shortpath(winecmd, wine_paths):
return wine_path.strip(';') 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: class OptionProxy:
def __init__(self, value): def __init__(self, value):

View File

@ -42,8 +42,6 @@ gresource_dep_needed_version = '>= 2.51.1'
native_glib_version = None native_glib_version = None
girwarning_printed = False girwarning_printed = False
gdbuswarning_printed = False
gresource_warning_printed = False
_gir_has_option = {} _gir_has_option = {}
def gir_has_option(intr_obj, option): def gir_has_option(intr_obj, option):
@ -84,24 +82,20 @@ class GnomeModule(ExtensionModule):
native_glib_version = '2.54' native_glib_version = '2.54'
return native_glib_version return native_glib_version
@mesonlib.run_once
def __print_gresources_warning(self, state): def __print_gresources_warning(self, state):
global gresource_warning_printed if not mesonlib.version_compare(self._get_native_glib_version(state),
if not gresource_warning_printed: gresource_dep_needed_version):
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'
mlog.warning('GLib compiled dependencies do not work reliably with \n' 'the current version of GLib. See the following upstream issue:',
'the current version of GLib. See the following upstream issue:', mlog.bold('https://bugzilla.gnome.org/show_bug.cgi?id=774368'))
mlog.bold('https://bugzilla.gnome.org/show_bug.cgi?id=774368'))
gresource_warning_printed = True
return []
@staticmethod @staticmethod
@mesonlib.run_once
def _print_gdbus_warning(): def _print_gdbus_warning():
global gdbuswarning_printed mlog.warning('Code generated with gdbus_codegen() requires the root directory be added to\n'
if not gdbuswarning_printed: ' include_directories of targets with GLib < 2.51.3:',
mlog.warning('Code generated with gdbus_codegen() requires the root directory be added to\n' mlog.bold('https://github.com/mesonbuild/meson/issues/1387'))
' include_directories of targets with GLib < 2.51.3:',
mlog.bold('https://github.com/mesonbuild/meson/issues/1387'))
gdbuswarning_printed = True
@FeatureNewKwargs('gnome.compile_resources', '0.37.0', ['gresource_bundle', 'export', 'install_header']) @FeatureNewKwargs('gnome.compile_resources', '0.37.0', ['gresource_bundle', 'export', 'install_header'])
@permittedKwargs({'source_dir', 'c_name', 'dependencies', 'export', 'gresource_bundle', 'install_header', @permittedKwargs({'source_dir', 'c_name', 'dependencies', 'export', 'gresource_bundle', 'install_header',

View File

@ -16,7 +16,7 @@ import shutil
from os import path from os import path
from .. import coredata, mesonlib, build, mlog from .. import coredata, mesonlib, build, mlog
from ..mesonlib import MesonException from ..mesonlib import MesonException, run_once
from . import ModuleReturnValue from . import ModuleReturnValue
from . import ExtensionModule from . import ExtensionModule
from ..interpreterbase import permittedKwargs, FeatureNew, FeatureNewKwargs from ..interpreterbase import permittedKwargs, FeatureNew, FeatureNewKwargs
@ -58,13 +58,10 @@ PRESET_ARGS = {
class I18nModule(ExtensionModule): class I18nModule(ExtensionModule):
nogettext_warning_printed = False @staticmethod
@run_once
@classmethod def nogettext_warning():
def nogettext_warning(cls): mlog.warning('Gettext not found, all translation targets will be ignored.')
if not cls.nogettext_warning_printed:
mlog.warning('Gettext not found, all translation targets will be ignored.')
cls.nogettext_warning_printed = True
return ModuleReturnValue(None, []) return ModuleReturnValue(None, [])
@staticmethod @staticmethod