#include <cmSystemTools.h>
#include "cmsys/Encoding.hxx"
#include <string>

#define RETVAL @_retval@

int main(int ac, char** av)
{
  cmsys::Encoding::CommandLineArguments args =
    cmsys::Encoding::CommandLineArguments::Main(ac, av);
  int argc = args.argc();
  const char* const* argv = args.argv();

  std::string exename = argv[0];
  std::string logarg;
  bool nextarg = false;

  if (exename.find("valgrind") != std::string::npos) {
    logarg = "--log-file=";
  } else if (exename.find("purify") != std::string::npos) {
#ifdef _WIN32
    logarg = "/SAVETEXTDATA=";
#else
    logarg = "-log-file=";
#endif
  } else if (exename.find("BC") != std::string::npos) {
    nextarg = true;
    logarg = "/X";
  }

  if (!logarg.empty()) {
    std::string logfile;
    for (int i = 1; i < argc; i++) {
      std::string arg = argv[i];
      if (arg.find(logarg) == 0) {
        if (nextarg) {
          if (i == argc - 1) {
            return 1; // invalid command line
          }
          logfile = argv[i + 1];
        } else {
          logfile = arg.substr(logarg.length());
        }
        // keep searching, it may be overridden later to provoke an error
      }
    }

    if (!logfile.empty()) {
      cmSystemTools::Touch(logfile, true);
    }
  }

  return RETVAL;
}
