mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-23 06:47:08 -05:00
f875c479f5
We run test executables to discover tests. Use the same launchers that are used to run the tests. We already handle `CROSSCOMPILING_EMULATOR`. Update the logic to account for the `TEST_LAUNCHER` property added by commit1ec0372ed4(add_test: Optionally use a launcher for tests running in-project targets, 2023-11-11), and for the `CROSSCOMPILING_EMULATOR` behavior change in commitca5a300d7f(add_test: Honor CROSSCOMPILING_EMULATOR only when cross-compiling, 2023-11-02). Fixes: #25603 Co-authored-by: Brad King <brad.king@kitware.com> Signed-off-by: Ralf Habacker <ralf.habacker@freenet.de>
72 lines
1.4 KiB
C
72 lines
1.4 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#if defined(_MSC_VER) && _MSC_VER < 1900
|
|
# include <stdarg.h>
|
|
static int snprintf(char* buffer, size_t count, const char* format, ...)
|
|
{
|
|
int n;
|
|
va_list argptr;
|
|
va_start(argptr, format);
|
|
n = _vscprintf(format, argptr);
|
|
vsnprintf_s(buffer, count, _TRUNCATE, format, argptr);
|
|
va_end(argptr);
|
|
return n;
|
|
}
|
|
#endif
|
|
|
|
static int launch(int argc, const char* argv[])
|
|
{
|
|
char cmd[4096];
|
|
size_t len = 0;
|
|
const char* sep = "";
|
|
int i;
|
|
int n;
|
|
#ifdef _WIN32
|
|
n = snprintf(cmd + len, sizeof(cmd) - len, "cmd /C \"");
|
|
if (n < 0) {
|
|
return 1;
|
|
}
|
|
len += n;
|
|
#endif
|
|
for (i = 0; i < argc; ++i) {
|
|
n = snprintf(cmd + len, sizeof(cmd) - len, "%s\"%s\"", sep, argv[i]);
|
|
if (n < 0) {
|
|
return 1;
|
|
}
|
|
len += n;
|
|
if (len >= sizeof(cmd)) {
|
|
fprintf(stderr, "error: command too long\n");
|
|
return 1;
|
|
}
|
|
sep = " ";
|
|
}
|
|
#ifdef _WIN32
|
|
printf("launching: %s\n", cmd + 8);
|
|
n = snprintf(cmd + len, sizeof(cmd) - len, "\"");
|
|
if (n < 1) {
|
|
return 1;
|
|
}
|
|
#else
|
|
printf("launching: %s\n", cmd);
|
|
#endif
|
|
fflush(stdout);
|
|
return system(cmd);
|
|
}
|
|
|
|
int main(int argc, const char* argv[])
|
|
{
|
|
int ownArgs = 1;
|
|
int i;
|
|
for (i = 0; i < argc; ++i) {
|
|
printf("test_launcher: got arg %d '%s'\n", i, argv[i]);
|
|
if (ownArgs && strcmp(argv[i], "--") == 0) {
|
|
ownArgs = 0;
|
|
} else if (!ownArgs) {
|
|
return launch(argc - i, argv + i);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|