#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") != exename.npos)
    logarg = "--log-file=";
  else if (exename.find("purify") != exename.npos)
#ifdef _WIN32
    logarg = "/SAVETEXTDATA=";
#else
    logarg = "-log-file=";
#endif
  else if (exename.find("BC") != exename.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.c_str(), true);
  }

  return RETVAL;
}
