diff --git a/src/conf.h b/src/conf.h index e2b3c559..e50b2505 100644 --- a/src/conf.h +++ b/src/conf.h @@ -741,8 +741,8 @@ unsigned membuffer_get_size(MemBuffer &mb); // util/dt_check.cpp void upx_compiler_sanity_check(); -bool upx_doctest_check(); -bool upx_doctest_check(int argc, char **argv); +int upx_doctest_check(); +int upx_doctest_check(int argc, char **argv); // main.cpp extern const char *progname; diff --git a/src/help.cpp b/src/help.cpp index f56e0114..5e5603e6 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -407,6 +407,9 @@ void show_version(bool one_line) v = upx_lzma_version_string(); if (v != nullptr && v[0]) fprintf(fp, "LZMA SDK version %s\n", v); +#endif +#if !defined(DOCTEST_CONFIG_DISABLE) + fprintf(fp, "doctest C++ testing framework version %s\n", DOCTEST_VERSION_STR); #endif fprintf(fp, "Copyright (C) 1996-2022 Markus Franz Xaver Johannes Oberhumer\n"); fprintf(fp, "Copyright (C) 1996-2022 Laszlo Molnar\n"); @@ -417,6 +420,9 @@ void show_version(bool one_line) #endif #if (WITH_LZMA) fprintf(fp, "Copyright (C) 1999" "-2006 Igor Pavlov\n"); +#endif +#if !defined(DOCTEST_CONFIG_DISABLE) + fprintf(fp, "Copyright (C) 2016" "-2021 Viktor Kirilov\n"); #endif fprintf(fp, "UPX comes with ABSOLUTELY NO WARRANTY; for details type '%s -L'.\n", progname); } diff --git a/src/main.cpp b/src/main.cpp index 98fe7482..ae57c831 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1159,8 +1159,12 @@ int upx_main(int argc, char *argv[]) { argv0 = argv[0]; upx_compiler_sanity_check(); - if (!upx_doctest_check(argc, argv)) { - fprintf(stderr, "%s: internal error: doctest failed\n", argv0); + int dt_res = upx_doctest_check(argc, argv); + if (dt_res != 0) { + if (dt_res == 2) + fprintf(stderr, "%s: doctest requested program exit; Stop.\n", argv0); + else + fprintf(stderr, "%s: internal error: doctest failed\n", argv0); e_exit(EXIT_INIT); } diff --git a/src/util/dt_check.cpp b/src/util/dt_check.cpp index 577b8d43..60b46257 100644 --- a/src/util/dt_check.cpp +++ b/src/util/dt_check.cpp @@ -31,14 +31,14 @@ // upx_doctest_check() **************************************************************************/ -bool upx_doctest_check(int argc, char **argv) { +int upx_doctest_check(int argc, char **argv) { #if defined(DOCTEST_CONFIG_DISABLE) UNUSED(argc); UNUSED(argv); #else const char *e = getenv("UPX_DEBUG_DOCTEST_DISABLE"); if (e && e[0] && strcmp(e, "0") != 0) - return true; + return 0; bool minimal = true; // only show failing tests bool duration = false; // show timings bool success = false; // show all tests @@ -68,13 +68,15 @@ bool upx_doctest_check(int argc, char **argv) { if (argc > 0 && argv != nullptr) context.applyCommandLine(argc, argv); int r = context.run(); - if (context.shouldExit() || r != 0) - return false; + if (r != 0) + return 1; + if (context.shouldExit()) + return 2; #endif // DOCTEST_CONFIG_DISABLE - return true; + return 0; } -bool upx_doctest_check() { return upx_doctest_check(0, nullptr); } +int upx_doctest_check() { return upx_doctest_check(0, nullptr); } /************************************************************************* // compile-time checks