# 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 = [
      "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"
    },
  ]
}
