move UserArrayOption.listify_value to mesonlib
This function is used at 3 different places and it does not justify it
as being a staticmethod instead of being a free function.
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index bb481ca..1123107 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -20,7 +20,7 @@
PerMachineDefaultable, default_libdir, default_libexecdir,
default_prefix, default_datadir, default_includedir, default_infodir,
default_localedir, default_mandir, default_sbindir, default_sysconfdir,
- split_args, OptionKey, OptionType, stringlistify,
+ listify_array_value, OptionKey, OptionType, stringlistify,
pickle_load
)
from .wrap import WrapMode
@@ -268,29 +268,8 @@
self.allow_dups = allow_dups
self.set_value(value)
- @staticmethod
- def listify_value(value: T.Union[str, T.List[str]], shlex_split_args: bool = False) -> T.List[str]:
- if isinstance(value, str):
- if value.startswith('['):
- try:
- newvalue = ast.literal_eval(value)
- except ValueError:
- raise MesonException(f'malformed option {value}')
- elif value == '':
- newvalue = []
- else:
- if shlex_split_args:
- newvalue = split_args(value)
- else:
- newvalue = [v.strip() for v in value.split(',')]
- elif isinstance(value, list):
- newvalue = value
- else:
- raise MesonException(f'"{value}" should be a string array, but it is not')
- return newvalue
-
def listify(self, value: T.Any) -> T.List[T.Any]:
- return self.listify_value(value, self.split_args)
+ return listify_array_value(value, self.split_args)
def validate_value(self, value: T.Union[str, T.List[str]]) -> T.List[str]:
newvalue = self.listify(value)
@@ -364,7 +343,7 @@
self.choices += gnu_stds_map.keys()
def validate_value(self, value: T.Union[str, T.List[str]]) -> str:
- candidates = UserArrayOption.listify_value(value)
+ candidates = listify_array_value(value)
unknown = [std for std in candidates if std not in self.all_stds]
if unknown:
raise MesonException(f'Unknown {self.lang.upper()} std {unknown}. Possible values are {self.all_stds}.')
diff --git a/mesonbuild/mcompile.py b/mesonbuild/mcompile.py
index 9c2f5e1..b07b60a 100644
--- a/mesonbuild/mcompile.py
+++ b/mesonbuild/mcompile.py
@@ -16,16 +16,15 @@
from . import mlog
from . import mesonlib
-from .mesonlib import MesonException, RealPathAction, join_args, setup_vsenv
+from .mesonlib import MesonException, RealPathAction, join_args, listify_array_value, setup_vsenv
from mesonbuild.environment import detect_ninja
-from mesonbuild.coredata import UserArrayOption
from mesonbuild import build
if T.TYPE_CHECKING:
import argparse
def array_arg(value: str) -> T.List[str]:
- return UserArrayOption.listify_value(value)
+ return listify_array_value(value)
def validate_builddir(builddir: Path) -> None:
if not (builddir / 'meson-private' / 'coredata.dat').is_file():
diff --git a/mesonbuild/utils/universal.py b/mesonbuild/utils/universal.py
index 0fb8607..a538345 100644
--- a/mesonbuild/utils/universal.py
+++ b/mesonbuild/utils/universal.py
@@ -7,6 +7,7 @@
from __future__ import annotations
from pathlib import Path
import argparse
+import ast
import enum
import sys
import stat
@@ -129,6 +130,7 @@
'iter_regexin_iter',
'join_args',
'listify',
+ 'listify_array_value',
'partition',
'path_is_in_root',
'pickle_load',
@@ -1435,6 +1437,26 @@
result.append(i)
return result
+def listify_array_value(value: T.Union[str, T.List[str]], shlex_split_args: bool = False) -> T.List[str]:
+ if isinstance(value, str):
+ if value.startswith('['):
+ try:
+ newvalue = ast.literal_eval(value)
+ except ValueError:
+ raise MesonException(f'malformed value {value}')
+ elif value == '':
+ newvalue = []
+ else:
+ if shlex_split_args:
+ newvalue = split_args(value)
+ else:
+ newvalue = [v.strip() for v in value.split(',')]
+ elif isinstance(value, list):
+ newvalue = value
+ else:
+ raise MesonException(f'"{value}" should be a string array, but it is not')
+ assert isinstance(newvalue, list)
+ return newvalue
def extract_as_list(dict_object: T.Dict[_T, _U], key: _T, pop: bool = False) -> T.List[_U]:
'''