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

  libs = [
    "launchpad",
    "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 = "cron"
    },

    {
      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"
    },
  ]
}
