Merge changes I5400e4b0,Ia6760b01,I8a076c99

* changes:
  Add test for java generated sources
  Fix doubled generated source files
  Fix mixing genrule dependencies with globs
diff --git a/androidmk/cmd/androidmk/androidmk.go b/androidmk/cmd/androidmk/androidmk.go
index 5fad586..a49f620 100644
--- a/androidmk/cmd/androidmk/androidmk.go
+++ b/androidmk/cmd/androidmk/androidmk.go
@@ -2,6 +2,7 @@
 
 import (
 	"bytes"
+	"flag"
 	"fmt"
 	"io/ioutil"
 	"os"
@@ -15,6 +16,13 @@
 	bpparser "github.com/google/blueprint/parser"
 )
 
+var usage = func() {
+	fmt.Fprintf(os.Stderr, "usage: androidmk [flags] <inputFile>\n"+
+		"\nandroidmk parses <inputFile> as an Android.mk file and attempts to output an analogous Android.bp file (to standard out)\n")
+	flag.PrintDefaults()
+	os.Exit(1)
+}
+
 // TODO: non-expanded variables with expressions
 
 type bpFile struct {
@@ -85,7 +93,13 @@
 }
 
 func main() {
-	b, err := ioutil.ReadFile(os.Args[1])
+	flag.Usage = usage
+	flag.Parse()
+	if len(flag.Args()) != 1 {
+		usage()
+	}
+	filePathToRead := flag.Arg(0)
+	b, err := ioutil.ReadFile(filePathToRead)
 	if err != nil {
 		fmt.Println(err.Error())
 		return
diff --git a/build_test.bash b/build_test.bash
index 065d7f6..6edaa66 100755
--- a/build_test.bash
+++ b/build_test.bash
@@ -28,6 +28,7 @@
 export TRACE_BEGIN_SOONG=$(date +%s%N)
 
 export TOP=$(cd $(dirname ${BASH_SOURCE[0]})/../..; PWD= /bin/pwd)
+cd "${TOP}"
 source "${TOP}/build/soong/scripts/microfactory.bash"
 
 case $(uname) in
diff --git a/cmd/multiproduct_kati/main.go b/cmd/multiproduct_kati/main.go
index e771c15..296000b 100644
--- a/cmd/multiproduct_kati/main.go
+++ b/cmd/multiproduct_kati/main.go
@@ -55,6 +55,8 @@
 
 var buildVariant = flag.String("variant", "eng", "build variant to use")
 
+var skipProducts = flag.String("skip-products", "", "comma-separated list of products to skip (known failures, etc)")
+
 const errorLeadingLines = 20
 const errorTrailingLines = 20
 
@@ -225,8 +227,27 @@
 	if err != nil {
 		log.Fatal(err)
 	}
-	products := strings.Fields(vars["all_named_products"])
-	log.Verbose("Got product list:", products)
+	productsList := strings.Fields(vars["all_named_products"])
+
+	products := make([]string, 0, len(productsList))
+	skipList := strings.Split(*skipProducts, ",")
+	skipProduct := func(p string) bool {
+		for _, s := range skipList {
+			if p == s {
+				return true
+			}
+		}
+		return false
+	}
+	for _, product := range productsList {
+		if !skipProduct(product) {
+			products = append(products, product)
+		} else {
+			log.Verbose("Skipping: ", product)
+		}
+	}
+
+	log.Verbose("Got product list: ", products)
 
 	status.SetTotal(len(products))