Skip to content

Commit

Permalink
Fix generator expression list problems (fixes mesonbuild#10288)
Browse files Browse the repository at this point in the history
  • Loading branch information
mensinda authored and eli-schwartz committed Apr 19, 2022
1 parent ab5ed4d commit 1b9c4b7
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
13 changes: 7 additions & 6 deletions mesonbuild/cmake/traceparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ class CMakeGeneratorTarget(CMakeTarget):
def __init__(self, name: str) -> None:
super().__init__(name, 'CUSTOM', {})
self.outputs = [] # type: T.List[Path]
self._outputs_str = [] # type: T.List[str]
self.command = [] # type: T.List[T.List[str]]
self.working_dir = None # type: T.Optional[Path]

Expand Down Expand Up @@ -202,8 +203,8 @@ def parse(self, trace: T.Optional[str] = None) -> None:
fn(l)

# Evaluate generator expressions
strlist_gen: T.Callable[[T.List[str]], T.List[str]] = lambda strlist: [parse_generator_expressions(x, self) for x in strlist]
pathlist_gen: T.Callable[[T.List[Path]], T.List[Path]] = lambda plist: [Path(parse_generator_expressions(str(x), self)) for x in plist]
strlist_gen: T.Callable[[T.List[str]], T.List[str]] = lambda strlist: parse_generator_expressions(';'.join(strlist), self).split(';') if strlist else []
pathlist_gen: T.Callable[[T.List[str]], T.List[Path]] = lambda strlist: [Path(x) for x in parse_generator_expressions(';'.join(strlist), self).split(';')] if strlist else []

self.vars = {k: strlist_gen(v) for k, v in self.vars.items()}
self.vars_by_file = {
Expand All @@ -220,7 +221,7 @@ def parse(self, trace: T.Optional[str] = None) -> None:
}

for tgt in self.targets.values():
tgtlist_gen: T.Callable[[T.List[str], CMakeTarget], T.List[str]] = lambda strlist, t: [parse_generator_expressions(x, self, context_tgt=t) for x in strlist]
tgtlist_gen: T.Callable[[T.List[str], CMakeTarget], T.List[str]] = lambda strlist, t: parse_generator_expressions(';'.join(strlist), self, context_tgt=t).split(';') if strlist else []
tgt.name = parse_generator_expressions(tgt.name, self, context_tgt=tgt)
tgt.type = parse_generator_expressions(tgt.type, self, context_tgt=tgt)
tgt.properties = {
Expand All @@ -229,7 +230,7 @@ def parse(self, trace: T.Optional[str] = None) -> None:
tgt.depends = tgtlist_gen(tgt.depends, tgt)

for ctgt in self.custom_targets:
ctgt.outputs = pathlist_gen(ctgt.outputs)
ctgt.outputs = pathlist_gen(ctgt._outputs_str)
ctgt.command = [strlist_gen(x) for x in ctgt.command]
ctgt.working_dir = Path(parse_generator_expressions(str(ctgt.working_dir), self)) if ctgt.working_dir is not None else None

Expand Down Expand Up @@ -416,7 +417,7 @@ def _cmake_add_custom_command(self, tline: CMakeTraceLine, name: T.Optional[str]
target = CMakeGeneratorTarget(name)

def handle_output(key: str, target: CMakeGeneratorTarget) -> None:
target.outputs += [Path(key)]
target._outputs_str += [key]

def handle_command(key: str, target: CMakeGeneratorTarget) -> None:
if key == 'ARGS':
Expand Down Expand Up @@ -462,7 +463,7 @@ def handle_working_dir(key: str, target: CMakeGeneratorTarget) -> None:
target.working_dir = Path(working_dir) if working_dir else None
target.current_bin_dir = Path(cbinary_dir) if cbinary_dir else None
target.current_src_dir = Path(csource_dir) if csource_dir else None
target.outputs = [Path(x) for x in self._guess_files([str(y) for y in target.outputs])]
target._outputs_str = self._guess_files(target._outputs_str)
target.depends = self._guess_files(target.depends)
target.command = [self._guess_files(x) for x in target.command]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ if(ZLIB_FOUND OR ZLIB_Found)
set_property(TARGET mesonTestLibDefs PROPERTY IMPORTED_LOCATION ${ZLIB_LIBRARY})
set_property(TARGET mesonTestLibDefs PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIR})
set_property(TARGET mesonTestLibDefs APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS REQUIRED_MESON_FLAG1)
set_property(TARGET mesonTestLibDefs APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>) # Error empty string
set_property(TARGET mesonTestLibDefs APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS $<$<NOT:$<CONFIG:Debug>>:;QT_NO_DEBUG;>) # Error empty string
set_property(TARGET mesonTestLibDefs APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS REQUIRED_MESON_FLAG2)
set_target_properties(mesonTestLibDefs PROPERTIES IMPORTED_GLOBAL TRUE)
add_library(MesonTest::TestLibDefs ALIAS mesonTestLibDefs)
Expand Down

0 comments on commit 1b9c4b7

Please sign in to comment.