///|
async fn main {
  let metadata_args = @env.args()[1:]
  if metadata_args.length() == 1 && metadata_args[0] == "--version" {
    @stdio.stdout.write("mkdir 0.2.4\n")
    return
  }
  let args = @env.args()[1:]
  let parsed = @cli.parse(args, [
    @cli.flag("parents", short='p'),
    @cli.option("mode", short='m'),
    @cli.flag("verbose", short='v'),
    @cli.flag("help"),
  ]) catch {
    @cli.CliError(option~, message~, ..) => {
      @stdio.stderr.write("mkdir: \{message}: '\{option}'\n")
      @sys.exit(2)
      return
    }
  }
  if parsed.contains("help") {
    @stdio.stdout.write(
      "Usage: mkdir [-p] [-m MODE] [-v] DIRECTORY...\n      --help      display this help and exit\n      --version   display version and exit\nMODE accepts octal or symbolic permissions (rwxXst, copied classes and comma clauses).\nSticky-only +t yields 1755; a=rwx,+t yields 1777.\nOmitted-who expressions requiring the process umask are unavailable.\n",
    )
    return
  }
  let mut symbolic = false
  let permission = match parsed.last_value("mode") {
    Some(value) =>
      @mode.parse_octal_mode(value) catch {
        _ => {
          symbolic = true
          symbolic_mode(value) catch {
            InvalidMode => {
              @stdio.stderr.write("mkdir: invalid mode '\{value}'\n")
              @sys.exit(1)
              return
            }
            NeedsUmask => {
              @stdio.stderr.write(
                "mkdir: unsupported capability: symbolic mode requires process umask\n",
              )
              @sys.exit(2)
              return
            }
          }
        }
      }
    None => 0o777
  }
  let directories = parsed.operands
  let parents = parsed.contains("parents")
  let verbose = parsed.contains("verbose")
  if directories.is_empty() {
    @stdio.stderr.write("mkdir: missing operand\n")
    @sys.exit(1)
    return
  }
  if symbolic && !@platform.permission_mutation_supported() {
    for directory in directories {
      if parents && directory_exists(directory) {
        continue
      }
      @stdio.stderr.write(
        "mkdir: unsupported capability: symbolic directory permission setter\n",
      )
      @sys.exit(2)
      return
    }
  }
  let mut failed = false
  for directory in directories {
    let created = try {
      if parents && directory_exists(directory) {
        false
      } else {
        if parents {
          create_parents(@fsops.dirname(directory), verbose)
        }
        @fs.mkdir(directory, permission~)
        if parsed.contains("mode") {
          @fs.chmod(directory, permission)
        }
        true
      }
    } catch {
      err => {
        @stdio.stderr.write(
          "mkdir: cannot create directory '\{directory}': \{mkdir_error(err)}\n",
        )
        failed = true
        false
      }
    }
    if created && verbose {
      @stdio.stdout.write("mkdir: created directory '\{directory}'\n")
    }
  }
  if failed {
    @sys.exit(1)
  }
}