# 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.

import("//build/package.gni")

# The following binaries are disabled:
# "chgrp",
# "chmod",
# "chown",
# "chroot",
# "cron",
# "flock",
# "getconf",
# "kill",
# "ln",
# "logger",
# "logname",
# "mkfifo",
# "nice",
# "nohup",
# "renice",
# "setsid",
# "time",
# "uname",

# The common binaries are the ones included in many product builds by
# default.
common_binaries = [
  "basename",
  "cat",
  "cmp",
  "cut",
  "date",
  "dirname",
  "du",
  "env",
  "expr",
  "find",
  "grep",
  "head",
  "hostname",
  "printf",
  "seq",
  "sleep",
  "sort",
  "tail",
  "tee",
  "touch",
  "tr",
  "uniq",
  "wc",
  "which",
]

sbase_binaries = [
  "basename",
  "cal",
  "cat",
  "cksum",
  "cmp",
  "cols",
  "comm",
  "cp",
  "cut",
  "date",
  "dirname",
  "du",
  "echo",
  "ed",
  "env",
  "expand",
  "expr",
  "false",
  "find",
  "fold",
  "grep",
  "head",
  "hostname",
  "join",
  "link",
  "ls",
  "md5sum",
  "mkdir",
  "mktemp",
  "mv",
  "nl",
  "od",
  "paste",
  "pathchk",
  "printenv",
  "printf",
  "pwd",
  "readlink",
  "rev",
  "rm",
  "rmdir",
  "sed",
  "seq",
  "sha1sum",
  "sha224sum",
  "sha256sum",
  "sha384sum",
  "sha512-224sum",
  "sha512-256sum",
  "sha512sum",
  "sleep",
  "sort",
  "split",
  "sponge",
  "strings",
  "sync",
  "tail",
  "tar",
  "tee",
  "test",
  "tftp",
  "touch",
  "tr",
  "true",
  "tsort",
  "tty",
  "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",
  ]
}

foreach(bin, sbase_binaries) {
  executable(bin + "_bin") {
    output_name = bin

    sources = [
      "$bin.c",
    ]

    libs = [ "zircon" ]

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

    configs += [ ":sbase_config" ]
  }

  package(bin) {
    deps = [
      ":${bin}_bin",
    ]

    binaries = [
      {
        name = bin
        shell = true
      },
    ]
  }
}

group("sbase") {
  deps = []
  foreach(pkg, sbase_binaries) {
    deps += [ ":" + pkg ]
  }
}

group("common") {
  deps = []
  foreach(pkg, common_binaries) {
    deps += [ ":" + pkg ]
  }
}
