aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2020-04-12 15:11:37 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2020-04-12 15:11:37 +0200
commit4199cb32a513370b6dd68ea90cdd0e5b852dff23 (patch)
treee25fd44a0a9d8d0948a55c46a2ea3cb658439647
parent03b86cdbed3cec9f60d3a683bcbde16c0a96ec1b (diff)
downloadmeson-4199cb32a513370b6dd68ea90cdd0e5b852dff23.zip
meson-4199cb32a513370b6dd68ea90cdd0e5b852dff23.tar.gz
meson-4199cb32a513370b6dd68ea90cdd0e5b852dff23.tar.bz2
cmake: Fix custom command CMake list issue
-rw-r--r--mesonbuild/cmake/traceparser.py15
-rw-r--r--test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt6
2 files changed, 17 insertions, 4 deletions
diff --git a/mesonbuild/cmake/traceparser.py b/mesonbuild/cmake/traceparser.py
index 8eb8605..d6970f2 100644
--- a/mesonbuild/cmake/traceparser.py
+++ b/mesonbuild/cmake/traceparser.py
@@ -309,7 +309,7 @@ class CMakeTraceParser:
def _cmake_add_custom_command(self, tline: CMakeTraceLine, name=None):
# DOC: https://cmake.org/cmake/help/latest/command/add_custom_command.html
- args = list(tline.args) # Make a working copy
+ args = self._flatten_args(list(tline.args)) # Commands can be passed as ';' seperated lists
if not args:
return self._gen_exception('add_custom_command', 'requires at least 1 argument', tline)
@@ -325,15 +325,15 @@ class CMakeTraceParser:
target = CMakeGeneratorTarget(name)
def handle_output(key: str, target: CMakeGeneratorTarget) -> None:
- target.outputs += key.split(';')
+ target.outputs += [key]
def handle_command(key: str, target: CMakeGeneratorTarget) -> None:
if key == 'ARGS':
return
- target.command[-1] += key.split(';')
+ target.command[-1] += [key]
def handle_depends(key: str, target: CMakeGeneratorTarget) -> None:
- target.depends += key.split(';')
+ target.depends += [key]
def handle_working_dir(key: str, target: CMakeGeneratorTarget) -> None:
if target.working_dir is None:
@@ -608,6 +608,13 @@ class CMakeTraceParser:
args = [parse_generator_expressions(x) for x in args]
yield CMakeTraceLine(data['file'], data['line'], data['cmd'], args)
+ def _flatten_args(self, args: T.List[str]) -> T.List[str]:
+ # Split lists in arguments
+ res = [] # type: T.List[str]
+ for i in args:
+ res += i.split(';')
+ return res
+
def _guess_files(self, broken_list: T.List[str]) -> T.List[str]:
# Nothing has to be done for newer formats
if self.trace_format != 'human':
diff --git a/test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt b/test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt
index 39b19d7..5c75e65 100644
--- a/test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt
+++ b/test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt
@@ -16,9 +16,15 @@ add_custom_command(
COMMAND gen ARGS genTest
)
+set(CMD_PART)
+list(APPEND CMD_PART COMMAND mycpy cpyBase.cpp.in cpyBase.cpp.in.gen)
+list(APPEND CMD_PART COMMAND mycpy cpyBase.cpp.in.gen cpyBase.cpp.out)
+list(APPEND CMD_PART COMMAND mycpy cpyBase.cpp.out cpyBase.cpp.something)
+
add_custom_command(
OUTPUT cpyBase.cpp
COMMAND mycpy "${CMAKE_CURRENT_SOURCE_DIR}/cpyBase.cpp.am" cpyBase.cpp.in
+ ${CMD_PART}
COMMAND mycpy cpyBase.cpp.in cpyBase.cpp.something
COMMAND mycpy cpyBase.cpp.something cpyBase.cpp.IAmRunningOutOfIdeas
COMMAND mycpy cpyBase.cpp.IAmRunningOutOfIdeas cpyBase.cpp