Allow disabling the named test directory for cc_test

Some external test suites (LTP in this case), have their own expected
layout, and don't fit well with our
/data/nativetest/<testname>/<testname> layout, nor do they work with
test_per_src.

So allow setting no_named_install_directory along with
relative_module_path to specify a custom test path:

  no_named_install_directory: true,
  relative_module_path: "ltp/testcases/bin",

Test: Convert LTP
Change-Id: Ib002c058674e8b960a4fdc3af1a25c8bcaeb1d63
diff --git a/cc/test.go b/cc/test.go
index 07eb621..f60996c 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -33,6 +33,11 @@
 	// Create a separate binary for each source file.  Useful when there is
 	// global state that can not be torn down and reset between each test suite.
 	Test_per_src *bool
+
+	// Disables the creation of a test-specific directory when used with
+	// relative_install_path. Useful if several tests need to be in the same
+	// directory, but test_per_src doesn't work.
+	No_named_install_directory *bool
 }
 
 func init() {
@@ -214,7 +219,13 @@
 func (test *testBinary) install(ctx ModuleContext, file android.Path) {
 	test.binaryDecorator.baseInstaller.dir = "nativetest"
 	test.binaryDecorator.baseInstaller.dir64 = "nativetest64"
-	test.binaryDecorator.baseInstaller.relative = ctx.ModuleName()
+
+	if !Bool(test.Properties.No_named_install_directory) {
+		test.binaryDecorator.baseInstaller.relative = ctx.ModuleName()
+	} else if test.binaryDecorator.baseInstaller.Properties.Relative_install_path == "" {
+		ctx.PropertyErrorf("no_named_install_directory", "Module install directory may only be disabled if relative_install_path is set")
+	}
+
 	test.binaryDecorator.baseInstaller.install(ctx, file)
 }