memtester.cxx.in 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <cmSystemTools.h>
  2. #include "cmsys/Encoding.hxx"
  3. #include <string>
  4. #define RETVAL @_retval@
  5. int main(int ac, char** av)
  6. {
  7. cmsys::Encoding::CommandLineArguments args =
  8. cmsys::Encoding::CommandLineArguments::Main(ac, av);
  9. int argc = args.argc();
  10. const char* const* argv = args.argv();
  11. std::string exename = argv[0];
  12. std::string logarg;
  13. bool nextarg = false;
  14. if (exename.find("valgrind") != exename.npos) {
  15. logarg = "--log-file=";
  16. } else if (exename.find("purify") != exename.npos) {
  17. #ifdef _WIN32
  18. logarg = "/SAVETEXTDATA=";
  19. #else
  20. logarg = "-log-file=";
  21. #endif
  22. } else if (exename.find("BC") != exename.npos) {
  23. nextarg = true;
  24. logarg = "/X";
  25. }
  26. if (!logarg.empty()) {
  27. std::string logfile;
  28. for (int i = 1; i < argc; i++) {
  29. std::string arg = argv[i];
  30. if (arg.find(logarg) == 0) {
  31. if (nextarg) {
  32. if (i == argc - 1) {
  33. return 1; // invalid command line
  34. }
  35. logfile = argv[i + 1];
  36. } else {
  37. logfile = arg.substr(logarg.length());
  38. }
  39. // keep searching, it may be overridden later to provoke an error
  40. }
  41. }
  42. if (!logfile.empty()) {
  43. cmSystemTools::Touch(logfile, true);
  44. }
  45. }
  46. return RETVAL;
  47. }