# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

group("all") {
  testonly = true

  public_deps = [
    ":basename",
    ":cal",
    ":cat",

    # ":chgrp",
    # ":chmod",
    # ":chown",
    # ":chroot",
    ":cksum",
    ":cmp",
    ":cols",
    ":comm",
    ":cp",
    # ":cron",
    ":cut",
    ":date",
    ":dirname",
    ":du",
    ":echo",
    ":ed",
    ":env",
    ":expand",
    ":expr",
    ":false",
    ":find",

    # ":flock",
    ":fold",

    # ":getconf",
    ":grep",
    ":head",
    ":hostname",
    ":join",

    # ":kill",
    ":link",

    # ":ln",
    # ":logger",
    # ":logname",
    ":ls",
    ":md5sum",
    ":mkdir",

    # ":mkfifo",
    ":mktemp",
    ":mv",

    # ":nice",
    ":nl",

    # ":nohup",
    ":od",
    ":paste",
    ":pathchk",
    ":printenv",
    ":printf",
    ":pwd",
    ":readlink",

    # ":renice",
    ":rev",
    ":rm",
    ":rmdir",
    ":sed",
    ":seq",

    # ":setsid",
    ":sha1sum",
    ":sha224sum",
    ":sha256sum",
    ":sha384sum",
    ":sha512-224sum",
    ":sha512-256sum",
    ":sha512sum",
    ":sleep",
    ":sort",
    ":split",
    ":sponge",
    ":strings",
    ":sync",
    ":tail",
    ":tar",
    ":tee",
    ":test",
    ":tftp",

    # ":time",
    ":touch",
    ":tr",
    ":true",
    ":tsort",
    ":tty",

    # ":uname",
    ":unexpand",
    ":uniq",
    ":unlink",
    ":uudecode",
    ":uuencode",
    ":wc",
    ":which",
    ":whoami",
    ":xargs",
    ":xinstall",
    ":yes",
  ]
}

config("sbase_config") {
  cflags = [
    "-Wno-sign-compare",
    "-Wno-sometimes-uninitialized",
    "-Wno-missing-field-initializers",
    "-Wno-tautological-constant-out-of-range-compare",
  ]
}

template("sbase_util") {
  assert(invoker != "")

  executable(target_name) {
    sources = [
      "$target_name.c",
    ]

    deps = [
      "//zircon/public/lib/fdio",
      "libutf",
      "libutil",
    ]

    configs += [ ":sbase_config" ]
  }
}

sbase_util("basename") {
}
sbase_util("cal") {
}
sbase_util("cat") {
}

# sbase_util("chgrp") {}
# sbase_util("chmod") {}
# sbase_util("chown") {}
# sbase_util("chroot") {}
sbase_util("cksum") {
}
sbase_util("cmp") {
}
sbase_util("cols") {
}
sbase_util("comm") {
}
sbase_util("cp") {
}
# sbase_util("cron") {}
sbase_util("cut") {
}
sbase_util("date") {
}
sbase_util("dirname") {
}
sbase_util("du") {
}
sbase_util("echo") {
}
sbase_util("ed") {
}
sbase_util("env") {
}
sbase_util("expand") {
}
sbase_util("expr") {
}
sbase_util("false") {
}
sbase_util("find") {
}

# sbase_util("flock") {}
sbase_util("fold") {
}

# sbase_util("getconf") {}
sbase_util("grep") {
}
sbase_util("head") {
}
sbase_util("hostname") {
}
sbase_util("join") {
}

# sbase_util("kill") {}
sbase_util("link") {
}

# sbase_util("ln") {}
# sbase_util("logger") {}
# sbase_util("logname") {}
sbase_util("ls") {
}
sbase_util("md5sum") {
}
sbase_util("mkdir") {
}

# sbase_util("mkfifo") {}
sbase_util("mktemp") {
}
sbase_util("mv") {
}

# sbase_util("nice") {}
sbase_util("nl") {
}

# sbase_util("nohup") {}
sbase_util("od") {
}
sbase_util("paste") {
}
sbase_util("pathchk") {
}
sbase_util("printenv") {
}
sbase_util("printf") {
}
sbase_util("pwd") {
}
sbase_util("readlink") {
}

# sbase_util("renice") {}
sbase_util("rev") {
}
sbase_util("rm") {
}
sbase_util("rmdir") {
}
sbase_util("sed") {
}
sbase_util("seq") {
}

