///|
fn main raise {
  let argv = @env.args()
  let args = if argv.length() > 0 { argv[1:].to_owned() } else { [] }
  match args {
    ["generate", .. rest] => {
      let options = parse_generate_options(rest.to_owned())
      let changed = write_generated_files(options)
      if options.check {
        if changed.length() > 0 {
          fail("generated files are stale:\n" + changed.join("\n"))
        }
        println("generated files are up to date")
      } else if changed.length() == 0 {
        println("generated files are already up to date")
      } else {
        for path in changed {
          println("wrote \{path}")
        }
      }
    }
    ["--help" | "-h"] | [] => println(usage())
    [command, ..] => fail("unknown command '\{command}'\n\{usage()}")
  }
}