memtester.cxx.in 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <cmSystemTools.h>
  2. #include <string>
  3. #define RETVAL @_retval@
  4. int
  5. main(int argc, char **argv)
  6. {
  7. std::string exename = argv[0];
  8. std::string logarg;
  9. bool nextarg = false;
  10. if (exename.find("valgrind") != exename.npos)
  11. logarg = "--log-file=";
  12. else if (exename.find("purify") != exename.npos)
  13. #ifdef _WIN32
  14. logarg = "/SAVETEXTDATA=";
  15. #else
  16. logarg = "-log-file=";
  17. #endif
  18. else if (exename.find("BC") != exename.npos)
  19. {
  20. nextarg = true;
  21. logarg = "/X";
  22. }
  23. if (!logarg.empty()) {
  24. std::string logfile;
  25. for (int i = 1; i < argc; i++) {
  26. std::string arg = argv[i];
  27. if (arg.find(logarg) == 0)
  28. {
  29. if (nextarg)
  30. {
  31. if (i == argc - 1)
  32. return 1; // invalid command line
  33. logfile = argv[i + 1];
  34. }
  35. else
  36. {
  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.c_str(), true);
  44. }
  45. return RETVAL;
  46. }