Skip to content

Commit

Permalink
Fix the use of get_option() as a parameter to project()
Browse files Browse the repository at this point in the history
  • Loading branch information
bcorby committed Dec 17, 2024
1 parent 0b41b36 commit f27a9d6
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 17 deletions.
39 changes: 22 additions & 17 deletions mesonbuild/interpreter/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -1093,6 +1093,7 @@ def func_get_option(self, nodes: mparser.BaseNode, args: T.Tuple[str],
if optname_regex.search(optname.split('.', maxsplit=1)[-1]) is not None:
raise InterpreterException(f'Invalid option name {optname!r}')

self.load_options(nodes, args)
opt = self.get_option_internal(optname)
if isinstance(opt, options.UserFeatureOption):
opt.name = optname
Expand Down Expand Up @@ -1148,6 +1149,23 @@ def set_backend(self) -> None:
options = {k: v for k, v in self.environment.options.items() if self.environment.coredata.optstore.is_backend_option(k)}
self.coredata.set_options(options)

def load_options(self, node: mparser.FunctionNode, args: T.Tuple[str, T.List[str]]) -> None:
option_file = os.path.join(self.source_root, self.subdir, 'meson.options')
old_option_file = os.path.join(self.source_root, self.subdir, 'meson_options.txt')
if not os.path.exists(option_file):
option_file = old_option_file
if os.path.exists(option_file):
with open(option_file, 'rb') as f:
# We want fast not cryptographically secure, this is just to
# see if the option file has changed
self.coredata.options_files[self.subproject] = (option_file, hashlib.sha1(f.read()).hexdigest())
oi = optinterpreter.OptionInterpreter(self.environment.coredata.optstore, self.subproject)
oi.process(option_file)
self.coredata.update_project_options(oi.options, self.subproject)
self.add_build_def_file(option_file)
else:
self.coredata.options_files[self.subproject] = None

@typed_pos_args('project', str, varargs=str)
@typed_kwargs(
'project',
Expand All @@ -1169,19 +1187,19 @@ def func_project(self, node: mparser.FunctionNode, args: T.Tuple[str, T.List[str
if ':' in proj_name:
raise InvalidArguments(f"Project name {proj_name!r} must not contain ':'")

# Read in the options file.
self.load_options(node, args)

# This needs to be evaluated as early as possible, as meson uses this
# for things like deprecation testing.
if kwargs['meson_version']:
self.handle_meson_version(kwargs['meson_version'], node)
else:
mesonlib.project_meson_versions[self.subproject] = mesonlib.NoProjectVersion()

# Load "meson.options" before "meson_options.txt", and produce a warning if
# it is being used with an old version. I have added check that if both
# exist the warning isn't raised
# Warn about use of meson.options / meson_options.txt.
option_file = os.path.join(self.source_root, self.subdir, 'meson.options')
old_option_file = os.path.join(self.source_root, self.subdir, 'meson_options.txt')

if os.path.exists(option_file):
if os.path.exists(old_option_file):
if os.path.samefile(option_file, old_option_file):
Expand All @@ -1190,19 +1208,6 @@ def func_project(self, node: mparser.FunctionNode, args: T.Tuple[str, T.List[str
raise MesonException("meson.options and meson_options.txt both exist, but are not the same file.")
else:
FeatureNew.single_use('meson.options file', '1.1', self.subproject, 'Use meson_options.txt instead')
else:
option_file = old_option_file
if os.path.exists(option_file):
with open(option_file, 'rb') as f:
# We want fast not cryptographically secure, this is just to
# see if the option file has changed
self.coredata.options_files[self.subproject] = (option_file, hashlib.sha1(f.read()).hexdigest())
oi = optinterpreter.OptionInterpreter(self.environment.coredata.optstore, self.subproject)
oi.process(option_file)
self.coredata.update_project_options(oi.options, self.subproject)
self.add_build_def_file(option_file)
else:
self.coredata.options_files[self.subproject] = None

if self.subproject:
self.project_default_options = {k.evolve(subproject=self.subproject): v
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Project
project('test', 'c', version: '1.0' + get_option('append_to_version'))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
option('append_to_version', type : 'string', value : '.0001', description : 'append to version')

0 comments on commit f27a9d6

Please sign in to comment.