# sbase_util("setsid") {}
sbase_util("sha1sum") {
}
sbase_util("sha224sum") {
}
sbase_util("sha256sum") {
}
sbase_util("sha384sum") {
}
sbase_util("sha512-224sum") {
}
sbase_util("sha512-256sum") {
}
sbase_util("sha512sum") {
}
sbase_util("sleep") {
}
sbase_util("sort") {
}
sbase_util("split") {
}
sbase_util("sponge") {
}
sbase_util("strings") {
}
sbase_util("sync") {
}
sbase_util("tail") {
}
sbase_util("tar") {
}
sbase_util("tee") {
}
sbase_util("test") {
}
sbase_util("tftp") {
}

# sbase_util("time") {}
sbase_util("touch") {
}
sbase_util("tr") {
}
sbase_util("true") {
}
sbase_util("tsort") {
}
sbase_util("tty") {
}

# sbase_util("uname") {}
sbase_util("unexpand") {
}
sbase_util("uniq") {
}
sbase_util("unlink") {
}
sbase_util("uudecode") {
}
sbase_util("uuencode") {
}
sbase_util("wc") {
}
sbase_util("which") {
}
sbase_util("whoami") {
}
sbase_util("xinstall") {
}
sbase_util("yes") {
}

executable("xargs") {
  sources = [
    "xargs.c",
  ]

  deps = [
    "libutf",
    "libutil",
    "//zircon/public/lib/launchpad",
  ]

  libs = [
    "zircon",
  ]

  configs += [ ":sbase_config" ]
}
import("//build/package.gni")

package("sbase") {
  testonly = true
  system_image = true

  deps = [
    ":all",
  ]

  binaries = [
    {
      name = "basename"
    },

    {
      name = "cal"
    },

    {
      name = "cat"
    },

    {
      name = "cksum"
    },

    {
      name = "cmp"
    },

    {
      name = "cols"
    },

    {
      name = "comm"
    },

    {
      name = "cp"
    },

    {
      name = "cut"
    },

    {
      name = "date"
    },

    {
      name = "dirname"
    },

    {
      name = "du"
    },

    {
      name = "echo"
    },

    {
      name = "ed"
    },

    {
      name = "env"
    },

    {
      name = "expand"
    },

    {
      name = "expr"
    },

    {
      name = "false"
    },

    {
      name = "find"
    },

    {
      name = "fold"
    },

    {
      name = "grep"
    },

    {
      name = "head"
    },

    {
      name = "hostname"
    },

    {
      name = "join"
    },

    {
      name = "link"
    },

    {
      name = "ls"
    },

    {
      name = "md5sum"
    },

    {
      name = "mkdir"
    },

    {
      name = "mktemp"
    },

    {
      name = "mv"
    },

    {
      name = "nl"
    },

    {
      name = "od"
    },

    {
      name = "paste"
    },

    {
      name = "pathchk"
    },

    {
      name = "printenv"
    },

    {
      name = "printf"
    },

    {
      name = "pwd"
    },

    {
      name = "readlink"
    },

    {
      name = "rev"
    },

    {
      name = "rm"
    },

    {
      name = "rmdir"
    },

    {
      name = "sed"
    },

    {
      name = "seq"
    },

    {
      name = "sha1sum"
    },

    {
      name = "sha224sum"
    },

    {
      name = "sha256sum"
    },

    {
      name = "sha384sum"
    },

    {
      name = "sha512-224sum"
    },

    {
      name = "sha512-256sum"
    },

    {
      name = "sha512sum"
    },

    {
      name = "sleep"
    },

    {
      name = "sort"
    },

    {
      name = "split"
    },

    {
      name = "sponge"
    },

    {
      name = "strings"
    },

    {
      name = "sync"
    },

    {
      name = "tail"
    },

    {
      name = "tar"
    },

    {
      name = "tee"
    },

    {
      name = "test"
    },

    {
      name = "tftp"
    },

    {
      name = "touch"
    },

    {
      name = "tr"
    },

    {
      name = "true"
    },

    {
      name = "tsort"
    },

    {
      name = "tty"
    },

    {
      name = "unexpand"
    },

    {
      name = "uniq"
    },

    {
      name = "unlink"
    },

    {
      name = "uudecode"
    },

    {
      name = "uuencode"
    },

    {
      name = "wc"
    },

    {
      name = "which"
    },

    {
      name = "whoami"
    },

    {
      name = "xargs"
    },

    {
      name = "xinstall"
    },

    {
      name = "yes"
    },
  ]
}
