[packages] create a shell=true package per binary

These will be used to make a soft transition to the removal of the
deprecated_system_image package that remains called "sbase".

Change-Id: Ic720db8adc46ab3ed538ac24cdea47382c87f824
diff --git a/BUILD.gn b/BUILD.gn
index 12a6c42..4aef37a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -2,120 +2,107 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-group("all") {
-  testonly = true
+import("//build/package.gni")
 
-  public_deps = [
-    ":basename",
-    ":cal",
-    ":cat",
+# The following binaries are disabled:
+# "chgrp",
+# "chmod",
+# "chown",
+# "chroot",
+# "cron",
+# "flock",
+# "getconf",
+# "kill",
+# "ln",
+# "logger",
+# "logname",
+# "mkfifo",
+# "nice",
+# "nohup",
+# "renice",
+# "setsid",
+# "time",
+# "uname",
 
-    # ":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",
-  ]
-}
+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 = [
@@ -126,14 +113,16 @@
   ]
 }
 
-template("sbase_util") {
-  assert(invoker != "")
+foreach(bin, sbase_binaries) {
+  executable(bin + "_bin") {
+    output_name = bin
 
-  executable(target_name) {
     sources = [
-      "$target_name.c",
+      "$bin.c",
     ]
 
+    libs = [ "zircon" ]
+
     deps = [
       "libutf",
       "libutil",
@@ -142,596 +131,35 @@
 
     configs += [ ":sbase_config" ]
   }
+
+  package(bin) {
+    deps = [
+      ":${bin}_bin",
+    ]
+
+    binaries = [
+      {
+        name = bin
+        shell = true
+      },
+    ]
+  }
 }
 
-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/fdio",
-  ]
-
-  libs = [ "zircon" ]
-
-  configs += [ ":sbase_config" ]
-}
-import("//build/package.gni")
-
+# package sbase is deprecated, users should over time migrate to using the above packages instead.
 package("sbase") {
   testonly = true
   deprecated_system_image = true
 
-  deps = [
-    ":all",
-  ]
+  deps = []
+  binaries = []
 
-  binaries = [
-    {
-      shell = true
-      name = "basename"
-    },
-
-    {
-      shell = true
-      name = "cal"
-    },
-
-    {
-      shell = true
-      name = "cat"
-    },
-
-    {
-      shell = true
-      name = "cksum"
-    },
-
-    {
-      shell = true
-      name = "cmp"
-    },
-
-    {
-      shell = true
-      name = "cols"
-    },
-
-    {
-      shell = true
-      name = "comm"
-    },
-
-    {
-      shell = true
-      name = "cp"
-    },
-
-    {
-      shell = true
-      name = "cut"
-    },
-
-    {
-      shell = true
-      name = "date"
-    },
-
-    {
-      shell = true
-      name = "dirname"
-    },
-
-    {
-      shell = true
-      name = "du"
-    },
-
-    {
-      shell = true
-      name = "echo"
-    },
-
-    {
-      shell = true
-      name = "ed"
-    },
-
-    {
-      shell = true
-      name = "env"
-    },
-
-    {
-      shell = true
-      name = "expand"
-    },
-
-    {
-      shell = true
-      name = "expr"
-    },
-
-    {
-      shell = true
-      name = "false"
-    },
-
-    {
-      shell = true
-      name = "find"
-    },
-
-    {
-      shell = true
-      name = "fold"
-    },
-
-    {
-      shell = true
-      name = "grep"
-    },
-
-    {
-      shell = true
-      name = "head"
-    },
-
-    {
-      shell = true
-      name = "hostname"
-    },
-
-    {
-      shell = true
-      name = "join"
-    },
-
-    {
-      shell = true
-      name = "link"
-    },
-
-    {
-      shell = true
-      name = "ls"
-    },
-
-    {
-      shell = true
-      name = "md5sum"
-    },
-
-    {
-      shell = true
-      name = "mkdir"
-    },
-
-    {
-      shell = true
-      name = "mktemp"
-    },
-
-    {
-      shell = true
-      name = "mv"
-    },
-
-    {
-      shell = true
-      name = "nl"
-    },
-
-    {
-      shell = true
-      name = "od"
-    },
-
-    {
-      shell = true
-      name = "paste"
-    },
-
-    {
-      shell = true
-      name = "pathchk"
-    },
-
-    {
-      shell = true
-      name = "printenv"
-    },
-
-    {
-      shell = true
-      name = "printf"
-    },
-
-    {
-      shell = true
-      name = "pwd"
-    },
-
-    {
-      shell = true
-      name = "readlink"
-    },
-
-    {
-      shell = true
-      name = "rev"
-    },
-
-    {
-      shell = true
-      name = "rm"
-    },
-
-    {
-      shell = true
-      name = "rmdir"
-    },
-
-    {
-      shell = true
-      name = "sed"
-    },
-
-    {
-      shell = true
-      name = "seq"
-    },
-
-    {
-      shell = true
-      name = "sha1sum"
-    },
-
-    {
-      shell = true
-      name = "sha224sum"
-    },
-
-    {
-      shell = true
-      name = "sha256sum"
-    },
-
-    {
-      shell = true
-      name = "sha384sum"
-    },
-
-    {
-      shell = true
-      name = "sha512-224sum"
-    },
-
-    {
-      shell = true
-      name = "sha512-256sum"
-    },
-
-    {
-      shell = true
-      name = "sha512sum"
-    },
-
-    {
-      shell = true
-      name = "sleep"
-    },
-
-    {
-      shell = true
-      name = "sort"
-    },
-
-    {
-      shell = true
-      name = "split"
-    },
-
-    {
-      shell = true
-      name = "sponge"
-    },
-
-    {
-      shell = true
-      name = "strings"
-    },
-
-    {
-      shell = true
-      name = "sync"
-    },
-
-    {
-      shell = true
-      name = "tail"
-    },
-
-    {
-      shell = true
-      name = "tar"
-    },
-
-    {
-      shell = true
-      name = "tee"
-    },
-
-    {
-      shell = true
-      name = "test"
-    },
-
-    {
-      shell = true
-      name = "tftp"
-    },
-
-    {
-      shell = true
-      name = "touch"
-    },
-
-    {
-      shell = true
-      name = "tr"
-    },
-
-    {
-      shell = true
-      name = "true"
-    },
-
-    {
-      shell = true
-      name = "tsort"
-    },
-
-    {
-      shell = true
-      name = "tty"
-    },
-
-    {
-      shell = true
-      name = "unexpand"
-    },
-
-    {
-      shell = true
-      name = "uniq"
-    },
-
-    {
-      shell = true
-      name = "unlink"
-    },
-
-    {
-      shell = true
-      name = "uudecode"
-    },
-
-    {
-      shell = true
-      name = "uuencode"
-    },
-
-    {
-      shell = true
-      name = "wc"
-    },
-
-    {
-      shell = true
-      name = "which"
-    },
-
-    {
-      shell = true
-      name = "xargs"
-    },
-
-    {
-      shell = true
-      name = "xinstall"
-    },
-
-    {
-      shell = true
-      name = "yes"
-    },
-  ]
+  foreach(bin, sbase_binaries) {
+    deps += [ ":${bin}_bin" ]
+    binaries += [
+      {
+        name = bin
+      },
+    ]
+  }
 }