summaryrefslogtreecommitdiffstats
path: root/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
diff options
context:
space:
mode:
authorKyle Edwards <kyle.edwards@kitware.com>2020-10-26 19:43:57 (GMT)
committerKyle Edwards <kyle.edwards@kitware.com>2020-10-26 19:43:57 (GMT)
commitb8937a992b956b16a9181737f695ca118c5eea49 (patch)
tree02b30e7d14f767c28e0ef69af3351f343d7bf8c9 /Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
parentd13bd6ec3d7232b4b62d3106684f4f57951f3b28 (diff)
parent9fa7afe7d332ced27264f1ef7c921aa1d95bc476 (diff)
downloadCMake-b8937a992b956b16a9181737f695ca118c5eea49.zip
CMake-b8937a992b956b16a9181737f695ca118c5eea49.tar.gz
CMake-b8937a992b956b16a9181737f695ca118c5eea49.tar.bz2
Merge branch 'release' into ninja-multi-per-config-sources
Diffstat (limited to 'Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in')
-rw-r--r--Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in34
1 files changed, 32 insertions, 2 deletions
diff --git a/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in b/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
index 3183bc0..f37ad59 100644
--- a/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
+++ b/Tests/CMakeLib/PseudoMemcheck/memtester.cxx.in
@@ -1,8 +1,14 @@
-#include <cmSystemTools.h>
-#include "cmsys/Encoding.hxx"
#include <string>
+#include <vector>
+
+#include "cmsys/Encoding.hxx"
+
+#include <cmSystemTools.h>
+// clang-format off
#define RETVAL @_retval@
+#define CMAKE_COMMAND "@CMAKE_COMMAND@"
+// clang-format on
int main(int ac, char** av)
{
@@ -14,6 +20,9 @@ int main(int ac, char** av)
std::string exename = argv[0];
std::string logarg;
bool nextarg = false;
+ // execute the part after the last argument?
+ // the logfile path gets passed as environment variable PSEUDO_LOGFILE
+ bool exec = false;
if (exename.find("valgrind") != std::string::npos) {
logarg = "--log-file=";
@@ -26,6 +35,10 @@ int main(int ac, char** av)
} else if (exename.find("BC") != std::string::npos) {
nextarg = true;
logarg = "/X";
+ } else if (exename.find("cuda-memcheck") != std::string::npos) {
+ nextarg = true;
+ exec = true;
+ logarg = "--log-file";
}
if (!logarg.empty()) {
@@ -45,8 +58,25 @@ int main(int ac, char** av)
}
}
+ // find the last argument position
+ int lastarg_pos = 1;
+ for (int i = 1; i < argc; ++i) {
+ std::string arg = argv[i];
+ if (arg.find("--") == 0) {
+ lastarg_pos = i;
+ }
+ }
+
if (!logfile.empty()) {
cmSystemTools::Touch(logfile, true);
+ // execute everything after the last argument with additional environment
+ int callarg_pos = lastarg_pos + (nextarg ? 2 : 1);
+ if (exec && callarg_pos < argc) {
+ std::vector<std::string> callargs{ CMAKE_COMMAND, "-E", "env",
+ "PSEUDO_LOGFILE=" + logfile };
+ callargs.insert(callargs.end(), &argv[callarg_pos], &argv[argc]);
+ cmSystemTools::RunSingleCommand(callargs);
+ }
}
}