diff --git a/mesonbuild/cmake/data/run_ctgt.py b/mesonbuild/cmake/data/run_ctgt.py index 1897a1b25..9d5d43704 100755 --- a/mesonbuild/cmake/data/run_ctgt.py +++ b/mesonbuild/cmake/data/run_ctgt.py @@ -5,6 +5,7 @@ import subprocess import shutil import os import sys +from pathlib import Path commands = [[]] SEPARATOR = ';;;' @@ -40,9 +41,32 @@ for i in commands: if not i: continue + cmd = [] + stdout = None + stderr = None + capture_file = '' + + for j in i: + if j in ['>', '>>']: + stdout = subprocess.PIPE + continue + elif j in ['&>', '&>>']: + stdout = subprocess.PIPE + stderr = subprocess.STDOUT + continue + + if stdout is not None or stderr is not None: + capture_file += j + else: + cmd += [j] + try: os.makedirs(args.directory, exist_ok=True) - subprocess.run(i, cwd=args.directory, check=True) + + res = subprocess.run(cmd, stdout=stdout, stderr=stderr, cwd=args.directory, check=True) + if capture_file: + out_file = Path(args.directory) / capture_file + out_file.write_bytes(res.stdout) except subprocess.CalledProcessError: exit(1) 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 5c75e65b3..1498c3607 100644 --- a/test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt +++ b/test cases/cmake/8 custom command/subprojects/cmMod/CMakeLists.txt @@ -7,6 +7,9 @@ set (CMAKE_CXX_STANDARD_REQUIRED ON) include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_definitions("-DDO_NOTHING_JUST_A_FLAG=1") +add_executable(genMain genMain.cpp) +add_custom_command(OUTPUT main.cpp COMMAND genMain > main.cpp) + add_executable(gen main.cpp) add_executable(mycpy cp.cpp) diff --git a/test cases/cmake/8 custom command/subprojects/cmMod/main.cpp b/test cases/cmake/8 custom command/subprojects/cmMod/genMain.cpp similarity index 83% rename from test cases/cmake/8 custom command/subprojects/cmMod/main.cpp rename to test cases/cmake/8 custom command/subprojects/cmMod/genMain.cpp index 9fade211d..33f020159 100644 --- a/test cases/cmake/8 custom command/subprojects/cmMod/main.cpp +++ b/test cases/cmake/8 custom command/subprojects/cmMod/genMain.cpp @@ -1,4 +1,10 @@ #include + +using namespace std; + +int main() { + cout << R"asd( +#include #include using namespace std; @@ -28,3 +34,7 @@ std::string getStr() { return 0; } +)asd"; + + return 0; +}