memtester.cxx.in 1.3 KB

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